Sanity check lengths for AES wrap algorithm.
[openssl.git] / crypto / evp / e_aes.c
1 /* ====================================================================
2  * Copyright (c) 2001-2011 The OpenSSL Project.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer. 
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in
13  *    the documentation and/or other materials provided with the
14  *    distribution.
15  *
16  * 3. All advertising materials mentioning features or use of this
17  *    software must display the following acknowledgment:
18  *    "This product includes software developed by the OpenSSL Project
19  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20  *
21  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22  *    endorse or promote products derived from this software without
23  *    prior written permission. For written permission, please contact
24  *    openssl-core@openssl.org.
25  *
26  * 5. Products derived from this software may not be called "OpenSSL"
27  *    nor may "OpenSSL" appear in their names without prior written
28  *    permission of the OpenSSL Project.
29  *
30  * 6. Redistributions of any form whatsoever must retain the following
31  *    acknowledgment:
32  *    "This product includes software developed by the OpenSSL Project
33  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34  *
35  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46  * OF THE POSSIBILITY OF SUCH DAMAGE.
47  * ====================================================================
48  *
49  */
50
51 #include <openssl/opensslconf.h>
52 #ifndef OPENSSL_NO_AES
53 #include <openssl/evp.h>
54 #include <openssl/err.h>
55 #include <string.h>
56 #include <assert.h>
57 #include <openssl/aes.h>
58 #include "evp_locl.h"
59 #include "modes_lcl.h"
60 #include <openssl/rand.h>
61
62 #undef EVP_CIPH_FLAG_FIPS
63 #define EVP_CIPH_FLAG_FIPS 0
64
65 typedef struct
66         {
67         union { double align; AES_KEY ks; } ks;
68         block128_f block;
69         union {
70                 cbc128_f cbc;
71                 ctr128_f ctr;
72         } stream;
73         } EVP_AES_KEY;
74
75 typedef struct
76         {
77         union { double align; AES_KEY ks; } ks; /* AES key schedule to use */
78         int key_set;            /* Set if key initialised */
79         int iv_set;             /* Set if an iv is set */
80         GCM128_CONTEXT gcm;
81         unsigned char *iv;      /* Temporary IV store */
82         int ivlen;              /* IV length */
83         int taglen;
84         int iv_gen;             /* It is OK to generate IVs */
85         int tls_aad_len;        /* TLS AAD length */
86         ctr128_f ctr;
87         } EVP_AES_GCM_CTX;
88
89 typedef struct
90         {
91         union { double align; AES_KEY ks; } ks1, ks2;   /* AES key schedules to use */
92         XTS128_CONTEXT xts;
93         void     (*stream)(const unsigned char *in,
94                         unsigned char *out, size_t length,
95                         const AES_KEY *key1, const AES_KEY *key2,
96                         const unsigned char iv[16]);
97         } EVP_AES_XTS_CTX;
98
99 typedef struct
100         {
101         union { double align; AES_KEY ks; } ks; /* AES key schedule to use */
102         int key_set;            /* Set if key initialised */
103         int iv_set;             /* Set if an iv is set */
104         int tag_set;            /* Set if tag is valid */
105         int len_set;            /* Set if message length set */
106         int L, M;               /* L and M parameters from RFC3610 */
107         CCM128_CONTEXT ccm;
108         ccm128_f str;
109         } EVP_AES_CCM_CTX;
110
111 #define MAXBITCHUNK     ((size_t)1<<(sizeof(size_t)*8-4))
112
113 #ifdef VPAES_ASM
114 int vpaes_set_encrypt_key(const unsigned char *userKey, int bits,
115                         AES_KEY *key);
116 int vpaes_set_decrypt_key(const unsigned char *userKey, int bits,
117                         AES_KEY *key);
118
119 void vpaes_encrypt(const unsigned char *in, unsigned char *out,
120                         const AES_KEY *key);
121 void vpaes_decrypt(const unsigned char *in, unsigned char *out,
122                         const AES_KEY *key);
123
124 void vpaes_cbc_encrypt(const unsigned char *in,
125                         unsigned char *out,
126                         size_t length,
127                         const AES_KEY *key,
128                         unsigned char *ivec, int enc);
129 #endif
130 #ifdef BSAES_ASM
131 void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out,
132                         size_t length, const AES_KEY *key,
133                         unsigned char ivec[16], int enc);
134 void bsaes_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
135                         size_t len, const AES_KEY *key,
136                         const unsigned char ivec[16]);
137 void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out,
138                         size_t len, const AES_KEY *key1,
139                         const AES_KEY *key2, const unsigned char iv[16]);
140 void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
141                         size_t len, const AES_KEY *key1,
142                         const AES_KEY *key2, const unsigned char iv[16]);
143 #endif
144 #ifdef AES_CTR_ASM
145 void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
146                         size_t blocks, const AES_KEY *key,
147                         const unsigned char ivec[AES_BLOCK_SIZE]);
148 #endif
149 #ifdef AES_XTS_ASM
150 void AES_xts_encrypt(const char *inp,char *out,size_t len,
151                         const AES_KEY *key1, const AES_KEY *key2,
152                         const unsigned char iv[16]);
153 void AES_xts_decrypt(const char *inp,char *out,size_t len,
154                         const AES_KEY *key1, const AES_KEY *key2,
155                         const unsigned char iv[16]);
156 #endif
157
158 #if     defined(VPAES_ASM) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
159 extern unsigned int OPENSSL_ppccap_P;
160 #define VPAES_CAPABLE   (OPENSSL_ppccap_P&(1<<1))
161 #endif
162
163 #if     defined(AES_ASM) && !defined(I386_ONLY) &&      (  \
164         ((defined(__i386)       || defined(__i386__)    || \
165           defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
166         defined(__x86_64)       || defined(__x86_64__)  || \
167         defined(_M_AMD64)       || defined(_M_X64)      || \
168         defined(__INTEL__)                              )
169
170 extern unsigned int OPENSSL_ia32cap_P[];
171
172 #ifdef VPAES_ASM
173 #define VPAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
174 #endif
175 #ifdef BSAES_ASM
176 #define BSAES_CAPABLE   VPAES_CAPABLE
177 #endif
178 /*
179  * AES-NI section
180  */
181 #define AESNI_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
182
183 int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
184                         AES_KEY *key);
185 int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
186                         AES_KEY *key);
187
188 void aesni_encrypt(const unsigned char *in, unsigned char *out,
189                         const AES_KEY *key);
190 void aesni_decrypt(const unsigned char *in, unsigned char *out,
191                         const AES_KEY *key);
192
193 void aesni_ecb_encrypt(const unsigned char *in,
194                         unsigned char *out,
195                         size_t length,
196                         const AES_KEY *key,
197                         int enc);
198 void aesni_cbc_encrypt(const unsigned char *in,
199                         unsigned char *out,
200                         size_t length,
201                         const AES_KEY *key,
202                         unsigned char *ivec, int enc);
203
204 void aesni_ctr32_encrypt_blocks(const unsigned char *in,
205                         unsigned char *out,
206                         size_t blocks,
207                         const void *key,
208                         const unsigned char *ivec);
209
210 void aesni_xts_encrypt(const unsigned char *in,
211                         unsigned char *out,
212                         size_t length,
213                         const AES_KEY *key1, const AES_KEY *key2,
214                         const unsigned char iv[16]);
215
216 void aesni_xts_decrypt(const unsigned char *in,
217                         unsigned char *out,
218                         size_t length,
219                         const AES_KEY *key1, const AES_KEY *key2,
220                         const unsigned char iv[16]);
221
222 void aesni_ccm64_encrypt_blocks (const unsigned char *in,
223                         unsigned char *out,
224                         size_t blocks,
225                         const void *key,
226                         const unsigned char ivec[16],
227                         unsigned char cmac[16]);
228
229 void aesni_ccm64_decrypt_blocks (const unsigned char *in,
230                         unsigned char *out,
231                         size_t blocks,
232                         const void *key,
233                         const unsigned char ivec[16],
234                         unsigned char cmac[16]);
235
236 #if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
237 size_t aesni_gcm_encrypt(const unsigned char *in,
238                         unsigned char *out,
239                         size_t len,
240                         const void *key,
241                         unsigned char ivec[16],
242                         u64 *Xi);
243 #define AES_gcm_encrypt aesni_gcm_encrypt
244 size_t aesni_gcm_decrypt(const unsigned char *in,
245                         unsigned char *out,
246                         size_t len,
247                         const void *key,
248                         unsigned char ivec[16],
249                         u64 *Xi);
250 #define AES_gcm_decrypt aesni_gcm_decrypt
251 void gcm_ghash_avx(u64 Xi[2],const u128 Htable[16],const u8 *in,size_t len);
252 #define AES_GCM_ASM(gctx)       (gctx->ctr==aesni_ctr32_encrypt_blocks && \
253                                  gctx->gcm.ghash==gcm_ghash_avx)
254 #define AES_GCM_ASM2(gctx)      (gctx->gcm.block==(block128_f)aesni_encrypt && \
255                                  gctx->gcm.ghash==gcm_ghash_avx)
256 #undef AES_GCM_ASM2             /* minor size optimization */
257 #endif
258
259 static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
260                    const unsigned char *iv, int enc)
261         {
262         int ret, mode;
263         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
264
265         mode = ctx->cipher->flags & EVP_CIPH_MODE;
266         if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
267             && !enc)
268                 { 
269                 ret = aesni_set_decrypt_key(key, ctx->key_len*8, ctx->cipher_data);
270                 dat->block      = (block128_f)aesni_decrypt;
271                 dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
272                                         (cbc128_f)aesni_cbc_encrypt :
273                                         NULL;
274                 }
275         else    {
276                 ret = aesni_set_encrypt_key(key, ctx->key_len*8, ctx->cipher_data);
277                 dat->block      = (block128_f)aesni_encrypt;
278                 if (mode==EVP_CIPH_CBC_MODE)
279                         dat->stream.cbc = (cbc128_f)aesni_cbc_encrypt;
280                 else if (mode==EVP_CIPH_CTR_MODE)
281                         dat->stream.ctr = (ctr128_f)aesni_ctr32_encrypt_blocks;
282                 else
283                         dat->stream.cbc = NULL;
284                 }
285
286         if(ret < 0)
287                 {
288                 EVPerr(EVP_F_AESNI_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
289                 return 0;
290                 }
291
292         return 1;
293         }
294
295 static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
296         const unsigned char *in, size_t len)
297 {
298         aesni_cbc_encrypt(in,out,len,ctx->cipher_data,ctx->iv,ctx->encrypt);
299
300         return 1;
301 }
302
303 static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
304         const unsigned char *in, size_t len)
305 {
306         size_t  bl = ctx->cipher->block_size;
307
308         if (len<bl)     return 1;
309
310         aesni_ecb_encrypt(in,out,len,ctx->cipher_data,ctx->encrypt);
311
312         return 1;
313 }
314
315 #define aesni_ofb_cipher aes_ofb_cipher
316 static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
317         const unsigned char *in,size_t len);
318
319 #define aesni_cfb_cipher aes_cfb_cipher
320 static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
321         const unsigned char *in,size_t len);
322
323 #define aesni_cfb8_cipher aes_cfb8_cipher
324 static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
325         const unsigned char *in,size_t len);
326
327 #define aesni_cfb1_cipher aes_cfb1_cipher
328 static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
329         const unsigned char *in,size_t len);
330
331 #define aesni_ctr_cipher aes_ctr_cipher
332 static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
333                 const unsigned char *in, size_t len);
334
335 static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
336                         const unsigned char *iv, int enc)
337         {
338         EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
339         if (!iv && !key)
340                 return 1;
341         if (key)
342                 {
343                 aesni_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
344                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
345                                 (block128_f)aesni_encrypt);
346                 gctx->ctr = (ctr128_f)aesni_ctr32_encrypt_blocks;
347                 /* If we have an iv can set it directly, otherwise use
348                  * saved IV.
349                  */
350                 if (iv == NULL && gctx->iv_set)
351                         iv = gctx->iv;
352                 if (iv)
353                         {
354                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
355                         gctx->iv_set = 1;
356                         }
357                 gctx->key_set = 1;
358                 }
359         else
360                 {
361                 /* If key set use IV, otherwise copy */
362                 if (gctx->key_set)
363                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
364                 else
365                         memcpy(gctx->iv, iv, gctx->ivlen);
366                 gctx->iv_set = 1;
367                 gctx->iv_gen = 0;
368                 }
369         return 1;
370         }
371
372 #define aesni_gcm_cipher aes_gcm_cipher
373 static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
374                 const unsigned char *in, size_t len);
375
376 static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
377                         const unsigned char *iv, int enc)
378         {
379         EVP_AES_XTS_CTX *xctx = ctx->cipher_data;
380         if (!iv && !key)
381                 return 1;
382
383         if (key)
384                 {
385                 /* key_len is two AES keys */
386                 if (enc)
387                         {
388                         aesni_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
389                         xctx->xts.block1 = (block128_f)aesni_encrypt;
390                         xctx->stream = aesni_xts_encrypt;
391                         }
392                 else
393                         {
394                         aesni_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
395                         xctx->xts.block1 = (block128_f)aesni_decrypt;
396                         xctx->stream = aesni_xts_decrypt;
397                         }
398
399                 aesni_set_encrypt_key(key + ctx->key_len/2,
400                                                 ctx->key_len * 4, &xctx->ks2.ks);
401                 xctx->xts.block2 = (block128_f)aesni_encrypt;
402
403                 xctx->xts.key1 = &xctx->ks1;
404                 }
405
406         if (iv)
407                 {
408                 xctx->xts.key2 = &xctx->ks2;
409                 memcpy(ctx->iv, iv, 16);
410                 }
411
412         return 1;
413         }
414
415 #define aesni_xts_cipher aes_xts_cipher
416 static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
417                 const unsigned char *in, size_t len);
418
419 static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
420                         const unsigned char *iv, int enc)
421         {
422         EVP_AES_CCM_CTX *cctx = ctx->cipher_data;
423         if (!iv && !key)
424                 return 1;
425         if (key)
426                 {
427                 aesni_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
428                 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
429                                         &cctx->ks, (block128_f)aesni_encrypt);
430                 cctx->str = enc?(ccm128_f)aesni_ccm64_encrypt_blocks :
431                                 (ccm128_f)aesni_ccm64_decrypt_blocks;
432                 cctx->key_set = 1;
433                 }
434         if (iv)
435                 {
436                 memcpy(ctx->iv, iv, 15 - cctx->L);
437                 cctx->iv_set = 1;
438                 }
439         return 1;
440         }
441
442 #define aesni_ccm_cipher aes_ccm_cipher
443 static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
444                 const unsigned char *in, size_t len);
445
446 #define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
447 static const EVP_CIPHER aesni_##keylen##_##mode = { \
448         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
449         flags|EVP_CIPH_##MODE##_MODE,   \
450         aesni_init_key,                 \
451         aesni_##mode##_cipher,          \
452         NULL,                           \
453         sizeof(EVP_AES_KEY),            \
454         NULL,NULL,NULL,NULL }; \
455 static const EVP_CIPHER aes_##keylen##_##mode = { \
456         nid##_##keylen##_##nmode,blocksize,     \
457         keylen/8,ivlen, \
458         flags|EVP_CIPH_##MODE##_MODE,   \
459         aes_init_key,                   \
460         aes_##mode##_cipher,            \
461         NULL,                           \
462         sizeof(EVP_AES_KEY),            \
463         NULL,NULL,NULL,NULL }; \
464 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
465 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
466
467 #define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
468 static const EVP_CIPHER aesni_##keylen##_##mode = { \
469         nid##_##keylen##_##mode,blocksize, \
470         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
471         flags|EVP_CIPH_##MODE##_MODE,   \
472         aesni_##mode##_init_key,        \
473         aesni_##mode##_cipher,          \
474         aes_##mode##_cleanup,           \
475         sizeof(EVP_AES_##MODE##_CTX),   \
476         NULL,NULL,aes_##mode##_ctrl,NULL }; \
477 static const EVP_CIPHER aes_##keylen##_##mode = { \
478         nid##_##keylen##_##mode,blocksize, \
479         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
480         flags|EVP_CIPH_##MODE##_MODE,   \
481         aes_##mode##_init_key,          \
482         aes_##mode##_cipher,            \
483         aes_##mode##_cleanup,           \
484         sizeof(EVP_AES_##MODE##_CTX),   \
485         NULL,NULL,aes_##mode##_ctrl,NULL }; \
486 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
487 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
488
489 #elif   defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
490
491 #include "sparc_arch.h"
492
493 extern unsigned int OPENSSL_sparcv9cap_P[];
494
495 #define SPARC_AES_CAPABLE       (OPENSSL_sparcv9cap_P[1] & CFR_AES)
496
497 void    aes_t4_set_encrypt_key (const unsigned char *key, int bits,
498                                 AES_KEY *ks);
499 void    aes_t4_set_decrypt_key (const unsigned char *key, int bits,
500                                 AES_KEY *ks);
501 void    aes_t4_encrypt (const unsigned char *in, unsigned char *out,
502                                 const AES_KEY *key);
503 void    aes_t4_decrypt (const unsigned char *in, unsigned char *out,
504                                 const AES_KEY *key);
505 /*
506  * Key-length specific subroutines were chosen for following reason.
507  * Each SPARC T4 core can execute up to 8 threads which share core's
508  * resources. Loading as much key material to registers allows to
509  * minimize references to shared memory interface, as well as amount
510  * of instructions in inner loops [much needed on T4]. But then having
511  * non-key-length specific routines would require conditional branches
512  * either in inner loops or on subroutines' entries. Former is hardly
513  * acceptable, while latter means code size increase to size occupied
514  * by multiple key-length specfic subroutines, so why fight?
515  */
516 void    aes128_t4_cbc_encrypt (const unsigned char *in, unsigned char *out,
517                                 size_t len, const AES_KEY *key,
518                                 unsigned char *ivec);
519 void    aes128_t4_cbc_decrypt (const unsigned char *in, unsigned char *out,
520                                 size_t len, const AES_KEY *key,
521                                 unsigned char *ivec);
522 void    aes192_t4_cbc_encrypt (const unsigned char *in, unsigned char *out,
523                                 size_t len, const AES_KEY *key,
524                                 unsigned char *ivec);
525 void    aes192_t4_cbc_decrypt (const unsigned char *in, unsigned char *out,
526                                 size_t len, const AES_KEY *key,
527                                 unsigned char *ivec);
528 void    aes256_t4_cbc_encrypt (const unsigned char *in, unsigned char *out,
529                                 size_t len, const AES_KEY *key,
530                                 unsigned char *ivec);
531 void    aes256_t4_cbc_decrypt (const unsigned char *in, unsigned char *out,
532                                 size_t len, const AES_KEY *key,
533                                 unsigned char *ivec);
534 void    aes128_t4_ctr32_encrypt (const unsigned char *in, unsigned char *out,
535                                 size_t blocks, const AES_KEY *key,
536                                 unsigned char *ivec);
537 void    aes192_t4_ctr32_encrypt (const unsigned char *in, unsigned char *out,
538                                 size_t blocks, const AES_KEY *key,
539                                 unsigned char *ivec);
540 void    aes256_t4_ctr32_encrypt (const unsigned char *in, unsigned char *out,
541                                 size_t blocks, const AES_KEY *key,
542                                 unsigned char *ivec);
543 void    aes128_t4_xts_encrypt (const unsigned char *in, unsigned char *out,
544                                 size_t blocks, const AES_KEY *key1,
545                                 const AES_KEY *key2, const unsigned char *ivec);
546 void    aes128_t4_xts_decrypt (const unsigned char *in, unsigned char *out,
547                                 size_t blocks, const AES_KEY *key1,
548                                 const AES_KEY *key2, const unsigned char *ivec);
549 void    aes256_t4_xts_encrypt (const unsigned char *in, unsigned char *out,
550                                 size_t blocks, const AES_KEY *key1,
551                                 const AES_KEY *key2, const unsigned char *ivec);
552 void    aes256_t4_xts_decrypt (const unsigned char *in, unsigned char *out,
553                                 size_t blocks, const AES_KEY *key1,
554                                 const AES_KEY *key2, const unsigned char *ivec);
555
556 static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
557                    const unsigned char *iv, int enc)
558         {
559         int ret, mode, bits;
560         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
561
562         mode = ctx->cipher->flags & EVP_CIPH_MODE;
563         bits = ctx->key_len*8;
564         if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
565             && !enc)
566                 {
567                     ret = 0;
568                     aes_t4_set_decrypt_key(key, bits, ctx->cipher_data);
569                     dat->block  = (block128_f)aes_t4_decrypt;
570                     switch (bits) {
571                     case 128:
572                         dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
573                                                 (cbc128_f)aes128_t4_cbc_decrypt :
574                                                 NULL;
575                         break;
576                     case 192:
577                         dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
578                                                 (cbc128_f)aes192_t4_cbc_decrypt :
579                                                 NULL;
580                         break;
581                     case 256:
582                         dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
583                                                 (cbc128_f)aes256_t4_cbc_decrypt :
584                                                 NULL;
585                         break;
586                     default:
587                         ret = -1;
588                     }
589                 }
590         else    {
591                     ret = 0;
592                     aes_t4_set_encrypt_key(key, bits, ctx->cipher_data);
593                     dat->block  = (block128_f)aes_t4_encrypt;
594                     switch (bits) {
595                     case 128:
596                         if (mode==EVP_CIPH_CBC_MODE)
597                                 dat->stream.cbc = (cbc128_f)aes128_t4_cbc_encrypt;
598                         else if (mode==EVP_CIPH_CTR_MODE)
599                                 dat->stream.ctr = (ctr128_f)aes128_t4_ctr32_encrypt;
600                         else
601                                 dat->stream.cbc = NULL;
602                         break;
603                     case 192:
604                         if (mode==EVP_CIPH_CBC_MODE)
605                                 dat->stream.cbc = (cbc128_f)aes192_t4_cbc_encrypt;
606                         else if (mode==EVP_CIPH_CTR_MODE)
607                                 dat->stream.ctr = (ctr128_f)aes192_t4_ctr32_encrypt;
608                         else
609                                 dat->stream.cbc = NULL;
610                         break;
611                     case 256:
612                         if (mode==EVP_CIPH_CBC_MODE)
613                                 dat->stream.cbc = (cbc128_f)aes256_t4_cbc_encrypt;
614                         else if (mode==EVP_CIPH_CTR_MODE)
615                                 dat->stream.ctr = (ctr128_f)aes256_t4_ctr32_encrypt;
616                         else
617                                 dat->stream.cbc = NULL;
618                         break;
619                     default:
620                         ret = -1;
621                     }
622                 }
623
624         if(ret < 0)
625                 {
626                 EVPerr(EVP_F_AES_T4_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
627                 return 0;
628                 }
629
630         return 1;
631         }
632
633 #define aes_t4_cbc_cipher aes_cbc_cipher
634 static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
635         const unsigned char *in, size_t len);
636
637 #define aes_t4_ecb_cipher aes_ecb_cipher 
638 static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
639         const unsigned char *in, size_t len);
640
641 #define aes_t4_ofb_cipher aes_ofb_cipher
642 static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
643         const unsigned char *in,size_t len);
644
645 #define aes_t4_cfb_cipher aes_cfb_cipher
646 static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
647         const unsigned char *in,size_t len);
648
649 #define aes_t4_cfb8_cipher aes_cfb8_cipher
650 static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
651         const unsigned char *in,size_t len);
652
653 #define aes_t4_cfb1_cipher aes_cfb1_cipher
654 static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
655         const unsigned char *in,size_t len);
656
657 #define aes_t4_ctr_cipher aes_ctr_cipher
658 static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
659                 const unsigned char *in, size_t len);
660
661 static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
662                         const unsigned char *iv, int enc)
663         {
664         EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
665         if (!iv && !key)
666                 return 1;
667         if (key)
668                 {
669                 int bits = ctx->key_len * 8;
670                 aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks);
671                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
672                                 (block128_f)aes_t4_encrypt);
673                 switch (bits) {
674                     case 128:
675                         gctx->ctr = (ctr128_f)aes128_t4_ctr32_encrypt;
676                         break;
677                     case 192:
678                         gctx->ctr = (ctr128_f)aes192_t4_ctr32_encrypt;
679                         break;
680                     case 256:
681                         gctx->ctr = (ctr128_f)aes256_t4_ctr32_encrypt;
682                         break;
683                     default:
684                         return 0;
685                 }
686                 /* If we have an iv can set it directly, otherwise use
687                  * saved IV.
688                  */
689                 if (iv == NULL && gctx->iv_set)
690                         iv = gctx->iv;
691                 if (iv)
692                         {
693                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
694                         gctx->iv_set = 1;
695                         }
696                 gctx->key_set = 1;
697                 }
698         else
699                 {
700                 /* If key set use IV, otherwise copy */
701                 if (gctx->key_set)
702                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
703                 else
704                         memcpy(gctx->iv, iv, gctx->ivlen);
705                 gctx->iv_set = 1;
706                 gctx->iv_gen = 0;
707                 }
708         return 1;
709         }
710
711 #define aes_t4_gcm_cipher aes_gcm_cipher
712 static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
713                 const unsigned char *in, size_t len);
714
715 static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
716                         const unsigned char *iv, int enc)
717         {
718         EVP_AES_XTS_CTX *xctx = ctx->cipher_data;
719         if (!iv && !key)
720                 return 1;
721
722         if (key)
723                 {
724                 int bits = ctx->key_len * 4;
725                 xctx->stream = NULL;
726                 /* key_len is two AES keys */
727                 if (enc)
728                         {
729                         aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks);
730                         xctx->xts.block1 = (block128_f)aes_t4_encrypt;
731                         switch (bits) {
732                             case 128:
733                                 xctx->stream = aes128_t4_xts_encrypt;
734                                 break;
735 #if 0 /* not yet */
736                             case 192:
737                                 xctx->stream = aes192_t4_xts_encrypt;
738                                 break;
739 #endif
740                             case 256:
741                                 xctx->stream = aes256_t4_xts_encrypt;
742                                 break;
743                             default:
744                                 return 0;
745                             }
746                         }
747                 else
748                         {
749                         aes_t4_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
750                         xctx->xts.block1 = (block128_f)aes_t4_decrypt;
751                         switch (bits) {
752                             case 128:
753                                 xctx->stream = aes128_t4_xts_decrypt;
754                                 break;
755 #if 0 /* not yet */
756                             case 192:
757                                 xctx->stream = aes192_t4_xts_decrypt;
758                                 break;
759 #endif
760                             case 256:
761                                 xctx->stream = aes256_t4_xts_decrypt;
762                                 break;
763                             default:
764                                 return 0;
765                             }
766                         }
767
768                 aes_t4_set_encrypt_key(key + ctx->key_len/2,
769                                                 ctx->key_len * 4, &xctx->ks2.ks);
770                 xctx->xts.block2 = (block128_f)aes_t4_encrypt;
771
772                 xctx->xts.key1 = &xctx->ks1;
773                 }
774
775         if (iv)
776                 {
777                 xctx->xts.key2 = &xctx->ks2;
778                 memcpy(ctx->iv, iv, 16);
779                 }
780
781         return 1;
782         }
783
784 #define aes_t4_xts_cipher aes_xts_cipher
785 static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
786                 const unsigned char *in, size_t len);
787
788 static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
789                         const unsigned char *iv, int enc)
790         {
791         EVP_AES_CCM_CTX *cctx = ctx->cipher_data;
792         if (!iv && !key)
793                 return 1;
794         if (key)
795                 {
796                 int bits = ctx->key_len * 8;
797                 aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks);
798                 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
799                                         &cctx->ks, (block128_f)aes_t4_encrypt);
800 #if 0 /* not yet */
801                 switch (bits) {
802                     case 128:
803                         cctx->str = enc?(ccm128_f)aes128_t4_ccm64_encrypt :
804                                 (ccm128_f)ae128_t4_ccm64_decrypt;
805                         break;
806                     case 192:
807                         cctx->str = enc?(ccm128_f)aes192_t4_ccm64_encrypt :
808                                 (ccm128_f)ae192_t4_ccm64_decrypt;
809                         break;
810                     case 256:
811                         cctx->str = enc?(ccm128_f)aes256_t4_ccm64_encrypt :
812                                 (ccm128_f)ae256_t4_ccm64_decrypt;
813                         break;
814                     default:
815                         return 0;
816                     }
817 #endif
818                 cctx->key_set = 1;
819                 }
820         if (iv)
821                 {
822                 memcpy(ctx->iv, iv, 15 - cctx->L);
823                 cctx->iv_set = 1;
824                 }
825         return 1;
826         }
827
828 #define aes_t4_ccm_cipher aes_ccm_cipher
829 static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
830                 const unsigned char *in, size_t len);
831
832 #define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
833 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
834         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
835         flags|EVP_CIPH_##MODE##_MODE,   \
836         aes_t4_init_key,                \
837         aes_t4_##mode##_cipher,         \
838         NULL,                           \
839         sizeof(EVP_AES_KEY),            \
840         NULL,NULL,NULL,NULL }; \
841 static const EVP_CIPHER aes_##keylen##_##mode = { \
842         nid##_##keylen##_##nmode,blocksize,     \
843         keylen/8,ivlen, \
844         flags|EVP_CIPH_##MODE##_MODE,   \
845         aes_init_key,                   \
846         aes_##mode##_cipher,            \
847         NULL,                           \
848         sizeof(EVP_AES_KEY),            \
849         NULL,NULL,NULL,NULL }; \
850 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
851 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
852
853 #define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
854 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
855         nid##_##keylen##_##mode,blocksize, \
856         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
857         flags|EVP_CIPH_##MODE##_MODE,   \
858         aes_t4_##mode##_init_key,       \
859         aes_t4_##mode##_cipher,         \
860         aes_##mode##_cleanup,           \
861         sizeof(EVP_AES_##MODE##_CTX),   \
862         NULL,NULL,aes_##mode##_ctrl,NULL }; \
863 static const EVP_CIPHER aes_##keylen##_##mode = { \
864         nid##_##keylen##_##mode,blocksize, \
865         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
866         flags|EVP_CIPH_##MODE##_MODE,   \
867         aes_##mode##_init_key,          \
868         aes_##mode##_cipher,            \
869         aes_##mode##_cleanup,           \
870         sizeof(EVP_AES_##MODE##_CTX),   \
871         NULL,NULL,aes_##mode##_ctrl,NULL }; \
872 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
873 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
874
875 #else
876
877 #define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
878 static const EVP_CIPHER aes_##keylen##_##mode = { \
879         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
880         flags|EVP_CIPH_##MODE##_MODE,   \
881         aes_init_key,                   \
882         aes_##mode##_cipher,            \
883         NULL,                           \
884         sizeof(EVP_AES_KEY),            \
885         NULL,NULL,NULL,NULL }; \
886 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
887 { return &aes_##keylen##_##mode; }
888
889 #define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
890 static const EVP_CIPHER aes_##keylen##_##mode = { \
891         nid##_##keylen##_##mode,blocksize, \
892         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
893         flags|EVP_CIPH_##MODE##_MODE,   \
894         aes_##mode##_init_key,          \
895         aes_##mode##_cipher,            \
896         aes_##mode##_cleanup,           \
897         sizeof(EVP_AES_##MODE##_CTX),   \
898         NULL,NULL,aes_##mode##_ctrl,NULL }; \
899 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
900 { return &aes_##keylen##_##mode; }
901 #endif
902
903 #if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
904 #include "arm_arch.h"
905 #if __ARM_ARCH__>=7
906 # if defined(BSAES_ASM)
907 #  define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
908 # endif
909 # define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
910 # define HWAES_set_encrypt_key aes_v8_set_encrypt_key
911 # define HWAES_set_decrypt_key aes_v8_set_decrypt_key
912 # define HWAES_encrypt aes_v8_encrypt
913 # define HWAES_decrypt aes_v8_decrypt
914 # define HWAES_cbc_encrypt aes_v8_cbc_encrypt
915 # define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
916 #endif
917 #endif
918
919 #if defined(HWAES_CAPABLE)
920 int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
921         AES_KEY *key);
922 int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
923         AES_KEY *key);
924 void HWAES_encrypt(const unsigned char *in, unsigned char *out,
925         const AES_KEY *key);
926 void HWAES_decrypt(const unsigned char *in, unsigned char *out,
927         const AES_KEY *key);
928 void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
929         size_t length, const AES_KEY *key,
930         unsigned char *ivec, const int enc);
931 void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
932         size_t len, const AES_KEY *key, const unsigned char ivec[16]);
933 #endif
934
935 #define BLOCK_CIPHER_generic_pack(nid,keylen,flags)             \
936         BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)     \
937         BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)      \
938         BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
939         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
940         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags)       \
941         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags)       \
942         BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
943
944 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
945                    const unsigned char *iv, int enc)
946         {
947         int ret, mode;
948         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
949
950         mode = ctx->cipher->flags & EVP_CIPH_MODE;
951         if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
952             && !enc)
953 #ifdef HWAES_CAPABLE
954             if (HWAES_CAPABLE)
955                 {
956                 ret = HWAES_set_decrypt_key(key,ctx->key_len*8,&dat->ks.ks);
957                 dat->block      = (block128_f)HWAES_decrypt;
958                 dat->stream.cbc = NULL;
959 #ifdef HWAES_cbc_encrypt
960                 if (mode==EVP_CIPH_CBC_MODE)
961                     dat->stream.cbc = (cbc128_f)HWAES_cbc_encrypt;
962 #endif
963                 }
964             else
965 #endif
966 #ifdef BSAES_CAPABLE
967             if (BSAES_CAPABLE && mode==EVP_CIPH_CBC_MODE)
968                 {
969                 ret = AES_set_decrypt_key(key,ctx->key_len*8,&dat->ks.ks);
970                 dat->block      = (block128_f)AES_decrypt;
971                 dat->stream.cbc = (cbc128_f)bsaes_cbc_encrypt;
972                 }
973             else
974 #endif
975 #ifdef VPAES_CAPABLE
976             if (VPAES_CAPABLE)
977                 {
978                 ret = vpaes_set_decrypt_key(key,ctx->key_len*8,&dat->ks.ks);
979                 dat->block      = (block128_f)vpaes_decrypt;
980                 dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
981                                         (cbc128_f)vpaes_cbc_encrypt :
982                                         NULL;
983                 }
984             else
985 #endif
986                 {
987                 ret = AES_set_decrypt_key(key,ctx->key_len*8,&dat->ks.ks);
988                 dat->block      = (block128_f)AES_decrypt;
989                 dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
990                                         (cbc128_f)AES_cbc_encrypt :
991                                         NULL;
992                 }
993         else
994 #ifdef HWAES_CAPABLE
995             if (HWAES_CAPABLE)
996                 {
997                 ret = HWAES_set_encrypt_key(key,ctx->key_len*8,&dat->ks.ks);
998                 dat->block      = (block128_f)HWAES_encrypt;
999                 dat->stream.cbc = NULL;
1000 #ifdef HWAES_cbc_encrypt
1001                 if (mode==EVP_CIPH_CBC_MODE)
1002                     dat->stream.cbc = (cbc128_f)HWAES_cbc_encrypt;
1003                 else
1004 #endif
1005 #ifdef HWAES_ctr32_encrypt_blocks
1006                 if (mode==EVP_CIPH_CTR_MODE)
1007                     dat->stream.ctr = (ctr128_f)HWAES_ctr32_encrypt_blocks;
1008                 else
1009 #endif
1010                 (void)0;        /* terminate potentially open 'else' */
1011                 }
1012             else
1013 #endif
1014 #ifdef BSAES_CAPABLE
1015             if (BSAES_CAPABLE && mode==EVP_CIPH_CTR_MODE)
1016                 {
1017                 ret = AES_set_encrypt_key(key,ctx->key_len*8,&dat->ks.ks);
1018                 dat->block      = (block128_f)AES_encrypt;
1019                 dat->stream.ctr = (ctr128_f)bsaes_ctr32_encrypt_blocks;
1020                 }
1021             else
1022 #endif
1023 #ifdef VPAES_CAPABLE
1024             if (VPAES_CAPABLE)
1025                 {
1026                 ret = vpaes_set_encrypt_key(key,ctx->key_len*8,&dat->ks.ks);
1027                 dat->block      = (block128_f)vpaes_encrypt;
1028                 dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
1029                                         (cbc128_f)vpaes_cbc_encrypt :
1030                                         NULL;
1031                 }
1032             else
1033 #endif
1034                 {
1035                 ret = AES_set_encrypt_key(key,ctx->key_len*8,&dat->ks.ks);
1036                 dat->block      = (block128_f)AES_encrypt;
1037                 dat->stream.cbc = mode==EVP_CIPH_CBC_MODE ?
1038                                         (cbc128_f)AES_cbc_encrypt :
1039                                         NULL;
1040 #ifdef AES_CTR_ASM
1041                 if (mode==EVP_CIPH_CTR_MODE)
1042                         dat->stream.ctr = (ctr128_f)AES_ctr32_encrypt;
1043 #endif
1044                 }
1045
1046         if(ret < 0)
1047                 {
1048                 EVPerr(EVP_F_AES_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
1049                 return 0;
1050                 }
1051
1052         return 1;
1053         }
1054
1055 static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1056         const unsigned char *in, size_t len)
1057 {
1058         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1059
1060         if (dat->stream.cbc)
1061                 (*dat->stream.cbc)(in,out,len,&dat->ks,ctx->iv,ctx->encrypt);
1062         else if (ctx->encrypt)
1063                 CRYPTO_cbc128_encrypt(in,out,len,&dat->ks,ctx->iv,dat->block);
1064         else
1065                 CRYPTO_cbc128_decrypt(in,out,len,&dat->ks,ctx->iv,dat->block);
1066
1067         return 1;
1068 }
1069
1070 static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1071         const unsigned char *in, size_t len)
1072 {
1073         size_t  bl = ctx->cipher->block_size;
1074         size_t  i;
1075         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1076
1077         if (len<bl)     return 1;
1078
1079         for (i=0,len-=bl;i<=len;i+=bl)
1080                 (*dat->block)(in+i,out+i,&dat->ks);
1081
1082         return 1;
1083 }
1084
1085 static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1086         const unsigned char *in,size_t len)
1087 {
1088         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1089
1090         CRYPTO_ofb128_encrypt(in,out,len,&dat->ks,
1091                         ctx->iv,&ctx->num,dat->block);
1092         return 1;
1093 }
1094
1095 static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1096         const unsigned char *in,size_t len)
1097 {
1098         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1099
1100         CRYPTO_cfb128_encrypt(in,out,len,&dat->ks,
1101                         ctx->iv,&ctx->num,ctx->encrypt,dat->block);
1102         return 1;
1103 }
1104
1105 static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1106         const unsigned char *in,size_t len)
1107 {
1108         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1109
1110         CRYPTO_cfb128_8_encrypt(in,out,len,&dat->ks,
1111                         ctx->iv,&ctx->num,ctx->encrypt,dat->block);
1112         return 1;
1113 }
1114
1115 static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
1116         const unsigned char *in,size_t len)
1117 {
1118         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1119
1120         if (ctx->flags&EVP_CIPH_FLAG_LENGTH_BITS) {
1121                 CRYPTO_cfb128_1_encrypt(in,out,len,&dat->ks,
1122                         ctx->iv,&ctx->num,ctx->encrypt,dat->block);
1123                 return 1;
1124         }
1125
1126         while (len>=MAXBITCHUNK) {
1127                 CRYPTO_cfb128_1_encrypt(in,out,MAXBITCHUNK*8,&dat->ks,
1128                         ctx->iv,&ctx->num,ctx->encrypt,dat->block);
1129                 len-=MAXBITCHUNK;
1130         }
1131         if (len)
1132                 CRYPTO_cfb128_1_encrypt(in,out,len*8,&dat->ks,
1133                         ctx->iv,&ctx->num,ctx->encrypt,dat->block);
1134         
1135         return 1;
1136 }
1137
1138 static int aes_ctr_cipher (EVP_CIPHER_CTX *ctx, unsigned char *out,
1139                 const unsigned char *in, size_t len)
1140 {
1141         unsigned int num = ctx->num;
1142         EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
1143
1144         if (dat->stream.ctr)
1145                 CRYPTO_ctr128_encrypt_ctr32(in,out,len,&dat->ks,
1146                         ctx->iv,ctx->buf,&num,dat->stream.ctr);
1147         else
1148                 CRYPTO_ctr128_encrypt(in,out,len,&dat->ks,
1149                         ctx->iv,ctx->buf,&num,dat->block);
1150         ctx->num = (size_t)num;
1151         return 1;
1152 }
1153
1154 BLOCK_CIPHER_generic_pack(NID_aes,128,EVP_CIPH_FLAG_FIPS)
1155 BLOCK_CIPHER_generic_pack(NID_aes,192,EVP_CIPH_FLAG_FIPS)
1156 BLOCK_CIPHER_generic_pack(NID_aes,256,EVP_CIPH_FLAG_FIPS)
1157
1158 static int aes_gcm_cleanup(EVP_CIPHER_CTX *c)
1159         {
1160         EVP_AES_GCM_CTX *gctx = c->cipher_data;
1161         OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm));
1162         if (gctx->iv != c->iv)
1163                 OPENSSL_free(gctx->iv);
1164         return 1;
1165         }
1166
1167 /* increment counter (64-bit int) by 1 */
1168 static void ctr64_inc(unsigned char *counter) {
1169         int n=8;
1170         unsigned char  c;
1171
1172         do {
1173                 --n;
1174                 c = counter[n];
1175                 ++c;
1176                 counter[n] = c;
1177                 if (c) return;
1178         } while (n);
1179 }
1180
1181 static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1182         {
1183         EVP_AES_GCM_CTX *gctx = c->cipher_data;
1184         switch (type)
1185                 {
1186         case EVP_CTRL_INIT:
1187                 gctx->key_set = 0;
1188                 gctx->iv_set = 0;
1189                 gctx->ivlen = c->cipher->iv_len;
1190                 gctx->iv = c->iv;
1191                 gctx->taglen = -1;
1192                 gctx->iv_gen = 0;
1193                 gctx->tls_aad_len = -1;
1194                 return 1;
1195
1196         case EVP_CTRL_GCM_SET_IVLEN:
1197                 if (arg <= 0)
1198                         return 0;
1199                 /* Allocate memory for IV if needed */
1200                 if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen))
1201                         {
1202                         if (gctx->iv != c->iv)
1203                                 OPENSSL_free(gctx->iv);
1204                         gctx->iv = OPENSSL_malloc(arg);
1205                         if (!gctx->iv)
1206                                 return 0;
1207                         }
1208                 gctx->ivlen = arg;
1209                 return 1;
1210
1211         case EVP_CTRL_GCM_SET_TAG:
1212                 if (arg <= 0 || arg > 16 || c->encrypt)
1213                         return 0;
1214                 memcpy(c->buf, ptr, arg);
1215                 gctx->taglen = arg;
1216                 return 1;
1217
1218         case EVP_CTRL_GCM_GET_TAG:
1219                 if (arg <= 0 || arg > 16 || !c->encrypt || gctx->taglen < 0)
1220                         return 0;
1221                 memcpy(ptr, c->buf, arg);
1222                 return 1;
1223
1224         case EVP_CTRL_GCM_SET_IV_FIXED:
1225                 /* Special case: -1 length restores whole IV */
1226                 if (arg == -1)
1227                         {
1228                         memcpy(gctx->iv, ptr, gctx->ivlen);
1229                         gctx->iv_gen = 1;
1230                         return 1;
1231                         }
1232                 /* Fixed field must be at least 4 bytes and invocation field
1233                  * at least 8.
1234                  */
1235                 if ((arg < 4) || (gctx->ivlen - arg) < 8)
1236                         return 0;
1237                 if (arg)
1238                         memcpy(gctx->iv, ptr, arg);
1239                 if (c->encrypt &&
1240                         RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
1241                         return 0;
1242                 gctx->iv_gen = 1;
1243                 return 1;
1244
1245         case EVP_CTRL_GCM_IV_GEN:
1246                 if (gctx->iv_gen == 0 || gctx->key_set == 0)
1247                         return 0;
1248                 CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
1249                 if (arg <= 0 || arg > gctx->ivlen)
1250                         arg = gctx->ivlen;
1251                 memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
1252                 /* Invocation field will be at least 8 bytes in size and
1253                  * so no need to check wrap around or increment more than
1254                  * last 8 bytes.
1255                  */
1256                 ctr64_inc(gctx->iv + gctx->ivlen - 8);
1257                 gctx->iv_set = 1;
1258                 return 1;
1259
1260         case EVP_CTRL_GCM_SET_IV_INV:
1261                 if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt)
1262                         return 0;
1263                 memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
1264                 CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
1265                 gctx->iv_set = 1;
1266                 return 1;
1267
1268         case EVP_CTRL_AEAD_TLS1_AAD:
1269                 /* Save the AAD for later use */
1270                 if (arg != 13)
1271                         return 0;
1272                 memcpy(c->buf, ptr, arg);
1273                 gctx->tls_aad_len = arg;
1274                         {
1275                         unsigned int len=c->buf[arg-2]<<8|c->buf[arg-1];
1276                         /* Correct length for explicit IV */
1277                         len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
1278                         /* If decrypting correct for tag too */
1279                         if (!c->encrypt)
1280                                 len -= EVP_GCM_TLS_TAG_LEN;
1281                         c->buf[arg-2] = len>>8;
1282                         c->buf[arg-1] = len & 0xff;
1283                         }
1284                 /* Extra padding: tag appended to record */
1285                 return EVP_GCM_TLS_TAG_LEN;
1286
1287         case EVP_CTRL_COPY:
1288                 {
1289                         EVP_CIPHER_CTX *out = ptr;
1290                         EVP_AES_GCM_CTX *gctx_out = out->cipher_data;
1291                         if (gctx->gcm.key)
1292                                 {
1293                                 if (gctx->gcm.key != &gctx->ks)
1294                                         return 0;
1295                                 gctx_out->gcm.key = &gctx_out->ks;
1296                                 }
1297                         if (gctx->iv == c->iv)
1298                                 gctx_out->iv = out->iv;
1299                         else
1300                         {
1301                                 gctx_out->iv = OPENSSL_malloc(gctx->ivlen);
1302                                 if (!gctx_out->iv)
1303                                         return 0;
1304                                 memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
1305                         }
1306                         return 1;
1307                 }
1308
1309         default:
1310                 return -1;
1311
1312                 }
1313         }
1314
1315 static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1316                         const unsigned char *iv, int enc)
1317         {
1318         EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
1319         if (!iv && !key)
1320                 return 1;
1321         if (key)
1322                 { do {
1323 #ifdef HWAES_CAPABLE
1324                 if (HWAES_CAPABLE)
1325                         {
1326                         HWAES_set_encrypt_key(key,ctx->key_len*8,&gctx->ks.ks);
1327                         CRYPTO_gcm128_init(&gctx->gcm,&gctx->ks,
1328                                         (block128_f)HWAES_encrypt);
1329 #ifdef HWAES_ctr32_encrypt_blocks
1330                         gctx->ctr = (ctr128_f)HWAES_ctr32_encrypt_blocks;
1331 #else
1332                         gctx->ctr = NULL;
1333 #endif
1334                         break;
1335                         }
1336                 else
1337 #endif
1338 #ifdef BSAES_CAPABLE
1339                 if (BSAES_CAPABLE)
1340                         {
1341                         AES_set_encrypt_key(key,ctx->key_len*8,&gctx->ks.ks);
1342                         CRYPTO_gcm128_init(&gctx->gcm,&gctx->ks,
1343                                         (block128_f)AES_encrypt);
1344                         gctx->ctr = (ctr128_f)bsaes_ctr32_encrypt_blocks;
1345                         break;
1346                         }
1347                 else
1348 #endif
1349 #ifdef VPAES_CAPABLE
1350                 if (VPAES_CAPABLE)
1351                         {
1352                         vpaes_set_encrypt_key(key,ctx->key_len*8,&gctx->ks.ks);
1353                         CRYPTO_gcm128_init(&gctx->gcm,&gctx->ks,
1354                                         (block128_f)vpaes_encrypt);
1355                         gctx->ctr = NULL;
1356                         break;
1357                         }
1358                 else
1359 #endif
1360                 (void)0;        /* terminate potentially open 'else' */
1361
1362                 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
1363                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f)AES_encrypt);
1364 #ifdef AES_CTR_ASM
1365                 gctx->ctr = (ctr128_f)AES_ctr32_encrypt;
1366 #else
1367                 gctx->ctr = NULL;
1368 #endif
1369                 } while (0);
1370
1371                 /* If we have an iv can set it directly, otherwise use
1372                  * saved IV.
1373                  */
1374                 if (iv == NULL && gctx->iv_set)
1375                         iv = gctx->iv;
1376                 if (iv)
1377                         {
1378                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
1379                         gctx->iv_set = 1;
1380                         }
1381                 gctx->key_set = 1;
1382                 }
1383         else
1384                 {
1385                 /* If key set use IV, otherwise copy */
1386                 if (gctx->key_set)
1387                         CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
1388                 else
1389                         memcpy(gctx->iv, iv, gctx->ivlen);
1390                 gctx->iv_set = 1;
1391                 gctx->iv_gen = 0;
1392                 }
1393         return 1;
1394         }
1395
1396 /* Handle TLS GCM packet format. This consists of the last portion of the IV
1397  * followed by the payload and finally the tag. On encrypt generate IV,
1398  * encrypt payload and write the tag. On verify retrieve IV, decrypt payload
1399  * and verify tag.
1400  */
1401
1402 static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1403                 const unsigned char *in, size_t len)
1404         {
1405         EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
1406         int rv = -1;
1407         /* Encrypt/decrypt must be performed in place */
1408         if (out != in || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN+EVP_GCM_TLS_TAG_LEN))
1409                 return -1;
1410         /* Set IV from start of buffer or generate IV and write to start
1411          * of buffer.
1412          */
1413         if (EVP_CIPHER_CTX_ctrl(ctx, ctx->encrypt ?
1414                                 EVP_CTRL_GCM_IV_GEN : EVP_CTRL_GCM_SET_IV_INV,
1415                                 EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
1416                 goto err;
1417         /* Use saved AAD */
1418         if (CRYPTO_gcm128_aad(&gctx->gcm, ctx->buf, gctx->tls_aad_len))
1419                 goto err;
1420         /* Fix buffer and length to point to payload */
1421         in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1422         out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1423         len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1424         if (ctx->encrypt)
1425                 {
1426                 /* Encrypt payload */
1427                 if (gctx->ctr)
1428                         {
1429                         size_t bulk=0;
1430 #if defined(AES_GCM_ASM)
1431                         if (len>=32 && AES_GCM_ASM(gctx))
1432                                 {
1433                                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,NULL,NULL,0))
1434                                         return -1;
1435
1436                                 bulk = AES_gcm_encrypt(in,out,len,
1437                                                         gctx->gcm.key,
1438                                                         gctx->gcm.Yi.c,
1439                                                         gctx->gcm.Xi.u);
1440                                 gctx->gcm.len.u[1] += bulk;
1441                                 }
1442 #endif
1443                         if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
1444                                                         in +bulk,
1445                                                         out+bulk,
1446                                                         len-bulk,
1447                                                         gctx->ctr))
1448                                 goto err;
1449                         }
1450                 else    {
1451                         size_t bulk=0;
1452 #if defined(AES_GCM_ASM2)
1453                         if (len>=32 && AES_GCM_ASM2(gctx))
1454                                 {
1455                                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,NULL,NULL,0))
1456                                         return -1;
1457
1458                                 bulk = AES_gcm_encrypt(in,out,len,
1459                                                         gctx->gcm.key,
1460                                                         gctx->gcm.Yi.c,
1461                                                         gctx->gcm.Xi.u);
1462                                 gctx->gcm.len.u[1] += bulk;
1463                                 }
1464 #endif
1465                         if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1466                                                         in +bulk,
1467                                                         out+bulk,
1468                                                         len-bulk))
1469                                 goto err;
1470                         }
1471                 out += len;
1472                 /* Finally write tag */
1473                 CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN);
1474                 rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1475                 }
1476         else
1477                 {
1478                 /* Decrypt */
1479                 if (gctx->ctr)
1480                         {
1481                         size_t bulk=0;
1482 #if defined(AES_GCM_ASM)
1483                         if (len>=16 && AES_GCM_ASM(gctx))
1484                                 {
1485                                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,NULL,NULL,0))
1486                                         return -1;
1487
1488                                 bulk = AES_gcm_decrypt(in,out,len,
1489                                                         gctx->gcm.key,
1490                                                         gctx->gcm.Yi.c,
1491                                                         gctx->gcm.Xi.u);
1492                                 gctx->gcm.len.u[1] += bulk;
1493                                 }
1494 #endif
1495                         if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
1496                                                         in +bulk,
1497                                                         out+bulk,
1498                                                         len-bulk,
1499                                                         gctx->ctr))
1500                                 goto err;
1501                         }
1502                 else    {
1503                         size_t bulk=0;
1504 #if defined(AES_GCM_ASM2)
1505                         if (len>=16 && AES_GCM_ASM2(gctx))
1506                                 {
1507                                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,NULL,NULL,0))
1508                                         return -1;
1509
1510                                 bulk = AES_gcm_decrypt(in,out,len,
1511                                                         gctx->gcm.key,
1512                                                         gctx->gcm.Yi.c,
1513                                                         gctx->gcm.Xi.u);
1514                                 gctx->gcm.len.u[1] += bulk;
1515                                 }
1516 #endif
1517                         if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1518                                                         in +bulk,
1519                                                         out+bulk,
1520                                                         len-bulk))
1521                                 goto err;
1522                         }
1523                 /* Retrieve tag */
1524                 CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf,
1525                                         EVP_GCM_TLS_TAG_LEN);
1526                 /* If tag mismatch wipe buffer */
1527                 if (memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN))
1528                         {
1529                         OPENSSL_cleanse(out, len);
1530                         goto err;
1531                         }
1532                 rv = len;
1533                 }
1534
1535         err:
1536         gctx->iv_set = 0;
1537         gctx->tls_aad_len = -1;
1538         return rv;
1539         }
1540
1541 static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1542                 const unsigned char *in, size_t len)
1543         {
1544         EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
1545         /* If not set up, return error */
1546         if (!gctx->key_set)
1547                 return -1;
1548
1549         if (gctx->tls_aad_len >= 0)
1550                 return aes_gcm_tls_cipher(ctx, out, in, len);
1551
1552         if (!gctx->iv_set)
1553                 return -1;
1554         if (in)
1555                 {
1556                 if (out == NULL)
1557                         {
1558                         if (CRYPTO_gcm128_aad(&gctx->gcm, in, len))
1559                                 return -1;
1560                         }
1561                 else if (ctx->encrypt)
1562                         {
1563                         if (gctx->ctr)
1564                                 {
1565                                 size_t bulk=0;
1566 #if defined(AES_GCM_ASM)
1567                                 if (len>=32 && AES_GCM_ASM(gctx))
1568                                         {
1569                                         size_t res = (16-gctx->gcm.mres)%16;
1570
1571                                         if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1572                                                         in,out,res))
1573                                                 return -1;
1574
1575                                         bulk = AES_gcm_encrypt(in+res,
1576                                                         out+res,len-res,                                                                gctx->gcm.key,
1577                                                         gctx->gcm.Yi.c,
1578                                                         gctx->gcm.Xi.u);
1579                                         gctx->gcm.len.u[1] += bulk;
1580                                         bulk += res;
1581                                         }
1582 #endif
1583                                 if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
1584                                                         in +bulk,
1585                                                         out+bulk,
1586                                                         len-bulk,
1587                                                         gctx->ctr))
1588                                         return -1;
1589                                 }
1590                         else    {
1591                                 size_t bulk=0;
1592 #if defined(AES_GCM_ASM2)
1593                                 if (len>=32 && AES_GCM_ASM2(gctx))
1594                                         {
1595                                         size_t res = (16-gctx->gcm.mres)%16;
1596
1597                                         if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1598                                                         in,out,res))
1599                                                 return -1;
1600
1601                                         bulk = AES_gcm_encrypt(in+res,
1602                                                         out+res,len-res,                                                                gctx->gcm.key,
1603                                                         gctx->gcm.Yi.c,
1604                                                         gctx->gcm.Xi.u);
1605                                         gctx->gcm.len.u[1] += bulk;
1606                                         bulk += res;
1607                                         }
1608 #endif
1609                                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1610                                                         in +bulk,
1611                                                         out+bulk,
1612                                                         len-bulk))
1613                                         return -1;
1614                                 }
1615                         }
1616                 else
1617                         {
1618                         if (gctx->ctr)
1619                                 {
1620                                 size_t bulk=0;
1621 #if defined(AES_GCM_ASM)
1622                                 if (len>=16 && AES_GCM_ASM(gctx))
1623                                         {
1624                                         size_t res = (16-gctx->gcm.mres)%16;
1625
1626                                         if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1627                                                         in,out,res))
1628                                                 return -1;
1629
1630                                         bulk = AES_gcm_decrypt(in+res,
1631                                                         out+res,len-res,
1632                                                         gctx->gcm.key,
1633                                                         gctx->gcm.Yi.c,
1634                                                         gctx->gcm.Xi.u);
1635                                         gctx->gcm.len.u[1] += bulk;
1636                                         bulk += res;
1637                                         }
1638 #endif
1639                                 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
1640                                                         in +bulk,
1641                                                         out+bulk,
1642                                                         len-bulk,
1643                                                         gctx->ctr))
1644                                         return -1;
1645                                 }
1646                         else    {
1647                                 size_t bulk=0;
1648 #if defined(AES_GCM_ASM2)
1649                                 if (len>=16 && AES_GCM_ASM2(gctx))
1650                                         {
1651                                         size_t res = (16-gctx->gcm.mres)%16;
1652
1653                                         if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1654                                                         in,out,res))
1655                                                 return -1;
1656
1657                                         bulk = AES_gcm_decrypt(in+res,
1658                                                         out+res,len-res,
1659                                                         gctx->gcm.key,
1660                                                         gctx->gcm.Yi.c,
1661                                                         gctx->gcm.Xi.u);
1662                                         gctx->gcm.len.u[1] += bulk;
1663                                         bulk += res;
1664                                         }
1665 #endif
1666                                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1667                                                         in +bulk,
1668                                                         out+bulk,
1669                                                         len-bulk))
1670                                         return -1;
1671                                 }
1672                         }
1673                 return len;
1674                 }
1675         else
1676                 {
1677                 if (!ctx->encrypt)
1678                         {
1679                         if (gctx->taglen < 0)
1680                                 return -1;
1681                         if (CRYPTO_gcm128_finish(&gctx->gcm,
1682                                         ctx->buf, gctx->taglen) != 0)
1683                                 return -1;
1684                         gctx->iv_set = 0;
1685                         return 0;
1686                         }
1687                 CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, 16);
1688                 gctx->taglen = 16;
1689                 /* Don't reuse the IV */
1690                 gctx->iv_set = 0;
1691                 return 0;
1692                 }
1693
1694         }
1695
1696 #define CUSTOM_FLAGS    (EVP_CIPH_FLAG_DEFAULT_ASN1 \
1697                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
1698                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
1699                 | EVP_CIPH_CUSTOM_COPY)
1700
1701 BLOCK_CIPHER_custom(NID_aes,128,1,12,gcm,GCM,
1702                 EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_AEAD_CIPHER|CUSTOM_FLAGS)
1703 BLOCK_CIPHER_custom(NID_aes,192,1,12,gcm,GCM,
1704                 EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_AEAD_CIPHER|CUSTOM_FLAGS)
1705 BLOCK_CIPHER_custom(NID_aes,256,1,12,gcm,GCM,
1706                 EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_AEAD_CIPHER|CUSTOM_FLAGS)
1707
1708 static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1709         {
1710         EVP_AES_XTS_CTX *xctx = c->cipher_data;
1711         if (type == EVP_CTRL_COPY)
1712                 {
1713                 EVP_CIPHER_CTX *out = ptr;
1714                 EVP_AES_XTS_CTX *xctx_out = out->cipher_data;
1715                 if (xctx->xts.key1)
1716                         {
1717                         if (xctx->xts.key1 != &xctx->ks1)
1718                                 return 0;
1719                         xctx_out->xts.key1 = &xctx_out->ks1;
1720                         }
1721                 if (xctx->xts.key2)
1722                         {
1723                         if (xctx->xts.key2 != &xctx->ks2)
1724                                 return 0;
1725                         xctx_out->xts.key2 = &xctx_out->ks2;
1726                         }
1727                 return 1;
1728                 }
1729         else if (type != EVP_CTRL_INIT)
1730                 return -1;
1731         /* key1 and key2 are used as an indicator both key and IV are set */
1732         xctx->xts.key1 = NULL;
1733         xctx->xts.key2 = NULL;
1734         return 1;
1735         }
1736
1737 static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1738                         const unsigned char *iv, int enc)
1739         {
1740         EVP_AES_XTS_CTX *xctx = ctx->cipher_data;
1741         if (!iv && !key)
1742                 return 1;
1743
1744         if (key) do
1745                 {
1746 #ifdef AES_XTS_ASM
1747                 xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
1748 #else
1749                 xctx->stream = NULL;
1750 #endif
1751                 /* key_len is two AES keys */
1752 #ifdef HWAES_CAPABLE
1753                 if (HWAES_CAPABLE)
1754                         {
1755                         if (enc)
1756                             {
1757                             HWAES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1758                             xctx->xts.block1 = (block128_f)HWAES_encrypt;
1759                             }
1760                         else
1761                             {
1762                             HWAES_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1763                             xctx->xts.block1 = (block128_f)HWAES_decrypt;
1764                             }
1765
1766                         HWAES_set_encrypt_key(key + ctx->key_len/2,
1767                                                     ctx->key_len * 4, &xctx->ks2.ks);
1768                         xctx->xts.block2 = (block128_f)HWAES_encrypt;
1769
1770                         xctx->xts.key1 = &xctx->ks1;
1771                         break;
1772                         }
1773                 else
1774 #endif
1775 #ifdef BSAES_CAPABLE
1776                 if (BSAES_CAPABLE)
1777                         xctx->stream = enc ? bsaes_xts_encrypt : bsaes_xts_decrypt;
1778                 else
1779 #endif
1780 #ifdef VPAES_CAPABLE
1781                 if (VPAES_CAPABLE)
1782                     {
1783                     if (enc)
1784                         {
1785                         vpaes_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1786                         xctx->xts.block1 = (block128_f)vpaes_encrypt;
1787                         }
1788                     else
1789                         {
1790                         vpaes_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1791                         xctx->xts.block1 = (block128_f)vpaes_decrypt;
1792                         }
1793
1794                     vpaes_set_encrypt_key(key + ctx->key_len/2,
1795                                                 ctx->key_len * 4, &xctx->ks2.ks);
1796                     xctx->xts.block2 = (block128_f)vpaes_encrypt;
1797
1798                     xctx->xts.key1 = &xctx->ks1;
1799                     break;
1800                     }
1801                 else
1802 #endif
1803                 (void)0;        /* terminate potentially open 'else' */
1804
1805                 if (enc)
1806                         {
1807                         AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1808                         xctx->xts.block1 = (block128_f)AES_encrypt;
1809                         }
1810                 else
1811                         {
1812                         AES_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
1813                         xctx->xts.block1 = (block128_f)AES_decrypt;
1814                         }
1815
1816                 AES_set_encrypt_key(key + ctx->key_len/2,
1817                                                 ctx->key_len * 4, &xctx->ks2.ks);
1818                 xctx->xts.block2 = (block128_f)AES_encrypt;
1819
1820                 xctx->xts.key1 = &xctx->ks1;
1821                 } while (0);
1822
1823         if (iv)
1824                 {
1825                 xctx->xts.key2 = &xctx->ks2;
1826                 memcpy(ctx->iv, iv, 16);
1827                 }
1828
1829         return 1;
1830         }
1831
1832 static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1833                 const unsigned char *in, size_t len)
1834         {
1835         EVP_AES_XTS_CTX *xctx = ctx->cipher_data;
1836         if (!xctx->xts.key1 || !xctx->xts.key2)
1837                 return 0;
1838         if (!out || !in || len<AES_BLOCK_SIZE)
1839                 return 0;
1840         if (xctx->stream)
1841                 (*xctx->stream)(in, out, len,
1842                                 xctx->xts.key1, xctx->xts.key2, ctx->iv);
1843         else if (CRYPTO_xts128_encrypt(&xctx->xts, ctx->iv, in, out, len,
1844                                                                 ctx->encrypt))
1845                 return 0;
1846         return 1;
1847         }
1848
1849 #define aes_xts_cleanup NULL
1850
1851 #define XTS_FLAGS       (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \
1852                          | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
1853                          | EVP_CIPH_CUSTOM_COPY)
1854
1855 BLOCK_CIPHER_custom(NID_aes,128,1,16,xts,XTS,EVP_CIPH_FLAG_FIPS|XTS_FLAGS)
1856 BLOCK_CIPHER_custom(NID_aes,256,1,16,xts,XTS,EVP_CIPH_FLAG_FIPS|XTS_FLAGS)
1857
1858 static int aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1859         {
1860         EVP_AES_CCM_CTX *cctx = c->cipher_data;
1861         switch (type)
1862                 {
1863         case EVP_CTRL_INIT:
1864                 cctx->key_set = 0;
1865                 cctx->iv_set = 0;
1866                 cctx->L = 8;
1867                 cctx->M = 12;
1868                 cctx->tag_set = 0;
1869                 cctx->len_set = 0;
1870                 return 1;
1871
1872         case EVP_CTRL_CCM_SET_IVLEN:
1873                 arg = 15 - arg;
1874         case EVP_CTRL_CCM_SET_L:
1875                 if (arg < 2 || arg > 8)
1876                         return 0;
1877                 cctx->L = arg;
1878                 return 1;
1879
1880         case EVP_CTRL_CCM_SET_TAG:
1881                 if ((arg & 1) || arg < 4 || arg > 16)
1882                         return 0;
1883                 if ((c->encrypt && ptr) || (!c->encrypt && !ptr))
1884                         return 0;
1885                 if (ptr)
1886                         {
1887                         cctx->tag_set = 1;
1888                         memcpy(c->buf, ptr, arg);
1889                         }
1890                 cctx->M = arg;
1891                 return 1;
1892
1893         case EVP_CTRL_CCM_GET_TAG:
1894                 if (!c->encrypt || !cctx->tag_set)
1895                         return 0;
1896                 if(!CRYPTO_ccm128_tag(&cctx->ccm, ptr, (size_t)arg))
1897                         return 0;
1898                 cctx->tag_set = 0;
1899                 cctx->iv_set = 0;
1900                 cctx->len_set = 0;
1901                 return 1;
1902
1903         case EVP_CTRL_COPY:
1904                 {
1905                         EVP_CIPHER_CTX *out = ptr;
1906                         EVP_AES_CCM_CTX *cctx_out = out->cipher_data;
1907                         if (cctx->ccm.key)
1908                                 {
1909                                 if (cctx->ccm.key != &cctx->ks)
1910                                         return 0;
1911                                 cctx_out->ccm.key = &cctx_out->ks;
1912                                 }
1913                         return 1;
1914                 }
1915
1916         default:
1917                 return -1;
1918
1919                 }
1920         }
1921
1922 static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1923                         const unsigned char *iv, int enc)
1924         {
1925         EVP_AES_CCM_CTX *cctx = ctx->cipher_data;
1926         if (!iv && !key)
1927                 return 1;
1928         if (key) do
1929                 {
1930 #ifdef HWAES_CAPABLE
1931                 if (HWAES_CAPABLE)
1932                         {
1933                         HWAES_set_encrypt_key(key,ctx->key_len*8,&cctx->ks.ks);
1934
1935                         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
1936                                         &cctx->ks, (block128_f)HWAES_encrypt);
1937                         cctx->str = NULL;
1938                         cctx->key_set = 1;
1939                         break;
1940                         }
1941                 else
1942 #endif
1943 #ifdef VPAES_CAPABLE
1944                 if (VPAES_CAPABLE)
1945                         {
1946                         vpaes_set_encrypt_key(key, ctx->key_len*8, &cctx->ks.ks);
1947                         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
1948                                         &cctx->ks, (block128_f)vpaes_encrypt);
1949                         cctx->str = NULL;
1950                         cctx->key_set = 1;
1951                         break;
1952                         }
1953 #endif
1954                 AES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
1955                 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
1956                                         &cctx->ks, (block128_f)AES_encrypt);
1957                 cctx->str = NULL;
1958                 cctx->key_set = 1;
1959                 } while (0);
1960         if (iv)
1961                 {
1962                 memcpy(ctx->iv, iv, 15 - cctx->L);
1963                 cctx->iv_set = 1;
1964                 }
1965         return 1;
1966         }
1967
1968 static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1969                 const unsigned char *in, size_t len)
1970         {
1971         EVP_AES_CCM_CTX *cctx = ctx->cipher_data;
1972         CCM128_CONTEXT *ccm = &cctx->ccm;
1973         /* If not set up, return error */
1974         if (!cctx->iv_set && !cctx->key_set)
1975                 return -1;
1976         if (!ctx->encrypt && !cctx->tag_set)
1977                 return -1;
1978         if (!out)
1979                 {
1980                 if (!in)
1981                         {
1982                         if (CRYPTO_ccm128_setiv(ccm, ctx->iv, 15 - cctx->L,len))
1983                                 return -1;
1984                         cctx->len_set = 1;
1985                         return len;
1986                         }
1987                 /* If have AAD need message length */
1988                 if (!cctx->len_set && len)
1989                         return -1;
1990                 CRYPTO_ccm128_aad(ccm, in, len);
1991                 return len;
1992                 }
1993         /* EVP_*Final() doesn't return any data */
1994         if (!in)
1995                 return 0;
1996         /* If not set length yet do it */
1997         if (!cctx->len_set)
1998                 {
1999                 if (CRYPTO_ccm128_setiv(ccm, ctx->iv, 15 - cctx->L, len))
2000                         return -1;
2001                 cctx->len_set = 1;
2002                 }
2003         if (ctx->encrypt)
2004                 {
2005                 if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len,
2006                                                 cctx->str) :
2007                                 CRYPTO_ccm128_encrypt(ccm, in, out, len))
2008                         return -1;
2009                 cctx->tag_set = 1;
2010                 return len;
2011                 }
2012         else
2013                 {
2014                 int rv = -1;
2015                 if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len,
2016                                                 cctx->str) :
2017                                 !CRYPTO_ccm128_decrypt(ccm, in, out, len))
2018                         {
2019                         unsigned char tag[16];
2020                         if (CRYPTO_ccm128_tag(ccm, tag, cctx->M))
2021                                 {
2022                                 if (!memcmp(tag, ctx->buf, cctx->M))
2023                                         rv = len;
2024                                 }
2025                         }
2026                 if (rv == -1)
2027                         OPENSSL_cleanse(out, len);
2028                 cctx->iv_set = 0;
2029                 cctx->tag_set = 0;
2030                 cctx->len_set = 0;
2031                 return rv;
2032                 }
2033
2034         }
2035
2036 #define aes_ccm_cleanup NULL
2037
2038 BLOCK_CIPHER_custom(NID_aes,128,1,12,ccm,CCM,EVP_CIPH_FLAG_FIPS|CUSTOM_FLAGS)
2039 BLOCK_CIPHER_custom(NID_aes,192,1,12,ccm,CCM,EVP_CIPH_FLAG_FIPS|CUSTOM_FLAGS)
2040 BLOCK_CIPHER_custom(NID_aes,256,1,12,ccm,CCM,EVP_CIPH_FLAG_FIPS|CUSTOM_FLAGS)
2041
2042 #endif
2043 typedef struct
2044         {
2045         union { double align; AES_KEY ks; } ks;
2046         /* Indicates if IV has been set */
2047         unsigned char *iv;
2048         } EVP_AES_WRAP_CTX;
2049
2050 static int aes_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2051                         const unsigned char *iv, int enc)
2052         {
2053         EVP_AES_WRAP_CTX *wctx = ctx->cipher_data;
2054         if (!iv && !key)
2055                 return 1;
2056         if (key)
2057                 {
2058                 if (ctx->encrypt)
2059                         AES_set_encrypt_key(key, ctx->key_len * 8, &wctx->ks.ks);
2060                 else
2061                         AES_set_decrypt_key(key, ctx->key_len * 8, &wctx->ks.ks);
2062                 if (!iv)
2063                         wctx->iv = NULL;
2064                 }
2065         if (iv)
2066                 {
2067                 memcpy(ctx->iv, iv, 8);
2068                 wctx->iv = ctx->iv;
2069                 }
2070         return 1;
2071         }
2072
2073 static int aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2074                 const unsigned char *in, size_t inlen)
2075         {
2076         EVP_AES_WRAP_CTX *wctx = ctx->cipher_data;
2077         size_t rv;
2078         if (inlen % 8)
2079                 return -1;
2080         if (ctx->encrypt && inlen < 8)
2081                 return -1;
2082         if (!ctx->encrypt && inlen < 16)
2083                 return -1;
2084         if (!out)
2085                 {
2086                 if (ctx->encrypt)
2087                         return inlen + 8;
2088                 else
2089                         return inlen - 8;
2090                 }
2091         if (!in)
2092                 return 0;
2093         if (ctx->encrypt)
2094                 rv = CRYPTO_128_wrap(&wctx->ks.ks, wctx->iv, out, in, inlen,
2095                                                 (block128_f)AES_encrypt);
2096         else
2097                 rv = CRYPTO_128_unwrap(&wctx->ks.ks, wctx->iv, out, in, inlen,
2098                                                 (block128_f)AES_decrypt);
2099         return rv ? (int)rv : -1;
2100         }
2101
2102 #define WRAP_FLAGS      (EVP_CIPH_WRAP_MODE \
2103                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
2104                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1)
2105
2106 static const EVP_CIPHER aes_128_wrap = {
2107         NID_id_aes128_wrap,
2108         8, 16, 8, WRAP_FLAGS,
2109         aes_wrap_init_key, aes_wrap_cipher,
2110         NULL,   
2111         sizeof(EVP_AES_WRAP_CTX),
2112         NULL,NULL,NULL,NULL };
2113
2114 const EVP_CIPHER *EVP_aes_128_wrap(void)
2115         {
2116         return &aes_128_wrap;
2117         }
2118
2119 static const EVP_CIPHER aes_192_wrap = {
2120         NID_id_aes192_wrap,
2121         8, 24, 8, WRAP_FLAGS,
2122         aes_wrap_init_key, aes_wrap_cipher,
2123         NULL,   
2124         sizeof(EVP_AES_WRAP_CTX),
2125         NULL,NULL,NULL,NULL };
2126
2127 const EVP_CIPHER *EVP_aes_192_wrap(void)
2128         {
2129         return &aes_192_wrap;
2130         }
2131
2132 static const EVP_CIPHER aes_256_wrap = {
2133         NID_id_aes256_wrap,
2134         8, 32, 8, WRAP_FLAGS,
2135         aes_wrap_init_key, aes_wrap_cipher,
2136         NULL,   
2137         sizeof(EVP_AES_WRAP_CTX),
2138         NULL,NULL,NULL,NULL };
2139
2140 const EVP_CIPHER *EVP_aes_256_wrap(void)
2141         {
2142         return &aes_256_wrap;
2143         }