crypto/evp/e_aes.c: build again on s390x
[openssl.git] / crypto / evp / e_aes.c
1 /*
2  * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9
10 #include <openssl/opensslconf.h>
11 #include <openssl/crypto.h>
12 #include <openssl/evp.h>
13 #include <openssl/err.h>
14 #include <string.h>
15 #include <assert.h>
16 #include <openssl/aes.h>
17 #include "internal/evp_int.h"
18 #include "modes_lcl.h"
19 #include <openssl/rand.h>
20 #include <openssl/cmac.h>
21 #include "evp_locl.h"
22
23 typedef struct {
24     union {
25         double align;
26         AES_KEY ks;
27     } ks;
28     block128_f block;
29     union {
30         cbc128_f cbc;
31         ctr128_f ctr;
32     } stream;
33 } EVP_AES_KEY;
34
35 typedef struct {
36     union {
37         double align;
38         AES_KEY ks;
39     } ks;                       /* AES key schedule to use */
40     int key_set;                /* Set if key initialised */
41     int iv_set;                 /* Set if an iv is set */
42     GCM128_CONTEXT gcm;
43     unsigned char *iv;          /* Temporary IV store */
44     int ivlen;                  /* IV length */
45     int taglen;
46     int iv_gen;                 /* It is OK to generate IVs */
47     int tls_aad_len;            /* TLS AAD length */
48     uint64_t tls_enc_records;   /* Number of TLS records encrypted */
49     ctr128_f ctr;
50 } EVP_AES_GCM_CTX;
51
52 typedef struct {
53     union {
54         double align;
55         AES_KEY ks;
56     } ks1, ks2;                 /* AES key schedules to use */
57     XTS128_CONTEXT xts;
58     void (*stream) (const unsigned char *in,
59                     unsigned char *out, size_t length,
60                     const AES_KEY *key1, const AES_KEY *key2,
61                     const unsigned char iv[16]);
62 } EVP_AES_XTS_CTX;
63
64 typedef struct {
65     union {
66         double align;
67         AES_KEY ks;
68     } ks;                       /* AES key schedule to use */
69     int key_set;                /* Set if key initialised */
70     int iv_set;                 /* Set if an iv is set */
71     int tag_set;                /* Set if tag is valid */
72     int len_set;                /* Set if message length set */
73     int L, M;                   /* L and M parameters from RFC3610 */
74     int tls_aad_len;            /* TLS AAD length */
75     CCM128_CONTEXT ccm;
76     ccm128_f str;
77 } EVP_AES_CCM_CTX;
78
79 #ifndef OPENSSL_NO_OCB
80 typedef struct {
81     union {
82         double align;
83         AES_KEY ks;
84     } ksenc;                    /* AES key schedule to use for encryption */
85     union {
86         double align;
87         AES_KEY ks;
88     } ksdec;                    /* AES key schedule to use for decryption */
89     int key_set;                /* Set if key initialised */
90     int iv_set;                 /* Set if an iv is set */
91     OCB128_CONTEXT ocb;
92     unsigned char *iv;          /* Temporary IV store */
93     unsigned char tag[16];
94     unsigned char data_buf[16]; /* Store partial data blocks */
95     unsigned char aad_buf[16];  /* Store partial AAD blocks */
96     int data_buf_len;
97     int aad_buf_len;
98     int ivlen;                  /* IV length */
99     int taglen;
100 } EVP_AES_OCB_CTX;
101 #endif
102
103 #define MAXBITCHUNK     ((size_t)1<<(sizeof(size_t)*8-4))
104
105 #ifdef VPAES_ASM
106 int vpaes_set_encrypt_key(const unsigned char *userKey, int bits,
107                           AES_KEY *key);
108 int vpaes_set_decrypt_key(const unsigned char *userKey, int bits,
109                           AES_KEY *key);
110
111 void vpaes_encrypt(const unsigned char *in, unsigned char *out,
112                    const AES_KEY *key);
113 void vpaes_decrypt(const unsigned char *in, unsigned char *out,
114                    const AES_KEY *key);
115
116 void vpaes_cbc_encrypt(const unsigned char *in,
117                        unsigned char *out,
118                        size_t length,
119                        const AES_KEY *key, unsigned char *ivec, int enc);
120 #endif
121 #ifdef BSAES_ASM
122 void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out,
123                        size_t length, const AES_KEY *key,
124                        unsigned char ivec[16], int enc);
125 void bsaes_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
126                                 size_t len, const AES_KEY *key,
127                                 const unsigned char ivec[16]);
128 void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out,
129                        size_t len, const AES_KEY *key1,
130                        const AES_KEY *key2, const unsigned char iv[16]);
131 void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
132                        size_t len, const AES_KEY *key1,
133                        const AES_KEY *key2, const unsigned char iv[16]);
134 #endif
135 #ifdef AES_CTR_ASM
136 void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
137                        size_t blocks, const AES_KEY *key,
138                        const unsigned char ivec[AES_BLOCK_SIZE]);
139 #endif
140 #ifdef AES_XTS_ASM
141 void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len,
142                      const AES_KEY *key1, const AES_KEY *key2,
143                      const unsigned char iv[16]);
144 void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len,
145                      const AES_KEY *key1, const AES_KEY *key2,
146                      const unsigned char iv[16]);
147 #endif
148
149 /* increment counter (64-bit int) by 1 */
150 static void ctr64_inc(unsigned char *counter)
151 {
152     int n = 8;
153     unsigned char c;
154
155     do {
156         --n;
157         c = counter[n];
158         ++c;
159         counter[n] = c;
160         if (c)
161             return;
162     } while (n);
163 }
164
165 #if defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
166 # include "ppc_arch.h"
167 # ifdef VPAES_ASM
168 #  define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC)
169 # endif
170 # define HWAES_CAPABLE  (OPENSSL_ppccap_P & PPC_CRYPTO207)
171 # define HWAES_set_encrypt_key aes_p8_set_encrypt_key
172 # define HWAES_set_decrypt_key aes_p8_set_decrypt_key
173 # define HWAES_encrypt aes_p8_encrypt
174 # define HWAES_decrypt aes_p8_decrypt
175 # define HWAES_cbc_encrypt aes_p8_cbc_encrypt
176 # define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks
177 # define HWAES_xts_encrypt aes_p8_xts_encrypt
178 # define HWAES_xts_decrypt aes_p8_xts_decrypt
179 #endif
180
181 #if     defined(AES_ASM) && !defined(I386_ONLY) &&      (  \
182         ((defined(__i386)       || defined(__i386__)    || \
183           defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
184         defined(__x86_64)       || defined(__x86_64__)  || \
185         defined(_M_AMD64)       || defined(_M_X64)      )
186
187 extern unsigned int OPENSSL_ia32cap_P[];
188
189 # ifdef VPAES_ASM
190 #  define VPAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
191 # endif
192 # ifdef BSAES_ASM
193 #  define BSAES_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
194 # endif
195 /*
196  * AES-NI section
197  */
198 # define AESNI_CAPABLE   (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
199
200 int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
201                           AES_KEY *key);
202 int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
203                           AES_KEY *key);
204
205 void aesni_encrypt(const unsigned char *in, unsigned char *out,
206                    const AES_KEY *key);
207 void aesni_decrypt(const unsigned char *in, unsigned char *out,
208                    const AES_KEY *key);
209
210 void aesni_ecb_encrypt(const unsigned char *in,
211                        unsigned char *out,
212                        size_t length, const AES_KEY *key, int enc);
213 void aesni_cbc_encrypt(const unsigned char *in,
214                        unsigned char *out,
215                        size_t length,
216                        const AES_KEY *key, unsigned char *ivec, int enc);
217
218 void aesni_ctr32_encrypt_blocks(const unsigned char *in,
219                                 unsigned char *out,
220                                 size_t blocks,
221                                 const void *key, const unsigned char *ivec);
222
223 void aesni_xts_encrypt(const unsigned char *in,
224                        unsigned char *out,
225                        size_t length,
226                        const AES_KEY *key1, const AES_KEY *key2,
227                        const unsigned char iv[16]);
228
229 void aesni_xts_decrypt(const unsigned char *in,
230                        unsigned char *out,
231                        size_t length,
232                        const AES_KEY *key1, const AES_KEY *key2,
233                        const unsigned char iv[16]);
234
235 void aesni_ccm64_encrypt_blocks(const unsigned char *in,
236                                 unsigned char *out,
237                                 size_t blocks,
238                                 const void *key,
239                                 const unsigned char ivec[16],
240                                 unsigned char cmac[16]);
241
242 void aesni_ccm64_decrypt_blocks(const unsigned char *in,
243                                 unsigned char *out,
244                                 size_t blocks,
245                                 const void *key,
246                                 const unsigned char ivec[16],
247                                 unsigned char cmac[16]);
248
249 # if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
250 size_t aesni_gcm_encrypt(const unsigned char *in,
251                          unsigned char *out,
252                          size_t len,
253                          const void *key, unsigned char ivec[16], u64 *Xi);
254 #  define AES_gcm_encrypt aesni_gcm_encrypt
255 size_t aesni_gcm_decrypt(const unsigned char *in,
256                          unsigned char *out,
257                          size_t len,
258                          const void *key, unsigned char ivec[16], u64 *Xi);
259 #  define AES_gcm_decrypt aesni_gcm_decrypt
260 void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in,
261                    size_t len);
262 #  define AES_GCM_ASM(gctx)       (gctx->ctr==aesni_ctr32_encrypt_blocks && \
263                                  gctx->gcm.ghash==gcm_ghash_avx)
264 #  define AES_GCM_ASM2(gctx)      (gctx->gcm.block==(block128_f)aesni_encrypt && \
265                                  gctx->gcm.ghash==gcm_ghash_avx)
266 #  undef AES_GCM_ASM2          /* minor size optimization */
267 # endif
268
269 static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
270                           const unsigned char *iv, int enc)
271 {
272     int ret, mode;
273     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
274
275     mode = EVP_CIPHER_CTX_mode(ctx);
276     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
277         && !enc) {
278         ret = aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
279                                     &dat->ks.ks);
280         dat->block = (block128_f) aesni_decrypt;
281         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
282             (cbc128_f) aesni_cbc_encrypt : NULL;
283     } else {
284         ret = aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
285                                     &dat->ks.ks);
286         dat->block = (block128_f) aesni_encrypt;
287         if (mode == EVP_CIPH_CBC_MODE)
288             dat->stream.cbc = (cbc128_f) aesni_cbc_encrypt;
289         else if (mode == EVP_CIPH_CTR_MODE)
290             dat->stream.ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
291         else
292             dat->stream.cbc = NULL;
293     }
294
295     if (ret < 0) {
296         EVPerr(EVP_F_AESNI_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
297         return 0;
298     }
299
300     return 1;
301 }
302
303 static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
304                             const unsigned char *in, size_t len)
305 {
306     aesni_cbc_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
307                       EVP_CIPHER_CTX_iv_noconst(ctx),
308                       EVP_CIPHER_CTX_encrypting(ctx));
309
310     return 1;
311 }
312
313 static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
314                             const unsigned char *in, size_t len)
315 {
316     size_t bl = EVP_CIPHER_CTX_block_size(ctx);
317
318     if (len < bl)
319         return 1;
320
321     aesni_ecb_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
322                       EVP_CIPHER_CTX_encrypting(ctx));
323
324     return 1;
325 }
326
327 # define aesni_ofb_cipher aes_ofb_cipher
328 static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
329                             const unsigned char *in, size_t len);
330
331 # define aesni_cfb_cipher aes_cfb_cipher
332 static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
333                             const unsigned char *in, size_t len);
334
335 # define aesni_cfb8_cipher aes_cfb8_cipher
336 static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
337                              const unsigned char *in, size_t len);
338
339 # define aesni_cfb1_cipher aes_cfb1_cipher
340 static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
341                              const unsigned char *in, size_t len);
342
343 # define aesni_ctr_cipher aes_ctr_cipher
344 static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
345                             const unsigned char *in, size_t len);
346
347 static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
348                               const unsigned char *iv, int enc)
349 {
350     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
351     if (!iv && !key)
352         return 1;
353     if (key) {
354         aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
355                               &gctx->ks.ks);
356         CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f) aesni_encrypt);
357         gctx->ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
358         /*
359          * If we have an iv can set it directly, otherwise use saved IV.
360          */
361         if (iv == NULL && gctx->iv_set)
362             iv = gctx->iv;
363         if (iv) {
364             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
365             gctx->iv_set = 1;
366         }
367         gctx->key_set = 1;
368     } else {
369         /* If key set use IV, otherwise copy */
370         if (gctx->key_set)
371             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
372         else
373             memcpy(gctx->iv, iv, gctx->ivlen);
374         gctx->iv_set = 1;
375         gctx->iv_gen = 0;
376     }
377     return 1;
378 }
379
380 # define aesni_gcm_cipher aes_gcm_cipher
381 static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
382                             const unsigned char *in, size_t len);
383
384 static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
385                               const unsigned char *iv, int enc)
386 {
387     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
388     if (!iv && !key)
389         return 1;
390
391     if (key) {
392         /* key_len is two AES keys */
393         if (enc) {
394             aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
395                                   &xctx->ks1.ks);
396             xctx->xts.block1 = (block128_f) aesni_encrypt;
397             xctx->stream = aesni_xts_encrypt;
398         } else {
399             aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
400                                   &xctx->ks1.ks);
401             xctx->xts.block1 = (block128_f) aesni_decrypt;
402             xctx->stream = aesni_xts_decrypt;
403         }
404
405         aesni_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
406                               EVP_CIPHER_CTX_key_length(ctx) * 4,
407                               &xctx->ks2.ks);
408         xctx->xts.block2 = (block128_f) aesni_encrypt;
409
410         xctx->xts.key1 = &xctx->ks1;
411     }
412
413     if (iv) {
414         xctx->xts.key2 = &xctx->ks2;
415         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
416     }
417
418     return 1;
419 }
420
421 # define aesni_xts_cipher aes_xts_cipher
422 static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
423                             const unsigned char *in, size_t len);
424
425 static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
426                               const unsigned char *iv, int enc)
427 {
428     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
429     if (!iv && !key)
430         return 1;
431     if (key) {
432         aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
433                               &cctx->ks.ks);
434         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
435                            &cctx->ks, (block128_f) aesni_encrypt);
436         cctx->str = enc ? (ccm128_f) aesni_ccm64_encrypt_blocks :
437             (ccm128_f) aesni_ccm64_decrypt_blocks;
438         cctx->key_set = 1;
439     }
440     if (iv) {
441         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
442         cctx->iv_set = 1;
443     }
444     return 1;
445 }
446
447 # define aesni_ccm_cipher aes_ccm_cipher
448 static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
449                             const unsigned char *in, size_t len);
450
451 # ifndef OPENSSL_NO_OCB
452 void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out,
453                        size_t blocks, const void *key,
454                        size_t start_block_num,
455                        unsigned char offset_i[16],
456                        const unsigned char L_[][16],
457                        unsigned char checksum[16]);
458 void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out,
459                        size_t blocks, const void *key,
460                        size_t start_block_num,
461                        unsigned char offset_i[16],
462                        const unsigned char L_[][16],
463                        unsigned char checksum[16]);
464
465 static int aesni_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
466                               const unsigned char *iv, int enc)
467 {
468     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
469     if (!iv && !key)
470         return 1;
471     if (key) {
472         do {
473             /*
474              * We set both the encrypt and decrypt key here because decrypt
475              * needs both. We could possibly optimise to remove setting the
476              * decrypt for an encryption operation.
477              */
478             aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
479                                   &octx->ksenc.ks);
480             aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
481                                   &octx->ksdec.ks);
482             if (!CRYPTO_ocb128_init(&octx->ocb,
483                                     &octx->ksenc.ks, &octx->ksdec.ks,
484                                     (block128_f) aesni_encrypt,
485                                     (block128_f) aesni_decrypt,
486                                     enc ? aesni_ocb_encrypt
487                                         : aesni_ocb_decrypt))
488                 return 0;
489         }
490         while (0);
491
492         /*
493          * If we have an iv we can set it directly, otherwise use saved IV.
494          */
495         if (iv == NULL && octx->iv_set)
496             iv = octx->iv;
497         if (iv) {
498             if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
499                 != 1)
500                 return 0;
501             octx->iv_set = 1;
502         }
503         octx->key_set = 1;
504     } else {
505         /* If key set use IV, otherwise copy */
506         if (octx->key_set)
507             CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
508         else
509             memcpy(octx->iv, iv, octx->ivlen);
510         octx->iv_set = 1;
511     }
512     return 1;
513 }
514
515 #  define aesni_ocb_cipher aes_ocb_cipher
516 static int aesni_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
517                             const unsigned char *in, size_t len);
518 # endif                        /* OPENSSL_NO_OCB */
519
520 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
521 static const EVP_CIPHER aesni_##keylen##_##mode = { \
522         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
523         flags|EVP_CIPH_##MODE##_MODE,   \
524         aesni_init_key,                 \
525         aesni_##mode##_cipher,          \
526         NULL,                           \
527         sizeof(EVP_AES_KEY),            \
528         NULL,NULL,NULL,NULL }; \
529 static const EVP_CIPHER aes_##keylen##_##mode = { \
530         nid##_##keylen##_##nmode,blocksize,     \
531         keylen/8,ivlen, \
532         flags|EVP_CIPH_##MODE##_MODE,   \
533         aes_init_key,                   \
534         aes_##mode##_cipher,            \
535         NULL,                           \
536         sizeof(EVP_AES_KEY),            \
537         NULL,NULL,NULL,NULL }; \
538 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
539 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
540
541 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
542 static const EVP_CIPHER aesni_##keylen##_##mode = { \
543         nid##_##keylen##_##mode,blocksize, \
544         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
545         ivlen,                          \
546         flags|EVP_CIPH_##MODE##_MODE,   \
547         aesni_##mode##_init_key,        \
548         aesni_##mode##_cipher,          \
549         aes_##mode##_cleanup,           \
550         sizeof(EVP_AES_##MODE##_CTX),   \
551         NULL,NULL,aes_##mode##_ctrl,NULL }; \
552 static const EVP_CIPHER aes_##keylen##_##mode = { \
553         nid##_##keylen##_##mode,blocksize, \
554         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
555         ivlen,                          \
556         flags|EVP_CIPH_##MODE##_MODE,   \
557         aes_##mode##_init_key,          \
558         aes_##mode##_cipher,            \
559         aes_##mode##_cleanup,           \
560         sizeof(EVP_AES_##MODE##_CTX),   \
561         NULL,NULL,aes_##mode##_ctrl,NULL }; \
562 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
563 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
564
565 #elif   defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
566
567 # include "sparc_arch.h"
568
569 extern unsigned int OPENSSL_sparcv9cap_P[];
570
571 /*
572  * Initial Fujitsu SPARC64 X support
573  */
574 # define HWAES_CAPABLE           (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX)
575 # define HWAES_set_encrypt_key aes_fx_set_encrypt_key
576 # define HWAES_set_decrypt_key aes_fx_set_decrypt_key
577 # define HWAES_encrypt aes_fx_encrypt
578 # define HWAES_decrypt aes_fx_decrypt
579 # define HWAES_cbc_encrypt aes_fx_cbc_encrypt
580 # define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks
581
582 # define SPARC_AES_CAPABLE       (OPENSSL_sparcv9cap_P[1] & CFR_AES)
583
584 void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
585 void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
586 void aes_t4_encrypt(const unsigned char *in, unsigned char *out,
587                     const AES_KEY *key);
588 void aes_t4_decrypt(const unsigned char *in, unsigned char *out,
589                     const AES_KEY *key);
590 /*
591  * Key-length specific subroutines were chosen for following reason.
592  * Each SPARC T4 core can execute up to 8 threads which share core's
593  * resources. Loading as much key material to registers allows to
594  * minimize references to shared memory interface, as well as amount
595  * of instructions in inner loops [much needed on T4]. But then having
596  * non-key-length specific routines would require conditional branches
597  * either in inner loops or on subroutines' entries. Former is hardly
598  * acceptable, while latter means code size increase to size occupied
599  * by multiple key-length specific subroutines, so why fight?
600  */
601 void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
602                            size_t len, const AES_KEY *key,
603                            unsigned char *ivec);
604 void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
605                            size_t len, const AES_KEY *key,
606                            unsigned char *ivec);
607 void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
608                            size_t len, const AES_KEY *key,
609                            unsigned char *ivec);
610 void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
611                            size_t len, const AES_KEY *key,
612                            unsigned char *ivec);
613 void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
614                            size_t len, const AES_KEY *key,
615                            unsigned char *ivec);
616 void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
617                            size_t len, const AES_KEY *key,
618                            unsigned char *ivec);
619 void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
620                              size_t blocks, const AES_KEY *key,
621                              unsigned char *ivec);
622 void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
623                              size_t blocks, const AES_KEY *key,
624                              unsigned char *ivec);
625 void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
626                              size_t blocks, const AES_KEY *key,
627                              unsigned char *ivec);
628 void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
629                            size_t blocks, const AES_KEY *key1,
630                            const AES_KEY *key2, const unsigned char *ivec);
631 void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
632                            size_t blocks, const AES_KEY *key1,
633                            const AES_KEY *key2, const unsigned char *ivec);
634 void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
635                            size_t blocks, const AES_KEY *key1,
636                            const AES_KEY *key2, const unsigned char *ivec);
637 void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
638                            size_t blocks, const AES_KEY *key1,
639                            const AES_KEY *key2, const unsigned char *ivec);
640
641 static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
642                            const unsigned char *iv, int enc)
643 {
644     int ret, mode, bits;
645     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
646
647     mode = EVP_CIPHER_CTX_mode(ctx);
648     bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
649     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
650         && !enc) {
651         ret = 0;
652         aes_t4_set_decrypt_key(key, bits, &dat->ks.ks);
653         dat->block = (block128_f) aes_t4_decrypt;
654         switch (bits) {
655         case 128:
656             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
657                 (cbc128_f) aes128_t4_cbc_decrypt : NULL;
658             break;
659         case 192:
660             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
661                 (cbc128_f) aes192_t4_cbc_decrypt : NULL;
662             break;
663         case 256:
664             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
665                 (cbc128_f) aes256_t4_cbc_decrypt : NULL;
666             break;
667         default:
668             ret = -1;
669         }
670     } else {
671         ret = 0;
672         aes_t4_set_encrypt_key(key, bits, &dat->ks.ks);
673         dat->block = (block128_f) aes_t4_encrypt;
674         switch (bits) {
675         case 128:
676             if (mode == EVP_CIPH_CBC_MODE)
677                 dat->stream.cbc = (cbc128_f) aes128_t4_cbc_encrypt;
678             else if (mode == EVP_CIPH_CTR_MODE)
679                 dat->stream.ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
680             else
681                 dat->stream.cbc = NULL;
682             break;
683         case 192:
684             if (mode == EVP_CIPH_CBC_MODE)
685                 dat->stream.cbc = (cbc128_f) aes192_t4_cbc_encrypt;
686             else if (mode == EVP_CIPH_CTR_MODE)
687                 dat->stream.ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
688             else
689                 dat->stream.cbc = NULL;
690             break;
691         case 256:
692             if (mode == EVP_CIPH_CBC_MODE)
693                 dat->stream.cbc = (cbc128_f) aes256_t4_cbc_encrypt;
694             else if (mode == EVP_CIPH_CTR_MODE)
695                 dat->stream.ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
696             else
697                 dat->stream.cbc = NULL;
698             break;
699         default:
700             ret = -1;
701         }
702     }
703
704     if (ret < 0) {
705         EVPerr(EVP_F_AES_T4_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
706         return 0;
707     }
708
709     return 1;
710 }
711
712 # define aes_t4_cbc_cipher aes_cbc_cipher
713 static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
714                              const unsigned char *in, size_t len);
715
716 # define aes_t4_ecb_cipher aes_ecb_cipher
717 static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
718                              const unsigned char *in, size_t len);
719
720 # define aes_t4_ofb_cipher aes_ofb_cipher
721 static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
722                              const unsigned char *in, size_t len);
723
724 # define aes_t4_cfb_cipher aes_cfb_cipher
725 static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
726                              const unsigned char *in, size_t len);
727
728 # define aes_t4_cfb8_cipher aes_cfb8_cipher
729 static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
730                               const unsigned char *in, size_t len);
731
732 # define aes_t4_cfb1_cipher aes_cfb1_cipher
733 static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
734                               const unsigned char *in, size_t len);
735
736 # define aes_t4_ctr_cipher aes_ctr_cipher
737 static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
738                              const unsigned char *in, size_t len);
739
740 static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
741                                const unsigned char *iv, int enc)
742 {
743     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
744     if (!iv && !key)
745         return 1;
746     if (key) {
747         int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
748         aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks);
749         CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
750                            (block128_f) aes_t4_encrypt);
751         switch (bits) {
752         case 128:
753             gctx->ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
754             break;
755         case 192:
756             gctx->ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
757             break;
758         case 256:
759             gctx->ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
760             break;
761         default:
762             return 0;
763         }
764         /*
765          * If we have an iv can set it directly, otherwise use saved IV.
766          */
767         if (iv == NULL && gctx->iv_set)
768             iv = gctx->iv;
769         if (iv) {
770             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
771             gctx->iv_set = 1;
772         }
773         gctx->key_set = 1;
774     } else {
775         /* If key set use IV, otherwise copy */
776         if (gctx->key_set)
777             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
778         else
779             memcpy(gctx->iv, iv, gctx->ivlen);
780         gctx->iv_set = 1;
781         gctx->iv_gen = 0;
782     }
783     return 1;
784 }
785
786 # define aes_t4_gcm_cipher aes_gcm_cipher
787 static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
788                              const unsigned char *in, size_t len);
789
790 static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
791                                const unsigned char *iv, int enc)
792 {
793     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
794     if (!iv && !key)
795         return 1;
796
797     if (key) {
798         int bits = EVP_CIPHER_CTX_key_length(ctx) * 4;
799         xctx->stream = NULL;
800         /* key_len is two AES keys */
801         if (enc) {
802             aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks);
803             xctx->xts.block1 = (block128_f) aes_t4_encrypt;
804             switch (bits) {
805             case 128:
806                 xctx->stream = aes128_t4_xts_encrypt;
807                 break;
808             case 256:
809                 xctx->stream = aes256_t4_xts_encrypt;
810                 break;
811             default:
812                 return 0;
813             }
814         } else {
815             aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
816                                    &xctx->ks1.ks);
817             xctx->xts.block1 = (block128_f) aes_t4_decrypt;
818             switch (bits) {
819             case 128:
820                 xctx->stream = aes128_t4_xts_decrypt;
821                 break;
822             case 256:
823                 xctx->stream = aes256_t4_xts_decrypt;
824                 break;
825             default:
826                 return 0;
827             }
828         }
829
830         aes_t4_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
831                                EVP_CIPHER_CTX_key_length(ctx) * 4,
832                                &xctx->ks2.ks);
833         xctx->xts.block2 = (block128_f) aes_t4_encrypt;
834
835         xctx->xts.key1 = &xctx->ks1;
836     }
837
838     if (iv) {
839         xctx->xts.key2 = &xctx->ks2;
840         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
841     }
842
843     return 1;
844 }
845
846 # define aes_t4_xts_cipher aes_xts_cipher
847 static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
848                              const unsigned char *in, size_t len);
849
850 static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
851                                const unsigned char *iv, int enc)
852 {
853     EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
854     if (!iv && !key)
855         return 1;
856     if (key) {
857         int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
858         aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks);
859         CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
860                            &cctx->ks, (block128_f) aes_t4_encrypt);
861         cctx->str = NULL;
862         cctx->key_set = 1;
863     }
864     if (iv) {
865         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
866         cctx->iv_set = 1;
867     }
868     return 1;
869 }
870
871 # define aes_t4_ccm_cipher aes_ccm_cipher
872 static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
873                              const unsigned char *in, size_t len);
874
875 # ifndef OPENSSL_NO_OCB
876 static int aes_t4_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
877                                const unsigned char *iv, int enc)
878 {
879     EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
880     if (!iv && !key)
881         return 1;
882     if (key) {
883         do {
884             /*
885              * We set both the encrypt and decrypt key here because decrypt
886              * needs both. We could possibly optimise to remove setting the
887              * decrypt for an encryption operation.
888              */
889             aes_t4_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
890                                    &octx->ksenc.ks);
891             aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
892                                    &octx->ksdec.ks);
893             if (!CRYPTO_ocb128_init(&octx->ocb,
894                                     &octx->ksenc.ks, &octx->ksdec.ks,
895                                     (block128_f) aes_t4_encrypt,
896                                     (block128_f) aes_t4_decrypt,
897                                     NULL))
898                 return 0;
899         }
900         while (0);
901
902         /*
903          * If we have an iv we can set it directly, otherwise use saved IV.
904          */
905         if (iv == NULL && octx->iv_set)
906             iv = octx->iv;
907         if (iv) {
908             if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
909                 != 1)
910                 return 0;
911             octx->iv_set = 1;
912         }
913         octx->key_set = 1;
914     } else {
915         /* If key set use IV, otherwise copy */
916         if (octx->key_set)
917             CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
918         else
919             memcpy(octx->iv, iv, octx->ivlen);
920         octx->iv_set = 1;
921     }
922     return 1;
923 }
924
925 #  define aes_t4_ocb_cipher aes_ocb_cipher
926 static int aes_t4_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
927                              const unsigned char *in, size_t len);
928 # endif                        /* OPENSSL_NO_OCB */
929
930 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
931 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
932         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
933         flags|EVP_CIPH_##MODE##_MODE,   \
934         aes_t4_init_key,                \
935         aes_t4_##mode##_cipher,         \
936         NULL,                           \
937         sizeof(EVP_AES_KEY),            \
938         NULL,NULL,NULL,NULL }; \
939 static const EVP_CIPHER aes_##keylen##_##mode = { \
940         nid##_##keylen##_##nmode,blocksize,     \
941         keylen/8,ivlen, \
942         flags|EVP_CIPH_##MODE##_MODE,   \
943         aes_init_key,                   \
944         aes_##mode##_cipher,            \
945         NULL,                           \
946         sizeof(EVP_AES_KEY),            \
947         NULL,NULL,NULL,NULL }; \
948 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
949 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
950
951 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
952 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
953         nid##_##keylen##_##mode,blocksize, \
954         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
955         ivlen,                          \
956         flags|EVP_CIPH_##MODE##_MODE,   \
957         aes_t4_##mode##_init_key,       \
958         aes_t4_##mode##_cipher,         \
959         aes_##mode##_cleanup,           \
960         sizeof(EVP_AES_##MODE##_CTX),   \
961         NULL,NULL,aes_##mode##_ctrl,NULL }; \
962 static const EVP_CIPHER aes_##keylen##_##mode = { \
963         nid##_##keylen##_##mode,blocksize, \
964         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
965         ivlen,                          \
966         flags|EVP_CIPH_##MODE##_MODE,   \
967         aes_##mode##_init_key,          \
968         aes_##mode##_cipher,            \
969         aes_##mode##_cleanup,           \
970         sizeof(EVP_AES_##MODE##_CTX),   \
971         NULL,NULL,aes_##mode##_ctrl,NULL }; \
972 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
973 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
974
975 #elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
976 /*
977  * IBM S390X support
978  */
979 # include "s390x_arch.h"
980
981 typedef struct {
982     union {
983         double align;
984         /*-
985          * KM-AES parameter block - begin
986          * (see z/Architecture Principles of Operation >= SA22-7832-06)
987          */
988         struct {
989             unsigned char k[32];
990         } param;
991         /* KM-AES parameter block - end */
992     } km;
993     unsigned int fc;
994 } S390X_AES_ECB_CTX;
995
996 typedef struct {
997     union {
998         double align;
999         /*-
1000          * KMO-AES parameter block - begin
1001          * (see z/Architecture Principles of Operation >= SA22-7832-08)
1002          */
1003         struct {
1004             unsigned char cv[16];
1005             unsigned char k[32];
1006         } param;
1007         /* KMO-AES parameter block - end */
1008     } kmo;
1009     unsigned int fc;
1010
1011     int res;
1012 } S390X_AES_OFB_CTX;
1013
1014 typedef struct {
1015     union {
1016         double align;
1017         /*-
1018          * KMF-AES parameter block - begin
1019          * (see z/Architecture Principles of Operation >= SA22-7832-08)
1020          */
1021         struct {
1022             unsigned char cv[16];
1023             unsigned char k[32];
1024         } param;
1025         /* KMF-AES parameter block - end */
1026     } kmf;
1027     unsigned int fc;
1028
1029     int res;
1030 } S390X_AES_CFB_CTX;
1031
1032 typedef struct {
1033     union {
1034         double align;
1035         /*-
1036          * KMA-GCM-AES parameter block - begin
1037          * (see z/Architecture Principles of Operation >= SA22-7832-11)
1038          */
1039         struct {
1040             unsigned char reserved[12];
1041             union {
1042                 unsigned int w;
1043                 unsigned char b[4];
1044             } cv;
1045             union {
1046                 unsigned long long g[2];
1047                 unsigned char b[16];
1048             } t;
1049             unsigned char h[16];
1050             unsigned long long taadl;
1051             unsigned long long tpcl;
1052             union {
1053                 unsigned long long g[2];
1054                 unsigned int w[4];
1055             } j0;
1056             unsigned char k[32];
1057         } param;
1058         /* KMA-GCM-AES parameter block - end */
1059     } kma;
1060     unsigned int fc;
1061     int key_set;
1062
1063     unsigned char *iv;
1064     int ivlen;
1065     int iv_set;
1066     int iv_gen;
1067
1068     int taglen;
1069
1070     unsigned char ares[16];
1071     unsigned char mres[16];
1072     unsigned char kres[16];
1073     int areslen;
1074     int mreslen;
1075     int kreslen;
1076
1077     int tls_aad_len;
1078     uint64_t tls_enc_records;   /* Number of TLS records encrypted */
1079 } S390X_AES_GCM_CTX;
1080
1081 typedef struct {
1082     union {
1083         double align;
1084         /*-
1085          * Padding is chosen so that ccm.kmac_param.k overlaps with key.k and
1086          * ccm.fc with key.k.rounds. Remember that on s390x, an AES_KEY's
1087          * rounds field is used to store the function code and that the key
1088          * schedule is not stored (if aes hardware support is detected).
1089          */
1090         struct {
1091             unsigned char pad[16];
1092             AES_KEY k;
1093         } key;
1094
1095         struct {
1096             /*-
1097              * KMAC-AES parameter block - begin
1098              * (see z/Architecture Principles of Operation >= SA22-7832-08)
1099              */
1100             struct {
1101                 union {
1102                     unsigned long long g[2];
1103                     unsigned char b[16];
1104                 } icv;
1105                 unsigned char k[32];
1106             } kmac_param;
1107             /* KMAC-AES paramater block - end */
1108
1109             union {
1110                 unsigned long long g[2];
1111                 unsigned char b[16];
1112             } nonce;
1113             union {
1114                 unsigned long long g[2];
1115                 unsigned char b[16];
1116             } buf;
1117
1118             unsigned long long blocks;
1119             int l;
1120             int m;
1121             int tls_aad_len;
1122             int iv_set;
1123             int tag_set;
1124             int len_set;
1125             int key_set;
1126
1127             unsigned char pad[140];
1128             unsigned int fc;
1129         } ccm;
1130     } aes;
1131 } S390X_AES_CCM_CTX;
1132
1133 /* Convert key size to function code: [16,24,32] -> [18,19,20]. */
1134 # define S390X_AES_FC(keylen)  (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6))
1135
1136 /* Most modes of operation need km for partial block processing. */
1137 # define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1138                                 S390X_CAPBIT(S390X_AES_128))
1139 # define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1140                                 S390X_CAPBIT(S390X_AES_192))
1141 # define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1142                                 S390X_CAPBIT(S390X_AES_256))
1143
1144 # define s390x_aes_init_key aes_init_key
1145 static int s390x_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1146                               const unsigned char *iv, int enc);
1147
1148 # define S390X_aes_128_cbc_CAPABLE      1       /* checked by callee */
1149 # define S390X_aes_192_cbc_CAPABLE      1
1150 # define S390X_aes_256_cbc_CAPABLE      1
1151 # define S390X_AES_CBC_CTX              EVP_AES_KEY
1152
1153 # define s390x_aes_cbc_init_key aes_init_key
1154
1155 # define s390x_aes_cbc_cipher aes_cbc_cipher
1156 static int s390x_aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1157                                 const unsigned char *in, size_t len);
1158
1159 # define S390X_aes_128_ecb_CAPABLE      S390X_aes_128_CAPABLE
1160 # define S390X_aes_192_ecb_CAPABLE      S390X_aes_192_CAPABLE
1161 # define S390X_aes_256_ecb_CAPABLE      S390X_aes_256_CAPABLE
1162
1163 static int s390x_aes_ecb_init_key(EVP_CIPHER_CTX *ctx,
1164                                   const unsigned char *key,
1165                                   const unsigned char *iv, int enc)
1166 {
1167     S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx);
1168     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1169
1170     cctx->fc = S390X_AES_FC(keylen);
1171     if (!enc)
1172         cctx->fc |= S390X_DECRYPT;
1173
1174     memcpy(cctx->km.param.k, key, keylen);
1175     return 1;
1176 }
1177
1178 static int s390x_aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1179                                 const unsigned char *in, size_t len)
1180 {
1181     S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx);
1182
1183     s390x_km(in, len, out, cctx->fc, &cctx->km.param);
1184     return 1;
1185 }
1186
1187 # define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE &&            \
1188                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1189                                      S390X_CAPBIT(S390X_AES_128)))
1190 # define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE &&            \
1191                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1192                                      S390X_CAPBIT(S390X_AES_192)))
1193 # define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE &&            \
1194                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1195                                      S390X_CAPBIT(S390X_AES_256)))
1196
1197 static int s390x_aes_ofb_init_key(EVP_CIPHER_CTX *ctx,
1198                                   const unsigned char *key,
1199                                   const unsigned char *ivec, int enc)
1200 {
1201     S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx);
1202     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1203     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1204     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1205
1206     memcpy(cctx->kmo.param.cv, iv, ivlen);
1207     memcpy(cctx->kmo.param.k, key, keylen);
1208     cctx->fc = S390X_AES_FC(keylen);
1209     cctx->res = 0;
1210     return 1;
1211 }
1212
1213 static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1214                                 const unsigned char *in, size_t len)
1215 {
1216     S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx);
1217     int n = cctx->res;
1218     int rem;
1219
1220     while (n && len) {
1221         *out = *in ^ cctx->kmo.param.cv[n];
1222         n = (n + 1) & 0xf;
1223         --len;
1224         ++in;
1225         ++out;
1226     }
1227
1228     rem = len & 0xf;
1229
1230     len &= ~(size_t)0xf;
1231     if (len) {
1232         s390x_kmo(in, len, out, cctx->fc, &cctx->kmo.param);
1233
1234         out += len;
1235         in += len;
1236     }
1237
1238     if (rem) {
1239         s390x_km(cctx->kmo.param.cv, 16, cctx->kmo.param.cv, cctx->fc,
1240                  cctx->kmo.param.k);
1241
1242         while (rem--) {
1243             out[n] = in[n] ^ cctx->kmo.param.cv[n];
1244             ++n;
1245         }
1246     }
1247
1248     cctx->res = n;
1249     return 1;
1250 }
1251
1252 # define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE &&            \
1253                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1254                                      S390X_CAPBIT(S390X_AES_128)))
1255 # define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE &&            \
1256                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1257                                      S390X_CAPBIT(S390X_AES_192)))
1258 # define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE &&            \
1259                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1260                                      S390X_CAPBIT(S390X_AES_256)))
1261
1262 static int s390x_aes_cfb_init_key(EVP_CIPHER_CTX *ctx,
1263                                   const unsigned char *key,
1264                                   const unsigned char *ivec, int enc)
1265 {
1266     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1267     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1268     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1269     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1270
1271     cctx->fc = S390X_AES_FC(keylen);
1272     cctx->fc |= 16 << 24;   /* 16 bytes cipher feedback */
1273     if (!enc)
1274         cctx->fc |= S390X_DECRYPT;
1275
1276     cctx->res = 0;
1277     memcpy(cctx->kmf.param.cv, iv, ivlen);
1278     memcpy(cctx->kmf.param.k, key, keylen);
1279     return 1;
1280 }
1281
1282 static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1283                                 const unsigned char *in, size_t len)
1284 {
1285     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1286     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1287     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
1288     int n = cctx->res;
1289     int rem;
1290     unsigned char tmp;
1291
1292     while (n && len) {
1293         tmp = *in;
1294         *out = cctx->kmf.param.cv[n] ^ tmp;
1295         cctx->kmf.param.cv[n] = enc ? *out : tmp;
1296         n = (n + 1) & 0xf;
1297         --len;
1298         ++in;
1299         ++out;
1300     }
1301
1302     rem = len & 0xf;
1303
1304     len &= ~(size_t)0xf;
1305     if (len) {
1306         s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param);
1307
1308         out += len;
1309         in += len;
1310     }
1311
1312     if (rem) {
1313         s390x_km(cctx->kmf.param.cv, 16, cctx->kmf.param.cv,
1314                  S390X_AES_FC(keylen), cctx->kmf.param.k);
1315
1316         while (rem--) {
1317             tmp = in[n];
1318             out[n] = cctx->kmf.param.cv[n] ^ tmp;
1319             cctx->kmf.param.cv[n] = enc ? out[n] : tmp;
1320             ++n;
1321         }
1322     }
1323
1324     cctx->res = n;
1325     return 1;
1326 }
1327
1328 # define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1329                                      S390X_CAPBIT(S390X_AES_128))
1330 # define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1331                                      S390X_CAPBIT(S390X_AES_192))
1332 # define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1333                                      S390X_CAPBIT(S390X_AES_256))
1334
1335 static int s390x_aes_cfb8_init_key(EVP_CIPHER_CTX *ctx,
1336                                    const unsigned char *key,
1337                                    const unsigned char *ivec, int enc)
1338 {
1339     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1340     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1341     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1342     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1343
1344     cctx->fc = S390X_AES_FC(keylen);
1345     cctx->fc |= 1 << 24;   /* 1 byte cipher feedback */
1346     if (!enc)
1347         cctx->fc |= S390X_DECRYPT;
1348
1349     memcpy(cctx->kmf.param.cv, iv, ivlen);
1350     memcpy(cctx->kmf.param.k, key, keylen);
1351     return 1;
1352 }
1353
1354 static int s390x_aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1355                                  const unsigned char *in, size_t len)
1356 {
1357     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1358
1359     s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param);
1360     return 1;
1361 }
1362
1363 # define S390X_aes_128_cfb1_CAPABLE     0
1364 # define S390X_aes_192_cfb1_CAPABLE     0
1365 # define S390X_aes_256_cfb1_CAPABLE     0
1366
1367 # define s390x_aes_cfb1_init_key aes_init_key
1368
1369 # define s390x_aes_cfb1_cipher aes_cfb1_cipher
1370 static int s390x_aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1371                                  const unsigned char *in, size_t len);
1372
1373 # define S390X_aes_128_ctr_CAPABLE      1       /* checked by callee */
1374 # define S390X_aes_192_ctr_CAPABLE      1
1375 # define S390X_aes_256_ctr_CAPABLE      1
1376 # define S390X_AES_CTR_CTX              EVP_AES_KEY
1377
1378 # define s390x_aes_ctr_init_key aes_init_key
1379
1380 # define s390x_aes_ctr_cipher aes_ctr_cipher
1381 static int s390x_aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1382                                 const unsigned char *in, size_t len);
1383
1384 # define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE &&            \
1385                                     (OPENSSL_s390xcap_P.kma[0] &        \
1386                                      S390X_CAPBIT(S390X_AES_128)))
1387 # define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE &&            \
1388                                     (OPENSSL_s390xcap_P.kma[0] &        \
1389                                      S390X_CAPBIT(S390X_AES_192)))
1390 # define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE &&            \
1391                                     (OPENSSL_s390xcap_P.kma[0] &        \
1392                                      S390X_CAPBIT(S390X_AES_256)))
1393
1394 /* iv + padding length for iv lenghts != 12 */
1395 # define S390X_gcm_ivpadlen(i)  ((((i) + 15) >> 4 << 4) + 16)
1396
1397 /*-
1398  * Process additional authenticated data. Returns 0 on success. Code is
1399  * big-endian.
1400  */
1401 static int s390x_aes_gcm_aad(S390X_AES_GCM_CTX *ctx, const unsigned char *aad,
1402                              size_t len)
1403 {
1404     unsigned long long alen;
1405     int n, rem;
1406
1407     if (ctx->kma.param.tpcl)
1408         return -2;
1409
1410     alen = ctx->kma.param.taadl + len;
1411     if (alen > (U64(1) << 61) || (sizeof(len) == 8 && alen < len))
1412         return -1;
1413     ctx->kma.param.taadl = alen;
1414
1415     n = ctx->areslen;
1416     if (n) {
1417         while (n && len) {
1418             ctx->ares[n] = *aad;
1419             n = (n + 1) & 0xf;
1420             ++aad;
1421             --len;
1422         }
1423         /* ctx->ares contains a complete block if offset has wrapped around */
1424         if (!n) {
1425             s390x_kma(ctx->ares, 16, NULL, 0, NULL, ctx->fc, &ctx->kma.param);
1426             ctx->fc |= S390X_KMA_HS;
1427         }
1428         ctx->areslen = n;
1429     }
1430
1431     rem = len & 0xf;
1432
1433     len &= ~(size_t)0xf;
1434     if (len) {
1435         s390x_kma(aad, len, NULL, 0, NULL, ctx->fc, &ctx->kma.param);
1436         aad += len;
1437         ctx->fc |= S390X_KMA_HS;
1438     }
1439
1440     if (rem) {
1441         ctx->areslen = rem;
1442
1443         do {
1444             --rem;
1445             ctx->ares[rem] = aad[rem];
1446         } while (rem);
1447     }
1448     return 0;
1449 }
1450
1451 /*-
1452  * En/de-crypt plain/cipher-text and authenticate ciphertext. Returns 0 for
1453  * success. Code is big-endian.
1454  */
1455 static int s390x_aes_gcm(S390X_AES_GCM_CTX *ctx, const unsigned char *in,
1456                          unsigned char *out, size_t len)
1457 {
1458     const unsigned char *inptr;
1459     unsigned long long mlen;
1460     union {
1461         unsigned int w[4];
1462         unsigned char b[16];
1463     } buf;
1464     size_t inlen;
1465     int n, rem, i;
1466
1467     mlen = ctx->kma.param.tpcl + len;
1468     if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len))
1469         return -1;
1470     ctx->kma.param.tpcl = mlen;
1471
1472     n = ctx->mreslen;
1473     if (n) {
1474         inptr = in;
1475         inlen = len;
1476         while (n && inlen) {
1477             ctx->mres[n] = *inptr;
1478             n = (n + 1) & 0xf;
1479             ++inptr;
1480             --inlen;
1481         }
1482         /* ctx->mres contains a complete block if offset has wrapped around */
1483         if (!n) {
1484             s390x_kma(ctx->ares, ctx->areslen, ctx->mres, 16, buf.b,
1485                       ctx->fc | S390X_KMA_LAAD, &ctx->kma.param);
1486             ctx->fc |= S390X_KMA_HS;
1487             ctx->areslen = 0;
1488
1489             /* previous call already encrypted/decrypted its remainder,
1490              * see comment below */
1491             n = ctx->mreslen;
1492             while (n) {
1493                 *out = buf.b[n];
1494                 n = (n + 1) & 0xf;
1495                 ++out;
1496                 ++in;
1497                 --len;
1498             }
1499             ctx->mreslen = 0;
1500         }
1501     }
1502
1503     rem = len & 0xf;
1504
1505     len &= ~(size_t)0xf;
1506     if (len) {
1507         s390x_kma(ctx->ares, ctx->areslen, in, len, out,
1508                   ctx->fc | S390X_KMA_LAAD, &ctx->kma.param);
1509         in += len;
1510         out += len;
1511         ctx->fc |= S390X_KMA_HS;
1512         ctx->areslen = 0;
1513     }
1514
1515     /*-
1516      * If there is a remainder, it has to be saved such that it can be
1517      * processed by kma later. However, we also have to do the for-now
1518      * unauthenticated encryption/decryption part here and now...
1519      */
1520     if (rem) {
1521         if (!ctx->mreslen) {
1522             buf.w[0] = ctx->kma.param.j0.w[0];
1523             buf.w[1] = ctx->kma.param.j0.w[1];
1524             buf.w[2] = ctx->kma.param.j0.w[2];
1525             buf.w[3] = ctx->kma.param.cv.w + 1;
1526             s390x_km(buf.b, 16, ctx->kres, ctx->fc & 0x1f, &ctx->kma.param.k);
1527         }
1528
1529         n = ctx->mreslen;
1530         for (i = 0; i < rem; i++) {
1531             ctx->mres[n + i] = in[i];
1532             out[i] = in[i] ^ ctx->kres[n + i];
1533         }
1534
1535         ctx->mreslen += rem;
1536     }
1537     return 0;
1538 }
1539
1540 /*-
1541  * Initialize context structure. Code is big-endian.
1542  */
1543 static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx,
1544                                 const unsigned char *iv)
1545 {
1546     ctx->kma.param.t.g[0] = 0;
1547     ctx->kma.param.t.g[1] = 0;
1548     ctx->kma.param.tpcl = 0;
1549     ctx->kma.param.taadl = 0;
1550     ctx->mreslen = 0;
1551     ctx->areslen = 0;
1552     ctx->kreslen = 0;
1553
1554     if (ctx->ivlen == 12) {
1555         memcpy(&ctx->kma.param.j0, iv, ctx->ivlen);
1556         ctx->kma.param.j0.w[3] = 1;
1557         ctx->kma.param.cv.w = 1;
1558     } else {
1559         /* ctx->iv has the right size and is already padded. */
1560         memcpy(ctx->iv, iv, ctx->ivlen);
1561         s390x_kma(ctx->iv, S390X_gcm_ivpadlen(ctx->ivlen), NULL, 0, NULL,
1562                   ctx->fc, &ctx->kma.param);
1563         ctx->fc |= S390X_KMA_HS;
1564
1565         ctx->kma.param.j0.g[0] = ctx->kma.param.t.g[0];
1566         ctx->kma.param.j0.g[1] = ctx->kma.param.t.g[1];
1567         ctx->kma.param.cv.w = ctx->kma.param.j0.w[3];
1568         ctx->kma.param.t.g[0] = 0;
1569         ctx->kma.param.t.g[1] = 0;
1570     }
1571 }
1572
1573 /*-
1574  * Performs various operations on the context structure depending on control
1575  * type. Returns 1 for success, 0 for failure and -1 for unknown control type.
1576  * Code is big-endian.
1577  */
1578 static int s390x_aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1579 {
1580     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c);
1581     S390X_AES_GCM_CTX *gctx_out;
1582     EVP_CIPHER_CTX *out;
1583     unsigned char *buf, *iv;
1584     int ivlen, enc, len;
1585
1586     switch (type) {
1587     case EVP_CTRL_INIT:
1588         ivlen = EVP_CIPHER_CTX_iv_length(c);
1589         iv = EVP_CIPHER_CTX_iv_noconst(c);
1590         gctx->key_set = 0;
1591         gctx->iv_set = 0;
1592         gctx->ivlen = ivlen;
1593         gctx->iv = iv;
1594         gctx->taglen = -1;
1595         gctx->iv_gen = 0;
1596         gctx->tls_aad_len = -1;
1597         return 1;
1598
1599     case EVP_CTRL_AEAD_SET_IVLEN:
1600         if (arg <= 0)
1601             return 0;
1602
1603         if (arg != 12) {
1604             iv = EVP_CIPHER_CTX_iv_noconst(c);
1605             len = S390X_gcm_ivpadlen(arg);
1606
1607             /* Allocate memory for iv if needed. */
1608             if (gctx->ivlen == 12 || len > S390X_gcm_ivpadlen(gctx->ivlen)) {
1609                 if (gctx->iv != iv)
1610                     OPENSSL_free(gctx->iv);
1611
1612                 if ((gctx->iv = OPENSSL_malloc(len)) == NULL) {
1613                     EVPerr(EVP_F_S390X_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
1614                     return 0;
1615                 }
1616             }
1617             /* Add padding. */
1618             memset(gctx->iv + arg, 0, len - arg - 8);
1619             *((unsigned long long *)(gctx->iv + len - 8)) = arg << 3;
1620         }
1621         gctx->ivlen = arg;
1622         return 1;
1623
1624     case EVP_CTRL_AEAD_SET_TAG:
1625         buf = EVP_CIPHER_CTX_buf_noconst(c);
1626         enc = EVP_CIPHER_CTX_encrypting(c);
1627         if (arg <= 0 || arg > 16 || enc)
1628             return 0;
1629
1630         memcpy(buf, ptr, arg);
1631         gctx->taglen = arg;
1632         return 1;
1633
1634     case EVP_CTRL_AEAD_GET_TAG:
1635         enc = EVP_CIPHER_CTX_encrypting(c);
1636         if (arg <= 0 || arg > 16 || !enc || gctx->taglen < 0)
1637             return 0;
1638
1639         memcpy(ptr, gctx->kma.param.t.b, arg);
1640         return 1;
1641
1642     case EVP_CTRL_GCM_SET_IV_FIXED:
1643         /* Special case: -1 length restores whole iv */
1644         if (arg == -1) {
1645             memcpy(gctx->iv, ptr, gctx->ivlen);
1646             gctx->iv_gen = 1;
1647             return 1;
1648         }
1649         /*
1650          * Fixed field must be at least 4 bytes and invocation field at least
1651          * 8.
1652          */
1653         if ((arg < 4) || (gctx->ivlen - arg) < 8)
1654             return 0;
1655
1656         if (arg)
1657             memcpy(gctx->iv, ptr, arg);
1658
1659         enc = EVP_CIPHER_CTX_encrypting(c);
1660         if (enc && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
1661             return 0;
1662
1663         gctx->iv_gen = 1;
1664         return 1;
1665
1666     case EVP_CTRL_GCM_IV_GEN:
1667         if (gctx->iv_gen == 0 || gctx->key_set == 0)
1668             return 0;
1669
1670         s390x_aes_gcm_setiv(gctx, gctx->iv);
1671
1672         if (arg <= 0 || arg > gctx->ivlen)
1673             arg = gctx->ivlen;
1674
1675         memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
1676         /*
1677          * Invocation field will be at least 8 bytes in size and so no need
1678          * to check wrap around or increment more than last 8 bytes.
1679          */
1680         ctr64_inc(gctx->iv + gctx->ivlen - 8);
1681         gctx->iv_set = 1;
1682         return 1;
1683
1684     case EVP_CTRL_GCM_SET_IV_INV:
1685         enc = EVP_CIPHER_CTX_encrypting(c);
1686         if (gctx->iv_gen == 0 || gctx->key_set == 0 || enc)
1687             return 0;
1688
1689         memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
1690         s390x_aes_gcm_setiv(gctx, gctx->iv);
1691         gctx->iv_set = 1;
1692         return 1;
1693
1694     case EVP_CTRL_AEAD_TLS1_AAD:
1695         /* Save the aad for later use. */
1696         if (arg != EVP_AEAD_TLS1_AAD_LEN)
1697             return 0;
1698
1699         buf = EVP_CIPHER_CTX_buf_noconst(c);
1700         memcpy(buf, ptr, arg);
1701         gctx->tls_aad_len = arg;
1702         gctx->tls_enc_records = 0;
1703
1704         len = buf[arg - 2] << 8 | buf[arg - 1];
1705         /* Correct length for explicit iv. */
1706         if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN)
1707             return 0;
1708         len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
1709
1710         /* If decrypting correct for tag too. */
1711         enc = EVP_CIPHER_CTX_encrypting(c);
1712         if (!enc) {
1713             if (len < EVP_GCM_TLS_TAG_LEN)
1714                 return 0;
1715             len -= EVP_GCM_TLS_TAG_LEN;
1716         }
1717         buf[arg - 2] = len >> 8;
1718         buf[arg - 1] = len & 0xff;
1719         /* Extra padding: tag appended to record. */
1720         return EVP_GCM_TLS_TAG_LEN;
1721
1722     case EVP_CTRL_COPY:
1723         out = ptr;
1724         gctx_out = EVP_C_DATA(S390X_AES_GCM_CTX, out);
1725         iv = EVP_CIPHER_CTX_iv_noconst(c);
1726
1727         if (gctx->iv == iv) {
1728             gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out);
1729         } else {
1730             len = S390X_gcm_ivpadlen(gctx->ivlen);
1731
1732             if ((gctx_out->iv = OPENSSL_malloc(len)) == NULL) {
1733                 EVPerr(EVP_F_S390X_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
1734                 return 0;
1735             }
1736
1737             memcpy(gctx_out->iv, gctx->iv, len);
1738         }
1739         return 1;
1740
1741     default:
1742         return -1;
1743     }
1744 }
1745
1746 /*-
1747  * Set key and/or iv. Returns 1 on success. Otherwise 0 is returned.
1748  */
1749 static int s390x_aes_gcm_init_key(EVP_CIPHER_CTX *ctx,
1750                                   const unsigned char *key,
1751                                   const unsigned char *iv, int enc)
1752 {
1753     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1754     int keylen;
1755
1756     if (iv == NULL && key == NULL)
1757         return 1;
1758
1759     if (key != NULL) {
1760         keylen = EVP_CIPHER_CTX_key_length(ctx);
1761         memcpy(&gctx->kma.param.k, key, keylen);
1762
1763         gctx->fc = S390X_AES_FC(keylen);
1764         if (!enc)
1765             gctx->fc |= S390X_DECRYPT;
1766
1767         if (iv == NULL && gctx->iv_set)
1768             iv = gctx->iv;
1769
1770         if (iv != NULL) {
1771             s390x_aes_gcm_setiv(gctx, iv);
1772             gctx->iv_set = 1;
1773         }
1774         gctx->key_set = 1;
1775     } else {
1776         if (gctx->key_set)
1777             s390x_aes_gcm_setiv(gctx, iv);
1778         else
1779             memcpy(gctx->iv, iv, gctx->ivlen);
1780
1781         gctx->iv_set = 1;
1782         gctx->iv_gen = 0;
1783     }
1784     return 1;
1785 }
1786
1787 /*-
1788  * En/de-crypt and authenticate TLS packet. Returns the number of bytes written
1789  * if successful. Otherwise -1 is returned. Code is big-endian.
1790  */
1791 static int s390x_aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1792                                     const unsigned char *in, size_t len)
1793 {
1794     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1795     const unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
1796     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
1797     int rv = -1;
1798
1799     if (out != in || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
1800         return -1;
1801
1802     /*
1803      * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness
1804      * Requirements from SP 800-38D".  The requirements is for one party to the
1805      * communication to fail after 2^64 - 1 keys.  We do this on the encrypting
1806      * side only.
1807      */
1808     if (ctx->encrypt && ++gctx->tls_enc_records == 0) {
1809         EVPerr(EVP_F_S390X_AES_GCM_TLS_CIPHER, EVP_R_TOO_MANY_RECORDS);
1810         goto err;
1811     }
1812
1813     if (EVP_CIPHER_CTX_ctrl(ctx, enc ? EVP_CTRL_GCM_IV_GEN
1814                                      : EVP_CTRL_GCM_SET_IV_INV,
1815                             EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
1816         goto err;
1817
1818     in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1819     out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1820     len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1821
1822     gctx->kma.param.taadl = gctx->tls_aad_len << 3;
1823     gctx->kma.param.tpcl = len << 3;
1824     s390x_kma(buf, gctx->tls_aad_len, in, len, out,
1825               gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param);
1826
1827     if (enc) {
1828         memcpy(out + len, gctx->kma.param.t.b, EVP_GCM_TLS_TAG_LEN);
1829         rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1830     } else {
1831         if (CRYPTO_memcmp(gctx->kma.param.t.b, in + len,
1832                           EVP_GCM_TLS_TAG_LEN)) {
1833             OPENSSL_cleanse(out, len);
1834             goto err;
1835         }
1836         rv = len;
1837     }
1838 err:
1839     gctx->iv_set = 0;
1840     gctx->tls_aad_len = -1;
1841     return rv;
1842 }
1843
1844 /*-
1845  * Called from EVP layer to initialize context, process additional
1846  * authenticated data, en/de-crypt plain/cipher-text and authenticate
1847  * ciphertext or process a TLS packet, depending on context. Returns bytes
1848  * written on success. Otherwise -1 is returned. Code is big-endian.
1849  */
1850 static int s390x_aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1851                                 const unsigned char *in, size_t len)
1852 {
1853     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1854     unsigned char *buf, tmp[16];
1855     int enc;
1856
1857     if (!gctx->key_set)
1858         return -1;
1859
1860     if (gctx->tls_aad_len >= 0)
1861         return s390x_aes_gcm_tls_cipher(ctx, out, in, len);
1862
1863     if (!gctx->iv_set)
1864         return -1;
1865
1866     if (in != NULL) {
1867         if (out == NULL) {
1868             if (s390x_aes_gcm_aad(gctx, in, len))
1869                 return -1;
1870         } else {
1871             if (s390x_aes_gcm(gctx, in, out, len))
1872                 return -1;
1873         }
1874         return len;
1875     } else {
1876         gctx->kma.param.taadl <<= 3;
1877         gctx->kma.param.tpcl <<= 3;
1878         s390x_kma(gctx->ares, gctx->areslen, gctx->mres, gctx->mreslen, tmp,
1879                   gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param);
1880         /* recall that we already did en-/decrypt gctx->mres
1881          * and returned it to caller... */
1882         OPENSSL_cleanse(tmp, gctx->mreslen);
1883         gctx->iv_set = 0;
1884
1885         enc = EVP_CIPHER_CTX_encrypting(ctx);
1886         if (enc) {
1887             gctx->taglen = 16;
1888         } else {
1889             if (gctx->taglen < 0)
1890                 return -1;
1891
1892             buf = EVP_CIPHER_CTX_buf_noconst(ctx);
1893             if (CRYPTO_memcmp(buf, gctx->kma.param.t.b, gctx->taglen))
1894                 return -1;
1895         }
1896         return 0;
1897     }
1898 }
1899
1900 static int s390x_aes_gcm_cleanup(EVP_CIPHER_CTX *c)
1901 {
1902     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c);
1903     const unsigned char *iv;
1904
1905     if (gctx == NULL)
1906         return 0;
1907
1908     iv = EVP_CIPHER_CTX_iv(c);
1909     if (iv != gctx->iv)
1910         OPENSSL_free(gctx->iv);
1911
1912     OPENSSL_cleanse(gctx, sizeof(*gctx));
1913     return 1;
1914 }
1915
1916 # define S390X_AES_XTS_CTX              EVP_AES_XTS_CTX
1917 # define S390X_aes_128_xts_CAPABLE      1       /* checked by callee */
1918 # define S390X_aes_256_xts_CAPABLE      1
1919
1920 # define s390x_aes_xts_init_key aes_xts_init_key
1921 static int s390x_aes_xts_init_key(EVP_CIPHER_CTX *ctx,
1922                                   const unsigned char *key,
1923                                   const unsigned char *iv, int enc);
1924 # define s390x_aes_xts_cipher aes_xts_cipher
1925 static int s390x_aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1926                                 const unsigned char *in, size_t len);
1927 # define s390x_aes_xts_ctrl aes_xts_ctrl
1928 static int s390x_aes_xts_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
1929 # define s390x_aes_xts_cleanup aes_xts_cleanup
1930
1931 # define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE &&            \
1932                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1933                                      S390X_CAPBIT(S390X_AES_128)))
1934 # define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE &&            \
1935                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1936                                      S390X_CAPBIT(S390X_AES_192)))
1937 # define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE &&            \
1938                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1939                                      S390X_CAPBIT(S390X_AES_256)))
1940
1941 # define S390X_CCM_AAD_FLAG     0x40
1942
1943 /*-
1944  * Set nonce and length fields. Code is big-endian.
1945  */
1946 static inline void s390x_aes_ccm_setiv(S390X_AES_CCM_CTX *ctx,
1947                                           const unsigned char *nonce,
1948                                           size_t mlen)
1949 {
1950     ctx->aes.ccm.nonce.b[0] &= ~S390X_CCM_AAD_FLAG;
1951     ctx->aes.ccm.nonce.g[1] = mlen;
1952     memcpy(ctx->aes.ccm.nonce.b + 1, nonce, 15 - ctx->aes.ccm.l);
1953 }
1954
1955 /*-
1956  * Process additional authenticated data. Code is big-endian.
1957  */
1958 static void s390x_aes_ccm_aad(S390X_AES_CCM_CTX *ctx, const unsigned char *aad,
1959                               size_t alen)
1960 {
1961     unsigned char *ptr;
1962     int i, rem;
1963
1964     if (!alen)
1965         return;
1966
1967     ctx->aes.ccm.nonce.b[0] |= S390X_CCM_AAD_FLAG;
1968
1969     /* Suppress 'type-punned pointer dereference' warning. */
1970     ptr = ctx->aes.ccm.buf.b;
1971
1972     if (alen < ((1 << 16) - (1 << 8))) {
1973         *(uint16_t *)ptr = alen;
1974         i = 2;
1975     } else if (sizeof(alen) == 8
1976                && alen >= (size_t)1 << (32 % (sizeof(alen) * 8))) {
1977         *(uint16_t *)ptr = 0xffff;
1978         *(uint64_t *)(ptr + 2) = alen;
1979         i = 10;
1980     } else {
1981         *(uint16_t *)ptr = 0xfffe;
1982         *(uint32_t *)(ptr + 2) = alen;
1983         i = 6;
1984     }
1985
1986     while (i < 16 && alen) {
1987         ctx->aes.ccm.buf.b[i] = *aad;
1988         ++aad;
1989         --alen;
1990         ++i;
1991     }
1992     while (i < 16) {
1993         ctx->aes.ccm.buf.b[i] = 0;
1994         ++i;
1995     }
1996
1997     ctx->aes.ccm.kmac_param.icv.g[0] = 0;
1998     ctx->aes.ccm.kmac_param.icv.g[1] = 0;
1999     s390x_kmac(ctx->aes.ccm.nonce.b, 32, ctx->aes.ccm.fc,
2000                &ctx->aes.ccm.kmac_param);
2001     ctx->aes.ccm.blocks += 2;
2002
2003     rem = alen & 0xf;
2004     alen &= ~(size_t)0xf;
2005     if (alen) {
2006         s390x_kmac(aad, alen, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2007         ctx->aes.ccm.blocks += alen >> 4;
2008         aad += alen;
2009     }
2010     if (rem) {
2011         for (i = 0; i < rem; i++)
2012             ctx->aes.ccm.kmac_param.icv.b[i] ^= aad[i];
2013
2014         s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2015                  ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2016                  ctx->aes.ccm.kmac_param.k);
2017         ctx->aes.ccm.blocks++;
2018     }
2019 }
2020
2021 /*-
2022  * En/de-crypt plain/cipher-text. Compute tag from plaintext. Returns 0 for
2023  * success.
2024  */
2025 static int s390x_aes_ccm(S390X_AES_CCM_CTX *ctx, const unsigned char *in,
2026                          unsigned char *out, size_t len, int enc)
2027 {
2028     size_t n, rem;
2029     unsigned int i, l, num;
2030     unsigned char flags;
2031
2032     flags = ctx->aes.ccm.nonce.b[0];
2033     if (!(flags & S390X_CCM_AAD_FLAG)) {
2034         s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.kmac_param.icv.b,
2035                  ctx->aes.ccm.fc, ctx->aes.ccm.kmac_param.k);
2036         ctx->aes.ccm.blocks++;
2037     }
2038     l = flags & 0x7;
2039     ctx->aes.ccm.nonce.b[0] = l;
2040
2041     /*-
2042      * Reconstruct length from encoded length field
2043      * and initialize it with counter value.
2044      */
2045     n = 0;
2046     for (i = 15 - l; i < 15; i++) {
2047         n |= ctx->aes.ccm.nonce.b[i];
2048         ctx->aes.ccm.nonce.b[i] = 0;
2049         n <<= 8;
2050     }
2051     n |= ctx->aes.ccm.nonce.b[15];
2052     ctx->aes.ccm.nonce.b[15] = 1;
2053
2054     if (n != len)
2055         return -1;              /* length mismatch */
2056
2057     if (enc) {
2058         /* Two operations per block plus one for tag encryption */
2059         ctx->aes.ccm.blocks += (((len + 15) >> 4) << 1) + 1;
2060         if (ctx->aes.ccm.blocks > (1ULL << 61))
2061             return -2;          /* too much data */
2062     }
2063
2064     num = 0;
2065     rem = len & 0xf;
2066     len &= ~(size_t)0xf;
2067
2068     if (enc) {
2069         /* mac-then-encrypt */
2070         if (len)
2071             s390x_kmac(in, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2072         if (rem) {
2073             for (i = 0; i < rem; i++)
2074                 ctx->aes.ccm.kmac_param.icv.b[i] ^= in[len + i];
2075
2076             s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2077                      ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2078                      ctx->aes.ccm.kmac_param.k);
2079         }
2080
2081         CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k,
2082                                     ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b,
2083                                     &num, (ctr128_f)AES_ctr32_encrypt);
2084     } else {
2085         /* decrypt-then-mac */
2086         CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k,
2087                                     ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b,
2088                                     &num, (ctr128_f)AES_ctr32_encrypt);
2089
2090         if (len)
2091             s390x_kmac(out, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2092         if (rem) {
2093             for (i = 0; i < rem; i++)
2094                 ctx->aes.ccm.kmac_param.icv.b[i] ^= out[len + i];
2095
2096             s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2097                      ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2098                      ctx->aes.ccm.kmac_param.k);
2099         }
2100     }
2101     /* encrypt tag */
2102     for (i = 15 - l; i < 16; i++)
2103         ctx->aes.ccm.nonce.b[i] = 0;
2104
2105     s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.buf.b, ctx->aes.ccm.fc,
2106              ctx->aes.ccm.kmac_param.k);
2107     ctx->aes.ccm.kmac_param.icv.g[0] ^= ctx->aes.ccm.buf.g[0];
2108     ctx->aes.ccm.kmac_param.icv.g[1] ^= ctx->aes.ccm.buf.g[1];
2109
2110     ctx->aes.ccm.nonce.b[0] = flags;    /* restore flags field */
2111     return 0;
2112 }
2113
2114 /*-
2115  * En/de-crypt and authenticate TLS packet. Returns the number of bytes written
2116  * if successful. Otherwise -1 is returned.
2117  */
2118 static int s390x_aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2119                                     const unsigned char *in, size_t len)
2120 {
2121     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2122     unsigned char *ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2123     unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
2124     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
2125
2126     if (out != in
2127             || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->aes.ccm.m))
2128         return -1;
2129
2130     if (enc) {
2131         /* Set explicit iv (sequence number). */
2132         memcpy(out, buf, EVP_CCM_TLS_EXPLICIT_IV_LEN);
2133     }
2134
2135     len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m;
2136     /*-
2137      * Get explicit iv (sequence number). We already have fixed iv
2138      * (server/client_write_iv) here.
2139      */
2140     memcpy(ivec + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN);
2141     s390x_aes_ccm_setiv(cctx, ivec, len);
2142
2143     /* Process aad (sequence number|type|version|length) */
2144     s390x_aes_ccm_aad(cctx, buf, cctx->aes.ccm.tls_aad_len);
2145
2146     in += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2147     out += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2148
2149     if (enc) {
2150         if (s390x_aes_ccm(cctx, in, out, len, enc))
2151             return -1;
2152
2153         memcpy(out + len, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m);
2154         return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m;
2155     } else {
2156         if (!s390x_aes_ccm(cctx, in, out, len, enc)) {
2157             if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, in + len,
2158                                cctx->aes.ccm.m))
2159                 return len;
2160         }
2161
2162         OPENSSL_cleanse(out, len);
2163         return -1;
2164     }
2165 }
2166
2167 /*-
2168  * Set key and flag field and/or iv. Returns 1 if successful. Otherwise 0 is
2169  * returned.
2170  */
2171 static int s390x_aes_ccm_init_key(EVP_CIPHER_CTX *ctx,
2172                                   const unsigned char *key,
2173                                   const unsigned char *iv, int enc)
2174 {
2175     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2176     unsigned char *ivec;
2177     int keylen;
2178
2179     if (iv == NULL && key == NULL)
2180         return 1;
2181
2182     if (key != NULL) {
2183         keylen = EVP_CIPHER_CTX_key_length(ctx);
2184         cctx->aes.ccm.fc = S390X_AES_FC(keylen);
2185         memcpy(cctx->aes.ccm.kmac_param.k, key, keylen);
2186
2187         /* Store encoded m and l. */
2188         cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7)
2189                                  | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3;
2190         memset(cctx->aes.ccm.nonce.b + 1, 0,
2191                sizeof(cctx->aes.ccm.nonce.b));
2192         cctx->aes.ccm.blocks = 0;
2193
2194         cctx->aes.ccm.key_set = 1;
2195     }
2196
2197     if (iv != NULL) {
2198         ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2199         memcpy(ivec, iv, 15 - cctx->aes.ccm.l);
2200
2201         cctx->aes.ccm.iv_set = 1;
2202     }
2203
2204     return 1;
2205 }
2206
2207 /*-
2208  * Called from EVP layer to initialize context, process additional
2209  * authenticated data, en/de-crypt plain/cipher-text and authenticate
2210  * plaintext or process a TLS packet, depending on context. Returns bytes
2211  * written on success. Otherwise -1 is returned.
2212  */
2213 static int s390x_aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2214                                 const unsigned char *in, size_t len)
2215 {
2216     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2217     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
2218     int rv;
2219     unsigned char *buf, *ivec;
2220
2221     if (!cctx->aes.ccm.key_set)
2222         return -1;
2223
2224     if (cctx->aes.ccm.tls_aad_len >= 0)
2225         return s390x_aes_ccm_tls_cipher(ctx, out, in, len);
2226
2227     /*-
2228      * Final(): Does not return any data. Recall that ccm is mac-then-encrypt
2229      * so integrity must be checked already at Update() i.e., before
2230      * potentially corrupted data is output.
2231      */
2232     if (in == NULL && out != NULL)
2233         return 0;
2234
2235     if (!cctx->aes.ccm.iv_set)
2236         return -1;
2237
2238     if (!enc && !cctx->aes.ccm.tag_set)
2239         return -1;
2240
2241     if (out == NULL) {
2242         /* Update(): Pass message length. */
2243         if (in == NULL) {
2244             ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2245             s390x_aes_ccm_setiv(cctx, ivec, len);
2246
2247             cctx->aes.ccm.len_set = 1;
2248             return len;
2249         }
2250
2251         /* Update(): Process aad. */
2252         if (!cctx->aes.ccm.len_set && len)
2253             return -1;
2254
2255         s390x_aes_ccm_aad(cctx, in, len);
2256         return len;
2257     }
2258
2259     /* Update(): Process message. */
2260
2261     if (!cctx->aes.ccm.len_set) {
2262         /*-
2263          * In case message length was not previously set explicitly via
2264          * Update(), set it now.
2265          */
2266         ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2267         s390x_aes_ccm_setiv(cctx, ivec, len);
2268
2269         cctx->aes.ccm.len_set = 1;
2270     }
2271
2272     if (enc) {
2273         if (s390x_aes_ccm(cctx, in, out, len, enc))
2274             return -1;
2275
2276         cctx->aes.ccm.tag_set = 1;
2277         return len;
2278     } else {
2279         rv = -1;
2280
2281         if (!s390x_aes_ccm(cctx, in, out, len, enc)) {
2282             buf = EVP_CIPHER_CTX_buf_noconst(ctx);
2283             if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, buf,
2284                                cctx->aes.ccm.m))
2285                 rv = len;
2286         }
2287
2288         if (rv == -1)
2289             OPENSSL_cleanse(out, len);
2290
2291         cctx->aes.ccm.iv_set = 0;
2292         cctx->aes.ccm.tag_set = 0;
2293         cctx->aes.ccm.len_set = 0;
2294         return rv;
2295     }
2296 }
2297
2298 /*-
2299  * Performs various operations on the context structure depending on control
2300  * type. Returns 1 for success, 0 for failure and -1 for unknown control type.
2301  * Code is big-endian.
2302  */
2303 static int s390x_aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
2304 {
2305     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, c);
2306     unsigned char *buf, *iv;
2307     int enc, len;
2308
2309     switch (type) {
2310     case EVP_CTRL_INIT:
2311         cctx->aes.ccm.key_set = 0;
2312         cctx->aes.ccm.iv_set = 0;
2313         cctx->aes.ccm.l = 8;
2314         cctx->aes.ccm.m = 12;
2315         cctx->aes.ccm.tag_set = 0;
2316         cctx->aes.ccm.len_set = 0;
2317         cctx->aes.ccm.tls_aad_len = -1;
2318         return 1;
2319
2320     case EVP_CTRL_AEAD_TLS1_AAD:
2321         if (arg != EVP_AEAD_TLS1_AAD_LEN)
2322             return 0;
2323
2324         /* Save the aad for later use. */
2325         buf = EVP_CIPHER_CTX_buf_noconst(c);
2326         memcpy(buf, ptr, arg);
2327         cctx->aes.ccm.tls_aad_len = arg;
2328
2329         len = buf[arg - 2] << 8 | buf[arg - 1];
2330         if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN)
2331             return 0;
2332
2333         /* Correct length for explicit iv. */
2334         len -= EVP_CCM_TLS_EXPLICIT_IV_LEN;
2335
2336         enc = EVP_CIPHER_CTX_encrypting(c);
2337         if (!enc) {
2338             if (len < cctx->aes.ccm.m)
2339                 return 0;
2340
2341             /* Correct length for tag. */
2342             len -= cctx->aes.ccm.m;
2343         }
2344
2345         buf[arg - 2] = len >> 8;
2346         buf[arg - 1] = len & 0xff;
2347
2348         /* Extra padding: tag appended to record. */
2349         return cctx->aes.ccm.m;
2350
2351     case EVP_CTRL_CCM_SET_IV_FIXED:
2352         if (arg != EVP_CCM_TLS_FIXED_IV_LEN)
2353             return 0;
2354
2355         /* Copy to first part of the iv. */
2356         iv = EVP_CIPHER_CTX_iv_noconst(c);
2357         memcpy(iv, ptr, arg);
2358         return 1;
2359
2360     case EVP_CTRL_AEAD_SET_IVLEN:
2361         arg = 15 - arg;
2362         /* fall-through */
2363
2364     case EVP_CTRL_CCM_SET_L:
2365         if (arg < 2 || arg > 8)
2366             return 0;
2367
2368         cctx->aes.ccm.l = arg;
2369         return 1;
2370
2371     case EVP_CTRL_AEAD_SET_TAG:
2372         if ((arg & 1) || arg < 4 || arg > 16)
2373             return 0;
2374
2375         enc = EVP_CIPHER_CTX_encrypting(c);
2376         if (enc && ptr)
2377             return 0;
2378
2379         if (ptr) {
2380             cctx->aes.ccm.tag_set = 1;
2381             buf = EVP_CIPHER_CTX_buf_noconst(c);
2382             memcpy(buf, ptr, arg);
2383         }
2384
2385         cctx->aes.ccm.m = arg;
2386         return 1;
2387
2388     case EVP_CTRL_AEAD_GET_TAG:
2389         enc = EVP_CIPHER_CTX_encrypting(c);
2390         if (!enc || !cctx->aes.ccm.tag_set)
2391             return 0;
2392
2393         if(arg < cctx->aes.ccm.m)
2394             return 0;
2395
2396         memcpy(ptr, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m);
2397         cctx->aes.ccm.tag_set = 0;
2398         cctx->aes.ccm.iv_set = 0;
2399         cctx->aes.ccm.len_set = 0;
2400         return 1;
2401
2402     case EVP_CTRL_COPY:
2403         return 1;
2404
2405     default:
2406         return -1;
2407     }
2408 }
2409
2410 # define s390x_aes_ccm_cleanup aes_ccm_cleanup
2411
2412 # ifndef OPENSSL_NO_OCB
2413 #  define S390X_AES_OCB_CTX             EVP_AES_OCB_CTX
2414 #  define S390X_aes_128_ocb_CAPABLE     0
2415 #  define S390X_aes_192_ocb_CAPABLE     0
2416 #  define S390X_aes_256_ocb_CAPABLE     0
2417
2418 #  define s390x_aes_ocb_init_key aes_ocb_init_key
2419 static int s390x_aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2420                                   const unsigned char *iv, int enc);
2421 #  define s390x_aes_ocb_cipher aes_ocb_cipher
2422 static int s390x_aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2423                                 const unsigned char *in, size_t len);
2424 #  define s390x_aes_ocb_cleanup aes_ocb_cleanup
2425 static int s390x_aes_ocb_cleanup(EVP_CIPHER_CTX *);
2426 #  define s390x_aes_ocb_ctrl aes_ocb_ctrl
2427 static int s390x_aes_ocb_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
2428 # endif
2429
2430 # ifndef OPENSSL_NO_SIV
2431 #  define S390X_AES_SIV_CTX             EVP_AES_SIV_CTX
2432 #  define S390X_aes_128_siv_CAPABLE     0
2433 #  define S390X_aes_192_siv_CAPABLE     0
2434 #  define S390X_aes_256_siv_CAPABLE     0
2435
2436 #  define s390x_aes_siv_init_key aes_siv_init_key
2437 #  define s390x_aes_siv_cipher aes_siv_cipher
2438 #  define s390x_aes_siv_cleanup aes_siv_cleanup
2439 #  define s390x_aes_siv_ctrl aes_siv_ctrl
2440 # endif
2441
2442 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,    \
2443                               MODE,flags)                               \
2444 static const EVP_CIPHER s390x_aes_##keylen##_##mode = {                 \
2445     nid##_##keylen##_##nmode,blocksize,                                 \
2446     keylen / 8,                                                         \
2447     ivlen,                                                              \
2448     flags | EVP_CIPH_##MODE##_MODE,                                     \
2449     s390x_aes_##mode##_init_key,                                        \
2450     s390x_aes_##mode##_cipher,                                          \
2451     NULL,                                                               \
2452     sizeof(S390X_AES_##MODE##_CTX),                                     \
2453     NULL,                                                               \
2454     NULL,                                                               \
2455     NULL,                                                               \
2456     NULL                                                                \
2457 };                                                                      \
2458 static const EVP_CIPHER aes_##keylen##_##mode = {                       \
2459     nid##_##keylen##_##nmode,                                           \
2460     blocksize,                                                          \
2461     keylen / 8,                                                         \
2462     ivlen,                                                              \
2463     flags | EVP_CIPH_##MODE##_MODE,                                     \
2464     aes_init_key,                                                       \
2465     aes_##mode##_cipher,                                                \
2466     NULL,                                                               \
2467     sizeof(EVP_AES_KEY),                                                \
2468     NULL,                                                               \
2469     NULL,                                                               \
2470     NULL,                                                               \
2471     NULL                                                                \
2472 };                                                                      \
2473 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void)                       \
2474 {                                                                       \
2475     return S390X_aes_##keylen##_##mode##_CAPABLE ?                      \
2476            &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode;       \
2477 }
2478
2479 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags)\
2480 static const EVP_CIPHER s390x_aes_##keylen##_##mode = {                 \
2481     nid##_##keylen##_##mode,                                            \
2482     blocksize,                                                          \
2483     (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8,        \
2484     ivlen,                                                              \
2485     flags | EVP_CIPH_##MODE##_MODE,                                     \
2486     s390x_aes_##mode##_init_key,                                        \
2487     s390x_aes_##mode##_cipher,                                          \
2488     s390x_aes_##mode##_cleanup,                                         \
2489     sizeof(S390X_AES_##MODE##_CTX),                                     \
2490     NULL,                                                               \
2491     NULL,                                                               \
2492     s390x_aes_##mode##_ctrl,                                            \
2493     NULL                                                                \
2494 };                                                                      \
2495 static const EVP_CIPHER aes_##keylen##_##mode = {                       \
2496     nid##_##keylen##_##mode,blocksize,                                  \
2497     (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8,        \
2498     ivlen,                                                              \
2499     flags | EVP_CIPH_##MODE##_MODE,                                     \
2500     aes_##mode##_init_key,                                              \
2501     aes_##mode##_cipher,                                                \
2502     aes_##mode##_cleanup,                                               \
2503     sizeof(EVP_AES_##MODE##_CTX),                                       \
2504     NULL,                                                               \
2505     NULL,                                                               \
2506     aes_##mode##_ctrl,                                                  \
2507     NULL                                                                \
2508 };                                                                      \
2509 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void)                       \
2510 {                                                                       \
2511     return S390X_aes_##keylen##_##mode##_CAPABLE ?                      \
2512            &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode;       \
2513 }
2514
2515 #else
2516
2517 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
2518 static const EVP_CIPHER aes_##keylen##_##mode = { \
2519         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
2520         flags|EVP_CIPH_##MODE##_MODE,   \
2521         aes_init_key,                   \
2522         aes_##mode##_cipher,            \
2523         NULL,                           \
2524         sizeof(EVP_AES_KEY),            \
2525         NULL,NULL,NULL,NULL }; \
2526 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
2527 { return &aes_##keylen##_##mode; }
2528
2529 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
2530 static const EVP_CIPHER aes_##keylen##_##mode = { \
2531         nid##_##keylen##_##mode,blocksize, \
2532         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
2533         ivlen,                          \
2534         flags|EVP_CIPH_##MODE##_MODE,   \
2535         aes_##mode##_init_key,          \
2536         aes_##mode##_cipher,            \
2537         aes_##mode##_cleanup,           \
2538         sizeof(EVP_AES_##MODE##_CTX),   \
2539         NULL,NULL,aes_##mode##_ctrl,NULL }; \
2540 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
2541 { return &aes_##keylen##_##mode; }
2542
2543 #endif
2544
2545 #if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
2546 # include "arm_arch.h"
2547 # if __ARM_MAX_ARCH__>=7
2548 #  if defined(BSAES_ASM)
2549 #   define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
2550 #  endif
2551 #  if defined(VPAES_ASM)
2552 #   define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
2553 #  endif
2554 #  define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
2555 #  define HWAES_set_encrypt_key aes_v8_set_encrypt_key
2556 #  define HWAES_set_decrypt_key aes_v8_set_decrypt_key
2557 #  define HWAES_encrypt aes_v8_encrypt
2558 #  define HWAES_decrypt aes_v8_decrypt
2559 #  define HWAES_cbc_encrypt aes_v8_cbc_encrypt
2560 #  define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
2561 # endif
2562 #endif
2563
2564 #if defined(HWAES_CAPABLE)
2565 int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
2566                           AES_KEY *key);
2567 int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
2568                           AES_KEY *key);
2569 void HWAES_encrypt(const unsigned char *in, unsigned char *out,
2570                    const AES_KEY *key);
2571 void HWAES_decrypt(const unsigned char *in, unsigned char *out,
2572                    const AES_KEY *key);
2573 void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
2574                        size_t length, const AES_KEY *key,
2575                        unsigned char *ivec, const int enc);
2576 void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
2577                                 size_t len, const AES_KEY *key,
2578                                 const unsigned char ivec[16]);
2579 void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out,
2580                        size_t len, const AES_KEY *key1,
2581                        const AES_KEY *key2, const unsigned char iv[16]);
2582 void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out,
2583                        size_t len, const AES_KEY *key1,
2584                        const AES_KEY *key2, const unsigned char iv[16]);
2585 #endif
2586
2587 #define BLOCK_CIPHER_generic_pack(nid,keylen,flags)             \
2588         BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)     \
2589         BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)      \
2590         BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
2591         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
2592         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags)       \
2593         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags)       \
2594         BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
2595
2596 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2597                         const unsigned char *iv, int enc)
2598 {
2599     int ret, mode;
2600     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2601
2602     mode = EVP_CIPHER_CTX_mode(ctx);
2603     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
2604         && !enc) {
2605 #ifdef HWAES_CAPABLE
2606         if (HWAES_CAPABLE) {
2607             ret = HWAES_set_decrypt_key(key,
2608                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
2609                                         &dat->ks.ks);
2610             dat->block = (block128_f) HWAES_decrypt;
2611             dat->stream.cbc = NULL;
2612 # ifdef HWAES_cbc_encrypt
2613             if (mode == EVP_CIPH_CBC_MODE)
2614                 dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
2615 # endif
2616         } else
2617 #endif
2618 #ifdef BSAES_CAPABLE
2619         if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
2620             ret = AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2621                                       &dat->ks.ks);
2622             dat->block = (block128_f) AES_decrypt;
2623             dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
2624         } else
2625 #endif
2626 #ifdef VPAES_CAPABLE
2627         if (VPAES_CAPABLE) {
2628             ret = vpaes_set_decrypt_key(key,
2629                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
2630                                         &dat->ks.ks);
2631             dat->block = (block128_f) vpaes_decrypt;
2632             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2633                 (cbc128_f) vpaes_cbc_encrypt : NULL;
2634         } else
2635 #endif
2636         {
2637             ret = AES_set_decrypt_key(key,
2638                                       EVP_CIPHER_CTX_key_length(ctx) * 8,
2639                                       &dat->ks.ks);
2640             dat->block = (block128_f) AES_decrypt;
2641             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2642                 (cbc128_f) AES_cbc_encrypt : NULL;
2643         }
2644     } else
2645 #ifdef HWAES_CAPABLE
2646     if (HWAES_CAPABLE) {
2647         ret = HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2648                                     &dat->ks.ks);
2649         dat->block = (block128_f) HWAES_encrypt;
2650         dat->stream.cbc = NULL;
2651 # ifdef HWAES_cbc_encrypt
2652         if (mode == EVP_CIPH_CBC_MODE)
2653             dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
2654         else
2655 # endif
2656 # ifdef HWAES_ctr32_encrypt_blocks
2657         if (mode == EVP_CIPH_CTR_MODE)
2658             dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
2659         else
2660 # endif
2661             (void)0;            /* terminate potentially open 'else' */
2662     } else
2663 #endif
2664 #ifdef BSAES_CAPABLE
2665     if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
2666         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2667                                   &dat->ks.ks);
2668         dat->block = (block128_f) AES_encrypt;
2669         dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
2670     } else
2671 #endif
2672 #ifdef VPAES_CAPABLE
2673     if (VPAES_CAPABLE) {
2674         ret = vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2675                                     &dat->ks.ks);
2676         dat->block = (block128_f) vpaes_encrypt;
2677         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2678             (cbc128_f) vpaes_cbc_encrypt : NULL;
2679     } else
2680 #endif
2681     {
2682         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2683                                   &dat->ks.ks);
2684         dat->block = (block128_f) AES_encrypt;
2685         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2686             (cbc128_f) AES_cbc_encrypt : NULL;
2687 #ifdef AES_CTR_ASM
2688         if (mode == EVP_CIPH_CTR_MODE)
2689             dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
2690 #endif
2691     }
2692
2693     if (ret < 0) {
2694         EVPerr(EVP_F_AES_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
2695         return 0;
2696     }
2697
2698     return 1;
2699 }
2700
2701 static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2702                           const unsigned char *in, size_t len)
2703 {
2704     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2705
2706     if (dat->stream.cbc)
2707         (*dat->stream.cbc) (in, out, len, &dat->ks,
2708                             EVP_CIPHER_CTX_iv_noconst(ctx),
2709                             EVP_CIPHER_CTX_encrypting(ctx));
2710     else if (EVP_CIPHER_CTX_encrypting(ctx))
2711         CRYPTO_cbc128_encrypt(in, out, len, &dat->ks,
2712                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
2713     else
2714         CRYPTO_cbc128_decrypt(in, out, len, &dat->ks,
2715                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
2716
2717     return 1;
2718 }
2719
2720 static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2721                           const unsigned char *in, size_t len)
2722 {
2723     size_t bl = EVP_CIPHER_CTX_block_size(ctx);
2724     size_t i;
2725     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2726
2727     if (len < bl)
2728         return 1;
2729
2730     for (i = 0, len -= bl; i <= len; i += bl)
2731         (*dat->block) (in + i, out + i, &dat->ks);
2732
2733     return 1;
2734 }
2735
2736 static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2737                           const unsigned char *in, size_t len)
2738 {
2739     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2740
2741     int num = EVP_CIPHER_CTX_num(ctx);
2742     CRYPTO_ofb128_encrypt(in, out, len, &dat->ks,
2743                           EVP_CIPHER_CTX_iv_noconst(ctx), &num, dat->block);
2744     EVP_CIPHER_CTX_set_num(ctx, num);
2745     return 1;
2746 }
2747
2748 static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2749                           const unsigned char *in, size_t len)
2750 {
2751     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2752
2753     int num = EVP_CIPHER_CTX_num(ctx);
2754     CRYPTO_cfb128_encrypt(in, out, len, &dat->ks,
2755                           EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2756                           EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2757     EVP_CIPHER_CTX_set_num(ctx, num);
2758     return 1;
2759 }
2760
2761 static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2762                            const unsigned char *in, size_t len)
2763 {
2764     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2765
2766     int num = EVP_CIPHER_CTX_num(ctx);
2767     CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks,
2768                             EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2769                             EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2770     EVP_CIPHER_CTX_set_num(ctx, num);
2771     return 1;
2772 }
2773
2774 static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2775                            const unsigned char *in, size_t len)
2776 {
2777     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2778
2779     if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS)) {
2780         int num = EVP_CIPHER_CTX_num(ctx);
2781         CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks,
2782                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2783                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2784         EVP_CIPHER_CTX_set_num(ctx, num);
2785         return 1;
2786     }
2787
2788     while (len >= MAXBITCHUNK) {
2789         int num = EVP_CIPHER_CTX_num(ctx);
2790         CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks,
2791                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2792                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2793         EVP_CIPHER_CTX_set_num(ctx, num);
2794         len -= MAXBITCHUNK;
2795         out += MAXBITCHUNK;
2796         in  += MAXBITCHUNK;
2797     }
2798     if (len) {
2799         int num = EVP_CIPHER_CTX_num(ctx);
2800         CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks,
2801                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2802                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2803         EVP_CIPHER_CTX_set_num(ctx, num);
2804     }
2805
2806     return 1;
2807 }
2808
2809 static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2810                           const unsigned char *in, size_t len)
2811 {
2812     unsigned int num = EVP_CIPHER_CTX_num(ctx);
2813     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2814
2815     if (dat->stream.ctr)
2816         CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
2817                                     EVP_CIPHER_CTX_iv_noconst(ctx),
2818                                     EVP_CIPHER_CTX_buf_noconst(ctx),
2819                                     &num, dat->stream.ctr);
2820     else
2821         CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
2822                               EVP_CIPHER_CTX_iv_noconst(ctx),
2823                               EVP_CIPHER_CTX_buf_noconst(ctx), &num,
2824                               dat->block);
2825     EVP_CIPHER_CTX_set_num(ctx, num);
2826     return 1;
2827 }
2828
2829 BLOCK_CIPHER_generic_pack(NID_aes, 128, 0)
2830     BLOCK_CIPHER_generic_pack(NID_aes, 192, 0)
2831     BLOCK_CIPHER_generic_pack(NID_aes, 256, 0)
2832
2833 static int aes_gcm_cleanup(EVP_CIPHER_CTX *c)
2834 {
2835     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
2836     if (gctx == NULL)
2837         return 0;
2838     OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm));
2839     if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
2840         OPENSSL_free(gctx->iv);
2841     return 1;
2842 }
2843
2844 static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
2845 {
2846     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
2847     switch (type) {
2848     case EVP_CTRL_INIT:
2849         gctx->key_set = 0;
2850         gctx->iv_set = 0;
2851         gctx->ivlen = c->cipher->iv_len;
2852         gctx->iv = c->iv;
2853         gctx->taglen = -1;
2854         gctx->iv_gen = 0;
2855         gctx->tls_aad_len = -1;
2856         return 1;
2857
2858     case EVP_CTRL_AEAD_SET_IVLEN:
2859         if (arg <= 0)
2860             return 0;
2861         /* Allocate memory for IV if needed */
2862         if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) {
2863             if (gctx->iv != c->iv)
2864                 OPENSSL_free(gctx->iv);
2865             if ((gctx->iv = OPENSSL_malloc(arg)) == NULL) {
2866                 EVPerr(EVP_F_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
2867                 return 0;
2868             }
2869         }
2870         gctx->ivlen = arg;
2871         return 1;
2872
2873     case EVP_CTRL_AEAD_SET_TAG:
2874         if (arg <= 0 || arg > 16 || c->encrypt)
2875             return 0;
2876         memcpy(c->buf, ptr, arg);
2877         gctx->taglen = arg;
2878         return 1;
2879
2880     case EVP_CTRL_AEAD_GET_TAG:
2881         if (arg <= 0 || arg > 16 || !c->encrypt
2882             || gctx->taglen < 0)
2883             return 0;
2884         memcpy(ptr, c->buf, arg);
2885         return 1;
2886
2887     case EVP_CTRL_GET_IV:
2888         if (gctx->iv_gen != 1)
2889             return 0;
2890         if (gctx->ivlen != arg)
2891             return 0;
2892         memcpy(ptr, gctx->iv, arg);
2893         return 1;
2894
2895     case EVP_CTRL_GCM_SET_IV_FIXED:
2896         /* Special case: -1 length restores whole IV */
2897         if (arg == -1) {
2898             memcpy(gctx->iv, ptr, gctx->ivlen);
2899             gctx->iv_gen = 1;
2900             return 1;
2901         }
2902         /*
2903          * Fixed field must be at least 4 bytes and invocation field at least
2904          * 8.
2905          */
2906         if ((arg < 4) || (gctx->ivlen - arg) < 8)
2907             return 0;
2908         if (arg)
2909             memcpy(gctx->iv, ptr, arg);
2910         if (c->encrypt && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
2911             return 0;
2912         gctx->iv_gen = 1;
2913         return 1;
2914
2915     case EVP_CTRL_GCM_IV_GEN:
2916         if (gctx->iv_gen == 0 || gctx->key_set == 0)
2917             return 0;
2918         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
2919         if (arg <= 0 || arg > gctx->ivlen)
2920             arg = gctx->ivlen;
2921         memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
2922         /*
2923          * Invocation field will be at least 8 bytes in size and so no need
2924          * to check wrap around or increment more than last 8 bytes.
2925          */
2926         ctr64_inc(gctx->iv + gctx->ivlen - 8);
2927         gctx->iv_set = 1;
2928         return 1;
2929
2930     case EVP_CTRL_GCM_SET_IV_INV:
2931         if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt)
2932             return 0;
2933         memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
2934         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
2935         gctx->iv_set = 1;
2936         return 1;
2937
2938     case EVP_CTRL_AEAD_TLS1_AAD:
2939         /* Save the AAD for later use */
2940         if (arg != EVP_AEAD_TLS1_AAD_LEN)
2941             return 0;
2942         memcpy(c->buf, ptr, arg);
2943         gctx->tls_aad_len = arg;
2944         gctx->tls_enc_records = 0;
2945         {
2946             unsigned int len = c->buf[arg - 2] << 8 | c->buf[arg - 1];
2947             /* Correct length for explicit IV */
2948             if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN)
2949                 return 0;
2950             len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
2951             /* If decrypting correct for tag too */
2952             if (!c->encrypt) {
2953                 if (len < EVP_GCM_TLS_TAG_LEN)
2954                     return 0;
2955                 len -= EVP_GCM_TLS_TAG_LEN;
2956             }
2957             c->buf[arg - 2] = len >> 8;
2958             c->buf[arg - 1] = len & 0xff;
2959         }
2960         /* Extra padding: tag appended to record */
2961         return EVP_GCM_TLS_TAG_LEN;
2962
2963     case EVP_CTRL_COPY:
2964         {
2965             EVP_CIPHER_CTX *out = ptr;
2966             EVP_AES_GCM_CTX *gctx_out = EVP_C_DATA(EVP_AES_GCM_CTX,out);
2967             if (gctx->gcm.key) {
2968                 if (gctx->gcm.key != &gctx->ks)
2969                     return 0;
2970                 gctx_out->gcm.key = &gctx_out->ks;
2971             }
2972             if (gctx->iv == c->iv)
2973                 gctx_out->iv = out->iv;
2974             else {
2975                 if ((gctx_out->iv = OPENSSL_malloc(gctx->ivlen)) == NULL) {
2976                     EVPerr(EVP_F_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
2977                     return 0;
2978                 }
2979                 memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
2980             }
2981             return 1;
2982         }
2983
2984     default:
2985         return -1;
2986
2987     }
2988 }
2989
2990 static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2991                             const unsigned char *iv, int enc)
2992 {
2993     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
2994     if (!iv && !key)
2995         return 1;
2996     if (key) {
2997         do {
2998 #ifdef HWAES_CAPABLE
2999             if (HWAES_CAPABLE) {
3000                 HWAES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3001                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3002                                    (block128_f) HWAES_encrypt);
3003 # ifdef HWAES_ctr32_encrypt_blocks
3004                 gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
3005 # else
3006                 gctx->ctr = NULL;
3007 # endif
3008                 break;
3009             } else
3010 #endif
3011 #ifdef BSAES_CAPABLE
3012             if (BSAES_CAPABLE) {
3013                 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3014                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3015                                    (block128_f) AES_encrypt);
3016                 gctx->ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
3017                 break;
3018             } else
3019 #endif
3020 #ifdef VPAES_CAPABLE
3021             if (VPAES_CAPABLE) {
3022                 vpaes_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3023                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3024                                    (block128_f) vpaes_encrypt);
3025                 gctx->ctr = NULL;
3026                 break;
3027             } else
3028 #endif
3029                 (void)0;        /* terminate potentially open 'else' */
3030
3031             AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3032             CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3033                                (block128_f) AES_encrypt);
3034 #ifdef AES_CTR_ASM
3035             gctx->ctr = (ctr128_f) AES_ctr32_encrypt;
3036 #else
3037             gctx->ctr = NULL;
3038 #endif
3039         } while (0);
3040
3041         /*
3042          * If we have an iv can set it directly, otherwise use saved IV.
3043          */
3044         if (iv == NULL && gctx->iv_set)
3045             iv = gctx->iv;
3046         if (iv) {
3047             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
3048             gctx->iv_set = 1;
3049         }
3050         gctx->key_set = 1;
3051     } else {
3052         /* If key set use IV, otherwise copy */
3053         if (gctx->key_set)
3054             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
3055         else
3056             memcpy(gctx->iv, iv, gctx->ivlen);
3057         gctx->iv_set = 1;
3058         gctx->iv_gen = 0;
3059     }
3060     return 1;
3061 }
3062
3063 /*
3064  * Handle TLS GCM packet format. This consists of the last portion of the IV
3065  * followed by the payload and finally the tag. On encrypt generate IV,
3066  * encrypt payload and write the tag. On verify retrieve IV, decrypt payload
3067  * and verify tag.
3068  */
3069
3070 static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
3071                               const unsigned char *in, size_t len)
3072 {
3073     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
3074     int rv = -1;
3075     /* Encrypt/decrypt must be performed in place */
3076     if (out != in
3077         || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
3078         return -1;
3079     
3080     /*
3081      * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness
3082      * Requirements from SP 800-38D".  The requirements is for one party to the
3083      * communication to fail after 2^64 - 1 keys.  We do this on the encrypting
3084      * side only.
3085      */
3086     if (ctx->encrypt && ++gctx->tls_enc_records == 0) {
3087         EVPerr(EVP_F_AES_GCM_TLS_CIPHER, EVP_R_TOO_MANY_RECORDS);
3088         goto err;
3089     }
3090
3091     /*
3092      * Set IV from start of buffer or generate IV and write to start of
3093      * buffer.
3094      */
3095     if (EVP_CIPHER_CTX_ctrl(ctx, ctx->encrypt ? EVP_CTRL_GCM_IV_GEN
3096                                               : EVP_CTRL_GCM_SET_IV_INV,
3097                             EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
3098         goto err;
3099     /* Use saved AAD */
3100     if (CRYPTO_gcm128_aad(&gctx->gcm, ctx->buf, gctx->tls_aad_len))
3101         goto err;
3102     /* Fix buffer and length to point to payload */
3103     in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
3104     out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
3105     len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
3106     if (ctx->encrypt) {
3107         /* Encrypt payload */
3108         if (gctx->ctr) {
3109             size_t bulk = 0;
3110 #if defined(AES_GCM_ASM)
3111             if (len >= 32 && AES_GCM_ASM(gctx)) {
3112                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
3113                     return -1;
3114
3115                 bulk = AES_gcm_encrypt(in, out, len,
3116                                        gctx->gcm.key,
3117                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3118                 gctx->gcm.len.u[1] += bulk;
3119             }
3120 #endif
3121             if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
3122                                             in + bulk,
3123                                             out + bulk,
3124                                             len - bulk, gctx->ctr))
3125                 goto err;
3126         } else {
3127             size_t bulk = 0;
3128 #if defined(AES_GCM_ASM2)
3129             if (len >= 32 && AES_GCM_ASM2(gctx)) {
3130                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
3131                     return -1;
3132
3133                 bulk = AES_gcm_encrypt(in, out, len,
3134                                        gctx->gcm.key,
3135                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3136                 gctx->gcm.len.u[1] += bulk;
3137             }
3138 #endif
3139             if (CRYPTO_gcm128_encrypt(&gctx->gcm,
3140                                       in + bulk, out + bulk, len - bulk))
3141                 goto err;
3142         }
3143         out += len;
3144         /* Finally write tag */
3145         CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN);
3146         rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
3147     } else {
3148         /* Decrypt */
3149         if (gctx->ctr) {
3150             size_t bulk = 0;
3151 #if defined(AES_GCM_ASM)
3152             if (len >= 16 && AES_GCM_ASM(gctx)) {
3153                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
3154                     return -1;
3155
3156                 bulk = AES_gcm_decrypt(in, out, len,
3157                                        gctx->gcm.key,
3158                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3159                 gctx->gcm.len.u[1] += bulk;
3160             }
3161 #endif
3162             if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
3163                                             in + bulk,
3164                                             out + bulk,
3165                                             len - bulk, gctx->ctr))
3166                 goto err;
3167         } else {
3168             size_t bulk = 0;
3169 #if defined(AES_GCM_ASM2)
3170             if (len >= 16 && AES_GCM_ASM2(gctx)) {
3171                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
3172                     return -1;
3173
3174                 bulk = AES_gcm_decrypt(in, out, len,
3175                                        gctx->gcm.key,
3176                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3177                 gctx->gcm.len.u[1] += bulk;
3178             }
3179 #endif
3180             if (CRYPTO_gcm128_decrypt(&gctx->gcm,
3181                                       in + bulk, out + bulk, len - bulk))
3182                 goto err;
3183         }
3184         /* Retrieve tag */
3185         CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN);
3186         /* If tag mismatch wipe buffer */
3187         if (CRYPTO_memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) {
3188             OPENSSL_cleanse(out, len);
3189             goto err;
3190         }
3191         rv = len;
3192     }
3193
3194  err:
3195     gctx->iv_set = 0;
3196     gctx->tls_aad_len = -1;
3197     return rv;
3198 }
3199
3200 static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
3201                           const unsigned char *in, size_t len)
3202 {
3203     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
3204     /* If not set up, return error */
3205     if (!gctx->key_set)
3206         return -1;
3207
3208     if (gctx->tls_aad_len >= 0)
3209         return aes_gcm_tls_cipher(ctx, out, in, len);
3210
3211     if (!gctx->iv_set)
3212         return -1;
3213     if (in) {
3214         if (out == NULL) {
3215             if (CRYPTO_gcm128_aad(&gctx->gcm, in, len))
3216                 return -1;
3217         } else if (ctx->encrypt) {
3218             if (gctx->ctr) {
3219                 size_t bulk = 0;
3220 #if defined(AES_GCM_ASM)
3221                 if (len >= 32 && AES_GCM_ASM(gctx)) {
3222                     size_t res = (16 - gctx->gcm.mres) % 16;
3223
3224                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
3225                         return -1;
3226
3227                     bulk = AES_gcm_encrypt(in + res,
3228                                            out + res, len - res,
3229                                            gctx->gcm.key, gctx->gcm.Yi.c,
3230                                            gctx->gcm.Xi.u);
3231                     gctx->gcm.len.u[1] += bulk;
3232                     bulk += res;
3233                 }
3234 #endif
3235                 if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
3236                                                 in + bulk,
3237                                                 out + bulk,
3238                                                 len - bulk, gctx->ctr))
3239                     return -1;
3240             } else {
3241                 size_t bulk = 0;
3242 #if defined(AES_GCM_ASM2)
3243                 if (len >= 32 && AES_GCM_ASM2(gctx)) {
3244                     size_t res = (16 - gctx->gcm.mres) % 16;
3245
3246                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
3247                         return -1;
3248
3249                     bulk = AES_gcm_encrypt(in + res,
3250                                            out + res, len - res,
3251                                            gctx->gcm.key, gctx->gcm.Yi.c,
3252                                            gctx->gcm.Xi.u);
3253                     gctx->gcm.len.u[1] += bulk;
3254                     bulk += res;
3255                 }
3256 #endif
3257                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,
3258                                           in + bulk, out + bulk, len - bulk))
3259                     return -1;
3260             }
3261         } else {
3262             if (gctx->ctr) {
3263                 size_t bulk = 0;
3264 #if defined(AES_GCM_ASM)
3265                 if (len >= 16 && AES_GCM_ASM(gctx)) {
3266                     size_t res = (16 - gctx->gcm.mres) % 16;
3267
3268                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
3269                         return -1;
3270
3271                     bulk = AES_gcm_decrypt(in + res,
3272                                            out + res, len - res,
3273                                            gctx->gcm.key,
3274                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3275                     gctx->gcm.len.u[1] += bulk;
3276                     bulk += res;
3277                 }
3278 #endif
3279                 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
3280                                                 in + bulk,
3281                                                 out + bulk,
3282                                                 len - bulk, gctx->ctr))
3283                     return -1;
3284             } else {
3285                 size_t bulk = 0;
3286 #if defined(AES_GCM_ASM2)
3287                 if (len >= 16 && AES_GCM_ASM2(gctx)) {
3288                     size_t res = (16 - gctx->gcm.mres) % 16;
3289
3290                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
3291                         return -1;
3292
3293                     bulk = AES_gcm_decrypt(in + res,
3294                                            out + res, len - res,
3295                                            gctx->gcm.key,
3296                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3297                     gctx->gcm.len.u[1] += bulk;
3298                     bulk += res;
3299                 }
3300 #endif
3301                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,
3302                                           in + bulk, out + bulk, len - bulk))
3303                     return -1;
3304             }
3305         }
3306         return len;
3307     } else {
3308         if (!ctx->encrypt) {
3309             if (gctx->taglen < 0)
3310                 return -1;
3311             if (CRYPTO_gcm128_finish(&gctx->gcm, ctx->buf, gctx->taglen) != 0)
3312                 return -1;
3313             gctx->iv_set = 0;
3314             return 0;
3315         }
3316         CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, 16);
3317         gctx->taglen = 16;
3318         /* Don't reuse the IV */
3319         gctx->iv_set = 0;
3320         return 0;
3321     }
3322
3323 }
3324
3325 #define CUSTOM_FLAGS    (EVP_CIPH_FLAG_DEFAULT_ASN1 \
3326                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
3327                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
3328                 | EVP_CIPH_CUSTOM_COPY)
3329
3330 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, gcm, GCM,
3331                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3332     BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, gcm, GCM,
3333                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3334     BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, gcm, GCM,
3335                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3336
3337 static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
3338 {
3339     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,c);
3340     if (type == EVP_CTRL_COPY) {
3341         EVP_CIPHER_CTX *out = ptr;
3342         EVP_AES_XTS_CTX *xctx_out = EVP_C_DATA(EVP_AES_XTS_CTX,out);
3343         if (xctx->xts.key1) {
3344             if (xctx->xts.key1 != &xctx->ks1)
3345                 return 0;
3346             xctx_out->xts.key1 = &xctx_out->ks1;
3347         }
3348         if (xctx->xts.key2) {
3349             if (xctx->xts.key2 != &xctx->ks2)
3350                 return 0;
3351             xctx_out->xts.key2 = &xctx_out->ks2;
3352         }
3353         return 1;
3354     } else if (type != EVP_CTRL_INIT)
3355         return -1;
3356     /* key1 and key2 are used as an indicator both key and IV are set */
3357     xctx->xts.key1 = NULL;
3358     xctx->xts.key2 = NULL;
3359     return 1;
3360 }
3361
3362 static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
3363                             const unsigned char *iv, int enc)
3364 {
3365     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
3366     if (!iv && !key)
3367         return 1;
3368
3369     if (key)
3370         do {
3371 #ifdef AES_XTS_ASM
3372             xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
3373 #else
3374             xctx->stream = NULL;
3375 #endif
3376             /* key_len is two AES keys */
3377 #ifdef HWAES_CAPABLE
3378             if (HWAES_CAPABLE) {
3379                 if (enc) {
3380                     HWAES_set_encrypt_key(key,
3381                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3382                                           &xctx->ks1.ks);
3383                     xctx->xts.block1 = (block128_f) HWAES_encrypt;
3384 # ifdef HWAES_xts_encrypt
3385                     xctx->stream = HWAES_xts_encrypt;
3386 # endif
3387                 } else {
3388                     HWAES_set_decrypt_key(key,
3389                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3390                                           &xctx->ks1.ks);
3391                     xctx->xts.block1 = (block128_f) HWAES_decrypt;
3392 # ifdef HWAES_xts_decrypt
3393                     xctx->stream = HWAES_xts_decrypt;
3394 #endif
3395                 }
3396
3397                 HWAES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
3398                                       EVP_CIPHER_CTX_key_length(ctx) * 4,