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