Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-2.6/kvm.git] / drivers / crypto / amcc / crypto4xx_sa.h
blob1352d58d4e340be0b5d84840cce937f20cc89d1e
1 /**
2 * AMCC SoC PPC4xx Crypto Driver
4 * Copyright (c) 2008 Applied Micro Circuits Corporation.
5 * All rights reserved. James Hsiao <jhsiao@amcc.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * This file defines the security context
18 * associate format.
21 #ifndef __CRYPTO4XX_SA_H__
22 #define __CRYPTO4XX_SA_H__
24 #define AES_IV_SIZE 16
26 /**
27 * Contents of Dynamic Security Association (SA) with all possible fields
29 union dynamic_sa_contents {
30 struct {
31 u32 arc4_state_ptr:1;
32 u32 arc4_ij_ptr:1;
33 u32 state_ptr:1;
34 u32 iv3:1;
35 u32 iv2:1;
36 u32 iv1:1;
37 u32 iv0:1;
38 u32 seq_num_mask3:1;
39 u32 seq_num_mask2:1;
40 u32 seq_num_mask1:1;
41 u32 seq_num_mask0:1;
42 u32 seq_num1:1;
43 u32 seq_num0:1;
44 u32 spi:1;
45 u32 outer_size:5;
46 u32 inner_size:5;
47 u32 key_size:4;
48 u32 cmd_size:4;
49 } bf;
50 u32 w;
51 } __attribute__((packed));
53 #define DIR_OUTBOUND 0
54 #define DIR_INBOUND 1
55 #define SA_OP_GROUP_BASIC 0
56 #define SA_OPCODE_ENCRYPT 0
57 #define SA_OPCODE_DECRYPT 0
58 #define SA_OPCODE_HASH 3
59 #define SA_CIPHER_ALG_DES 0
60 #define SA_CIPHER_ALG_3DES 1
61 #define SA_CIPHER_ALG_ARC4 2
62 #define SA_CIPHER_ALG_AES 3
63 #define SA_CIPHER_ALG_KASUMI 4
64 #define SA_CIPHER_ALG_NULL 15
66 #define SA_HASH_ALG_MD5 0
67 #define SA_HASH_ALG_SHA1 1
68 #define SA_HASH_ALG_NULL 15
69 #define SA_HASH_ALG_SHA1_DIGEST_SIZE 20
71 #define SA_LOAD_HASH_FROM_SA 0
72 #define SA_LOAD_HASH_FROM_STATE 2
73 #define SA_NOT_LOAD_HASH 3
74 #define SA_LOAD_IV_FROM_SA 0
75 #define SA_LOAD_IV_FROM_INPUT 1
76 #define SA_LOAD_IV_FROM_STATE 2
77 #define SA_LOAD_IV_GEN_IV 3
79 #define SA_PAD_TYPE_CONSTANT 2
80 #define SA_PAD_TYPE_ZERO 3
81 #define SA_PAD_TYPE_TLS 5
82 #define SA_PAD_TYPE_DTLS 5
83 #define SA_NOT_SAVE_HASH 0
84 #define SA_SAVE_HASH 1
85 #define SA_NOT_SAVE_IV 0
86 #define SA_SAVE_IV 1
87 #define SA_HEADER_PROC 1
88 #define SA_NO_HEADER_PROC 0
90 union sa_command_0 {
91 struct {
92 u32 scatter:1;
93 u32 gather:1;
94 u32 save_hash_state:1;
95 u32 save_iv:1;
96 u32 load_hash_state:2;
97 u32 load_iv:2;
98 u32 digest_len:4;
99 u32 hdr_proc:1;
100 u32 extend_pad:1;
101 u32 stream_cipher_pad:1;
102 u32 rsv:1;
103 u32 hash_alg:4;
104 u32 cipher_alg:4;
105 u32 pad_type:2;
106 u32 op_group:2;
107 u32 dir:1;
108 u32 opcode:3;
109 } bf;
110 u32 w;
111 } __attribute__((packed));
113 #define CRYPTO_MODE_ECB 0
114 #define CRYPTO_MODE_CBC 1
116 #define CRYPTO_FEEDBACK_MODE_NO_FB 0
117 #define CRYPTO_FEEDBACK_MODE_64BIT_OFB 0
118 #define CRYPTO_FEEDBACK_MODE_8BIT_CFB 1
119 #define CRYPTO_FEEDBACK_MODE_1BIT_CFB 2
120 #define CRYPTO_FEEDBACK_MODE_128BIT_CFB 3
122 #define SA_AES_KEY_LEN_128 2
123 #define SA_AES_KEY_LEN_192 3
124 #define SA_AES_KEY_LEN_256 4
126 #define SA_REV2 1
128 * The follow defines bits sa_command_1
129 * In Basic hash mode this bit define simple hash or hmac.
130 * In IPsec mode, this bit define muting control.
132 #define SA_HASH_MODE_HASH 0
133 #define SA_HASH_MODE_HMAC 1
134 #define SA_MC_ENABLE 0
135 #define SA_MC_DISABLE 1
136 #define SA_NOT_COPY_HDR 0
137 #define SA_COPY_HDR 1
138 #define SA_NOT_COPY_PAD 0
139 #define SA_COPY_PAD 1
140 #define SA_NOT_COPY_PAYLOAD 0
141 #define SA_COPY_PAYLOAD 1
142 #define SA_EXTENDED_SN_OFF 0
143 #define SA_EXTENDED_SN_ON 1
144 #define SA_SEQ_MASK_OFF 0
145 #define SA_SEQ_MASK_ON 1
147 union sa_command_1 {
148 struct {
149 u32 crypto_mode31:1;
150 u32 save_arc4_state:1;
151 u32 arc4_stateful:1;
152 u32 key_len:5;
153 u32 hash_crypto_offset:8;
154 u32 sa_rev:2;
155 u32 byte_offset:1;
156 u32 hmac_muting:1;
157 u32 feedback_mode:2;
158 u32 crypto_mode9_8:2;
159 u32 extended_seq_num:1;
160 u32 seq_num_mask:1;
161 u32 mutable_bit_proc:1;
162 u32 ip_version:1;
163 u32 copy_pad:1;
164 u32 copy_payload:1;
165 u32 copy_hdr:1;
166 u32 rsv1:1;
167 } bf;
168 u32 w;
169 } __attribute__((packed));
171 struct dynamic_sa_ctl {
172 u32 sa_contents;
173 union sa_command_0 sa_command_0;
174 union sa_command_1 sa_command_1;
175 } __attribute__((packed));
178 * State Record for Security Association (SA)
180 struct sa_state_record {
181 u32 save_iv[4];
182 u32 save_hash_byte_cnt[2];
183 u32 save_digest[16];
184 } __attribute__((packed));
187 * Security Association (SA) for AES128
190 struct dynamic_sa_aes128 {
191 struct dynamic_sa_ctl ctrl;
192 u32 key[4];
193 u32 iv[4]; /* for CBC, OFC, and CFB mode */
194 u32 state_ptr;
195 u32 reserved;
196 } __attribute__((packed));
198 #define SA_AES128_LEN (sizeof(struct dynamic_sa_aes128)/4)
199 #define SA_AES128_CONTENTS 0x3e000042
202 * Security Association (SA) for AES192
204 struct dynamic_sa_aes192 {
205 struct dynamic_sa_ctl ctrl;
206 u32 key[6];
207 u32 iv[4]; /* for CBC, OFC, and CFB mode */
208 u32 state_ptr;
209 u32 reserved;
210 } __attribute__((packed));
212 #define SA_AES192_LEN (sizeof(struct dynamic_sa_aes192)/4)
213 #define SA_AES192_CONTENTS 0x3e000062
216 * Security Association (SA) for AES256
218 struct dynamic_sa_aes256 {
219 struct dynamic_sa_ctl ctrl;
220 u32 key[8];
221 u32 iv[4]; /* for CBC, OFC, and CFB mode */
222 u32 state_ptr;
223 u32 reserved;
224 } __attribute__((packed));
226 #define SA_AES256_LEN (sizeof(struct dynamic_sa_aes256)/4)
227 #define SA_AES256_CONTENTS 0x3e000082
228 #define SA_AES_CONTENTS 0x3e000002
231 * Security Association (SA) for HASH160: HMAC-SHA1
233 struct dynamic_sa_hash160 {
234 struct dynamic_sa_ctl ctrl;
235 u32 inner_digest[5];
236 u32 outer_digest[5];
237 u32 state_ptr;
238 u32 reserved;
239 } __attribute__((packed));
240 #define SA_HASH160_LEN (sizeof(struct dynamic_sa_hash160)/4)
241 #define SA_HASH160_CONTENTS 0x2000a502
243 #endif