Fix compilation on sparc
[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 # ifndef OPENSSL_NO_SIV
931 #  define aes_t4_siv_init_key aes_siv_init_key
932 #  define aes_t4_siv_cipher aes_siv_cipher
933 # endif /* OPENSSL_NO_SIV */
934
935 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
936 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
937         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
938         flags|EVP_CIPH_##MODE##_MODE,   \
939         aes_t4_init_key,                \
940         aes_t4_##mode##_cipher,         \
941         NULL,                           \
942         sizeof(EVP_AES_KEY),            \
943         NULL,NULL,NULL,NULL }; \
944 static const EVP_CIPHER aes_##keylen##_##mode = { \
945         nid##_##keylen##_##nmode,blocksize,     \
946         keylen/8,ivlen, \
947         flags|EVP_CIPH_##MODE##_MODE,   \
948         aes_init_key,                   \
949         aes_##mode##_cipher,            \
950         NULL,                           \
951         sizeof(EVP_AES_KEY),            \
952         NULL,NULL,NULL,NULL }; \
953 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
954 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
955
956 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
957 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
958         nid##_##keylen##_##mode,blocksize, \
959         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
960         ivlen,                          \
961         flags|EVP_CIPH_##MODE##_MODE,   \
962         aes_t4_##mode##_init_key,       \
963         aes_t4_##mode##_cipher,         \
964         aes_##mode##_cleanup,           \
965         sizeof(EVP_AES_##MODE##_CTX),   \
966         NULL,NULL,aes_##mode##_ctrl,NULL }; \
967 static const EVP_CIPHER aes_##keylen##_##mode = { \
968         nid##_##keylen##_##mode,blocksize, \
969         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
970         ivlen,                          \
971         flags|EVP_CIPH_##MODE##_MODE,   \
972         aes_##mode##_init_key,          \
973         aes_##mode##_cipher,            \
974         aes_##mode##_cleanup,           \
975         sizeof(EVP_AES_##MODE##_CTX),   \
976         NULL,NULL,aes_##mode##_ctrl,NULL }; \
977 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
978 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
979
980 #elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
981 /*
982  * IBM S390X support
983  */
984 # include "s390x_arch.h"
985
986 typedef struct {
987     union {
988         double align;
989         /*-
990          * KM-AES parameter block - begin
991          * (see z/Architecture Principles of Operation >= SA22-7832-06)
992          */
993         struct {
994             unsigned char k[32];
995         } param;
996         /* KM-AES parameter block - end */
997     } km;
998     unsigned int fc;
999 } S390X_AES_ECB_CTX;
1000
1001 typedef struct {
1002     union {
1003         double align;
1004         /*-
1005          * KMO-AES parameter block - begin
1006          * (see z/Architecture Principles of Operation >= SA22-7832-08)
1007          */
1008         struct {
1009             unsigned char cv[16];
1010             unsigned char k[32];
1011         } param;
1012         /* KMO-AES parameter block - end */
1013     } kmo;
1014     unsigned int fc;
1015
1016     int res;
1017 } S390X_AES_OFB_CTX;
1018
1019 typedef struct {
1020     union {
1021         double align;
1022         /*-
1023          * KMF-AES parameter block - begin
1024          * (see z/Architecture Principles of Operation >= SA22-7832-08)
1025          */
1026         struct {
1027             unsigned char cv[16];
1028             unsigned char k[32];
1029         } param;
1030         /* KMF-AES parameter block - end */
1031     } kmf;
1032     unsigned int fc;
1033
1034     int res;
1035 } S390X_AES_CFB_CTX;
1036
1037 typedef struct {
1038     union {
1039         double align;
1040         /*-
1041          * KMA-GCM-AES parameter block - begin
1042          * (see z/Architecture Principles of Operation >= SA22-7832-11)
1043          */
1044         struct {
1045             unsigned char reserved[12];
1046             union {
1047                 unsigned int w;
1048                 unsigned char b[4];
1049             } cv;
1050             union {
1051                 unsigned long long g[2];
1052                 unsigned char b[16];
1053             } t;
1054             unsigned char h[16];
1055             unsigned long long taadl;
1056             unsigned long long tpcl;
1057             union {
1058                 unsigned long long g[2];
1059                 unsigned int w[4];
1060             } j0;
1061             unsigned char k[32];
1062         } param;
1063         /* KMA-GCM-AES parameter block - end */
1064     } kma;
1065     unsigned int fc;
1066     int key_set;
1067
1068     unsigned char *iv;
1069     int ivlen;
1070     int iv_set;
1071     int iv_gen;
1072
1073     int taglen;
1074
1075     unsigned char ares[16];
1076     unsigned char mres[16];
1077     unsigned char kres[16];
1078     int areslen;
1079     int mreslen;
1080     int kreslen;
1081
1082     int tls_aad_len;
1083     uint64_t tls_enc_records;   /* Number of TLS records encrypted */
1084 } S390X_AES_GCM_CTX;
1085
1086 typedef struct {
1087     union {
1088         double align;
1089         /*-
1090          * Padding is chosen so that ccm.kmac_param.k overlaps with key.k and
1091          * ccm.fc with key.k.rounds. Remember that on s390x, an AES_KEY's
1092          * rounds field is used to store the function code and that the key
1093          * schedule is not stored (if aes hardware support is detected).
1094          */
1095         struct {
1096             unsigned char pad[16];
1097             AES_KEY k;
1098         } key;
1099
1100         struct {
1101             /*-
1102              * KMAC-AES parameter block - begin
1103              * (see z/Architecture Principles of Operation >= SA22-7832-08)
1104              */
1105             struct {
1106                 union {
1107                     unsigned long long g[2];
1108                     unsigned char b[16];
1109                 } icv;
1110                 unsigned char k[32];
1111             } kmac_param;
1112             /* KMAC-AES paramater block - end */
1113
1114             union {
1115                 unsigned long long g[2];
1116                 unsigned char b[16];
1117             } nonce;
1118             union {
1119                 unsigned long long g[2];
1120                 unsigned char b[16];
1121             } buf;
1122
1123             unsigned long long blocks;
1124             int l;
1125             int m;
1126             int tls_aad_len;
1127             int iv_set;
1128             int tag_set;
1129             int len_set;
1130             int key_set;
1131
1132             unsigned char pad[140];
1133             unsigned int fc;
1134         } ccm;
1135     } aes;
1136 } S390X_AES_CCM_CTX;
1137
1138 /* Convert key size to function code: [16,24,32] -> [18,19,20]. */
1139 # define S390X_AES_FC(keylen)  (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6))
1140
1141 /* Most modes of operation need km for partial block processing. */
1142 # define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1143                                 S390X_CAPBIT(S390X_AES_128))
1144 # define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1145                                 S390X_CAPBIT(S390X_AES_192))
1146 # define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] &      \
1147                                 S390X_CAPBIT(S390X_AES_256))
1148
1149 # define s390x_aes_init_key aes_init_key
1150 static int s390x_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
1151                               const unsigned char *iv, int enc);
1152
1153 # define S390X_aes_128_cbc_CAPABLE      1       /* checked by callee */
1154 # define S390X_aes_192_cbc_CAPABLE      1
1155 # define S390X_aes_256_cbc_CAPABLE      1
1156 # define S390X_AES_CBC_CTX              EVP_AES_KEY
1157
1158 # define s390x_aes_cbc_init_key aes_init_key
1159
1160 # define s390x_aes_cbc_cipher aes_cbc_cipher
1161 static int s390x_aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1162                                 const unsigned char *in, size_t len);
1163
1164 # define S390X_aes_128_ecb_CAPABLE      S390X_aes_128_CAPABLE
1165 # define S390X_aes_192_ecb_CAPABLE      S390X_aes_192_CAPABLE
1166 # define S390X_aes_256_ecb_CAPABLE      S390X_aes_256_CAPABLE
1167
1168 static int s390x_aes_ecb_init_key(EVP_CIPHER_CTX *ctx,
1169                                   const unsigned char *key,
1170                                   const unsigned char *iv, int enc)
1171 {
1172     S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx);
1173     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1174
1175     cctx->fc = S390X_AES_FC(keylen);
1176     if (!enc)
1177         cctx->fc |= S390X_DECRYPT;
1178
1179     memcpy(cctx->km.param.k, key, keylen);
1180     return 1;
1181 }
1182
1183 static int s390x_aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1184                                 const unsigned char *in, size_t len)
1185 {
1186     S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx);
1187
1188     s390x_km(in, len, out, cctx->fc, &cctx->km.param);
1189     return 1;
1190 }
1191
1192 # define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE &&            \
1193                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1194                                      S390X_CAPBIT(S390X_AES_128)))
1195 # define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE &&            \
1196                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1197                                      S390X_CAPBIT(S390X_AES_192)))
1198 # define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE &&            \
1199                                     (OPENSSL_s390xcap_P.kmo[0] &        \
1200                                      S390X_CAPBIT(S390X_AES_256)))
1201
1202 static int s390x_aes_ofb_init_key(EVP_CIPHER_CTX *ctx,
1203                                   const unsigned char *key,
1204                                   const unsigned char *ivec, int enc)
1205 {
1206     S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx);
1207     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1208     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1209     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1210
1211     memcpy(cctx->kmo.param.cv, iv, ivlen);
1212     memcpy(cctx->kmo.param.k, key, keylen);
1213     cctx->fc = S390X_AES_FC(keylen);
1214     cctx->res = 0;
1215     return 1;
1216 }
1217
1218 static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1219                                 const unsigned char *in, size_t len)
1220 {
1221     S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx);
1222     int n = cctx->res;
1223     int rem;
1224
1225     while (n && len) {
1226         *out = *in ^ cctx->kmo.param.cv[n];
1227         n = (n + 1) & 0xf;
1228         --len;
1229         ++in;
1230         ++out;
1231     }
1232
1233     rem = len & 0xf;
1234
1235     len &= ~(size_t)0xf;
1236     if (len) {
1237         s390x_kmo(in, len, out, cctx->fc, &cctx->kmo.param);
1238
1239         out += len;
1240         in += len;
1241     }
1242
1243     if (rem) {
1244         s390x_km(cctx->kmo.param.cv, 16, cctx->kmo.param.cv, cctx->fc,
1245                  cctx->kmo.param.k);
1246
1247         while (rem--) {
1248             out[n] = in[n] ^ cctx->kmo.param.cv[n];
1249             ++n;
1250         }
1251     }
1252
1253     cctx->res = n;
1254     return 1;
1255 }
1256
1257 # define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE &&            \
1258                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1259                                      S390X_CAPBIT(S390X_AES_128)))
1260 # define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE &&            \
1261                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1262                                      S390X_CAPBIT(S390X_AES_192)))
1263 # define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE &&            \
1264                                     (OPENSSL_s390xcap_P.kmf[0] &        \
1265                                      S390X_CAPBIT(S390X_AES_256)))
1266
1267 static int s390x_aes_cfb_init_key(EVP_CIPHER_CTX *ctx,
1268                                   const unsigned char *key,
1269                                   const unsigned char *ivec, int enc)
1270 {
1271     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1272     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1273     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1274     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1275
1276     cctx->fc = S390X_AES_FC(keylen);
1277     cctx->fc |= 16 << 24;   /* 16 bytes cipher feedback */
1278     if (!enc)
1279         cctx->fc |= S390X_DECRYPT;
1280
1281     cctx->res = 0;
1282     memcpy(cctx->kmf.param.cv, iv, ivlen);
1283     memcpy(cctx->kmf.param.k, key, keylen);
1284     return 1;
1285 }
1286
1287 static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1288                                 const unsigned char *in, size_t len)
1289 {
1290     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1291     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1292     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
1293     int n = cctx->res;
1294     int rem;
1295     unsigned char tmp;
1296
1297     while (n && len) {
1298         tmp = *in;
1299         *out = cctx->kmf.param.cv[n] ^ tmp;
1300         cctx->kmf.param.cv[n] = enc ? *out : tmp;
1301         n = (n + 1) & 0xf;
1302         --len;
1303         ++in;
1304         ++out;
1305     }
1306
1307     rem = len & 0xf;
1308
1309     len &= ~(size_t)0xf;
1310     if (len) {
1311         s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param);
1312
1313         out += len;
1314         in += len;
1315     }
1316
1317     if (rem) {
1318         s390x_km(cctx->kmf.param.cv, 16, cctx->kmf.param.cv,
1319                  S390X_AES_FC(keylen), cctx->kmf.param.k);
1320
1321         while (rem--) {
1322             tmp = in[n];
1323             out[n] = cctx->kmf.param.cv[n] ^ tmp;
1324             cctx->kmf.param.cv[n] = enc ? out[n] : tmp;
1325             ++n;
1326         }
1327     }
1328
1329     cctx->res = n;
1330     return 1;
1331 }
1332
1333 # define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1334                                      S390X_CAPBIT(S390X_AES_128))
1335 # define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1336                                      S390X_CAPBIT(S390X_AES_192))
1337 # define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] &        \
1338                                      S390X_CAPBIT(S390X_AES_256))
1339
1340 static int s390x_aes_cfb8_init_key(EVP_CIPHER_CTX *ctx,
1341                                    const unsigned char *key,
1342                                    const unsigned char *ivec, int enc)
1343 {
1344     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1345     const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx);
1346     const int keylen = EVP_CIPHER_CTX_key_length(ctx);
1347     const int ivlen = EVP_CIPHER_CTX_iv_length(ctx);
1348
1349     cctx->fc = S390X_AES_FC(keylen);
1350     cctx->fc |= 1 << 24;   /* 1 byte cipher feedback */
1351     if (!enc)
1352         cctx->fc |= S390X_DECRYPT;
1353
1354     memcpy(cctx->kmf.param.cv, iv, ivlen);
1355     memcpy(cctx->kmf.param.k, key, keylen);
1356     return 1;
1357 }
1358
1359 static int s390x_aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1360                                  const unsigned char *in, size_t len)
1361 {
1362     S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx);
1363
1364     s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param);
1365     return 1;
1366 }
1367
1368 # define S390X_aes_128_cfb1_CAPABLE     0
1369 # define S390X_aes_192_cfb1_CAPABLE     0
1370 # define S390X_aes_256_cfb1_CAPABLE     0
1371
1372 # define s390x_aes_cfb1_init_key aes_init_key
1373
1374 # define s390x_aes_cfb1_cipher aes_cfb1_cipher
1375 static int s390x_aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1376                                  const unsigned char *in, size_t len);
1377
1378 # define S390X_aes_128_ctr_CAPABLE      1       /* checked by callee */
1379 # define S390X_aes_192_ctr_CAPABLE      1
1380 # define S390X_aes_256_ctr_CAPABLE      1
1381 # define S390X_AES_CTR_CTX              EVP_AES_KEY
1382
1383 # define s390x_aes_ctr_init_key aes_init_key
1384
1385 # define s390x_aes_ctr_cipher aes_ctr_cipher
1386 static int s390x_aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1387                                 const unsigned char *in, size_t len);
1388
1389 # define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE &&            \
1390                                     (OPENSSL_s390xcap_P.kma[0] &        \
1391                                      S390X_CAPBIT(S390X_AES_128)))
1392 # define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE &&            \
1393                                     (OPENSSL_s390xcap_P.kma[0] &        \
1394                                      S390X_CAPBIT(S390X_AES_192)))
1395 # define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE &&            \
1396                                     (OPENSSL_s390xcap_P.kma[0] &        \
1397                                      S390X_CAPBIT(S390X_AES_256)))
1398
1399 /* iv + padding length for iv lenghts != 12 */
1400 # define S390X_gcm_ivpadlen(i)  ((((i) + 15) >> 4 << 4) + 16)
1401
1402 /*-
1403  * Process additional authenticated data. Returns 0 on success. Code is
1404  * big-endian.
1405  */
1406 static int s390x_aes_gcm_aad(S390X_AES_GCM_CTX *ctx, const unsigned char *aad,
1407                              size_t len)
1408 {
1409     unsigned long long alen;
1410     int n, rem;
1411
1412     if (ctx->kma.param.tpcl)
1413         return -2;
1414
1415     alen = ctx->kma.param.taadl + len;
1416     if (alen > (U64(1) << 61) || (sizeof(len) == 8 && alen < len))
1417         return -1;
1418     ctx->kma.param.taadl = alen;
1419
1420     n = ctx->areslen;
1421     if (n) {
1422         while (n && len) {
1423             ctx->ares[n] = *aad;
1424             n = (n + 1) & 0xf;
1425             ++aad;
1426             --len;
1427         }
1428         /* ctx->ares contains a complete block if offset has wrapped around */
1429         if (!n) {
1430             s390x_kma(ctx->ares, 16, NULL, 0, NULL, ctx->fc, &ctx->kma.param);
1431             ctx->fc |= S390X_KMA_HS;
1432         }
1433         ctx->areslen = n;
1434     }
1435
1436     rem = len & 0xf;
1437
1438     len &= ~(size_t)0xf;
1439     if (len) {
1440         s390x_kma(aad, len, NULL, 0, NULL, ctx->fc, &ctx->kma.param);
1441         aad += len;
1442         ctx->fc |= S390X_KMA_HS;
1443     }
1444
1445     if (rem) {
1446         ctx->areslen = rem;
1447
1448         do {
1449             --rem;
1450             ctx->ares[rem] = aad[rem];
1451         } while (rem);
1452     }
1453     return 0;
1454 }
1455
1456 /*-
1457  * En/de-crypt plain/cipher-text and authenticate ciphertext. Returns 0 for
1458  * success. Code is big-endian.
1459  */
1460 static int s390x_aes_gcm(S390X_AES_GCM_CTX *ctx, const unsigned char *in,
1461                          unsigned char *out, size_t len)
1462 {
1463     const unsigned char *inptr;
1464     unsigned long long mlen;
1465     union {
1466         unsigned int w[4];
1467         unsigned char b[16];
1468     } buf;
1469     size_t inlen;
1470     int n, rem, i;
1471
1472     mlen = ctx->kma.param.tpcl + len;
1473     if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len))
1474         return -1;
1475     ctx->kma.param.tpcl = mlen;
1476
1477     n = ctx->mreslen;
1478     if (n) {
1479         inptr = in;
1480         inlen = len;
1481         while (n && inlen) {
1482             ctx->mres[n] = *inptr;
1483             n = (n + 1) & 0xf;
1484             ++inptr;
1485             --inlen;
1486         }
1487         /* ctx->mres contains a complete block if offset has wrapped around */
1488         if (!n) {
1489             s390x_kma(ctx->ares, ctx->areslen, ctx->mres, 16, buf.b,
1490                       ctx->fc | S390X_KMA_LAAD, &ctx->kma.param);
1491             ctx->fc |= S390X_KMA_HS;
1492             ctx->areslen = 0;
1493
1494             /* previous call already encrypted/decrypted its remainder,
1495              * see comment below */
1496             n = ctx->mreslen;
1497             while (n) {
1498                 *out = buf.b[n];
1499                 n = (n + 1) & 0xf;
1500                 ++out;
1501                 ++in;
1502                 --len;
1503             }
1504             ctx->mreslen = 0;
1505         }
1506     }
1507
1508     rem = len & 0xf;
1509
1510     len &= ~(size_t)0xf;
1511     if (len) {
1512         s390x_kma(ctx->ares, ctx->areslen, in, len, out,
1513                   ctx->fc | S390X_KMA_LAAD, &ctx->kma.param);
1514         in += len;
1515         out += len;
1516         ctx->fc |= S390X_KMA_HS;
1517         ctx->areslen = 0;
1518     }
1519
1520     /*-
1521      * If there is a remainder, it has to be saved such that it can be
1522      * processed by kma later. However, we also have to do the for-now
1523      * unauthenticated encryption/decryption part here and now...
1524      */
1525     if (rem) {
1526         if (!ctx->mreslen) {
1527             buf.w[0] = ctx->kma.param.j0.w[0];
1528             buf.w[1] = ctx->kma.param.j0.w[1];
1529             buf.w[2] = ctx->kma.param.j0.w[2];
1530             buf.w[3] = ctx->kma.param.cv.w + 1;
1531             s390x_km(buf.b, 16, ctx->kres, ctx->fc & 0x1f, &ctx->kma.param.k);
1532         }
1533
1534         n = ctx->mreslen;
1535         for (i = 0; i < rem; i++) {
1536             ctx->mres[n + i] = in[i];
1537             out[i] = in[i] ^ ctx->kres[n + i];
1538         }
1539
1540         ctx->mreslen += rem;
1541     }
1542     return 0;
1543 }
1544
1545 /*-
1546  * Initialize context structure. Code is big-endian.
1547  */
1548 static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx,
1549                                 const unsigned char *iv)
1550 {
1551     ctx->kma.param.t.g[0] = 0;
1552     ctx->kma.param.t.g[1] = 0;
1553     ctx->kma.param.tpcl = 0;
1554     ctx->kma.param.taadl = 0;
1555     ctx->mreslen = 0;
1556     ctx->areslen = 0;
1557     ctx->kreslen = 0;
1558
1559     if (ctx->ivlen == 12) {
1560         memcpy(&ctx->kma.param.j0, iv, ctx->ivlen);
1561         ctx->kma.param.j0.w[3] = 1;
1562         ctx->kma.param.cv.w = 1;
1563     } else {
1564         /* ctx->iv has the right size and is already padded. */
1565         memcpy(ctx->iv, iv, ctx->ivlen);
1566         s390x_kma(ctx->iv, S390X_gcm_ivpadlen(ctx->ivlen), NULL, 0, NULL,
1567                   ctx->fc, &ctx->kma.param);
1568         ctx->fc |= S390X_KMA_HS;
1569
1570         ctx->kma.param.j0.g[0] = ctx->kma.param.t.g[0];
1571         ctx->kma.param.j0.g[1] = ctx->kma.param.t.g[1];
1572         ctx->kma.param.cv.w = ctx->kma.param.j0.w[3];
1573         ctx->kma.param.t.g[0] = 0;
1574         ctx->kma.param.t.g[1] = 0;
1575     }
1576 }
1577
1578 /*-
1579  * Performs various operations on the context structure depending on control
1580  * type. Returns 1 for success, 0 for failure and -1 for unknown control type.
1581  * Code is big-endian.
1582  */
1583 static int s390x_aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
1584 {
1585     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c);
1586     S390X_AES_GCM_CTX *gctx_out;
1587     EVP_CIPHER_CTX *out;
1588     unsigned char *buf, *iv;
1589     int ivlen, enc, len;
1590
1591     switch (type) {
1592     case EVP_CTRL_INIT:
1593         ivlen = EVP_CIPHER_CTX_iv_length(c);
1594         iv = EVP_CIPHER_CTX_iv_noconst(c);
1595         gctx->key_set = 0;
1596         gctx->iv_set = 0;
1597         gctx->ivlen = ivlen;
1598         gctx->iv = iv;
1599         gctx->taglen = -1;
1600         gctx->iv_gen = 0;
1601         gctx->tls_aad_len = -1;
1602         return 1;
1603
1604     case EVP_CTRL_AEAD_SET_IVLEN:
1605         if (arg <= 0)
1606             return 0;
1607
1608         if (arg != 12) {
1609             iv = EVP_CIPHER_CTX_iv_noconst(c);
1610             len = S390X_gcm_ivpadlen(arg);
1611
1612             /* Allocate memory for iv if needed. */
1613             if (gctx->ivlen == 12 || len > S390X_gcm_ivpadlen(gctx->ivlen)) {
1614                 if (gctx->iv != iv)
1615                     OPENSSL_free(gctx->iv);
1616
1617                 if ((gctx->iv = OPENSSL_malloc(len)) == NULL) {
1618                     EVPerr(EVP_F_S390X_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
1619                     return 0;
1620                 }
1621             }
1622             /* Add padding. */
1623             memset(gctx->iv + arg, 0, len - arg - 8);
1624             *((unsigned long long *)(gctx->iv + len - 8)) = arg << 3;
1625         }
1626         gctx->ivlen = arg;
1627         return 1;
1628
1629     case EVP_CTRL_AEAD_SET_TAG:
1630         buf = EVP_CIPHER_CTX_buf_noconst(c);
1631         enc = EVP_CIPHER_CTX_encrypting(c);
1632         if (arg <= 0 || arg > 16 || enc)
1633             return 0;
1634
1635         memcpy(buf, ptr, arg);
1636         gctx->taglen = arg;
1637         return 1;
1638
1639     case EVP_CTRL_AEAD_GET_TAG:
1640         enc = EVP_CIPHER_CTX_encrypting(c);
1641         if (arg <= 0 || arg > 16 || !enc || gctx->taglen < 0)
1642             return 0;
1643
1644         memcpy(ptr, gctx->kma.param.t.b, arg);
1645         return 1;
1646
1647     case EVP_CTRL_GCM_SET_IV_FIXED:
1648         /* Special case: -1 length restores whole iv */
1649         if (arg == -1) {
1650             memcpy(gctx->iv, ptr, gctx->ivlen);
1651             gctx->iv_gen = 1;
1652             return 1;
1653         }
1654         /*
1655          * Fixed field must be at least 4 bytes and invocation field at least
1656          * 8.
1657          */
1658         if ((arg < 4) || (gctx->ivlen - arg) < 8)
1659             return 0;
1660
1661         if (arg)
1662             memcpy(gctx->iv, ptr, arg);
1663
1664         enc = EVP_CIPHER_CTX_encrypting(c);
1665         if (enc && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
1666             return 0;
1667
1668         gctx->iv_gen = 1;
1669         return 1;
1670
1671     case EVP_CTRL_GCM_IV_GEN:
1672         if (gctx->iv_gen == 0 || gctx->key_set == 0)
1673             return 0;
1674
1675         s390x_aes_gcm_setiv(gctx, gctx->iv);
1676
1677         if (arg <= 0 || arg > gctx->ivlen)
1678             arg = gctx->ivlen;
1679
1680         memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
1681         /*
1682          * Invocation field will be at least 8 bytes in size and so no need
1683          * to check wrap around or increment more than last 8 bytes.
1684          */
1685         ctr64_inc(gctx->iv + gctx->ivlen - 8);
1686         gctx->iv_set = 1;
1687         return 1;
1688
1689     case EVP_CTRL_GCM_SET_IV_INV:
1690         enc = EVP_CIPHER_CTX_encrypting(c);
1691         if (gctx->iv_gen == 0 || gctx->key_set == 0 || enc)
1692             return 0;
1693
1694         memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
1695         s390x_aes_gcm_setiv(gctx, gctx->iv);
1696         gctx->iv_set = 1;
1697         return 1;
1698
1699     case EVP_CTRL_AEAD_TLS1_AAD:
1700         /* Save the aad for later use. */
1701         if (arg != EVP_AEAD_TLS1_AAD_LEN)
1702             return 0;
1703
1704         buf = EVP_CIPHER_CTX_buf_noconst(c);
1705         memcpy(buf, ptr, arg);
1706         gctx->tls_aad_len = arg;
1707         gctx->tls_enc_records = 0;
1708
1709         len = buf[arg - 2] << 8 | buf[arg - 1];
1710         /* Correct length for explicit iv. */
1711         if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN)
1712             return 0;
1713         len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
1714
1715         /* If decrypting correct for tag too. */
1716         enc = EVP_CIPHER_CTX_encrypting(c);
1717         if (!enc) {
1718             if (len < EVP_GCM_TLS_TAG_LEN)
1719                 return 0;
1720             len -= EVP_GCM_TLS_TAG_LEN;
1721         }
1722         buf[arg - 2] = len >> 8;
1723         buf[arg - 1] = len & 0xff;
1724         /* Extra padding: tag appended to record. */
1725         return EVP_GCM_TLS_TAG_LEN;
1726
1727     case EVP_CTRL_COPY:
1728         out = ptr;
1729         gctx_out = EVP_C_DATA(S390X_AES_GCM_CTX, out);
1730         iv = EVP_CIPHER_CTX_iv_noconst(c);
1731
1732         if (gctx->iv == iv) {
1733             gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out);
1734         } else {
1735             len = S390X_gcm_ivpadlen(gctx->ivlen);
1736
1737             if ((gctx_out->iv = OPENSSL_malloc(len)) == NULL) {
1738                 EVPerr(EVP_F_S390X_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
1739                 return 0;
1740             }
1741
1742             memcpy(gctx_out->iv, gctx->iv, len);
1743         }
1744         return 1;
1745
1746     default:
1747         return -1;
1748     }
1749 }
1750
1751 /*-
1752  * Set key and/or iv. Returns 1 on success. Otherwise 0 is returned.
1753  */
1754 static int s390x_aes_gcm_init_key(EVP_CIPHER_CTX *ctx,
1755                                   const unsigned char *key,
1756                                   const unsigned char *iv, int enc)
1757 {
1758     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1759     int keylen;
1760
1761     if (iv == NULL && key == NULL)
1762         return 1;
1763
1764     if (key != NULL) {
1765         keylen = EVP_CIPHER_CTX_key_length(ctx);
1766         memcpy(&gctx->kma.param.k, key, keylen);
1767
1768         gctx->fc = S390X_AES_FC(keylen);
1769         if (!enc)
1770             gctx->fc |= S390X_DECRYPT;
1771
1772         if (iv == NULL && gctx->iv_set)
1773             iv = gctx->iv;
1774
1775         if (iv != NULL) {
1776             s390x_aes_gcm_setiv(gctx, iv);
1777             gctx->iv_set = 1;
1778         }
1779         gctx->key_set = 1;
1780     } else {
1781         if (gctx->key_set)
1782             s390x_aes_gcm_setiv(gctx, iv);
1783         else
1784             memcpy(gctx->iv, iv, gctx->ivlen);
1785
1786         gctx->iv_set = 1;
1787         gctx->iv_gen = 0;
1788     }
1789     return 1;
1790 }
1791
1792 /*-
1793  * En/de-crypt and authenticate TLS packet. Returns the number of bytes written
1794  * if successful. Otherwise -1 is returned. Code is big-endian.
1795  */
1796 static int s390x_aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1797                                     const unsigned char *in, size_t len)
1798 {
1799     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1800     const unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
1801     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
1802     int rv = -1;
1803
1804     if (out != in || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
1805         return -1;
1806
1807     /*
1808      * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness
1809      * Requirements from SP 800-38D".  The requirements is for one party to the
1810      * communication to fail after 2^64 - 1 keys.  We do this on the encrypting
1811      * side only.
1812      */
1813     if (ctx->encrypt && ++gctx->tls_enc_records == 0) {
1814         EVPerr(EVP_F_S390X_AES_GCM_TLS_CIPHER, EVP_R_TOO_MANY_RECORDS);
1815         goto err;
1816     }
1817
1818     if (EVP_CIPHER_CTX_ctrl(ctx, enc ? EVP_CTRL_GCM_IV_GEN
1819                                      : EVP_CTRL_GCM_SET_IV_INV,
1820                             EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
1821         goto err;
1822
1823     in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1824     out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
1825     len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1826
1827     gctx->kma.param.taadl = gctx->tls_aad_len << 3;
1828     gctx->kma.param.tpcl = len << 3;
1829     s390x_kma(buf, gctx->tls_aad_len, in, len, out,
1830               gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param);
1831
1832     if (enc) {
1833         memcpy(out + len, gctx->kma.param.t.b, EVP_GCM_TLS_TAG_LEN);
1834         rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
1835     } else {
1836         if (CRYPTO_memcmp(gctx->kma.param.t.b, in + len,
1837                           EVP_GCM_TLS_TAG_LEN)) {
1838             OPENSSL_cleanse(out, len);
1839             goto err;
1840         }
1841         rv = len;
1842     }
1843 err:
1844     gctx->iv_set = 0;
1845     gctx->tls_aad_len = -1;
1846     return rv;
1847 }
1848
1849 /*-
1850  * Called from EVP layer to initialize context, process additional
1851  * authenticated data, en/de-crypt plain/cipher-text and authenticate
1852  * ciphertext or process a TLS packet, depending on context. Returns bytes
1853  * written on success. Otherwise -1 is returned. Code is big-endian.
1854  */
1855 static int s390x_aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1856                                 const unsigned char *in, size_t len)
1857 {
1858     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx);
1859     unsigned char *buf, tmp[16];
1860     int enc;
1861
1862     if (!gctx->key_set)
1863         return -1;
1864
1865     if (gctx->tls_aad_len >= 0)
1866         return s390x_aes_gcm_tls_cipher(ctx, out, in, len);
1867
1868     if (!gctx->iv_set)
1869         return -1;
1870
1871     if (in != NULL) {
1872         if (out == NULL) {
1873             if (s390x_aes_gcm_aad(gctx, in, len))
1874                 return -1;
1875         } else {
1876             if (s390x_aes_gcm(gctx, in, out, len))
1877                 return -1;
1878         }
1879         return len;
1880     } else {
1881         gctx->kma.param.taadl <<= 3;
1882         gctx->kma.param.tpcl <<= 3;
1883         s390x_kma(gctx->ares, gctx->areslen, gctx->mres, gctx->mreslen, tmp,
1884                   gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param);
1885         /* recall that we already did en-/decrypt gctx->mres
1886          * and returned it to caller... */
1887         OPENSSL_cleanse(tmp, gctx->mreslen);
1888         gctx->iv_set = 0;
1889
1890         enc = EVP_CIPHER_CTX_encrypting(ctx);
1891         if (enc) {
1892             gctx->taglen = 16;
1893         } else {
1894             if (gctx->taglen < 0)
1895                 return -1;
1896
1897             buf = EVP_CIPHER_CTX_buf_noconst(ctx);
1898             if (CRYPTO_memcmp(buf, gctx->kma.param.t.b, gctx->taglen))
1899                 return -1;
1900         }
1901         return 0;
1902     }
1903 }
1904
1905 static int s390x_aes_gcm_cleanup(EVP_CIPHER_CTX *c)
1906 {
1907     S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c);
1908     const unsigned char *iv;
1909
1910     if (gctx == NULL)
1911         return 0;
1912
1913     iv = EVP_CIPHER_CTX_iv(c);
1914     if (iv != gctx->iv)
1915         OPENSSL_free(gctx->iv);
1916
1917     OPENSSL_cleanse(gctx, sizeof(*gctx));
1918     return 1;
1919 }
1920
1921 # define S390X_AES_XTS_CTX              EVP_AES_XTS_CTX
1922 # define S390X_aes_128_xts_CAPABLE      1       /* checked by callee */
1923 # define S390X_aes_256_xts_CAPABLE      1
1924
1925 # define s390x_aes_xts_init_key aes_xts_init_key
1926 static int s390x_aes_xts_init_key(EVP_CIPHER_CTX *ctx,
1927                                   const unsigned char *key,
1928                                   const unsigned char *iv, int enc);
1929 # define s390x_aes_xts_cipher aes_xts_cipher
1930 static int s390x_aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
1931                                 const unsigned char *in, size_t len);
1932 # define s390x_aes_xts_ctrl aes_xts_ctrl
1933 static int s390x_aes_xts_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
1934 # define s390x_aes_xts_cleanup aes_xts_cleanup
1935
1936 # define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE &&            \
1937                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1938                                      S390X_CAPBIT(S390X_AES_128)))
1939 # define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE &&            \
1940                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1941                                      S390X_CAPBIT(S390X_AES_192)))
1942 # define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE &&            \
1943                                     (OPENSSL_s390xcap_P.kmac[0] &       \
1944                                      S390X_CAPBIT(S390X_AES_256)))
1945
1946 # define S390X_CCM_AAD_FLAG     0x40
1947
1948 /*-
1949  * Set nonce and length fields. Code is big-endian.
1950  */
1951 static inline void s390x_aes_ccm_setiv(S390X_AES_CCM_CTX *ctx,
1952                                           const unsigned char *nonce,
1953                                           size_t mlen)
1954 {
1955     ctx->aes.ccm.nonce.b[0] &= ~S390X_CCM_AAD_FLAG;
1956     ctx->aes.ccm.nonce.g[1] = mlen;
1957     memcpy(ctx->aes.ccm.nonce.b + 1, nonce, 15 - ctx->aes.ccm.l);
1958 }
1959
1960 /*-
1961  * Process additional authenticated data. Code is big-endian.
1962  */
1963 static void s390x_aes_ccm_aad(S390X_AES_CCM_CTX *ctx, const unsigned char *aad,
1964                               size_t alen)
1965 {
1966     unsigned char *ptr;
1967     int i, rem;
1968
1969     if (!alen)
1970         return;
1971
1972     ctx->aes.ccm.nonce.b[0] |= S390X_CCM_AAD_FLAG;
1973
1974     /* Suppress 'type-punned pointer dereference' warning. */
1975     ptr = ctx->aes.ccm.buf.b;
1976
1977     if (alen < ((1 << 16) - (1 << 8))) {
1978         *(uint16_t *)ptr = alen;
1979         i = 2;
1980     } else if (sizeof(alen) == 8
1981                && alen >= (size_t)1 << (32 % (sizeof(alen) * 8))) {
1982         *(uint16_t *)ptr = 0xffff;
1983         *(uint64_t *)(ptr + 2) = alen;
1984         i = 10;
1985     } else {
1986         *(uint16_t *)ptr = 0xfffe;
1987         *(uint32_t *)(ptr + 2) = alen;
1988         i = 6;
1989     }
1990
1991     while (i < 16 && alen) {
1992         ctx->aes.ccm.buf.b[i] = *aad;
1993         ++aad;
1994         --alen;
1995         ++i;
1996     }
1997     while (i < 16) {
1998         ctx->aes.ccm.buf.b[i] = 0;
1999         ++i;
2000     }
2001
2002     ctx->aes.ccm.kmac_param.icv.g[0] = 0;
2003     ctx->aes.ccm.kmac_param.icv.g[1] = 0;
2004     s390x_kmac(ctx->aes.ccm.nonce.b, 32, ctx->aes.ccm.fc,
2005                &ctx->aes.ccm.kmac_param);
2006     ctx->aes.ccm.blocks += 2;
2007
2008     rem = alen & 0xf;
2009     alen &= ~(size_t)0xf;
2010     if (alen) {
2011         s390x_kmac(aad, alen, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2012         ctx->aes.ccm.blocks += alen >> 4;
2013         aad += alen;
2014     }
2015     if (rem) {
2016         for (i = 0; i < rem; i++)
2017             ctx->aes.ccm.kmac_param.icv.b[i] ^= aad[i];
2018
2019         s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2020                  ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2021                  ctx->aes.ccm.kmac_param.k);
2022         ctx->aes.ccm.blocks++;
2023     }
2024 }
2025
2026 /*-
2027  * En/de-crypt plain/cipher-text. Compute tag from plaintext. Returns 0 for
2028  * success.
2029  */
2030 static int s390x_aes_ccm(S390X_AES_CCM_CTX *ctx, const unsigned char *in,
2031                          unsigned char *out, size_t len, int enc)
2032 {
2033     size_t n, rem;
2034     unsigned int i, l, num;
2035     unsigned char flags;
2036
2037     flags = ctx->aes.ccm.nonce.b[0];
2038     if (!(flags & S390X_CCM_AAD_FLAG)) {
2039         s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.kmac_param.icv.b,
2040                  ctx->aes.ccm.fc, ctx->aes.ccm.kmac_param.k);
2041         ctx->aes.ccm.blocks++;
2042     }
2043     l = flags & 0x7;
2044     ctx->aes.ccm.nonce.b[0] = l;
2045
2046     /*-
2047      * Reconstruct length from encoded length field
2048      * and initialize it with counter value.
2049      */
2050     n = 0;
2051     for (i = 15 - l; i < 15; i++) {
2052         n |= ctx->aes.ccm.nonce.b[i];
2053         ctx->aes.ccm.nonce.b[i] = 0;
2054         n <<= 8;
2055     }
2056     n |= ctx->aes.ccm.nonce.b[15];
2057     ctx->aes.ccm.nonce.b[15] = 1;
2058
2059     if (n != len)
2060         return -1;              /* length mismatch */
2061
2062     if (enc) {
2063         /* Two operations per block plus one for tag encryption */
2064         ctx->aes.ccm.blocks += (((len + 15) >> 4) << 1) + 1;
2065         if (ctx->aes.ccm.blocks > (1ULL << 61))
2066             return -2;          /* too much data */
2067     }
2068
2069     num = 0;
2070     rem = len & 0xf;
2071     len &= ~(size_t)0xf;
2072
2073     if (enc) {
2074         /* mac-then-encrypt */
2075         if (len)
2076             s390x_kmac(in, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2077         if (rem) {
2078             for (i = 0; i < rem; i++)
2079                 ctx->aes.ccm.kmac_param.icv.b[i] ^= in[len + i];
2080
2081             s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2082                      ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2083                      ctx->aes.ccm.kmac_param.k);
2084         }
2085
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     } else {
2090         /* decrypt-then-mac */
2091         CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k,
2092                                     ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b,
2093                                     &num, (ctr128_f)AES_ctr32_encrypt);
2094
2095         if (len)
2096             s390x_kmac(out, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param);
2097         if (rem) {
2098             for (i = 0; i < rem; i++)
2099                 ctx->aes.ccm.kmac_param.icv.b[i] ^= out[len + i];
2100
2101             s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16,
2102                      ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc,
2103                      ctx->aes.ccm.kmac_param.k);
2104         }
2105     }
2106     /* encrypt tag */
2107     for (i = 15 - l; i < 16; i++)
2108         ctx->aes.ccm.nonce.b[i] = 0;
2109
2110     s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.buf.b, ctx->aes.ccm.fc,
2111              ctx->aes.ccm.kmac_param.k);
2112     ctx->aes.ccm.kmac_param.icv.g[0] ^= ctx->aes.ccm.buf.g[0];
2113     ctx->aes.ccm.kmac_param.icv.g[1] ^= ctx->aes.ccm.buf.g[1];
2114
2115     ctx->aes.ccm.nonce.b[0] = flags;    /* restore flags field */
2116     return 0;
2117 }
2118
2119 /*-
2120  * En/de-crypt and authenticate TLS packet. Returns the number of bytes written
2121  * if successful. Otherwise -1 is returned.
2122  */
2123 static int s390x_aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2124                                     const unsigned char *in, size_t len)
2125 {
2126     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2127     unsigned char *ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2128     unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx);
2129     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
2130
2131     if (out != in
2132             || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->aes.ccm.m))
2133         return -1;
2134
2135     if (enc) {
2136         /* Set explicit iv (sequence number). */
2137         memcpy(out, buf, EVP_CCM_TLS_EXPLICIT_IV_LEN);
2138     }
2139
2140     len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m;
2141     /*-
2142      * Get explicit iv (sequence number). We already have fixed iv
2143      * (server/client_write_iv) here.
2144      */
2145     memcpy(ivec + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN);
2146     s390x_aes_ccm_setiv(cctx, ivec, len);
2147
2148     /* Process aad (sequence number|type|version|length) */
2149     s390x_aes_ccm_aad(cctx, buf, cctx->aes.ccm.tls_aad_len);
2150
2151     in += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2152     out += EVP_CCM_TLS_EXPLICIT_IV_LEN;
2153
2154     if (enc) {
2155         if (s390x_aes_ccm(cctx, in, out, len, enc))
2156             return -1;
2157
2158         memcpy(out + len, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m);
2159         return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m;
2160     } else {
2161         if (!s390x_aes_ccm(cctx, in, out, len, enc)) {
2162             if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, in + len,
2163                                cctx->aes.ccm.m))
2164                 return len;
2165         }
2166
2167         OPENSSL_cleanse(out, len);
2168         return -1;
2169     }
2170 }
2171
2172 /*-
2173  * Set key and flag field and/or iv. Returns 1 if successful. Otherwise 0 is
2174  * returned.
2175  */
2176 static int s390x_aes_ccm_init_key(EVP_CIPHER_CTX *ctx,
2177                                   const unsigned char *key,
2178                                   const unsigned char *iv, int enc)
2179 {
2180     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2181     unsigned char *ivec;
2182     int keylen;
2183
2184     if (iv == NULL && key == NULL)
2185         return 1;
2186
2187     if (key != NULL) {
2188         keylen = EVP_CIPHER_CTX_key_length(ctx);
2189         cctx->aes.ccm.fc = S390X_AES_FC(keylen);
2190         memcpy(cctx->aes.ccm.kmac_param.k, key, keylen);
2191
2192         /* Store encoded m and l. */
2193         cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7)
2194                                  | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3;
2195         memset(cctx->aes.ccm.nonce.b + 1, 0,
2196                sizeof(cctx->aes.ccm.nonce.b));
2197         cctx->aes.ccm.blocks = 0;
2198
2199         cctx->aes.ccm.key_set = 1;
2200     }
2201
2202     if (iv != NULL) {
2203         ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2204         memcpy(ivec, iv, 15 - cctx->aes.ccm.l);
2205
2206         cctx->aes.ccm.iv_set = 1;
2207     }
2208
2209     return 1;
2210 }
2211
2212 /*-
2213  * Called from EVP layer to initialize context, process additional
2214  * authenticated data, en/de-crypt plain/cipher-text and authenticate
2215  * plaintext or process a TLS packet, depending on context. Returns bytes
2216  * written on success. Otherwise -1 is returned.
2217  */
2218 static int s390x_aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2219                                 const unsigned char *in, size_t len)
2220 {
2221     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx);
2222     const int enc = EVP_CIPHER_CTX_encrypting(ctx);
2223     int rv;
2224     unsigned char *buf, *ivec;
2225
2226     if (!cctx->aes.ccm.key_set)
2227         return -1;
2228
2229     if (cctx->aes.ccm.tls_aad_len >= 0)
2230         return s390x_aes_ccm_tls_cipher(ctx, out, in, len);
2231
2232     /*-
2233      * Final(): Does not return any data. Recall that ccm is mac-then-encrypt
2234      * so integrity must be checked already at Update() i.e., before
2235      * potentially corrupted data is output.
2236      */
2237     if (in == NULL && out != NULL)
2238         return 0;
2239
2240     if (!cctx->aes.ccm.iv_set)
2241         return -1;
2242
2243     if (!enc && !cctx->aes.ccm.tag_set)
2244         return -1;
2245
2246     if (out == NULL) {
2247         /* Update(): Pass message length. */
2248         if (in == NULL) {
2249             ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2250             s390x_aes_ccm_setiv(cctx, ivec, len);
2251
2252             cctx->aes.ccm.len_set = 1;
2253             return len;
2254         }
2255
2256         /* Update(): Process aad. */
2257         if (!cctx->aes.ccm.len_set && len)
2258             return -1;
2259
2260         s390x_aes_ccm_aad(cctx, in, len);
2261         return len;
2262     }
2263
2264     /* Update(): Process message. */
2265
2266     if (!cctx->aes.ccm.len_set) {
2267         /*-
2268          * In case message length was not previously set explicitly via
2269          * Update(), set it now.
2270          */
2271         ivec = EVP_CIPHER_CTX_iv_noconst(ctx);
2272         s390x_aes_ccm_setiv(cctx, ivec, len);
2273
2274         cctx->aes.ccm.len_set = 1;
2275     }
2276
2277     if (enc) {
2278         if (s390x_aes_ccm(cctx, in, out, len, enc))
2279             return -1;
2280
2281         cctx->aes.ccm.tag_set = 1;
2282         return len;
2283     } else {
2284         rv = -1;
2285
2286         if (!s390x_aes_ccm(cctx, in, out, len, enc)) {
2287             buf = EVP_CIPHER_CTX_buf_noconst(ctx);
2288             if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, buf,
2289                                cctx->aes.ccm.m))
2290                 rv = len;
2291         }
2292
2293         if (rv == -1)
2294             OPENSSL_cleanse(out, len);
2295
2296         cctx->aes.ccm.iv_set = 0;
2297         cctx->aes.ccm.tag_set = 0;
2298         cctx->aes.ccm.len_set = 0;
2299         return rv;
2300     }
2301 }
2302
2303 /*-
2304  * Performs various operations on the context structure depending on control
2305  * type. Returns 1 for success, 0 for failure and -1 for unknown control type.
2306  * Code is big-endian.
2307  */
2308 static int s390x_aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
2309 {
2310     S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, c);
2311     unsigned char *buf, *iv;
2312     int enc, len;
2313
2314     switch (type) {
2315     case EVP_CTRL_INIT:
2316         cctx->aes.ccm.key_set = 0;
2317         cctx->aes.ccm.iv_set = 0;
2318         cctx->aes.ccm.l = 8;
2319         cctx->aes.ccm.m = 12;
2320         cctx->aes.ccm.tag_set = 0;
2321         cctx->aes.ccm.len_set = 0;
2322         cctx->aes.ccm.tls_aad_len = -1;
2323         return 1;
2324
2325     case EVP_CTRL_AEAD_TLS1_AAD:
2326         if (arg != EVP_AEAD_TLS1_AAD_LEN)
2327             return 0;
2328
2329         /* Save the aad for later use. */
2330         buf = EVP_CIPHER_CTX_buf_noconst(c);
2331         memcpy(buf, ptr, arg);
2332         cctx->aes.ccm.tls_aad_len = arg;
2333
2334         len = buf[arg - 2] << 8 | buf[arg - 1];
2335         if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN)
2336             return 0;
2337
2338         /* Correct length for explicit iv. */
2339         len -= EVP_CCM_TLS_EXPLICIT_IV_LEN;
2340
2341         enc = EVP_CIPHER_CTX_encrypting(c);
2342         if (!enc) {
2343             if (len < cctx->aes.ccm.m)
2344                 return 0;
2345
2346             /* Correct length for tag. */
2347             len -= cctx->aes.ccm.m;
2348         }
2349
2350         buf[arg - 2] = len >> 8;
2351         buf[arg - 1] = len & 0xff;
2352
2353         /* Extra padding: tag appended to record. */
2354         return cctx->aes.ccm.m;
2355
2356     case EVP_CTRL_CCM_SET_IV_FIXED:
2357         if (arg != EVP_CCM_TLS_FIXED_IV_LEN)
2358             return 0;
2359
2360         /* Copy to first part of the iv. */
2361         iv = EVP_CIPHER_CTX_iv_noconst(c);
2362         memcpy(iv, ptr, arg);
2363         return 1;
2364
2365     case EVP_CTRL_AEAD_SET_IVLEN:
2366         arg = 15 - arg;
2367         /* fall-through */
2368
2369     case EVP_CTRL_CCM_SET_L:
2370         if (arg < 2 || arg > 8)
2371             return 0;
2372
2373         cctx->aes.ccm.l = arg;
2374         return 1;
2375
2376     case EVP_CTRL_AEAD_SET_TAG:
2377         if ((arg & 1) || arg < 4 || arg > 16)
2378             return 0;
2379
2380         enc = EVP_CIPHER_CTX_encrypting(c);
2381         if (enc && ptr)
2382             return 0;
2383
2384         if (ptr) {
2385             cctx->aes.ccm.tag_set = 1;
2386             buf = EVP_CIPHER_CTX_buf_noconst(c);
2387             memcpy(buf, ptr, arg);
2388         }
2389
2390         cctx->aes.ccm.m = arg;
2391         return 1;
2392
2393     case EVP_CTRL_AEAD_GET_TAG:
2394         enc = EVP_CIPHER_CTX_encrypting(c);
2395         if (!enc || !cctx->aes.ccm.tag_set)
2396             return 0;
2397
2398         if(arg < cctx->aes.ccm.m)
2399             return 0;
2400
2401         memcpy(ptr, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m);
2402         cctx->aes.ccm.tag_set = 0;
2403         cctx->aes.ccm.iv_set = 0;
2404         cctx->aes.ccm.len_set = 0;
2405         return 1;
2406
2407     case EVP_CTRL_COPY:
2408         return 1;
2409
2410     default:
2411         return -1;
2412     }
2413 }
2414
2415 # define s390x_aes_ccm_cleanup aes_ccm_cleanup
2416
2417 # ifndef OPENSSL_NO_OCB
2418 #  define S390X_AES_OCB_CTX             EVP_AES_OCB_CTX
2419 #  define S390X_aes_128_ocb_CAPABLE     0
2420 #  define S390X_aes_192_ocb_CAPABLE     0
2421 #  define S390X_aes_256_ocb_CAPABLE     0
2422
2423 #  define s390x_aes_ocb_init_key aes_ocb_init_key
2424 static int s390x_aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2425                                   const unsigned char *iv, int enc);
2426 #  define s390x_aes_ocb_cipher aes_ocb_cipher
2427 static int s390x_aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2428                                 const unsigned char *in, size_t len);
2429 #  define s390x_aes_ocb_cleanup aes_ocb_cleanup
2430 static int s390x_aes_ocb_cleanup(EVP_CIPHER_CTX *);
2431 #  define s390x_aes_ocb_ctrl aes_ocb_ctrl
2432 static int s390x_aes_ocb_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr);
2433 # endif
2434
2435 # ifndef OPENSSL_NO_SIV
2436 #  define S390X_AES_SIV_CTX             EVP_AES_SIV_CTX
2437 #  define S390X_aes_128_siv_CAPABLE     0
2438 #  define S390X_aes_192_siv_CAPABLE     0
2439 #  define S390X_aes_256_siv_CAPABLE     0
2440
2441 #  define s390x_aes_siv_init_key aes_siv_init_key
2442 #  define s390x_aes_siv_cipher aes_siv_cipher
2443 #  define s390x_aes_siv_cleanup aes_siv_cleanup
2444 #  define s390x_aes_siv_ctrl aes_siv_ctrl
2445 # endif
2446
2447 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,    \
2448                               MODE,flags)                               \
2449 static const EVP_CIPHER s390x_aes_##keylen##_##mode = {                 \
2450     nid##_##keylen##_##nmode,blocksize,                                 \
2451     keylen / 8,                                                         \
2452     ivlen,                                                              \
2453     flags | EVP_CIPH_##MODE##_MODE,                                     \
2454     s390x_aes_##mode##_init_key,                                        \
2455     s390x_aes_##mode##_cipher,                                          \
2456     NULL,                                                               \
2457     sizeof(S390X_AES_##MODE##_CTX),                                     \
2458     NULL,                                                               \
2459     NULL,                                                               \
2460     NULL,                                                               \
2461     NULL                                                                \
2462 };                                                                      \
2463 static const EVP_CIPHER aes_##keylen##_##mode = {                       \
2464     nid##_##keylen##_##nmode,                                           \
2465     blocksize,                                                          \
2466     keylen / 8,                                                         \
2467     ivlen,                                                              \
2468     flags | EVP_CIPH_##MODE##_MODE,                                     \
2469     aes_init_key,                                                       \
2470     aes_##mode##_cipher,                                                \
2471     NULL,                                                               \
2472     sizeof(EVP_AES_KEY),                                                \
2473     NULL,                                                               \
2474     NULL,                                                               \
2475     NULL,                                                               \
2476     NULL                                                                \
2477 };                                                                      \
2478 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void)                       \
2479 {                                                                       \
2480     return S390X_aes_##keylen##_##mode##_CAPABLE ?                      \
2481            &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode;       \
2482 }
2483
2484 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags)\
2485 static const EVP_CIPHER s390x_aes_##keylen##_##mode = {                 \
2486     nid##_##keylen##_##mode,                                            \
2487     blocksize,                                                          \
2488     (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8,        \
2489     ivlen,                                                              \
2490     flags | EVP_CIPH_##MODE##_MODE,                                     \
2491     s390x_aes_##mode##_init_key,                                        \
2492     s390x_aes_##mode##_cipher,                                          \
2493     s390x_aes_##mode##_cleanup,                                         \
2494     sizeof(S390X_AES_##MODE##_CTX),                                     \
2495     NULL,                                                               \
2496     NULL,                                                               \
2497     s390x_aes_##mode##_ctrl,                                            \
2498     NULL                                                                \
2499 };                                                                      \
2500 static const EVP_CIPHER aes_##keylen##_##mode = {                       \
2501     nid##_##keylen##_##mode,blocksize,                                  \
2502     (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8,        \
2503     ivlen,                                                              \
2504     flags | EVP_CIPH_##MODE##_MODE,                                     \
2505     aes_##mode##_init_key,                                              \
2506     aes_##mode##_cipher,                                                \
2507     aes_##mode##_cleanup,                                               \
2508     sizeof(EVP_AES_##MODE##_CTX),                                       \
2509     NULL,                                                               \
2510     NULL,                                                               \
2511     aes_##mode##_ctrl,                                                  \
2512     NULL                                                                \
2513 };                                                                      \
2514 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void)                       \
2515 {                                                                       \
2516     return S390X_aes_##keylen##_##mode##_CAPABLE ?                      \
2517            &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode;       \
2518 }
2519
2520 #else
2521
2522 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
2523 static const EVP_CIPHER aes_##keylen##_##mode = { \
2524         nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
2525         flags|EVP_CIPH_##MODE##_MODE,   \
2526         aes_init_key,                   \
2527         aes_##mode##_cipher,            \
2528         NULL,                           \
2529         sizeof(EVP_AES_KEY),            \
2530         NULL,NULL,NULL,NULL }; \
2531 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
2532 { return &aes_##keylen##_##mode; }
2533
2534 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
2535 static const EVP_CIPHER aes_##keylen##_##mode = { \
2536         nid##_##keylen##_##mode,blocksize, \
2537         (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \
2538         ivlen,                          \
2539         flags|EVP_CIPH_##MODE##_MODE,   \
2540         aes_##mode##_init_key,          \
2541         aes_##mode##_cipher,            \
2542         aes_##mode##_cleanup,           \
2543         sizeof(EVP_AES_##MODE##_CTX),   \
2544         NULL,NULL,aes_##mode##_ctrl,NULL }; \
2545 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
2546 { return &aes_##keylen##_##mode; }
2547
2548 #endif
2549
2550 #if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
2551 # include "arm_arch.h"
2552 # if __ARM_MAX_ARCH__>=7
2553 #  if defined(BSAES_ASM)
2554 #   define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
2555 #  endif
2556 #  if defined(VPAES_ASM)
2557 #   define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
2558 #  endif
2559 #  define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
2560 #  define HWAES_set_encrypt_key aes_v8_set_encrypt_key
2561 #  define HWAES_set_decrypt_key aes_v8_set_decrypt_key
2562 #  define HWAES_encrypt aes_v8_encrypt
2563 #  define HWAES_decrypt aes_v8_decrypt
2564 #  define HWAES_cbc_encrypt aes_v8_cbc_encrypt
2565 #  define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
2566 # endif
2567 #endif
2568
2569 #if defined(HWAES_CAPABLE)
2570 int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
2571                           AES_KEY *key);
2572 int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
2573                           AES_KEY *key);
2574 void HWAES_encrypt(const unsigned char *in, unsigned char *out,
2575                    const AES_KEY *key);
2576 void HWAES_decrypt(const unsigned char *in, unsigned char *out,
2577                    const AES_KEY *key);
2578 void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
2579                        size_t length, const AES_KEY *key,
2580                        unsigned char *ivec, const int enc);
2581 void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
2582                                 size_t len, const AES_KEY *key,
2583                                 const unsigned char ivec[16]);
2584 void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out,
2585                        size_t len, const AES_KEY *key1,
2586                        const AES_KEY *key2, const unsigned char iv[16]);
2587 void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out,
2588                        size_t len, const AES_KEY *key1,
2589                        const AES_KEY *key2, const unsigned char iv[16]);
2590 #endif
2591
2592 #define BLOCK_CIPHER_generic_pack(nid,keylen,flags)             \
2593         BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)     \
2594         BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)      \
2595         BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
2596         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1)   \
2597         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags)       \
2598         BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags)       \
2599         BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
2600
2601 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2602                         const unsigned char *iv, int enc)
2603 {
2604     int ret, mode;
2605     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2606
2607     mode = EVP_CIPHER_CTX_mode(ctx);
2608     if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
2609         && !enc) {
2610 #ifdef HWAES_CAPABLE
2611         if (HWAES_CAPABLE) {
2612             ret = HWAES_set_decrypt_key(key,
2613                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
2614                                         &dat->ks.ks);
2615             dat->block = (block128_f) HWAES_decrypt;
2616             dat->stream.cbc = NULL;
2617 # ifdef HWAES_cbc_encrypt
2618             if (mode == EVP_CIPH_CBC_MODE)
2619                 dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
2620 # endif
2621         } else
2622 #endif
2623 #ifdef BSAES_CAPABLE
2624         if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
2625             ret = AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2626                                       &dat->ks.ks);
2627             dat->block = (block128_f) AES_decrypt;
2628             dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
2629         } else
2630 #endif
2631 #ifdef VPAES_CAPABLE
2632         if (VPAES_CAPABLE) {
2633             ret = vpaes_set_decrypt_key(key,
2634                                         EVP_CIPHER_CTX_key_length(ctx) * 8,
2635                                         &dat->ks.ks);
2636             dat->block = (block128_f) vpaes_decrypt;
2637             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2638                 (cbc128_f) vpaes_cbc_encrypt : NULL;
2639         } else
2640 #endif
2641         {
2642             ret = AES_set_decrypt_key(key,
2643                                       EVP_CIPHER_CTX_key_length(ctx) * 8,
2644                                       &dat->ks.ks);
2645             dat->block = (block128_f) AES_decrypt;
2646             dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2647                 (cbc128_f) AES_cbc_encrypt : NULL;
2648         }
2649     } else
2650 #ifdef HWAES_CAPABLE
2651     if (HWAES_CAPABLE) {
2652         ret = HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2653                                     &dat->ks.ks);
2654         dat->block = (block128_f) HWAES_encrypt;
2655         dat->stream.cbc = NULL;
2656 # ifdef HWAES_cbc_encrypt
2657         if (mode == EVP_CIPH_CBC_MODE)
2658             dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
2659         else
2660 # endif
2661 # ifdef HWAES_ctr32_encrypt_blocks
2662         if (mode == EVP_CIPH_CTR_MODE)
2663             dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
2664         else
2665 # endif
2666             (void)0;            /* terminate potentially open 'else' */
2667     } else
2668 #endif
2669 #ifdef BSAES_CAPABLE
2670     if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
2671         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2672                                   &dat->ks.ks);
2673         dat->block = (block128_f) AES_encrypt;
2674         dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
2675     } else
2676 #endif
2677 #ifdef VPAES_CAPABLE
2678     if (VPAES_CAPABLE) {
2679         ret = vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2680                                     &dat->ks.ks);
2681         dat->block = (block128_f) vpaes_encrypt;
2682         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2683             (cbc128_f) vpaes_cbc_encrypt : NULL;
2684     } else
2685 #endif
2686     {
2687         ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
2688                                   &dat->ks.ks);
2689         dat->block = (block128_f) AES_encrypt;
2690         dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
2691             (cbc128_f) AES_cbc_encrypt : NULL;
2692 #ifdef AES_CTR_ASM
2693         if (mode == EVP_CIPH_CTR_MODE)
2694             dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
2695 #endif
2696     }
2697
2698     if (ret < 0) {
2699         EVPerr(EVP_F_AES_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
2700         return 0;
2701     }
2702
2703     return 1;
2704 }
2705
2706 static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2707                           const unsigned char *in, size_t len)
2708 {
2709     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2710
2711     if (dat->stream.cbc)
2712         (*dat->stream.cbc) (in, out, len, &dat->ks,
2713                             EVP_CIPHER_CTX_iv_noconst(ctx),
2714                             EVP_CIPHER_CTX_encrypting(ctx));
2715     else if (EVP_CIPHER_CTX_encrypting(ctx))
2716         CRYPTO_cbc128_encrypt(in, out, len, &dat->ks,
2717                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
2718     else
2719         CRYPTO_cbc128_decrypt(in, out, len, &dat->ks,
2720                               EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
2721
2722     return 1;
2723 }
2724
2725 static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2726                           const unsigned char *in, size_t len)
2727 {
2728     size_t bl = EVP_CIPHER_CTX_block_size(ctx);
2729     size_t i;
2730     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2731
2732     if (len < bl)
2733         return 1;
2734
2735     for (i = 0, len -= bl; i <= len; i += bl)
2736         (*dat->block) (in + i, out + i, &dat->ks);
2737
2738     return 1;
2739 }
2740
2741 static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2742                           const unsigned char *in, size_t len)
2743 {
2744     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2745
2746     int num = EVP_CIPHER_CTX_num(ctx);
2747     CRYPTO_ofb128_encrypt(in, out, len, &dat->ks,
2748                           EVP_CIPHER_CTX_iv_noconst(ctx), &num, dat->block);
2749     EVP_CIPHER_CTX_set_num(ctx, num);
2750     return 1;
2751 }
2752
2753 static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2754                           const unsigned char *in, size_t len)
2755 {
2756     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2757
2758     int num = EVP_CIPHER_CTX_num(ctx);
2759     CRYPTO_cfb128_encrypt(in, out, len, &dat->ks,
2760                           EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2761                           EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2762     EVP_CIPHER_CTX_set_num(ctx, num);
2763     return 1;
2764 }
2765
2766 static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2767                            const unsigned char *in, size_t len)
2768 {
2769     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2770
2771     int num = EVP_CIPHER_CTX_num(ctx);
2772     CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks,
2773                             EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2774                             EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2775     EVP_CIPHER_CTX_set_num(ctx, num);
2776     return 1;
2777 }
2778
2779 static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2780                            const unsigned char *in, size_t len)
2781 {
2782     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2783
2784     if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS)) {
2785         int num = EVP_CIPHER_CTX_num(ctx);
2786         CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks,
2787                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2788                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2789         EVP_CIPHER_CTX_set_num(ctx, num);
2790         return 1;
2791     }
2792
2793     while (len >= MAXBITCHUNK) {
2794         int num = EVP_CIPHER_CTX_num(ctx);
2795         CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks,
2796                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2797                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2798         EVP_CIPHER_CTX_set_num(ctx, num);
2799         len -= MAXBITCHUNK;
2800         out += MAXBITCHUNK;
2801         in  += MAXBITCHUNK;
2802     }
2803     if (len) {
2804         int num = EVP_CIPHER_CTX_num(ctx);
2805         CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks,
2806                                 EVP_CIPHER_CTX_iv_noconst(ctx), &num,
2807                                 EVP_CIPHER_CTX_encrypting(ctx), dat->block);
2808         EVP_CIPHER_CTX_set_num(ctx, num);
2809     }
2810
2811     return 1;
2812 }
2813
2814 static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
2815                           const unsigned char *in, size_t len)
2816 {
2817     unsigned int num = EVP_CIPHER_CTX_num(ctx);
2818     EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
2819
2820     if (dat->stream.ctr)
2821         CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
2822                                     EVP_CIPHER_CTX_iv_noconst(ctx),
2823                                     EVP_CIPHER_CTX_buf_noconst(ctx),
2824                                     &num, dat->stream.ctr);
2825     else
2826         CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
2827                               EVP_CIPHER_CTX_iv_noconst(ctx),
2828                               EVP_CIPHER_CTX_buf_noconst(ctx), &num,
2829                               dat->block);
2830     EVP_CIPHER_CTX_set_num(ctx, num);
2831     return 1;
2832 }
2833
2834 BLOCK_CIPHER_generic_pack(NID_aes, 128, 0)
2835     BLOCK_CIPHER_generic_pack(NID_aes, 192, 0)
2836     BLOCK_CIPHER_generic_pack(NID_aes, 256, 0)
2837
2838 static int aes_gcm_cleanup(EVP_CIPHER_CTX *c)
2839 {
2840     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
2841     if (gctx == NULL)
2842         return 0;
2843     OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm));
2844     if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
2845         OPENSSL_free(gctx->iv);
2846     return 1;
2847 }
2848
2849 static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
2850 {
2851     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
2852     switch (type) {
2853     case EVP_CTRL_INIT:
2854         gctx->key_set = 0;
2855         gctx->iv_set = 0;
2856         gctx->ivlen = c->cipher->iv_len;
2857         gctx->iv = c->iv;
2858         gctx->taglen = -1;
2859         gctx->iv_gen = 0;
2860         gctx->tls_aad_len = -1;
2861         return 1;
2862
2863     case EVP_CTRL_AEAD_SET_IVLEN:
2864         if (arg <= 0)
2865             return 0;
2866         /* Allocate memory for IV if needed */
2867         if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) {
2868             if (gctx->iv != c->iv)
2869                 OPENSSL_free(gctx->iv);
2870             if ((gctx->iv = OPENSSL_malloc(arg)) == NULL) {
2871                 EVPerr(EVP_F_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
2872                 return 0;
2873             }
2874         }
2875         gctx->ivlen = arg;
2876         return 1;
2877
2878     case EVP_CTRL_AEAD_SET_TAG:
2879         if (arg <= 0 || arg > 16 || c->encrypt)
2880             return 0;
2881         memcpy(c->buf, ptr, arg);
2882         gctx->taglen = arg;
2883         return 1;
2884
2885     case EVP_CTRL_AEAD_GET_TAG:
2886         if (arg <= 0 || arg > 16 || !c->encrypt
2887             || gctx->taglen < 0)
2888             return 0;
2889         memcpy(ptr, c->buf, arg);
2890         return 1;
2891
2892     case EVP_CTRL_GET_IV:
2893         if (gctx->iv_gen != 1)
2894             return 0;
2895         if (gctx->ivlen != arg)
2896             return 0;
2897         memcpy(ptr, gctx->iv, arg);
2898         return 1;
2899
2900     case EVP_CTRL_GCM_SET_IV_FIXED:
2901         /* Special case: -1 length restores whole IV */
2902         if (arg == -1) {
2903             memcpy(gctx->iv, ptr, gctx->ivlen);
2904             gctx->iv_gen = 1;
2905             return 1;
2906         }
2907         /*
2908          * Fixed field must be at least 4 bytes and invocation field at least
2909          * 8.
2910          */
2911         if ((arg < 4) || (gctx->ivlen - arg) < 8)
2912             return 0;
2913         if (arg)
2914             memcpy(gctx->iv, ptr, arg);
2915         if (c->encrypt && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
2916             return 0;
2917         gctx->iv_gen = 1;
2918         return 1;
2919
2920     case EVP_CTRL_GCM_IV_GEN:
2921         if (gctx->iv_gen == 0 || gctx->key_set == 0)
2922             return 0;
2923         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
2924         if (arg <= 0 || arg > gctx->ivlen)
2925             arg = gctx->ivlen;
2926         memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
2927         /*
2928          * Invocation field will be at least 8 bytes in size and so no need
2929          * to check wrap around or increment more than last 8 bytes.
2930          */
2931         ctr64_inc(gctx->iv + gctx->ivlen - 8);
2932         gctx->iv_set = 1;
2933         return 1;
2934
2935     case EVP_CTRL_GCM_SET_IV_INV:
2936         if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt)
2937             return 0;
2938         memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
2939         CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
2940         gctx->iv_set = 1;
2941         return 1;
2942
2943     case EVP_CTRL_AEAD_TLS1_AAD:
2944         /* Save the AAD for later use */
2945         if (arg != EVP_AEAD_TLS1_AAD_LEN)
2946             return 0;
2947         memcpy(c->buf, ptr, arg);
2948         gctx->tls_aad_len = arg;
2949         gctx->tls_enc_records = 0;
2950         {
2951             unsigned int len = c->buf[arg - 2] << 8 | c->buf[arg - 1];
2952             /* Correct length for explicit IV */
2953             if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN)
2954                 return 0;
2955             len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
2956             /* If decrypting correct for tag too */
2957             if (!c->encrypt) {
2958                 if (len < EVP_GCM_TLS_TAG_LEN)
2959                     return 0;
2960                 len -= EVP_GCM_TLS_TAG_LEN;
2961             }
2962             c->buf[arg - 2] = len >> 8;
2963             c->buf[arg - 1] = len & 0xff;
2964         }
2965         /* Extra padding: tag appended to record */
2966         return EVP_GCM_TLS_TAG_LEN;
2967
2968     case EVP_CTRL_COPY:
2969         {
2970             EVP_CIPHER_CTX *out = ptr;
2971             EVP_AES_GCM_CTX *gctx_out = EVP_C_DATA(EVP_AES_GCM_CTX,out);
2972             if (gctx->gcm.key) {
2973                 if (gctx->gcm.key != &gctx->ks)
2974                     return 0;
2975                 gctx_out->gcm.key = &gctx_out->ks;
2976             }
2977             if (gctx->iv == c->iv)
2978                 gctx_out->iv = out->iv;
2979             else {
2980                 if ((gctx_out->iv = OPENSSL_malloc(gctx->ivlen)) == NULL) {
2981                     EVPerr(EVP_F_AES_GCM_CTRL, ERR_R_MALLOC_FAILURE);
2982                     return 0;
2983                 }
2984                 memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
2985             }
2986             return 1;
2987         }
2988
2989     default:
2990         return -1;
2991
2992     }
2993 }
2994
2995 static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
2996                             const unsigned char *iv, int enc)
2997 {
2998     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
2999     if (!iv && !key)
3000         return 1;
3001     if (key) {
3002         do {
3003 #ifdef HWAES_CAPABLE
3004             if (HWAES_CAPABLE) {
3005                 HWAES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3006                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3007                                    (block128_f) HWAES_encrypt);
3008 # ifdef HWAES_ctr32_encrypt_blocks
3009                 gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
3010 # else
3011                 gctx->ctr = NULL;
3012 # endif
3013                 break;
3014             } else
3015 #endif
3016 #ifdef BSAES_CAPABLE
3017             if (BSAES_CAPABLE) {
3018                 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3019                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3020                                    (block128_f) AES_encrypt);
3021                 gctx->ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
3022                 break;
3023             } else
3024 #endif
3025 #ifdef VPAES_CAPABLE
3026             if (VPAES_CAPABLE) {
3027                 vpaes_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3028                 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3029                                    (block128_f) vpaes_encrypt);
3030                 gctx->ctr = NULL;
3031                 break;
3032             } else
3033 #endif
3034                 (void)0;        /* terminate potentially open 'else' */
3035
3036             AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
3037             CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
3038                                (block128_f) AES_encrypt);
3039 #ifdef AES_CTR_ASM
3040             gctx->ctr = (ctr128_f) AES_ctr32_encrypt;
3041 #else
3042             gctx->ctr = NULL;
3043 #endif
3044         } while (0);
3045
3046         /*
3047          * If we have an iv can set it directly, otherwise use saved IV.
3048          */
3049         if (iv == NULL && gctx->iv_set)
3050             iv = gctx->iv;
3051         if (iv) {
3052             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
3053             gctx->iv_set = 1;
3054         }
3055         gctx->key_set = 1;
3056     } else {
3057         /* If key set use IV, otherwise copy */
3058         if (gctx->key_set)
3059             CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
3060         else
3061             memcpy(gctx->iv, iv, gctx->ivlen);
3062         gctx->iv_set = 1;
3063         gctx->iv_gen = 0;
3064     }
3065     return 1;
3066 }
3067
3068 /*
3069  * Handle TLS GCM packet format. This consists of the last portion of the IV
3070  * followed by the payload and finally the tag. On encrypt generate IV,
3071  * encrypt payload and write the tag. On verify retrieve IV, decrypt payload
3072  * and verify tag.
3073  */
3074
3075 static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
3076                               const unsigned char *in, size_t len)
3077 {
3078     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
3079     int rv = -1;
3080     /* Encrypt/decrypt must be performed in place */
3081     if (out != in
3082         || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
3083         return -1;
3084     
3085     /*
3086      * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness
3087      * Requirements from SP 800-38D".  The requirements is for one party to the
3088      * communication to fail after 2^64 - 1 keys.  We do this on the encrypting
3089      * side only.
3090      */
3091     if (ctx->encrypt && ++gctx->tls_enc_records == 0) {
3092         EVPerr(EVP_F_AES_GCM_TLS_CIPHER, EVP_R_TOO_MANY_RECORDS);
3093         goto err;
3094     }
3095
3096     /*
3097      * Set IV from start of buffer or generate IV and write to start of
3098      * buffer.
3099      */
3100     if (EVP_CIPHER_CTX_ctrl(ctx, ctx->encrypt ? EVP_CTRL_GCM_IV_GEN
3101                                               : EVP_CTRL_GCM_SET_IV_INV,
3102                             EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
3103         goto err;
3104     /* Use saved AAD */
3105     if (CRYPTO_gcm128_aad(&gctx->gcm, ctx->buf, gctx->tls_aad_len))
3106         goto err;
3107     /* Fix buffer and length to point to payload */
3108     in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
3109     out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
3110     len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
3111     if (ctx->encrypt) {
3112         /* Encrypt payload */
3113         if (gctx->ctr) {
3114             size_t bulk = 0;
3115 #if defined(AES_GCM_ASM)
3116             if (len >= 32 && AES_GCM_ASM(gctx)) {
3117                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
3118                     return -1;
3119
3120                 bulk = AES_gcm_encrypt(in, out, len,
3121                                        gctx->gcm.key,
3122                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3123                 gctx->gcm.len.u[1] += bulk;
3124             }
3125 #endif
3126             if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
3127                                             in + bulk,
3128                                             out + bulk,
3129                                             len - bulk, gctx->ctr))
3130                 goto err;
3131         } else {
3132             size_t bulk = 0;
3133 #if defined(AES_GCM_ASM2)
3134             if (len >= 32 && AES_GCM_ASM2(gctx)) {
3135                 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
3136                     return -1;
3137
3138                 bulk = AES_gcm_encrypt(in, out, len,
3139                                        gctx->gcm.key,
3140                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3141                 gctx->gcm.len.u[1] += bulk;
3142             }
3143 #endif
3144             if (CRYPTO_gcm128_encrypt(&gctx->gcm,
3145                                       in + bulk, out + bulk, len - bulk))
3146                 goto err;
3147         }
3148         out += len;
3149         /* Finally write tag */
3150         CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN);
3151         rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
3152     } else {
3153         /* Decrypt */
3154         if (gctx->ctr) {
3155             size_t bulk = 0;
3156 #if defined(AES_GCM_ASM)
3157             if (len >= 16 && AES_GCM_ASM(gctx)) {
3158                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
3159                     return -1;
3160
3161                 bulk = AES_gcm_decrypt(in, out, len,
3162                                        gctx->gcm.key,
3163                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3164                 gctx->gcm.len.u[1] += bulk;
3165             }
3166 #endif
3167             if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
3168                                             in + bulk,
3169                                             out + bulk,
3170                                             len - bulk, gctx->ctr))
3171                 goto err;
3172         } else {
3173             size_t bulk = 0;
3174 #if defined(AES_GCM_ASM2)
3175             if (len >= 16 && AES_GCM_ASM2(gctx)) {
3176                 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
3177                     return -1;
3178
3179                 bulk = AES_gcm_decrypt(in, out, len,
3180                                        gctx->gcm.key,
3181                                        gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3182                 gctx->gcm.len.u[1] += bulk;
3183             }
3184 #endif
3185             if (CRYPTO_gcm128_decrypt(&gctx->gcm,
3186                                       in + bulk, out + bulk, len - bulk))
3187                 goto err;
3188         }
3189         /* Retrieve tag */
3190         CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN);
3191         /* If tag mismatch wipe buffer */
3192         if (CRYPTO_memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) {
3193             OPENSSL_cleanse(out, len);
3194             goto err;
3195         }
3196         rv = len;
3197     }
3198
3199  err:
3200     gctx->iv_set = 0;
3201     gctx->tls_aad_len = -1;
3202     return rv;
3203 }
3204
3205 static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
3206                           const unsigned char *in, size_t len)
3207 {
3208     EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
3209     /* If not set up, return error */
3210     if (!gctx->key_set)
3211         return -1;
3212
3213     if (gctx->tls_aad_len >= 0)
3214         return aes_gcm_tls_cipher(ctx, out, in, len);
3215
3216     if (!gctx->iv_set)
3217         return -1;
3218     if (in) {
3219         if (out == NULL) {
3220             if (CRYPTO_gcm128_aad(&gctx->gcm, in, len))
3221                 return -1;
3222         } else if (ctx->encrypt) {
3223             if (gctx->ctr) {
3224                 size_t bulk = 0;
3225 #if defined(AES_GCM_ASM)
3226                 if (len >= 32 && AES_GCM_ASM(gctx)) {
3227                     size_t res = (16 - gctx->gcm.mres) % 16;
3228
3229                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
3230                         return -1;
3231
3232                     bulk = AES_gcm_encrypt(in + res,
3233                                            out + res, len - res,
3234                                            gctx->gcm.key, gctx->gcm.Yi.c,
3235                                            gctx->gcm.Xi.u);
3236                     gctx->gcm.len.u[1] += bulk;
3237                     bulk += res;
3238                 }
3239 #endif
3240                 if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
3241                                                 in + bulk,
3242                                                 out + bulk,
3243                                                 len - bulk, gctx->ctr))
3244                     return -1;
3245             } else {
3246                 size_t bulk = 0;
3247 #if defined(AES_GCM_ASM2)
3248                 if (len >= 32 && AES_GCM_ASM2(gctx)) {
3249                     size_t res = (16 - gctx->gcm.mres) % 16;
3250
3251                     if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
3252                         return -1;
3253
3254                     bulk = AES_gcm_encrypt(in + res,
3255                                            out + res, len - res,
3256                                            gctx->gcm.key, gctx->gcm.Yi.c,
3257                                            gctx->gcm.Xi.u);
3258                     gctx->gcm.len.u[1] += bulk;
3259                     bulk += res;
3260                 }
3261 #endif
3262                 if (CRYPTO_gcm128_encrypt(&gctx->gcm,
3263                                           in + bulk, out + bulk, len - bulk))
3264                     return -1;
3265             }
3266         } else {
3267             if (gctx->ctr) {
3268                 size_t bulk = 0;
3269 #if defined(AES_GCM_ASM)
3270                 if (len >= 16 && AES_GCM_ASM(gctx)) {
3271                     size_t res = (16 - gctx->gcm.mres) % 16;
3272
3273                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
3274                         return -1;
3275
3276                     bulk = AES_gcm_decrypt(in + res,
3277                                            out + res, len - res,
3278                                            gctx->gcm.key,
3279                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3280                     gctx->gcm.len.u[1] += bulk;
3281                     bulk += res;
3282                 }
3283 #endif
3284                 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
3285                                                 in + bulk,
3286                                                 out + bulk,
3287                                                 len - bulk, gctx->ctr))
3288                     return -1;
3289             } else {
3290                 size_t bulk = 0;
3291 #if defined(AES_GCM_ASM2)
3292                 if (len >= 16 && AES_GCM_ASM2(gctx)) {
3293                     size_t res = (16 - gctx->gcm.mres) % 16;
3294
3295                     if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
3296                         return -1;
3297
3298                     bulk = AES_gcm_decrypt(in + res,
3299                                            out + res, len - res,
3300                                            gctx->gcm.key,
3301                                            gctx->gcm.Yi.c, gctx->gcm.Xi.u);
3302                     gctx->gcm.len.u[1] += bulk;
3303                     bulk += res;
3304                 }
3305 #endif
3306                 if (CRYPTO_gcm128_decrypt(&gctx->gcm,
3307                                           in + bulk, out + bulk, len - bulk))
3308                     return -1;
3309             }
3310         }
3311         return len;
3312     } else {
3313         if (!ctx->encrypt) {
3314             if (gctx->taglen < 0)
3315                 return -1;
3316             if (CRYPTO_gcm128_finish(&gctx->gcm, ctx->buf, gctx->taglen) != 0)
3317                 return -1;
3318             gctx->iv_set = 0;
3319             return 0;
3320         }
3321         CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, 16);
3322         gctx->taglen = 16;
3323         /* Don't reuse the IV */
3324         gctx->iv_set = 0;
3325         return 0;
3326     }
3327
3328 }
3329
3330 #define CUSTOM_FLAGS    (EVP_CIPH_FLAG_DEFAULT_ASN1 \
3331                 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
3332                 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
3333                 | EVP_CIPH_CUSTOM_COPY)
3334
3335 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, gcm, GCM,
3336                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3337     BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, gcm, GCM,
3338                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3339     BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, gcm, GCM,
3340                     EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
3341
3342 static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
3343 {
3344     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,c);
3345     if (type == EVP_CTRL_COPY) {
3346         EVP_CIPHER_CTX *out = ptr;
3347         EVP_AES_XTS_CTX *xctx_out = EVP_C_DATA(EVP_AES_XTS_CTX,out);
3348         if (xctx->xts.key1) {
3349             if (xctx->xts.key1 != &xctx->ks1)
3350                 return 0;
3351             xctx_out->xts.key1 = &xctx_out->ks1;
3352         }
3353         if (xctx->xts.key2) {
3354             if (xctx->xts.key2 != &xctx->ks2)
3355                 return 0;
3356             xctx_out->xts.key2 = &xctx_out->ks2;
3357         }
3358         return 1;
3359     } else if (type != EVP_CTRL_INIT)
3360         return -1;
3361     /* key1 and key2 are used as an indicator both key and IV are set */
3362     xctx->xts.key1 = NULL;
3363     xctx->xts.key2 = NULL;
3364     return 1;
3365 }
3366
3367 static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
3368                             const unsigned char *iv, int enc)
3369 {
3370     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
3371     if (!iv && !key)
3372         return 1;
3373
3374     if (key)
3375         do {
3376 #ifdef AES_XTS_ASM
3377             xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
3378 #else
3379             xctx->stream = NULL;
3380 #endif
3381             /* key_len is two AES keys */
3382 #ifdef HWAES_CAPABLE
3383             if (HWAES_CAPABLE) {
3384                 if (enc) {
3385                     HWAES_set_encrypt_key(key,
3386                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3387                                           &xctx->ks1.ks);
3388                     xctx->xts.block1 = (block128_f) HWAES_encrypt;
3389 # ifdef HWAES_xts_encrypt
3390                     xctx->stream = HWAES_xts_encrypt;
3391 # endif
3392                 } else {
3393                     HWAES_set_decrypt_key(key,
3394                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3395                                           &xctx->ks1.ks);
3396                     xctx->xts.block1 = (block128_f) HWAES_decrypt;
3397 # ifdef HWAES_xts_decrypt
3398                     xctx->stream = HWAES_xts_decrypt;
3399 #endif
3400                 }
3401
3402                 HWAES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
3403                                       EVP_CIPHER_CTX_key_length(ctx) * 4,
3404                                       &xctx->ks2.ks);
3405                 xctx->xts.block2 = (block128_f) HWAES_encrypt;
3406
3407                 xctx->xts.key1 = &xctx->ks1;
3408                 break;
3409             } else
3410 #endif
3411 #ifdef BSAES_CAPABLE
3412             if (BSAES_CAPABLE)
3413                 xctx->stream = enc ? bsaes_xts_encrypt : bsaes_xts_decrypt;
3414             else
3415 #endif
3416 #ifdef VPAES_CAPABLE
3417             if (VPAES_CAPABLE) {
3418                 if (enc) {
3419                     vpaes_set_encrypt_key(key,
3420                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3421                                           &xctx->ks1.ks);
3422                     xctx->xts.block1 = (block128_f) vpaes_encrypt;
3423                 } else {
3424                     vpaes_set_decrypt_key(key,
3425                                           EVP_CIPHER_CTX_key_length(ctx) * 4,
3426                                           &xctx->ks1.ks);
3427                     xctx->xts.block1 = (block128_f) vpaes_decrypt;
3428                 }
3429
3430                 vpaes_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
3431                                       EVP_CIPHER_CTX_key_length(ctx) * 4,
3432                                       &xctx->ks2.ks);
3433                 xctx->xts.block2 = (block128_f) vpaes_encrypt;
3434
3435                 xctx->xts.key1 = &xctx->ks1;
3436                 break;
3437             } else
3438 #endif
3439                 (void)0;        /* terminate potentially open 'else' */
3440
3441             if (enc) {
3442                 AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
3443                                     &xctx->ks1.ks);
3444                 xctx->xts.block1 = (block128_f) AES_encrypt;
3445             } else {
3446                 AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
3447                                     &xctx->ks1.ks);
3448                 xctx->xts.block1 = (block128_f) AES_decrypt;
3449             }
3450
3451             AES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
3452                                 EVP_CIPHER_CTX_key_length(ctx) * 4,
3453                                 &xctx->ks2.ks);
3454             xctx->xts.block2 = (block128_f) AES_encrypt;
3455
3456             xctx->xts.key1 = &xctx->ks1;
3457         } while (0);
3458
3459     if (iv) {
3460         xctx->xts.key2 = &xctx->ks2;
3461         memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
3462     }
3463
3464     return 1;
3465 }
3466
3467 static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
3468                           const unsigned char *in, size_t len)
3469 {
3470     EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
3471
3472     if (xctx->xts.key1 == NULL
3473             || xctx->xts.key2 == NULL
3474             || out == NULL