Properly handle a partial block in OCB mode
[openssl.git] / crypto / evp / e_aes.c
1 /*
2  * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the OpenSSL license (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #include <openssl/opensslconf.h>
11 #include <openssl/crypto.h>
12 #include <openssl/evp.h>
13 #include <openssl/err.h>
14 #include <string.h>
15 #include <assert.h>
16 #include <openssl/aes.h>
17 #include "internal/evp_int.h"
18 #include "modes_lcl.h"
19 #include <openssl/rand.h>
20
21 typedef struct {
22     union {
23         double align;
24         AES_KEY ks;
25     } ks;
26     block128_f block;
27     union {
28         cbc128_f cbc;
29         ctr128_f ctr;
30     } stream;
31 } EVP_AES_KEY;
32
33 typedef struct {
34     union {
35         double align;
36         AES_KEY ks;
37     } ks;                       /* AES key schedule to use */
38     int key_set;                /* Set if key initialised */
39     int iv_set;                 /* Set if an iv is set */
40     GCM128_CONTEXT gcm;
41     unsigned char *iv;          /* Temporary IV store */
42     int ivlen;                  /* IV length */
43     int taglen;
44     int iv_gen;                 /* It is OK to generate IVs */
45     int tls_aad_len;            /* TLS AAD length */
46     ctr128_f ctr;
47 } EVP_AES_GCM_CTX;
48
49 typedef struct {
50     union {
51         double align;
52         AES_KEY ks;
53     } ks1, ks2;                 /* AES key schedules to use */
54     XTS128_CONTEXT xts;
55     void (*stream) (const unsigned char *in,
56                     unsigned char *out, size_t length,
57                     const AES_KEY *key1, const AES_KEY *key2,
58                     const unsigned char iv[16]);
59 } EVP_AES_XTS_CTX;
60
61 typedef struct {
62     union {
63         double align;
64         AES_KEY ks;
65     } ks;                       /* AES key schedule to use */
66     int key_set;                /* Set if key initialised */
67     int iv_set;                 /* Set if an iv is set */
68     int tag_set;                /* Set if tag is valid */
69     int len_set;                /* Set if message length set */
70     int L, M;                   /* L and M parameters from RFC3610 */
71     int tls_aad_len;            /* TLS AAD length */
72     CCM128_CONTEXT ccm;
73     ccm128_f str;
74 } EVP_AES_CCM_CTX;
75
76 #ifndef OPENSSL_NO_OCB
77 typedef struct {
78     union {
79         double align;
80         AES_KEY ks;
81     } ksenc;                    /* AES key schedule to use for encryption */
82     union {
83         double align;
84         AES_KEY ks;
85     } ksdec;                    /* AES key schedule to use for decryption */
86     int key_set;                /* Set if key initialised */
87     int iv_set;                 /* Set if an iv is set */
88     OCB128_CONTEXT ocb;
89     unsigned char *iv;          /* Temporary IV store */
90     unsigned char tag[16];
91     unsigned char data_buf[16]; /* Store partial data blocks */
92     unsigned char aad_buf[16];  /* Store partial AAD blocks */
93     int data_buf_len;
94     int aad_buf_len;
95     int ivlen;                  /* IV length */
96     int taglen;
97 } EVP_AES_OCB_CTX;
98 #endif
99
100 #define MAXBITCHUNK     ((size_t)1<<(sizeof(size_t)*8-4))
101
102 #ifdef VPAES_ASM
103 int vpaes_set_encrypt_key(const unsigned char *userKey, int bits,
104                           AES_KEY *key);
105 int vpaes_set_decrypt_key(const unsigned char *userKey, int bits,
106                           AES_KEY *key);
107
108 void vpaes_encrypt(const unsigned char *in, unsigned char *out,
109                    const AES_KEY *key);
110 void vpaes_decrypt(const unsigned char *in, unsigned char *out,
111                    const AES_KEY *key);
112
113 void vpaes_cbc_encrypt(const unsigned char *in,
114                        unsigned char *out,
115                        size_t length,
116                        const AES_KEY *key, unsigned char *ivec, int enc);
117 #endif
118 #ifdef BSAES_ASM
119 void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out,
120                        size_t length, const AES_KEY *key,
121                        unsigned char ivec[16], int enc);
122 void bsaes_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
123                                 size_t len, const AES_KEY *key,
124                                 const unsigned char ivec[16]);
125 void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out,
126                        size_t len, const AES_KEY *key1,
127                        const AES_KEY *key2, const unsigned char iv[16]);
128 void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
129                        size_t len, const AES_KEY *key1,
130                        const AES_KEY *key2, const unsigned char iv[16]);
131 #endif
132 #ifdef AES_CTR_ASM
133 void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
134                        size_t blocks, const AES_KEY *key,
135                        const unsigned char ivec[AES_BLOCK_SIZE]);
136 #endif
137 #ifdef AES_XTS_ASM
138 void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len,
139                      const AES_KEY *key1, const AES_KEY *key2,
140                      const unsigned char iv[16]);
141 void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len,
142                      const AES_KEY *key1, const AES_KEY *key2,
143                      const unsigned char iv[16]);
144 #endif
145
146 #if defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
147 # include "ppc_arch.h"
148 # ifdef VPAES_ASM
149 #  define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC)
150 # endif
151 # define HWAES_CAPABLE  (OPENSSL_ppccap_P & PPC_CRYPTO207)
152 # define HWAES_set_encrypt_key aes_p8_set_encrypt_key
153 # define HWAES_set_decrypt_key aes_p8_set_decrypt_key
154 # define HWAES_encrypt aes_p8_encrypt
155 # define HWAES_decrypt aes_p8_decrypt
156 # define HWAES_cbc_encrypt aes_p8_cbc_encrypt
157 # define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks
158 # define HWAES_xts_encrypt aes_p8_xts_encrypt
159 # define HWAES_xts_decrypt aes_p8_xts_decrypt
160 #endif
161
162 #if     defined(AES_ASM) && !defined(I386_ONLY) &&      (  \
163         ((defined(__i386)       || defined(__i386__)    || \
164           defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
165         defined(__x86_64)       || defined(__x86_64__)  || \
166         defined(_M_AMD64)       || defined(_M_X64)      )
167
168 extern unsigned int OPENSSL_ia32cap_P[];
169
170 # ifdef VPAES_ASM
171 #  define VPAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
172 # endif
173 # ifdef BSAES_ASM
174 #  define BSAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
175 # endif
176 /*
177  * AES-NI section
178  */
179 # define AESNI_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
180
181 int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
182                           AES_KEY *key);
183 int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
184                           AES_KEY *key);
185
186 void aesni_encrypt(const unsigned char *in, unsigned char *out,
187                    const AES_KEY *key);
188 void aesni_decrypt(const unsigned char *in, unsigned char *out,
189                    const AES_KEY *key);
190
191 void aesni_ecb_encrypt(const unsigned char *in,
192                        unsigned char *out,
193                        size_t length, const AES_KEY *key, int enc);
194 void aesni_cbc_encrypt(const unsigned char *in,
195                        unsigned char *out,
196                        size_t length,
197                        const AES_KEY *key, unsigned char *ivec, int enc);
198
199 void aesni_ctr32_encrypt_blocks(const unsigned char *in,
200                                 unsigned char *out,
201                                 size_t blocks,
202                                 const void *key, const unsigned char *ivec);
203
204 void aesni_xts_encrypt(const unsigned char *in,
205                        unsigned char *out,
206                        size_t length,
207                        const AES_KEY *key1, const AES_KEY *key2,
208                        const unsigned char iv[16]);
209
210 void aesni_xts_decrypt(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_ccm64_encrypt_blocks(const unsigned char *in,
217                                 unsigned char *out,
218                                 size_t blocks,
219                                 const void *key,
220                                 const unsigned char ivec[16],
221                                 unsigned char cmac[16]);
222
223 void aesni_ccm64_decrypt_blocks(const unsigned char *in,
224                                 unsigned char *out,
225                                 size_t blocks,
226                                 const void *key,
227                                 const unsigned char ivec[16],
228                                 unsigned char cmac[16]);
229
230 # if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
231 size_t aesni_gcm_encrypt(const unsigned char *in,
232                          unsigned char *out,
233                          size_t len,
234                          const void *key, unsigned char ivec[16], u64 *Xi);
235 #  define AES_gcm_encrypt aesni_gcm_encrypt
236 size_t aesni_gcm_decrypt(const unsigned char *in,
237                          unsigned char *out,
238                          size_t len,
239                          const void *key, unsigned char ivec[16], u64 *Xi);
240 #  define AES_gcm_decrypt aesni_gcm_decrypt
241 void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in,
242                    size_t len);
243 #  define AES_GCM_ASM(gctx)       (gctx->ctr==aesni_ctr32_encrypt_blocks && \
244                                  gctx->gcm.ghash==gcm_ghash_avx)
245 #  define AES_GCM_ASM2(gctx)      (gctx->gcm.block==(block128_f)aesni_encrypt && \
246                                  gctx->gcm.ghash==gcm_ghash_avx)
247 #  undef AES_GCM_ASM2          /* minor size optimization */
248 # endif
249
250 static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
251                           const unsigned char *iv, int enc)
252 {
253     int ret, mode;
254     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
255
256     mode = EVP_CIPHER_CTX_mode(ctx);
257     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
258         && !enc) {
259         ret = aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
260                                     &dat->ks.ks);
261         dat->block = (block128_f) aesni_decrypt;
262         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
263             (cbc128_f) aesni_cbc_encrypt : NULL;
264     } else {
265         ret = aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
266                                     &dat->ks.ks);
267         dat->block = (block128_f) aesni_encrypt;
268         if (mode == EVP_CIPH_CBC_MODE)
269             dat->stream.cbc = (cbc128_f) aesni_cbc_encrypt;
270         else if (mode == EVP_CIPH_CTR_MODE)
271             dat->stream.ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
272         else
273             dat->stream.cbc = NULL;
274     }
275
276     if (ret < 0) {
277         EVPerr(EVP_F_AESNI_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
278         return 0;
279     }
280
281     return 1;
282 }
283
284 static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
285                             const unsigned char *in, size_t len)
286 {
287     aesni_cbc_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
288                       EVP_CIPHER_CTX_iv_noconst(ctx),
289                       EVP_CIPHER_CTX_encrypting(ctx));
290
291     return 1;
292 }
293
294 static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
295                             const unsigned char *in, size_t len)
296 {
297     size_t bl = EVP_CIPHER_CTX_block_size(ctx);
298
299     if (len < bl)
300         return 1;
301
302     aesni_ecb_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
303                       EVP_CIPHER_CTX_encrypting(ctx));
304
305     return 1;
306 }
307
308 # define aesni_ofb_cipher aes_ofb_cipher
309 static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
310                             const unsigned char *in, size_t len);
311
312 # define aesni_cfb_cipher aes_cfb_cipher
313 static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
314                             const unsigned char *in, size_t len);
315
316 # define aesni_cfb8_cipher aes_cfb8_cipher
317 static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
318                              const unsigned char *in, size_t len);
319
320 # define aesni_cfb1_cipher aes_cfb1_cipher
321 static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
322                              const unsigned char *in, size_t len);
323
324 # define aesni_ctr_cipher aes_ctr_cipher
325 static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
326                             const unsigned char *in, size_t len);
327
328 static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
329                               const unsigned char *iv, int enc)
330 {
331     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
332     if (!iv && !key)
333         return 1;
334     if (key) {
335         aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
336                               &gctx->ks.ks);
337         CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f) aesni_encrypt);
338         gctx->ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
339         /*
340          * If we have an iv can set it directly, otherwise use saved IV.
341          */
342         if (iv == NULL && gctx->iv_set)
343             iv = gctx->iv;
344         if (iv) {
345             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
346             gctx->iv_set = 1;
347         }
348         gctx->key_set = 1;
349     } else {
350         /* If key set use IV, otherwise copy */
351         if (gctx->key_set)
352             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
353         else
354             memcpy(gctx->iv, iv, gctx->ivlen);
355         gctx->iv_set = 1;
356         gctx->iv_gen = 0;
357     }
358     return 1;
359 }
360
361 # define aesni_gcm_cipher aes_gcm_cipher
362 static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
363                             const unsigned char *in, size_t len);
364
365 static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
366                               const unsigned char *iv, int enc)
367 {
368     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
369     if (!iv && !key)
370         return 1;
371
372     if (key) {
373         /* key_len is two AES keys */
374         if (enc) {
375             aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
376                                   &xctx->ks1.ks);
377             xctx->xts.block1 = (block128_f) aesni_encrypt;
378             xctx->stream = aesni_xts_encrypt;
379         } else {
380             aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
381                                   &xctx->ks1.ks);
382             xctx->xts.block1 = (block128_f) aesni_decrypt;
383             xctx->stream = aesni_xts_decrypt;
384         }
385
386         aesni_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
387                               EVP_CIPHER_CTX_key_length(ctx) * 4,
388                               &xctx->ks2.ks);
389         xctx->xts.block2 = (block128_f) aesni_encrypt;
390
391         xctx->xts.key1 = &xctx->ks1;
392     }
393
394     if (iv) {
395         xctx->xts.key2 = &xctx->ks2;
396         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
397     }
398
399     return 1;
400 }
401
402 # define aesni_xts_cipher aes_xts_cipher
403 static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
404                             const unsigned char *in, size_t len);
405
406 static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
407                               const unsigned char *iv, int enc)
408 {
409     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
410     if (!iv && !key)
411         return 1;
412     if (key) {
413         aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
414                               &cctx->ks.ks);
415         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
416                            &cctx->ks, (block128_f) aesni_encrypt);
417         cctx->str = enc ? (ccm128_f) aesni_ccm64_encrypt_blocks :
418             (ccm128_f) aesni_ccm64_decrypt_blocks;
419         cctx->key_set = 1;
420     }
421     if (iv) {
422         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
423         cctx->iv_set = 1;
424     }
425     return 1;
426 }
427
428 # define aesni_ccm_cipher aes_ccm_cipher
429 static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
430                             const unsigned char *in, size_t len);
431
432 # ifndef OPENSSL_NO_OCB
433 void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out,
434                        size_t blocks, const void *key,
435                        size_t start_block_num,
436                        unsigned char offset_i[16],
437                        const unsigned char L_[][16],
438                        unsigned char checksum[16]);
439 void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out,
440                        size_t blocks, const void *key,
441                        size_t start_block_num,
442                        unsigned char offset_i[16],
443                        const unsigned char L_[][16],
444                        unsigned char checksum[16]);
445
446 static int aesni_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
447                               const unsigned char *iv, int enc)
448 {
449     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
450     if (!iv && !key)
451         return 1;
452     if (key) {
453         do {
454             /*
455              * We set both the encrypt and decrypt key here because decrypt
456              * needs both. We could possibly optimise to remove setting the
457              * decrypt for an encryption operation.
458              */
459             aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
460                                   &octx->ksenc.ks);
461             aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
462                                   &octx->ksdec.ks);
463             if (!CRYPTO_ocb128_init(&octx->ocb,
464                                     &octx->ksenc.ks, &octx->ksdec.ks,
465                                     (block128_f) aesni_encrypt,
466                                     (block128_f) aesni_decrypt,
467                                     enc ? aesni_ocb_encrypt
468                                         : aesni_ocb_decrypt))
469                 return 0;
470         }
471         while (0);
472
473         /*
474          * If we have an iv we can set it directly, otherwise use saved IV.
475          */
476         if (iv == NULL && octx->iv_set)
477             iv = octx->iv;
478         if (iv) {
479             if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
480                 != 1)
481                 return 0;
482             octx->iv_set = 1;
483         }
484         octx->key_set = 1;
485     } else {
486         /* If key set use IV, otherwise copy */
487         if (octx->key_set)
488             CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
489         else
490             memcpy(octx->iv, iv, octx->ivlen);
491         octx->iv_set = 1;
492     }
493     return 1;
494 }
495
496 #  define aesni_ocb_cipher aes_ocb_cipher
497 static int aesni_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
498                             const unsigned char *in, size_t len);
499 # endif                        /* OPENSSL_NO_OCB */
500
501 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
502 static const EVP_CIPHER aesni_##keylen##_##mode = { \
503         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
504         flags|EVP_CIPH_##MODE##_MODE,   \
505         aesni_init_key,                 \
506         aesni_##mode##_cipher,          \
507         NULL,                           \
508         sizeof(EVP_AES_KEY),            \
509         NULL,NULL,NULL,NULL }; \
510 static const EVP_CIPHER aes_##keylen##_##mode = { \
511         nid##_##keylen##_##nmode,blocksize,     \
512         keylen/8,ivlen, \
513         flags|EVP_CIPH_##MODE##_MODE,   \
514         aes_init_key,                   \
515         aes_##mode##_cipher,            \
516         NULL,                           \
517         sizeof(EVP_AES_KEY),            \
518         NULL,NULL,NULL,NULL }; \
519 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
520 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
521
522 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
523 static const EVP_CIPHER aesni_##keylen##_##mode = { \
524         nid##_##keylen##_##mode,blocksize, \
525         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
526         flags|EVP_CIPH_##MODE##_MODE,   \
527         aesni_##mode##_init_key,        \
528         aesni_##mode##_cipher,          \
529         aes_##mode##_cleanup,           \
530         sizeof(EVP_AES_##MODE##_CTX),   \
531         NULL,NULL,aes_##mode##_ctrl,NULL }; \
532 static const EVP_CIPHER aes_##keylen##_##mode = { \
533         nid##_##keylen##_##mode,blocksize, \
534         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
535         flags|EVP_CIPH_##MODE##_MODE,   \
536         aes_##mode##_init_key,          \
537         aes_##mode##_cipher,            \
538         aes_##mode##_cleanup,           \
539         sizeof(EVP_AES_##MODE##_CTX),   \
540         NULL,NULL,aes_##mode##_ctrl,NULL }; \
541 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
542 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
543
544 #elif   defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
545
546 # include "sparc_arch.h"
547
548 extern unsigned int OPENSSL_sparcv9cap_P[];
549
550 /*
551  * Initial Fujitsu SPARC64 X support
552  */
553 # define HWAES_CAPABLE           (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX)
554 # define HWAES_set_encrypt_key aes_fx_set_encrypt_key
555 # define HWAES_set_decrypt_key aes_fx_set_decrypt_key
556 # define HWAES_encrypt aes_fx_encrypt
557 # define HWAES_decrypt aes_fx_decrypt
558 # define HWAES_cbc_encrypt aes_fx_cbc_encrypt
559 # define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks
560
561 # define SPARC_AES_CAPABLE       (OPENSSL_sparcv9cap_P[1] & CFR_AES)
562
563 void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
564 void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
565 void aes_t4_encrypt(const unsigned char *in, unsigned char *out,
566                     const AES_KEY *key);
567 void aes_t4_decrypt(const unsigned char *in, unsigned char *out,
568                     const AES_KEY *key);
569 /*
570  * Key-length specific subroutines were chosen for following reason.
571  * Each SPARC T4 core can execute up to 8 threads which share core's
572  * resources. Loading as much key material to registers allows to
573  * minimize references to shared memory interface, as well as amount
574  * of instructions in inner loops [much needed on T4]. But then having
575  * non-key-length specific routines would require conditional branches
576  * either in inner loops or on subroutines' entries. Former is hardly
577  * acceptable, while latter means code size increase to size occupied
578  * by multiple key-length specific subroutines, so why fight?
579  */
580 void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
581                            size_t len, const AES_KEY *key,
582                            unsigned char *ivec);
583 void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
584                            size_t len, const AES_KEY *key,
585                            unsigned char *ivec);
586 void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
587                            size_t len, const AES_KEY *key,
588                            unsigned char *ivec);
589 void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
590                            size_t len, const AES_KEY *key,
591                            unsigned char *ivec);
592 void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
593                            size_t len, const AES_KEY *key,
594                            unsigned char *ivec);
595 void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
596                            size_t len, const AES_KEY *key,
597                            unsigned char *ivec);
598 void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
599                              size_t blocks, const AES_KEY *key,
600                              unsigned char *ivec);
601 void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
602                              size_t blocks, const AES_KEY *key,
603                              unsigned char *ivec);
604 void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
605                              size_t blocks, const AES_KEY *key,
606                              unsigned char *ivec);
607 void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
608                            size_t blocks, const AES_KEY *key1,
609                            const AES_KEY *key2, const unsigned char *ivec);
610 void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
611                            size_t blocks, const AES_KEY *key1,
612                            const AES_KEY *key2, const unsigned char *ivec);
613 void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
614                            size_t blocks, const AES_KEY *key1,
615                            const AES_KEY *key2, const unsigned char *ivec);
616 void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
617                            size_t blocks, const AES_KEY *key1,
618                            const AES_KEY *key2, const unsigned char *ivec);
619
620 static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
621                            const unsigned char *iv, int enc)
622 {
623     int ret, mode, bits;
624     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
625
626     mode = EVP_CIPHER_CTX_mode(ctx);
627     bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
628     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
629         && !enc) {
630         ret = 0;
631         aes_t4_set_decrypt_key(key, bits, &dat->ks.ks);
632         dat->block = (block128_f) aes_t4_decrypt;
633         switch (bits) {
634         case 128:
635             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
636                 (cbc128_f) aes128_t4_cbc_decrypt : NULL;
637             break;
638         case 192:
639             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
640                 (cbc128_f) aes192_t4_cbc_decrypt : NULL;
641             break;
642         case 256:
643             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
644                 (cbc128_f) aes256_t4_cbc_decrypt : NULL;
645             break;
646         default:
647             ret = -1;
648         }
649     } else {
650         ret = 0;
651         aes_t4_set_encrypt_key(key, bits, &dat->ks.ks);
652         dat->block = (block128_f) aes_t4_encrypt;
653         switch (bits) {
654         case 128:
655             if (mode == EVP_CIPH_CBC_MODE)
656                 dat->stream.cbc = (cbc128_f) aes128_t4_cbc_encrypt;
657             else if (mode == EVP_CIPH_CTR_MODE)
658                 dat->stream.ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
659             else
660                 dat->stream.cbc = NULL;
661             break;
662         case 192:
663             if (mode == EVP_CIPH_CBC_MODE)
664                 dat->stream.cbc = (cbc128_f) aes192_t4_cbc_encrypt;
665             else if (mode == EVP_CIPH_CTR_MODE)
666                 dat->stream.ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
667             else
668                 dat->stream.cbc = NULL;
669             break;
670         case 256:
671             if (mode == EVP_CIPH_CBC_MODE)
672                 dat->stream.cbc = (cbc128_f) aes256_t4_cbc_encrypt;
673             else if (mode == EVP_CIPH_CTR_MODE)
674                 dat->stream.ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
675             else
676                 dat->stream.cbc = NULL;
677             break;
678         default:
679             ret = -1;
680         }
681     }
682
683     if (ret < 0) {
684         EVPerr(EVP_F_AES_T4_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
685         return 0;
686     }
687
688     return 1;
689 }
690
691 # define aes_t4_cbc_cipher aes_cbc_cipher
692 static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
693                              const unsigned char *in, size_t len);
694
695 # define aes_t4_ecb_cipher aes_ecb_cipher
696 static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
697                              const unsigned char *in, size_t len);
698
699 # define aes_t4_ofb_cipher aes_ofb_cipher
700 static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
701                              const unsigned char *in, size_t len);
702
703 # define aes_t4_cfb_cipher aes_cfb_cipher
704 static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
705                              const unsigned char *in, size_t len);
706
707 # define aes_t4_cfb8_cipher aes_cfb8_cipher
708 static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
709                               const unsigned char *in, size_t len);
710
711 # define aes_t4_cfb1_cipher aes_cfb1_cipher
712 static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
713                               const unsigned char *in, size_t len);
714
715 # define aes_t4_ctr_cipher aes_ctr_cipher
716 static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
717                              const unsigned char *in, size_t len);
718
719 static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
720                                const unsigned char *iv, int enc)
721 {
722     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
723     if (!iv && !key)
724         return 1;
725     if (key) {
726         int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
727         aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks);
728         CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
729                            (block128_f) aes_t4_encrypt);
730         switch (bits) {
731         case 128:
732             gctx->ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
733             break;
734         case 192:
735             gctx->ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
736             break;
737         case 256:
738             gctx->ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
739             break;
740         default:
741             return 0;
742         }
743         /*
744          * If we have an iv can set it directly, otherwise use saved IV.
745          */
746         if (iv == NULL && gctx->iv_set)
747             iv = gctx->iv;
748         if (iv) {
749             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
750             gctx->iv_set = 1;
751         }
752         gctx->key_set = 1;
753     } else {
754         /* If key set use IV, otherwise copy */
755         if (gctx->key_set)
756             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
757         else
758             memcpy(gctx->iv, iv, gctx->ivlen);
759         gctx->iv_set = 1;
760         gctx->iv_gen = 0;
761     }
762     return 1;
763 }
764
765 # define aes_t4_gcm_cipher aes_gcm_cipher
766 static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
767                              const unsigned char *in, size_t len);
768
769 static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
770                                const unsigned char *iv, int enc)
771 {
772     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
773     if (!iv && !key)
774         return 1;
775
776     if (key) {
777         int bits = EVP_CIPHER_CTX_key_length(ctx) * 4;
778         xctx->stream = NULL;
779         /* key_len is two AES keys */
780         if (enc) {
781             aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks);
782             xctx->xts.block1 = (block128_f) aes_t4_encrypt;
783             switch (bits) {
784             case 128:
785                 xctx->stream = aes128_t4_xts_encrypt;
786                 break;
787             case 256:
788                 xctx->stream = aes256_t4_xts_encrypt;
789                 break;
790             default:
791                 return 0;
792             }
793         } else {
794             aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
795                                    &xctx->ks1.ks);
796             xctx->xts.block1 = (block128_f) aes_t4_decrypt;
797             switch (bits) {
798             case 128:
799                 xctx->stream = aes128_t4_xts_decrypt;
800                 break;
801             case 256:
802                 xctx->stream = aes256_t4_xts_decrypt;
803                 break;
804             default:
805                 return 0;
806             }
807         }
808
809         aes_t4_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
810                                EVP_CIPHER_CTX_key_length(ctx) * 4,
811                                &xctx->ks2.ks);
812         xctx->xts.block2 = (block128_f) aes_t4_encrypt;
813
814         xctx->xts.key1 = &xctx->ks1;
815     }
816
817     if (iv) {
818         xctx->xts.key2 = &xctx->ks2;
819         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
820     }
821
822     return 1;
823 }
824
825 # define aes_t4_xts_cipher aes_xts_cipher
826 static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
827                              const unsigned char *in, size_t len);
828
829 static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
830                                const unsigned char *iv, int enc)
831 {
832     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
833     if (!iv && !key)
834         return 1;
835     if (key) {
836         int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
837         aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks);
838         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
839                            &cctx->ks, (block128_f) aes_t4_encrypt);
840         cctx->str = NULL;
841         cctx->key_set = 1;
842     }
843     if (iv) {
844         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
845         cctx->iv_set = 1;
846     }
847     return 1;
848 }
849
850 # define aes_t4_ccm_cipher aes_ccm_cipher
851 static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
852                              const unsigned char *in, size_t len);
853
854 # ifndef OPENSSL_NO_OCB
855 static int aes_t4_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
856                                const unsigned char *iv, int enc)
857 {
858     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
859     if (!iv && !key)
860         return 1;
861     if (key) {
862         do {
863             /*
864              * We set both the encrypt and decrypt key here because decrypt
865              * needs both. We could possibly optimise to remove setting the
866              * decrypt for an encryption operation.
867              */
868             aes_t4_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
869                                    &octx->ksenc.ks);
870             aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
871                                    &octx->ksdec.ks);
872             if (!CRYPTO_ocb128_init(&octx->ocb,
873                                     &octx->ksenc.ks, &octx->ksdec.ks,
874                                     (block128_f) aes_t4_encrypt,
875                                     (block128_f) aes_t4_decrypt,
876                                     NULL))
877                 return 0;
878         }
879         while (0);
880
881         /*
882          * If we have an iv we can set it directly, otherwise use saved IV.
883          */
884         if (iv == NULL && octx->iv_set)
885             iv = octx->iv;
886         if (iv) {
887             if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
888                 != 1)
889                 return 0;
890             octx->iv_set = 1;
891         }
892         octx->key_set = 1;
893     } else {
894         /* If key set use IV, otherwise copy */
895         if (octx->key_set)
896             CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
897         else
898             memcpy(octx->iv, iv, octx->ivlen);
899         octx->iv_set = 1;
900     }
901     return 1;
902 }
903
904 #  define aes_t4_ocb_cipher aes_ocb_cipher
905 static int aes_t4_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
906                              const unsigned char *in, size_t len);
907 # endif                        /* OPENSSL_NO_OCB */
908
909 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
910 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
911         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
912         flags|EVP_CIPH_##MODE##_MODE,   \
913         aes_t4_init_key,                \
914         aes_t4_##mode##_cipher,         \
915         NULL,                           \
916         sizeof(EVP_AES_KEY),            \
917         NULL,NULL,NULL,NULL }; \
918 static const EVP_CIPHER aes_##keylen##_##mode = { \
919         nid##_##keylen##_##nmode,blocksize,     \
920         keylen/8,ivlen, \
921         flags|EVP_CIPH_##MODE##_MODE,   \
922         aes_init_key,                   \
923         aes_##mode##_cipher,            \
924         NULL,                           \
925         sizeof(EVP_AES_KEY),            \
926         NULL,NULL,NULL,NULL }; \
927 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
928 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
929
930 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
931 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
932         nid##_##keylen##_##mode,blocksize, \
933         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
934         flags|EVP_CIPH_##MODE##_MODE,   \
935         aes_t4_##mode##_init_key,       \
936         aes_t4_##mode##_cipher,         \
937         aes_##mode##_cleanup,           \
938         sizeof(EVP_AES_##MODE##_CTX),   \
939         NULL,NULL,aes_##mode##_ctrl,NULL }; \
940 static const EVP_CIPHER aes_##keylen##_##mode = { \
941         nid##_##keylen##_##mode,blocksize, \
942         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
943         flags|EVP_CIPH_##MODE##_MODE,   \
944         aes_##mode##_init_key,          \
945         aes_##mode##_cipher,            \
946         aes_##mode##_cleanup,           \
947         sizeof(EVP_AES_##MODE##_CTX),   \
948         NULL,NULL,aes_##mode##_ctrl,NULL }; \
949 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
950 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
951
952 #else
953
954 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
955 static const EVP_CIPHER aes_##keylen##_##mode = { \
956         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
957         flags|EVP_CIPH_##MODE##_MODE,   \
958         aes_init_key,                   \
959         aes_##mode##_cipher,            \
960         NULL,                           \
961         sizeof(EVP_AES_KEY),            \
962         NULL,NULL,NULL,NULL }; \
963 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
964 { return &aes_##keylen##_##mode; }
965
966 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
967 static const EVP_CIPHER aes_##keylen##_##mode = { \
968         nid##_##keylen##_##mode,blocksize, \
969         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
970         flags|EVP_CIPH_##MODE##_MODE,   \
971         aes_##mode##_init_key,          \
972         aes_##mode##_cipher,            \
973         aes_##mode##_cleanup,           \
974         sizeof(EVP_AES_##MODE##_CTX),   \
975         NULL,NULL,aes_##mode##_ctrl,NULL }; \
976 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
977 { return &aes_##keylen##_##mode; }
978
979 #endif
980
981 #if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
982 # include "arm_arch.h"
983 # if __ARM_MAX_ARCH__>=7
984 #  if defined(BSAES_ASM)
985 #   define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
986 #  endif
987 #  if defined(VPAES_ASM)
988 #   define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
989 #  endif
990 #  define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
991 #  define HWAES_set_encrypt_key aes_v8_set_encrypt_key
992 #  define HWAES_set_decrypt_key aes_v8_set_decrypt_key
993 #  define HWAES_encrypt aes_v8_encrypt
994 #  define HWAES_decrypt aes_v8_decrypt
995 #  define HWAES_cbc_encrypt aes_v8_cbc_encrypt
996 #  define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
997 # endif
998 #endif
999
1000 #if defined(HWAES_CAPABLE)
1001 int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
1002                           AES_KEY *key);
1003 int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
1004                           AES_KEY *key);
1005 void HWAES_encrypt(const unsigned char *in, unsigned char *out,
1006                    const AES_KEY *key);
1007 void HWAES_decrypt(const unsigned char *in, unsigned char *out,
1008                    const AES_KEY *key);
1009 void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
1010                        size_t length, const AES_KEY *key,
1011                        unsigned char *ivec, const int enc);
1012 void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
1013                                 size_t len, const AES_KEY *key,
1014                                 const unsigned char ivec[16]);
1015 void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out,
1016                        size_t len, const AES_KEY *key1,
1017                        const AES_KEY *key2, const unsigned char iv[16]);
1018 void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out,
1019                        size_t len, const AES_KEY *key1,
1020                        const AES_KEY *key2, const unsigned char iv[16]);
1021 #endif
1022
1023 #define BLOCK_CIPHER_generic_pack(nid,keylen,flags)             \
1024         BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)     \
1025         BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)      \
1026         BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
1027         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
1028         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags)       \
1029         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags)       \
1030         BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
1031
1032 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1033                         const unsigned char *iv, int enc)
1034 {
1035     int ret, mode;
1036     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1037
1038     mode = EVP_CIPHER_CTX_mode(ctx);
1039     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
1040         && !enc) {
1041 #ifdef HWAES_CAPABLE
1042         if (HWAES_CAPABLE) {
1043             ret = HWAES_set_decrypt_key(key,
1044                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
1045                                         &dat->ks.ks);
1046             dat->block = (block128_f) HWAES_decrypt;
1047             dat->stream.cbc = NULL;
1048 # ifdef HWAES_cbc_encrypt
1049             if (mode == EVP_CIPH_CBC_MODE)
1050                 dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
1051 # endif
1052         } else
1053 #endif
1054 #ifdef BSAES_CAPABLE
1055         if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
1056             ret = AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1057                                       &dat->ks.ks);
1058             dat->block = (block128_f) AES_decrypt;
1059             dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
1060         } else
1061 #endif
1062 #ifdef VPAES_CAPABLE
1063         if (VPAES_CAPABLE) {
1064             ret = vpaes_set_decrypt_key(key,
1065                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
1066                                         &dat->ks.ks);
1067             dat->block = (block128_f) vpaes_decrypt;
1068             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
1069                 (cbc128_f) vpaes_cbc_encrypt : NULL;
1070         } else
1071 #endif
1072         {
1073             ret = AES_set_decrypt_key(key,
1074                                       EVP_CIPHER_CTX_key_length(ctx) * 8,
1075                                       &dat->ks.ks);
1076             dat->block = (block128_f) AES_decrypt;
1077             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
1078                 (cbc128_f) AES_cbc_encrypt : NULL;
1079         }
1080     } else
1081 #ifdef HWAES_CAPABLE
1082     if (HWAES_CAPABLE) {
1083         ret = HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1084                                     &dat->ks.ks);
1085         dat->block = (block128_f) HWAES_encrypt;
1086         dat->stream.cbc = NULL;
1087 # ifdef HWAES_cbc_encrypt
1088         if (mode == EVP_CIPH_CBC_MODE)
1089             dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
1090         else
1091 # endif
1092 # ifdef HWAES_ctr32_encrypt_blocks
1093         if (mode == EVP_CIPH_CTR_MODE)
1094             dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
1095         else
1096 # endif
1097             (void)0;            /* terminate potentially open 'else' */
1098     } else
1099 #endif
1100 #ifdef BSAES_CAPABLE
1101     if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
1102         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1103                                   &dat->ks.ks);
1104         dat->block = (block128_f) AES_encrypt;
1105         dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
1106     } else
1107 #endif
1108 #ifdef VPAES_CAPABLE
1109     if (VPAES_CAPABLE) {
1110         ret = vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1111                                     &dat->ks.ks);
1112         dat->block = (block128_f) vpaes_encrypt;
1113         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
1114             (cbc128_f) vpaes_cbc_encrypt : NULL;
1115     } else
1116 #endif
1117     {
1118         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1119                                   &dat->ks.ks);
1120         dat->block = (block128_f) AES_encrypt;
1121         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
1122             (cbc128_f) AES_cbc_encrypt : NULL;
1123 #ifdef AES_CTR_ASM
1124         if (mode == EVP_CIPH_CTR_MODE)
1125             dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
1126 #endif
1127     }
1128
1129     if (ret < 0) {
1130         EVPerr(EVP_F_AES_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
1131         return 0;
1132     }
1133
1134     return 1;
1135 }
1136
1137 static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1138                           const unsigned char *in, size_t len)
1139 {
1140     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1141
1142     if (dat->stream.cbc)
1143         (*dat->stream.cbc) (in, out, len, &dat->ks,
1144                             EVP_CIPHER_CTX_iv_noconst(ctx),
1145                             EVP_CIPHER_CTX_encrypting(ctx));
1146     else if (EVP_CIPHER_CTX_encrypting(ctx))
1147         CRYPTO_cbc128_encrypt(in, out, len, &dat->ks,
1148                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
1149     else
1150         CRYPTO_cbc128_decrypt(in, out, len, &dat->ks,
1151                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
1152
1153     return 1;
1154 }
1155
1156 static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1157                           const unsigned char *in, size_t len)
1158 {
1159     size_t bl = EVP_CIPHER_CTX_block_size(ctx);
1160     size_t i;
1161     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1162
1163     if (len < bl)
1164         return 1;
1165
1166     for (i = 0, len -= bl; i <= len; i += bl)
1167         (*dat->block) (in + i, out + i, &dat->ks);
1168
1169     return 1;
1170 }
1171
1172 static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1173                           const unsigned char *in, size_t len)
1174 {
1175     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1176
1177     int num = EVP_CIPHER_CTX_num(ctx);
1178     CRYPTO_ofb128_encrypt(in, out, len, &dat->ks,
1179                           EVP_CIPHER_CTX_iv_noconst(ctx), &num, dat->block);
1180     EVP_CIPHER_CTX_set_num(ctx, num);
1181     return 1;
1182 }
1183
1184 static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1185                           const unsigned char *in, size_t len)
1186 {
1187     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1188
1189     int num = EVP_CIPHER_CTX_num(ctx);
1190     CRYPTO_cfb128_encrypt(in, out, len, &dat->ks,
1191                           EVP_CIPHER_CTX_iv_noconst(ctx), &num,
1192                           EVP_CIPHER_CTX_encrypting(ctx), dat->block);
1193     EVP_CIPHER_CTX_set_num(ctx, num);
1194     return 1;
1195 }
1196
1197 static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1198                            const unsigned char *in, size_t len)
1199 {
1200     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1201
1202     int num = EVP_CIPHER_CTX_num(ctx);
1203     CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks,
1204                             EVP_CIPHER_CTX_iv_noconst(ctx), &num,
1205                             EVP_CIPHER_CTX_encrypting(ctx), dat->block);
1206     EVP_CIPHER_CTX_set_num(ctx, num);
1207     return 1;
1208 }
1209
1210 static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1211                            const unsigned char *in, size_t len)
1212 {
1213     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1214
1215     if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS)) {
1216         int num = EVP_CIPHER_CTX_num(ctx);
1217         CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks,
1218                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
1219                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
1220         EVP_CIPHER_CTX_set_num(ctx, num);
1221         return 1;
1222     }
1223
1224     while (len >= MAXBITCHUNK) {
1225         int num = EVP_CIPHER_CTX_num(ctx);
1226         CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks,
1227                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
1228                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
1229         EVP_CIPHER_CTX_set_num(ctx, num);
1230         len -= MAXBITCHUNK;
1231     }
1232     if (len) {
1233         int num = EVP_CIPHER_CTX_num(ctx);
1234         CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks,
1235                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
1236                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
1237         EVP_CIPHER_CTX_set_num(ctx, num);
1238     }
1239
1240     return 1;
1241 }
1242
1243 static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1244                           const unsigned char *in, size_t len)
1245 {
1246     unsigned int num = EVP_CIPHER_CTX_num(ctx);
1247     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
1248
1249     if (dat->stream.ctr)
1250         CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
1251                                     EVP_CIPHER_CTX_iv_noconst(ctx),
1252                                     EVP_CIPHER_CTX_buf_noconst(ctx),
1253                                     &num, dat->stream.ctr);
1254     else
1255         CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
1256                               EVP_CIPHER_CTX_iv_noconst(ctx),
1257                               EVP_CIPHER_CTX_buf_noconst(ctx), &num,
1258                               dat->block);
1259     EVP_CIPHER_CTX_set_num(ctx, num);
1260     return 1;
1261 }
1262
1263 BLOCK_CIPHER_generic_pack(NID_aes, 128, 0)
1264     BLOCK_CIPHER_generic_pack(NID_aes, 192, 0)
1265     BLOCK_CIPHER_generic_pack(NID_aes, 256, 0)
1266
1267 static int aes_gcm_cleanup(EVP_CIPHER_CTX *c)
1268 {
1269     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
1270     OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm));
1271     if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
1272         OPENSSL_free(gctx->iv);
1273     return 1;
1274 }
1275
1276 /* increment counter (64-bit int) by 1 */
1277 static void ctr64_inc(unsigned char *counter)
1278 {
1279     int n = 8;
1280     unsigned char c;
1281
1282     do {
1283         --n;
1284         c = counter[n];
1285         ++c;
1286         counter[n] = c;
1287         if (c)
1288             return;
1289     } while (n);
1290 }
1291
1292 static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1293 {
1294     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
1295     switch (type) {
1296     case EVP_CTRL_INIT:
1297         gctx->key_set = 0;
1298         gctx->iv_set = 0;
1299         gctx->ivlen = EVP_CIPHER_CTX_iv_length(c);
1300         gctx->iv = EVP_CIPHER_CTX_iv_noconst(c);
1301         gctx->taglen = -1;
1302         gctx->iv_gen = 0;
1303         gctx->tls_aad_len = -1;
1304         return 1;
1305
1306     case EVP_CTRL_AEAD_SET_IVLEN:
1307         if (arg <= 0)
1308             return 0;
1309         /* Allocate memory for IV if needed */
1310         if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) {
1311             if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
1312                 OPENSSL_free(gctx->iv);
1313             gctx->iv = OPENSSL_malloc(arg);
1314             if (gctx->iv == NULL)
1315                 return 0;
1316         }
1317         gctx->ivlen = arg;
1318         return 1;
1319
1320     case EVP_CTRL_AEAD_SET_TAG:
1321         if (arg <= 0 || arg > 16 || EVP_CIPHER_CTX_encrypting(c))
1322             return 0;
1323         memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
1324         gctx->taglen = arg;
1325         return 1;
1326
1327     case EVP_CTRL_AEAD_GET_TAG:
1328         if (arg <= 0 || arg > 16 || !EVP_CIPHER_CTX_encrypting(c)
1329             || gctx->taglen < 0)
1330             return 0;
1331         memcpy(ptr, EVP_CIPHER_CTX_buf_noconst(c), arg);
1332         return 1;
1333
1334     case EVP_CTRL_GCM_SET_IV_FIXED:
1335         /* Special case: -1 length restores whole IV */
1336         if (arg == -1) {
1337             memcpy(gctx->iv, ptr, gctx->ivlen);
1338             gctx->iv_gen = 1;
1339             return 1;
1340         }
1341         /*
1342          * Fixed field must be at least 4 bytes and invocation field at least
1343          * 8.
1344          */
1345         if ((arg < 4) || (gctx->ivlen - arg) < 8)
1346             return 0;
1347         if (arg)
1348             memcpy(gctx->iv, ptr, arg);
1349         if (EVP_CIPHER_CTX_encrypting(c)
1350             && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
1351             return 0;
1352         gctx->iv_gen = 1;
1353         return 1;
1354
1355     case EVP_CTRL_GCM_IV_GEN:
1356         if (gctx->iv_gen == 0 || gctx->key_set == 0)
1357             return 0;
1358         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
1359         if (arg <= 0 || arg > gctx->ivlen)
1360             arg = gctx->ivlen;
1361         memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
1362         /*
1363          * Invocation field will be at least 8 bytes in size and so no need
1364          * to check wrap around or increment more than last 8 bytes.
1365          */
1366         ctr64_inc(gctx->iv + gctx->ivlen - 8);
1367         gctx->iv_set = 1;
1368         return 1;
1369
1370     case EVP_CTRL_GCM_SET_IV_INV:
1371         if (gctx->iv_gen == 0 || gctx->key_set == 0
1372             || EVP_CIPHER_CTX_encrypting(c))
1373             return 0;
1374         memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
1375         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
1376         gctx->iv_set = 1;
1377         return 1;
1378
1379     case EVP_CTRL_AEAD_TLS1_AAD:
1380         /* Save the AAD for later use */
1381         if (arg != EVP_AEAD_TLS1_AAD_LEN)
1382             return 0;
1383         memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
1384         gctx->tls_aad_len = arg;
1385         {
1386             unsigned int len =
1387                 EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8
1388                 | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1];
1389             /* Correct length for explicit IV */
1390             len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
1391             /* If decrypting correct for tag too */
1392             if (!EVP_CIPHER_CTX_encrypting(c))
1393                 len -= EVP_GCM_TLS_TAG_LEN;
1394             EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8;
1395             EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff;
1396         }
1397         /* Extra padding: tag appended to record */
1398         return EVP_GCM_TLS_TAG_LEN;
1399
1400     case EVP_CTRL_COPY:
1401         {
1402             EVP_CIPHER_CTX *out = ptr;
1403             EVP_AES_GCM_CTX *gctx_out = EVP_C_DATA(EVP_AES_GCM_CTX,out);
1404             if (gctx->gcm.key) {
1405                 if (gctx->gcm.key != &gctx->ks)
1406                     return 0;
1407                 gctx_out->gcm.key = &gctx_out->ks;
1408             }
1409             if (gctx->iv == EVP_CIPHER_CTX_iv_noconst(c))
1410                 gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out);
1411             else {
1412                 gctx_out->iv = OPENSSL_malloc(gctx->ivlen);
1413                 if (gctx_out->iv == NULL)
1414                     return 0;
1415                 memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
1416             }
1417             return 1;
1418         }
1419
1420     default:
1421         return -1;
1422
1423     }
1424 }
1425
1426 static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1427                             const unsigned char *iv, int enc)
1428 {
1429     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
1430     if (!iv && !key)
1431         return 1;
1432     if (key) {
1433         do {
1434 #ifdef HWAES_CAPABLE
1435             if (HWAES_CAPABLE) {
1436                 HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1437                                       &gctx->ks.ks);
1438                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
1439                                    (block128_f) HWAES_encrypt);
1440 # ifdef HWAES_ctr32_encrypt_blocks
1441                 gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
1442 # else
1443                 gctx->ctr = NULL;
1444 # endif
1445                 break;
1446             } else
1447 #endif
1448 #ifdef BSAES_CAPABLE
1449             if (BSAES_CAPABLE) {
1450                 AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1451                                     &gctx->ks.ks);
1452                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
1453                                    (block128_f) AES_encrypt);
1454                 gctx->ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
1455                 break;
1456             } else
1457 #endif
1458 #ifdef VPAES_CAPABLE
1459             if (VPAES_CAPABLE) {
1460                 vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1461                                       &gctx->ks.ks);
1462                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
1463                                    (block128_f) vpaes_encrypt);
1464                 gctx->ctr = NULL;
1465                 break;
1466             } else
1467 #endif
1468                 (void)0;        /* terminate potentially open 'else' */
1469
1470             AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
1471                                 &gctx->ks.ks);
1472             CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
1473                                (block128_f) AES_encrypt);
1474 #ifdef AES_CTR_ASM
1475             gctx->ctr = (ctr128_f) AES_ctr32_encrypt;
1476 #else
1477             gctx->ctr = NULL;
1478 #endif
1479         } while (0);
1480
1481         /*
1482          * If we have an iv can set it directly, otherwise use saved IV.
1483          */
1484         if (iv == NULL && gctx->iv_set)
1485             iv = gctx->iv;
1486         if (iv) {
1487             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
1488             gctx->iv_set = 1;
1489         }
1490         gctx->key_set = 1;
1491     } else {
1492         /* If key set use IV, otherwise copy */
1493         if (gctx->key_set)
1494             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
1495         else
1496             memcpy(gctx->iv, iv, gctx->ivlen);
1497         gctx->iv_set = 1;
1498         gctx->iv_gen = 0;
1499     }
1500     return 1;
1501 }
1502
1503 /*
1504  * Handle TLS GCM packet format. This consists of the last portion of the IV
1505  * followed by the payload and finally the tag. On encrypt generate IV,
1506  * encrypt payload and write the tag. On verify retrieve IV, decrypt payload
1507  * and verify tag.
1508  */
1509
1510 static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1511                               const unsigned char *in, size_t len)
1512 {
1513     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
1514     int rv = -1;
1515     /* Encrypt/decrypt must be performed in place */
1516     if (out != in
1517         || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
1518         return -1;
1519     /*
1520      * Set IV from start of buffer or generate IV and write to start of
1521      * buffer.
1522      */
1523     if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CIPHER_CTX_encrypting(ctx) ?
1524                             EVP_CTRL_GCM_IV_GEN : EVP_CTRL_GCM_SET_IV_INV,
1525                             EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
1526         goto err;
1527     /* Use saved AAD */
1528     if (CRYPTO_gcm128_aad(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx),
1529                           gctx->tls_aad_len))
1530         goto err;
1531     /* Fix buffer and length to point to payload */
1532     in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1533     out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1534     len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1535     if (EVP_CIPHER_CTX_encrypting(ctx)) {
1536         /* Encrypt payload */
1537         if (gctx->ctr) {
1538             size_t bulk = 0;
1539 #if defined(AES_GCM_ASM)
1540             if (len >= 32 && AES_GCM_ASM(gctx)) {
1541                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
1542                     return -1;
1543
1544                 bulk = AES_gcm_encrypt(in, out, len,
1545                                        gctx->gcm.key,
1546                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1547                 gctx->gcm.len.u[1] += bulk;
1548             }
1549 #endif
1550             if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
1551                                             in + bulk,
1552                                             out + bulk,
1553                                             len - bulk, gctx->ctr))
1554                 goto err;
1555         } else {
1556             size_t bulk = 0;
1557 #if defined(AES_GCM_ASM2)
1558             if (len >= 32 && AES_GCM_ASM2(gctx)) {
1559                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
1560                     return -1;
1561
1562                 bulk = AES_gcm_encrypt(in, out, len,
1563                                        gctx->gcm.key,
1564                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1565                 gctx->gcm.len.u[1] += bulk;
1566             }
1567 #endif
1568             if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1569                                       in + bulk, out + bulk, len - bulk))
1570                 goto err;
1571         }
1572         out += len;
1573         /* Finally write tag */
1574         CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN);
1575         rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1576     } else {
1577         /* Decrypt */
1578         if (gctx->ctr) {
1579             size_t bulk = 0;
1580 #if defined(AES_GCM_ASM)
1581             if (len >= 16 && AES_GCM_ASM(gctx)) {
1582                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
1583                     return -1;
1584
1585                 bulk = AES_gcm_decrypt(in, out, len,
1586                                        gctx->gcm.key,
1587                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1588                 gctx->gcm.len.u[1] += bulk;
1589             }
1590 #endif
1591             if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
1592                                             in + bulk,
1593                                             out + bulk,
1594                                             len - bulk, gctx->ctr))
1595                 goto err;
1596         } else {
1597             size_t bulk = 0;
1598 #if defined(AES_GCM_ASM2)
1599             if (len >= 16 && AES_GCM_ASM2(gctx)) {
1600                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
1601                     return -1;
1602
1603                 bulk = AES_gcm_decrypt(in, out, len,
1604                                        gctx->gcm.key,
1605                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1606                 gctx->gcm.len.u[1] += bulk;
1607             }
1608 #endif
1609             if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1610                                       in + bulk, out + bulk, len - bulk))
1611                 goto err;
1612         }
1613         /* Retrieve tag */
1614         CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx),
1615                           EVP_GCM_TLS_TAG_LEN);
1616         /* If tag mismatch wipe buffer */
1617         if (CRYPTO_memcmp(EVP_CIPHER_CTX_buf_noconst(ctx), in + len,
1618                           EVP_GCM_TLS_TAG_LEN)) {
1619             OPENSSL_cleanse(out, len);
1620             goto err;
1621         }
1622         rv = len;
1623     }
1624
1625  err:
1626     gctx->iv_set = 0;
1627     gctx->tls_aad_len = -1;
1628     return rv;
1629 }
1630
1631 static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1632                           const unsigned char *in, size_t len)
1633 {
1634     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
1635     /* If not set up, return error */
1636     if (!gctx->key_set)
1637         return -1;
1638
1639     if (gctx->tls_aad_len >= 0)
1640         return aes_gcm_tls_cipher(ctx, out, in, len);
1641
1642     if (!gctx->iv_set)
1643         return -1;
1644     if (in) {
1645         if (out == NULL) {
1646             if (CRYPTO_gcm128_aad(&gctx->gcm, in, len))
1647                 return -1;
1648         } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
1649             if (gctx->ctr) {
1650                 size_t bulk = 0;
1651 #if defined(AES_GCM_ASM)
1652                 if (len >= 32 && AES_GCM_ASM(gctx)) {
1653                     size_t res = (16 - gctx->gcm.mres) % 16;
1654
1655                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
1656                         return -1;
1657
1658                     bulk = AES_gcm_encrypt(in + res,
1659                                            out + res, len - res,
1660                                            gctx->gcm.key, 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_encrypt_ctr32(&gctx->gcm,
1667                                                 in + bulk,
1668                                                 out + bulk,
1669                                                 len - bulk, gctx->ctr))
1670                     return -1;
1671             } else {
1672                 size_t bulk = 0;
1673 #if defined(AES_GCM_ASM2)
1674                 if (len >= 32 && AES_GCM_ASM2(gctx)) {
1675                     size_t res = (16 - gctx->gcm.mres) % 16;
1676
1677                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
1678                         return -1;
1679
1680                     bulk = AES_gcm_encrypt(in + res,
1681                                            out + res, len - res,
1682                                            gctx->gcm.key, gctx->gcm.Yi.c,
1683                                            gctx->gcm.Xi.u);
1684                     gctx->gcm.len.u[1] += bulk;
1685                     bulk += res;
1686                 }
1687 #endif
1688                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,
1689                                           in + bulk, out + bulk, len - bulk))
1690                     return -1;
1691             }
1692         } else {
1693             if (gctx->ctr) {
1694                 size_t bulk = 0;
1695 #if defined(AES_GCM_ASM)
1696                 if (len >= 16 && AES_GCM_ASM(gctx)) {
1697                     size_t res = (16 - gctx->gcm.mres) % 16;
1698
1699                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
1700                         return -1;
1701
1702                     bulk = AES_gcm_decrypt(in + res,
1703                                            out + res, len - res,
1704                                            gctx->gcm.key,
1705                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1706                     gctx->gcm.len.u[1] += bulk;
1707                     bulk += res;
1708                 }
1709 #endif
1710                 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
1711                                                 in + bulk,
1712                                                 out + bulk,
1713                                                 len - bulk, gctx->ctr))
1714                     return -1;
1715             } else {
1716                 size_t bulk = 0;
1717 #if defined(AES_GCM_ASM2)
1718                 if (len >= 16 && AES_GCM_ASM2(gctx)) {
1719                     size_t res = (16 - gctx->gcm.mres) % 16;
1720
1721                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
1722                         return -1;
1723
1724                     bulk = AES_gcm_decrypt(in + res,
1725                                            out + res, len - res,
1726                                            gctx->gcm.key,
1727                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
1728                     gctx->gcm.len.u[1] += bulk;
1729                     bulk += res;
1730                 }
1731 #endif
1732                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,
1733                                           in + bulk, out + bulk, len - bulk))
1734                     return -1;
1735             }
1736         }
1737         return len;
1738     } else {
1739         if (!EVP_CIPHER_CTX_encrypting(ctx)) {
1740             if (gctx->taglen < 0)
1741                 return -1;
1742             if (CRYPTO_gcm128_finish(&gctx->gcm,
1743                                      EVP_CIPHER_CTX_buf_noconst(ctx),
1744                                      gctx->taglen) != 0)
1745                 return -1;
1746             gctx->iv_set = 0;
1747             return 0;
1748         }
1749         CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx), 16);
1750         gctx->taglen = 16;
1751         /* Don't reuse the IV */
1752         gctx->iv_set = 0;
1753         return 0;
1754     }
1755
1756 }
1757
1758 #define CUSTOM_FLAGS    (EVP_CIPH_FLAG_DEFAULT_ASN1 \
1759                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
1760                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
1761                 | EVP_CIPH_CUSTOM_COPY)
1762
1763 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, gcm, GCM,
1764                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
1765     BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, gcm, GCM,
1766                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
1767     BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, gcm, GCM,
1768                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
1769
1770 static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1771 {
1772     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,c);
1773     if (type == EVP_CTRL_COPY) {
1774         EVP_CIPHER_CTX *out = ptr;
1775         EVP_AES_XTS_CTX *xctx_out = EVP_C_DATA(EVP_AES_XTS_CTX,out);
1776         if (xctx->xts.key1) {
1777             if (xctx->xts.key1 != &xctx->ks1)
1778                 return 0;
1779             xctx_out->xts.key1 = &xctx_out->ks1;
1780         }
1781         if (xctx->xts.key2) {
1782             if (xctx->xts.key2 != &xctx->ks2)
1783                 return 0;
1784             xctx_out->xts.key2 = &xctx_out->ks2;
1785         }
1786         return 1;
1787     } else if (type != EVP_CTRL_INIT)
1788         return -1;
1789     /* key1 and key2 are used as an indicator both key and IV are set */
1790     xctx->xts.key1 = NULL;
1791     xctx->xts.key2 = NULL;
1792     return 1;
1793 }
1794
1795 static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1796                             const unsigned char *iv, int enc)
1797 {
1798     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
1799     if (!iv && !key)
1800         return 1;
1801
1802     if (key)
1803         do {
1804 #ifdef AES_XTS_ASM
1805             xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
1806 #else
1807             xctx->stream = NULL;
1808 #endif
1809             /* key_len is two AES keys */
1810 #ifdef HWAES_CAPABLE
1811             if (HWAES_CAPABLE) {
1812                 if (enc) {
1813                     HWAES_set_encrypt_key(key,
1814                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
1815                                           &xctx->ks1.ks);
1816                     xctx->xts.block1 = (block128_f) HWAES_encrypt;
1817 # ifdef HWAES_xts_encrypt
1818                     xctx->stream = HWAES_xts_encrypt;
1819 # endif
1820                 } else {
1821                     HWAES_set_decrypt_key(key,
1822                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
1823                                           &xctx->ks1.ks);
1824                     xctx->xts.block1 = (block128_f) HWAES_decrypt;
1825 # ifdef HWAES_xts_decrypt
1826                     xctx->stream = HWAES_xts_decrypt;
1827 #endif
1828                 }
1829
1830                 HWAES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
1831                                       EVP_CIPHER_CTX_key_length(ctx) * 4,
1832                                       &xctx->ks2.ks);
1833                 xctx->xts.block2 = (block128_f) HWAES_encrypt;
1834
1835                 xctx->xts.key1 = &xctx->ks1;
1836                 break;
1837             } else
1838 #endif
1839 #ifdef BSAES_CAPABLE
1840             if (BSAES_CAPABLE)
1841                 xctx->stream = enc ? bsaes_xts_encrypt : bsaes_xts_decrypt;
1842             else
1843 #endif
1844 #ifdef VPAES_CAPABLE
1845             if (VPAES_CAPABLE) {
1846                 if (enc) {
1847                     vpaes_set_encrypt_key(key,
1848                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
1849                                           &xctx->ks1.ks);
1850                     xctx->xts.block1 = (block128_f) vpaes_encrypt;
1851                 } else {
1852                     vpaes_set_decrypt_key(key,
1853                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
1854                                           &xctx->ks1.ks);
1855                     xctx->xts.block1 = (block128_f) vpaes_decrypt;
1856                 }
1857
1858                 vpaes_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
1859                                       EVP_CIPHER_CTX_key_length(ctx) * 4,
1860                                       &xctx->ks2.ks);
1861                 xctx->xts.block2 = (block128_f) vpaes_encrypt;
1862
1863                 xctx->xts.key1 = &xctx->ks1;
1864                 break;
1865             } else
1866 #endif
1867                 (void)0;        /* terminate potentially open 'else' */
1868
1869             if (enc) {
1870                 AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
1871                                     &xctx->ks1.ks);
1872                 xctx->xts.block1 = (block128_f) AES_encrypt;
1873             } else {
1874                 AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
1875                                     &xctx->ks1.ks);
1876                 xctx->xts.block1 = (block128_f) AES_decrypt;
1877             }
1878
1879             AES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
1880                                 EVP_CIPHER_CTX_key_length(ctx) * 4,
1881                                 &xctx->ks2.ks);
1882             xctx->xts.block2 = (block128_f) AES_encrypt;
1883
1884             xctx->xts.key1 = &xctx->ks1;
1885         } while (0);
1886
1887     if (iv) {
1888         xctx->xts.key2 = &xctx->ks2;
1889         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
1890     }
1891
1892     return 1;
1893 }
1894
1895 static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1896                           const unsigned char *in, size_t len)
1897 {
1898     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
1899     if (!xctx->xts.key1 || !xctx->xts.key2)
1900         return 0;
1901     if (!out || !in || len < AES_BLOCK_SIZE)
1902         return 0;
1903     if (xctx->stream)
1904         (*xctx->stream) (in, out, len,
1905                          xctx->xts.key1, xctx->xts.key2,
1906                          EVP_CIPHER_CTX_iv_noconst(ctx));
1907     else if (CRYPTO_xts128_encrypt(&xctx->xts, EVP_CIPHER_CTX_iv_noconst(ctx),
1908                                    in, out, len,
1909                                    EVP_CIPHER_CTX_encrypting(ctx)))
1910         return 0;
1911     return 1;
1912 }
1913
1914 #define aes_xts_cleanup NULL
1915
1916 #define XTS_FLAGS       (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \
1917                          | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
1918                          | EVP_CIPH_CUSTOM_COPY)
1919
1920 BLOCK_CIPHER_custom(NID_aes, 128, 1, 16, xts, XTS, XTS_FLAGS)
1921     BLOCK_CIPHER_custom(NID_aes, 256, 1, 16, xts, XTS, XTS_FLAGS)
1922
1923 static int aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1924 {
1925     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,c);
1926     switch (type) {
1927     case EVP_CTRL_INIT:
1928         cctx->key_set = 0;
1929         cctx->iv_set = 0;
1930         cctx->L = 8;
1931         cctx->M = 12;
1932         cctx->tag_set = 0;
1933         cctx->len_set = 0;
1934         cctx->tls_aad_len = -1;
1935         return 1;
1936
1937     case EVP_CTRL_AEAD_TLS1_AAD:
1938         /* Save the AAD for later use */
1939         if (arg != EVP_AEAD_TLS1_AAD_LEN)
1940             return 0;
1941         memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
1942         cctx->tls_aad_len = arg;
1943         {
1944             uint16_t len =
1945                 EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8
1946                 | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1];
1947             /* Correct length for explicit IV */
1948             len -= EVP_CCM_TLS_EXPLICIT_IV_LEN;
1949             /* If decrypting correct for tag too */
1950             if (!EVP_CIPHER_CTX_encrypting(c))
1951                 len -= cctx->M;
1952             EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8;
1953             EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff;
1954         }
1955         /* Extra padding: tag appended to record */
1956         return cctx->M;
1957
1958     case EVP_CTRL_CCM_SET_IV_FIXED:
1959         /* Sanity check length */
1960         if (arg != EVP_CCM_TLS_FIXED_IV_LEN)
1961             return 0;
1962         /* Just copy to first part of IV */
1963         memcpy(EVP_CIPHER_CTX_iv_noconst(c), ptr, arg);
1964         return 1;
1965
1966     case EVP_CTRL_AEAD_SET_IVLEN:
1967         arg = 15 - arg;
1968     case EVP_CTRL_CCM_SET_L:
1969         if (arg < 2 || arg > 8)
1970             return 0;
1971         cctx->L = arg;
1972         return 1;
1973
1974     case EVP_CTRL_AEAD_SET_TAG:
1975         if ((arg & 1) || arg < 4 || arg > 16)
1976             return 0;
1977         if (EVP_CIPHER_CTX_encrypting(c) && ptr)
1978             return 0;
1979         if (ptr) {
1980             cctx->tag_set = 1;
1981             memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
1982         }
1983         cctx->M = arg;
1984         return 1;
1985
1986     case EVP_CTRL_AEAD_GET_TAG:
1987         if (!EVP_CIPHER_CTX_encrypting(c) || !cctx->tag_set)
1988             return 0;
1989         if (!CRYPTO_ccm128_tag(&cctx->ccm, ptr, (size_t)arg))
1990             return 0;
1991         cctx->tag_set = 0;
1992         cctx->iv_set = 0;
1993         cctx->len_set = 0;
1994         return 1;
1995
1996     case EVP_CTRL_COPY:
1997         {
1998             EVP_CIPHER_CTX *out = ptr;
1999             EVP_AES_CCM_CTX *cctx_out = EVP_C_DATA(EVP_AES_CCM_CTX,out);
2000             if (cctx->ccm.key) {
2001                 if (cctx->ccm.key != &cctx->ks)
2002                     return 0;
2003                 cctx_out->ccm.key = &cctx_out->ks;
2004             }
2005             return 1;
2006         }
2007
2008     default:
2009         return -1;
2010
2011     }
2012 }
2013
2014 static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2015                             const unsigned char *iv, int enc)
2016 {
2017     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
2018     if (!iv && !key)
2019         return 1;
2020     if (key)
2021         do {
2022 #ifdef HWAES_CAPABLE
2023             if (HWAES_CAPABLE) {
2024                 HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2025                                       &cctx->ks.ks);
2026
2027                 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
2028                                    &cctx->ks, (block128_f) HWAES_encrypt);
2029                 cctx->str = NULL;
2030                 cctx->key_set = 1;
2031                 break;
2032             } else
2033 #endif
2034 #ifdef VPAES_CAPABLE
2035             if (VPAES_CAPABLE) {
2036                 vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2037                                       &cctx->ks.ks);
2038                 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
2039                                    &cctx->ks, (block128_f) vpaes_encrypt);
2040                 cctx->str = NULL;
2041                 cctx->key_set = 1;
2042                 break;
2043             }
2044 #endif
2045             AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2046                                 &cctx->ks.ks);
2047             CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
2048                                &cctx->ks, (block128_f) AES_encrypt);
2049             cctx->str = NULL;
2050             cctx->key_set = 1;
2051         } while (0);
2052     if (iv) {
2053         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
2054         cctx->iv_set = 1;
2055     }
2056     return 1;
2057 }
2058
2059 static int aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2060                               const unsigned char *in, size_t len)
2061 {
2062     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
2063     CCM128_CONTEXT *ccm = &cctx->ccm;
2064     /* Encrypt/decrypt must be performed in place */
2065     if (out != in || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->M))
2066         return -1;
2067     /* If encrypting set explicit IV from sequence number (start of AAD) */
2068     if (EVP_CIPHER_CTX_encrypting(ctx))
2069         memcpy(out, EVP_CIPHER_CTX_buf_noconst(ctx),
2070                EVP_CCM_TLS_EXPLICIT_IV_LEN);
2071     /* Get rest of IV from explicit IV */
2072     memcpy(EVP_CIPHER_CTX_iv_noconst(ctx) + EVP_CCM_TLS_FIXED_IV_LEN, in,
2073            EVP_CCM_TLS_EXPLICIT_IV_LEN);
2074     /* Correct length value */
2075     len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M;
2076     if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), 15 - cctx->L,
2077                             len))
2078             return -1;
2079     /* Use saved AAD */
2080     CRYPTO_ccm128_aad(ccm, EVP_CIPHER_CTX_buf_noconst(ctx), cctx->tls_aad_len);
2081     /* Fix buffer to point to payload */
2082     in += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2083     out += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2084     if (EVP_CIPHER_CTX_encrypting(ctx)) {
2085         if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len,
2086                                                     cctx->str) :
2087             CRYPTO_ccm128_encrypt(ccm, in, out, len))
2088             return -1;
2089         if (!CRYPTO_ccm128_tag(ccm, out + len, cctx->M))
2090             return -1;
2091         return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M;
2092     } else {
2093         if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len,
2094                                                      cctx->str) :
2095             !CRYPTO_ccm128_decrypt(ccm, in, out, len)) {
2096             unsigned char tag[16];
2097             if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) {
2098                 if (!CRYPTO_memcmp(tag, in + len, cctx->M))
2099                     return len;
2100             }
2101         }
2102         OPENSSL_cleanse(out, len);
2103         return -1;
2104     }
2105 }
2106
2107 static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2108                           const unsigned char *in, size_t len)
2109 {
2110     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
2111     CCM128_CONTEXT *ccm = &cctx->ccm;
2112     /* If not set up, return error */
2113     if (!cctx->key_set)
2114         return -1;
2115
2116     if (cctx->tls_aad_len >= 0)
2117         return aes_ccm_tls_cipher(ctx, out, in, len);
2118
2119     if (!cctx->iv_set)
2120         return -1;
2121
2122     if (!EVP_CIPHER_CTX_encrypting(ctx) && !cctx->tag_set)
2123         return -1;
2124     if (!out) {
2125         if (!in) {
2126             if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx),
2127                                     15 - cctx->L, len))
2128                 return -1;
2129             cctx->len_set = 1;
2130             return len;
2131         }
2132         /* If have AAD need message length */
2133         if (!cctx->len_set && len)
2134             return -1;
2135         CRYPTO_ccm128_aad(ccm, in, len);
2136         return len;
2137     }
2138     /* EVP_*Final() doesn't return any data */
2139     if (!in)
2140         return 0;
2141     /* If not set length yet do it */
2142     if (!cctx->len_set) {
2143         if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx),
2144                                 15 - cctx->L, len))
2145             return -1;
2146         cctx->len_set = 1;
2147     }
2148     if (EVP_CIPHER_CTX_encrypting(ctx)) {
2149         if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len,
2150                                                     cctx->str) :
2151             CRYPTO_ccm128_encrypt(ccm, in, out, len))
2152             return -1;
2153         cctx->tag_set = 1;
2154         return len;
2155     } else {
2156         int rv = -1;
2157         if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len,
2158                                                      cctx->str) :
2159             !CRYPTO_ccm128_decrypt(ccm, in, out, len)) {
2160             unsigned char tag[16];
2161             if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) {
2162                 if (!CRYPTO_memcmp(tag, EVP_CIPHER_CTX_buf_noconst(ctx),
2163                                    cctx->M))
2164                     rv = len;
2165             }
2166         }
2167         if (rv == -1)
2168             OPENSSL_cleanse(out, len);
2169         cctx->iv_set = 0;
2170         cctx->tag_set = 0;
2171         cctx->len_set = 0;
2172         return rv;
2173     }
2174 }
2175
2176 #define aes_ccm_cleanup NULL
2177
2178 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, ccm, CCM,
2179                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2180     BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, ccm, CCM,
2181                         EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2182     BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, ccm, CCM,
2183                         EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2184
2185 typedef struct {
2186     union {
2187         double align;
2188         AES_KEY ks;
2189     } ks;
2190     /* Indicates if IV has been set */
2191     unsigned char *iv;
2192 } EVP_AES_WRAP_CTX;
2193
2194 static int aes_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2195                              const unsigned char *iv, int enc)
2196 {
2197     EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx);
2198     if (!iv && !key)
2199         return 1;
2200     if (key) {
2201         if (EVP_CIPHER_CTX_encrypting(ctx))
2202             AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2203                                 &wctx->ks.ks);
2204         else
2205             AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2206                                 &wctx->ks.ks);
2207         if (!iv)
2208             wctx->iv = NULL;
2209     }
2210     if (iv) {
2211         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx));
2212         wctx->iv = EVP_CIPHER_CTX_iv_noconst(ctx);
2213     }
2214     return 1;
2215 }
2216
2217 static int aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2218                            const unsigned char *in, size_t inlen)
2219 {
2220     EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx);
2221     size_t rv;
2222     /* AES wrap with padding has IV length of 4, without padding 8 */
2223     int pad = EVP_CIPHER_CTX_iv_length(ctx) == 4;
2224     /* No final operation so always return zero length */
2225     if (!in)
2226         return 0;
2227     /* Input length must always be non-zero */
2228     if (!inlen)
2229         return -1;
2230     /* If decrypting need at least 16 bytes and multiple of 8 */
2231     if (!EVP_CIPHER_CTX_encrypting(ctx) && (inlen < 16 || inlen & 0x7))
2232         return -1;
2233     /* If not padding input must be multiple of 8 */
2234     if (!pad && inlen & 0x7)
2235         return -1;
2236     if (!out) {
2237         if (EVP_CIPHER_CTX_encrypting(ctx)) {
2238             /* If padding round up to multiple of 8 */
2239             if (pad)
2240                 inlen = (inlen + 7) / 8 * 8;
2241             /* 8 byte prefix */
2242             return inlen + 8;
2243         } else {
2244             /*
2245              * If not padding output will be exactly 8 bytes smaller than
2246              * input. If padding it will be at least 8 bytes smaller but we
2247              * don't know how much.
2248              */
2249             return inlen - 8;
2250         }
2251     }
2252     if (pad) {
2253         if (EVP_CIPHER_CTX_encrypting(ctx))
2254             rv = CRYPTO_128_wrap_pad(&wctx->ks.ks, wctx->iv,
2255                                      out, in, inlen,
2256                                      (block128_f) AES_encrypt);
2257         else
2258             rv = CRYPTO_128_unwrap_pad(&wctx->ks.ks, wctx->iv,
2259                                        out, in, inlen,
2260                                        (block128_f) AES_decrypt);
2261     } else {
2262         if (EVP_CIPHER_CTX_encrypting(ctx))
2263             rv = CRYPTO_128_wrap(&wctx->ks.ks, wctx->iv,
2264                                  out, in, inlen, (block128_f) AES_encrypt);
2265         else
2266             rv = CRYPTO_128_unwrap(&wctx->ks.ks, wctx->iv,
2267                                    out, in, inlen, (block128_f) AES_decrypt);
2268     }
2269     return rv ? (int)rv : -1;
2270 }
2271
2272 #define WRAP_FLAGS      (EVP_CIPH_WRAP_MODE \
2273                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
2274                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1)
2275
2276 static const EVP_CIPHER aes_128_wrap = {
2277     NID_id_aes128_wrap,
2278     8, 16, 8, WRAP_FLAGS,
2279     aes_wrap_init_key, aes_wrap_cipher,
2280     NULL,
2281     sizeof(EVP_AES_WRAP_CTX),
2282     NULL, NULL, NULL, NULL
2283 };
2284
2285 const EVP_CIPHER *EVP_aes_128_wrap(void)
2286 {
2287     return &aes_128_wrap;
2288 }
2289
2290 static const EVP_CIPHER aes_192_wrap = {
2291     NID_id_aes192_wrap,
2292     8, 24, 8, WRAP_FLAGS,
2293     aes_wrap_init_key, aes_wrap_cipher,
2294     NULL,
2295     sizeof(EVP_AES_WRAP_CTX),
2296     NULL, NULL, NULL, NULL
2297 };
2298
2299 const EVP_CIPHER *EVP_aes_192_wrap(void)
2300 {
2301     return &aes_192_wrap;
2302 }
2303
2304 static const EVP_CIPHER aes_256_wrap = {
2305     NID_id_aes256_wrap,
2306     8, 32, 8, WRAP_FLAGS,
2307     aes_wrap_init_key, aes_wrap_cipher,
2308     NULL,
2309     sizeof(EVP_AES_WRAP_CTX),
2310     NULL, NULL, NULL, NULL
2311 };
2312
2313 const EVP_CIPHER *EVP_aes_256_wrap(void)
2314 {
2315     return &aes_256_wrap;
2316 }
2317
2318 static const EVP_CIPHER aes_128_wrap_pad = {
2319     NID_id_aes128_wrap_pad,
2320     8, 16, 4, WRAP_FLAGS,
2321     aes_wrap_init_key, aes_wrap_cipher,
2322     NULL,
2323     sizeof(EVP_AES_WRAP_CTX),
2324     NULL, NULL, NULL, NULL
2325 };
2326
2327 const EVP_CIPHER *EVP_aes_128_wrap_pad(void)
2328 {
2329     return &aes_128_wrap_pad;
2330 }
2331
2332 static const EVP_CIPHER aes_192_wrap_pad = {
2333     NID_id_aes192_wrap_pad,
2334     8, 24, 4, WRAP_FLAGS,
2335     aes_wrap_init_key, aes_wrap_cipher,
2336     NULL,
2337     sizeof(EVP_AES_WRAP_CTX),
2338     NULL, NULL, NULL, NULL
2339 };
2340
2341 const EVP_CIPHER *EVP_aes_192_wrap_pad(void)
2342 {
2343     return &aes_192_wrap_pad;
2344 }
2345
2346 static const EVP_CIPHER aes_256_wrap_pad = {
2347     NID_id_aes256_wrap_pad,
2348     8, 32, 4, WRAP_FLAGS,
2349     aes_wrap_init_key, aes_wrap_cipher,
2350     NULL,
2351     sizeof(EVP_AES_WRAP_CTX),
2352     NULL, NULL, NULL, NULL
2353 };
2354
2355 const EVP_CIPHER *EVP_aes_256_wrap_pad(void)
2356 {
2357     return &aes_256_wrap_pad;
2358 }
2359
2360 #ifndef OPENSSL_NO_OCB
2361 static int aes_ocb_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
2362 {
2363     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c);
2364     EVP_CIPHER_CTX *newc;
2365     EVP_AES_OCB_CTX *new_octx;
2366
2367     switch (type) {
2368     case EVP_CTRL_INIT:
2369         octx->key_set = 0;
2370         octx->iv_set = 0;
2371         octx->ivlen = EVP_CIPHER_CTX_iv_length(c);
2372         octx->iv = EVP_CIPHER_CTX_iv_noconst(c);
2373         octx->taglen = 16;
2374         octx->data_buf_len = 0;
2375         octx->aad_buf_len = 0;
2376         return 1;
2377
2378     case EVP_CTRL_AEAD_SET_IVLEN:
2379         /* IV len must be 1 to 15 */
2380         if (arg <= 0 || arg > 15)
2381             return 0;
2382
2383         octx->ivlen = arg;
2384         return 1;
2385
2386     case EVP_CTRL_AEAD_SET_TAG:
2387         if (!ptr) {
2388             /* Tag len must be 0 to 16 */
2389             if (arg < 0 || arg > 16)
2390                 return 0;
2391
2392             octx->taglen = arg;
2393             return 1;
2394         }
2395         if (arg != octx->taglen || EVP_CIPHER_CTX_encrypting(c))
2396             return 0;
2397         memcpy(octx->tag, ptr, arg);
2398         return 1;
2399
2400     case EVP_CTRL_AEAD_GET_TAG:
2401         if (arg != octx->taglen || !EVP_CIPHER_CTX_encrypting(c))
2402             return 0;
2403
2404         memcpy(ptr, octx->tag, arg);
2405         return 1;
2406
2407     case EVP_CTRL_COPY:
2408         newc = (EVP_CIPHER_CTX *)ptr;
2409         new_octx = EVP_C_DATA(EVP_AES_OCB_CTX,newc);
2410         return CRYPTO_ocb128_copy_ctx(&new_octx->ocb, &octx->ocb,
2411                                       &new_octx->ksenc.ks,
2412                                       &new_octx->ksdec.ks);
2413
2414     default:
2415         return -1;
2416
2417     }
2418 }
2419
2420 # ifdef HWAES_CAPABLE
2421 #  ifdef HWAES_ocb_encrypt
2422 void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out,
2423                        size_t blocks, const void *key,
2424                        size_t start_block_num,
2425                        unsigned char offset_i[16],
2426                        const unsigned char L_[][16],
2427                        unsigned char checksum[16]);
2428 #  else
2429 #    define HWAES_ocb_encrypt ((ocb128_f)NULL)
2430 #  endif
2431 #  ifdef HWAES_ocb_decrypt
2432 void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out,
2433                        size_t blocks, const void *key,
2434                        size_t start_block_num,
2435                        unsigned char offset_i[16],
2436                        const unsigned char L_[][16],
2437                        unsigned char checksum[16]);
2438 #  else
2439 #    define HWAES_ocb_decrypt ((ocb128_f)NULL)
2440 #  endif
2441 # endif
2442
2443 static int aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2444                             const unsigned char *iv, int enc)
2445 {
2446     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
2447     if (!iv && !key)
2448         return 1;
2449     if (key) {
2450         do {
2451             /*
2452              * We set both the encrypt and decrypt key here because decrypt
2453              * needs both. We could possibly optimise to remove setting the
2454              * decrypt for an encryption operation.
2455              */
2456 # ifdef HWAES_CAPABLE
2457             if (HWAES_CAPABLE) {
2458                 HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2459                                       &octx->ksenc.ks);
2460                 HWAES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2461                                       &octx->ksdec.ks);
2462                 if (!CRYPTO_ocb128_init(&octx->ocb,
2463                                         &octx->ksenc.ks, &octx->ksdec.ks,
2464                                         (block128_f) HWAES_encrypt,
2465                                         (block128_f) HWAES_decrypt,
2466                                         enc ? HWAES_ocb_encrypt
2467                                             : HWAES_ocb_decrypt))
2468                     return 0;
2469                 break;
2470             }
2471 # endif
2472 # ifdef VPAES_CAPABLE
2473             if (VPAES_CAPABLE) {
2474                 vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2475                                       &octx->ksenc.ks);
2476                 vpaes_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2477                                       &octx->ksdec.ks);
2478                 if (!CRYPTO_ocb128_init(&octx->ocb,
2479                                         &octx->ksenc.ks, &octx->ksdec.ks,
2480                                         (block128_f) vpaes_encrypt,
2481                                         (block128_f) vpaes_decrypt,
2482                                         NULL))
2483                     return 0;
2484                 break;
2485             }
2486 # endif
2487             AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2488                                 &octx->ksenc.ks);
2489             AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2490                                 &octx->ksdec.ks);
2491             if (!CRYPTO_ocb128_init(&octx->ocb,
2492                                     &octx->ksenc.ks, &octx->ksdec.ks,
2493                                     (block128_f) AES_encrypt,
2494                                     (block128_f) AES_decrypt,
2495                                     NULL))
2496                 return 0;
2497         }
2498         while (0);
2499
2500         /*
2501          * If we have an iv we can set it directly, otherwise use saved IV.
2502          */
2503         if (iv == NULL && octx->iv_set)
2504             iv = octx->iv;
2505         if (iv) {
2506             if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
2507                 != 1)
2508                 return 0;
2509             octx->iv_set = 1;
2510         }
2511         octx->key_set = 1;
2512     } else {
2513         /* If key set use IV, otherwise copy */
2514         if (octx->key_set)
2515             CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
2516         else
2517             memcpy(octx->iv, iv, octx->ivlen);
2518         octx->iv_set = 1;
2519     }
2520     return 1;
2521 }
2522
2523 static int aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2524                           const unsigned char *in, size_t len)
2525 {
2526     unsigned char *buf;
2527     int *buf_len;
2528     int written_len = 0;
2529     size_t trailing_len;
2530     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
2531
2532     /* If IV or Key not set then return error */
2533     if (!octx->iv_set)
2534         return -1;
2535
2536     if (!octx->key_set)
2537         return -1;
2538
2539     if (in != NULL) {
2540         /*
2541          * Need to ensure we are only passing full blocks to low level OCB
2542          * routines. We do it here rather than in EVP_EncryptUpdate/
2543          * EVP_DecryptUpdate because we need to pass full blocks of AAD too
2544          * and those routines don't support that
2545          */
2546
2547         /* Are we dealing with AAD or normal data here? */
2548         if (out == NULL) {
2549             buf = octx->aad_buf;
2550             buf_len = &(octx->aad_buf_len);
2551         } else {
2552             buf = octx->data_buf;
2553             buf_len = &(octx->data_buf_len);
2554         }
2555
2556         /*
2557          * If we've got a partially filled buffer from a previous call then
2558          * use that data first
2559          */
2560         if (*buf_len > 0) {
2561             unsigned int remaining;
2562
2563             remaining = AES_BLOCK_SIZE - (*buf_len);
2564             if (remaining > len) {
2565                 memcpy(buf + (*buf_len), in, len);
2566                 *(buf_len) += len;
2567                 return 0;
2568             }
2569             memcpy(buf + (*buf_len), in, remaining);
2570
2571             /*
2572              * If we get here we've filled the buffer, so process it
2573              */
2574             len -= remaining;
2575             in += remaining;
2576             if (out == NULL) {
2577                 if (!CRYPTO_ocb128_aad(&octx->ocb, buf, AES_BLOCK_SIZE))
2578                     return -1;
2579             } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
2580                 if (!CRYPTO_ocb128_encrypt(&octx->ocb, buf, out,
2581                                            AES_BLOCK_SIZE))
2582                     return -1;
2583             } else {
2584                 if (!CRYPTO_ocb128_decrypt(&octx->ocb, buf, out,
2585                                            AES_BLOCK_SIZE))
2586                     return -1;
2587             }
2588             written_len = AES_BLOCK_SIZE;
2589             *buf_len = 0;
2590             if (out != NULL)
2591                 out += AES_BLOCK_SIZE;
2592         }
2593
2594         /* Do we have a partial block to handle at the end? */
2595         trailing_len = len % AES_BLOCK_SIZE;
2596
2597         /*
2598          * If we've got some full blocks to handle, then process these first
2599          */
2600         if (len != trailing_len) {
2601             if (out == NULL) {
2602                 if (!CRYPTO_ocb128_aad(&octx->ocb, in, len - trailing_len))
2603                     return -1;
2604             } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
2605                 if (!CRYPTO_ocb128_encrypt
2606                     (&octx->ocb, in, out, len - trailing_len))
2607                     return -1;
2608             } else {
2609                 if (!CRYPTO_ocb128_decrypt
2610                     (&octx->ocb, in, out, len - trailing_len))
2611                     return -1;
2612             }
2613             written_len += len - trailing_len;
2614             in += len - trailing_len;
2615         }
2616
2617         /* Handle any trailing partial block */
2618         if (trailing_len > 0) {
2619             memcpy(buf, in, trailing_len);
2620             *buf_len = trailing_len;
2621         }
2622
2623         return written_len;
2624     } else {
2625         /*
2626          * First of all empty the buffer of any partial block that we might
2627          * have been provided - both for data and AAD
2628          */
2629         if (octx->data_buf_len > 0) {
2630             if (EVP_CIPHER_CTX_encrypting(ctx)) {
2631                 if (!CRYPTO_ocb128_encrypt(&octx->ocb, octx->data_buf, out,
2632                                            octx->data_buf_len))
2633                     return -1;
2634             } else {
2635                 if (!CRYPTO_ocb128_decrypt(&octx->ocb, octx->data_buf, out,
2636                                            octx->data_buf_len))
2637                     return -1;
2638             }
2639             written_len = octx->data_buf_len;
2640             octx->data_buf_len = 0;
2641         }
2642         if (octx->aad_buf_len > 0) {
2643             if (!CRYPTO_ocb128_aad
2644                 (&octx->ocb, octx->aad_buf, octx->aad_buf_len))
2645                 return -1;
2646             octx->aad_buf_len = 0;
2647         }
2648         /* If decrypting then verify */
2649         if (!EVP_CIPHER_CTX_encrypting(ctx)) {
2650             if (octx->taglen < 0)
2651                 return -1;
2652             if (CRYPTO_ocb128_finish(&octx->ocb,
2653                                      octx->tag, octx->taglen) != 0)
2654                 return -1;
2655             octx->iv_set = 0;
2656             return written_len;
2657         }
2658         /* If encrypting then just get the tag */
2659         if (CRYPTO_ocb128_tag(&octx->ocb, octx->tag, 16) != 1)
2660             return -1;
2661         /* Don't reuse the IV */
2662         octx->iv_set = 0;
2663         return written_len;
2664     }
2665 }
2666
2667 static int aes_ocb_cleanup(EVP_CIPHER_CTX *c)
2668 {
2669     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c);
2670     CRYPTO_ocb128_cleanup(&octx->ocb);
2671     return 1;
2672 }
2673
2674 BLOCK_CIPHER_custom(NID_aes, 128, 16, 12, ocb, OCB,
2675                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2676 BLOCK_CIPHER_custom(NID_aes, 192, 16, 12, ocb, OCB,
2677                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2678 BLOCK_CIPHER_custom(NID_aes, 256, 16, 12, ocb, OCB,
2679                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
2680 #endif                         /* OPENSSL_NO_OCB */