4 * \brief Generic cipher wrapper for mbed TLS
6 * \author Adriaan de Jong <dejong@fox-it.com>
8 * Copyright The Mbed TLS Contributors
9 * SPDX-License-Identifier: Apache-2.0
11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
12 * not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
26 #if defined(MBEDTLS_CIPHER_C)
28 #include "mbedtls/cipher_internal.h"
29 #include "mbedtls/error.h"
31 #if defined(MBEDTLS_CHACHAPOLY_C)
32 #include "mbedtls/chachapoly.h"
35 #if defined(MBEDTLS_AES_C)
36 #include "mbedtls/aes.h"
39 #if defined(MBEDTLS_ARC4_C)
40 #include "mbedtls/arc4.h"
43 #if defined(MBEDTLS_CAMELLIA_C)
44 #include "mbedtls/camellia.h"
47 #if defined(MBEDTLS_ARIA_C)
48 #include "mbedtls/aria.h"
51 #if defined(MBEDTLS_DES_C)
52 #include "mbedtls/des.h"
55 #if defined(MBEDTLS_BLOWFISH_C)
56 #include "mbedtls/blowfish.h"
59 #if defined(MBEDTLS_CHACHA20_C)
60 #include "mbedtls/chacha20.h"
63 #if defined(MBEDTLS_GCM_C)
64 #include "mbedtls/gcm.h"
67 #if defined(MBEDTLS_CCM_C)
68 #include "mbedtls/ccm.h"
71 #if defined(MBEDTLS_NIST_KW_C)
72 #include "mbedtls/nist_kw.h"
75 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
79 #if defined(MBEDTLS_PLATFORM_C)
80 #include "mbedtls/platform.h"
83 #define mbedtls_calloc calloc
84 #define mbedtls_free free
87 #if defined(MBEDTLS_GCM_C)
88 /* shared by all GCM ciphers */
89 static void *gcm_ctx_alloc(void) {
90 void *ctx
= mbedtls_calloc(1, sizeof(mbedtls_gcm_context
));
93 mbedtls_gcm_init((mbedtls_gcm_context
*) ctx
);
98 static void gcm_ctx_free(void *ctx
) {
99 mbedtls_gcm_free(ctx
);
102 #endif /* MBEDTLS_GCM_C */
104 #if defined(MBEDTLS_CCM_C)
105 /* shared by all CCM ciphers */
106 static void *ccm_ctx_alloc(void) {
107 void *ctx
= mbedtls_calloc(1, sizeof(mbedtls_ccm_context
));
110 mbedtls_ccm_init((mbedtls_ccm_context
*) ctx
);
115 static void ccm_ctx_free(void *ctx
) {
116 mbedtls_ccm_free(ctx
);
119 #endif /* MBEDTLS_CCM_C */
121 #if defined(MBEDTLS_AES_C)
123 static int aes_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
124 const unsigned char *input
, unsigned char *output
) {
125 return mbedtls_aes_crypt_ecb((mbedtls_aes_context
*) ctx
, operation
, input
, output
);
128 #if defined(MBEDTLS_CIPHER_MODE_CBC)
129 static int aes_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
, size_t length
,
130 unsigned char *iv
, const unsigned char *input
, unsigned char *output
) {
131 return mbedtls_aes_crypt_cbc((mbedtls_aes_context
*) ctx
, operation
, length
, iv
, input
,
134 #endif /* MBEDTLS_CIPHER_MODE_CBC */
136 #if defined(MBEDTLS_CIPHER_MODE_CFB)
137 static int aes_crypt_cfb128_wrap(void *ctx
, mbedtls_operation_t operation
,
138 size_t length
, size_t *iv_off
, unsigned char *iv
,
139 const unsigned char *input
, unsigned char *output
) {
140 return mbedtls_aes_crypt_cfb128((mbedtls_aes_context
*) ctx
, operation
, length
, iv_off
, iv
,
143 #endif /* MBEDTLS_CIPHER_MODE_CFB */
145 #if defined(MBEDTLS_CIPHER_MODE_OFB)
146 static int aes_crypt_ofb_wrap(void *ctx
, size_t length
, size_t *iv_off
,
147 unsigned char *iv
, const unsigned char *input
, unsigned char *output
) {
148 return mbedtls_aes_crypt_ofb((mbedtls_aes_context
*) ctx
, length
, iv_off
,
151 #endif /* MBEDTLS_CIPHER_MODE_OFB */
153 #if defined(MBEDTLS_CIPHER_MODE_CTR)
154 static int aes_crypt_ctr_wrap(void *ctx
, size_t length
, size_t *nc_off
,
155 unsigned char *nonce_counter
, unsigned char *stream_block
,
156 const unsigned char *input
, unsigned char *output
) {
157 return mbedtls_aes_crypt_ctr((mbedtls_aes_context
*) ctx
, length
, nc_off
, nonce_counter
,
158 stream_block
, input
, output
);
160 #endif /* MBEDTLS_CIPHER_MODE_CTR */
162 #if defined(MBEDTLS_CIPHER_MODE_XTS)
163 static int aes_crypt_xts_wrap(void *ctx
, mbedtls_operation_t operation
,
165 const unsigned char data_unit
[16],
166 const unsigned char *input
,
167 unsigned char *output
) {
168 mbedtls_aes_xts_context
*xts_ctx
= ctx
;
172 case MBEDTLS_ENCRYPT
:
173 mode
= MBEDTLS_AES_ENCRYPT
;
175 case MBEDTLS_DECRYPT
:
176 mode
= MBEDTLS_AES_DECRYPT
;
179 return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
;
182 return mbedtls_aes_crypt_xts(xts_ctx
, mode
, length
,
183 data_unit
, input
, output
);
185 #endif /* MBEDTLS_CIPHER_MODE_XTS */
187 static int aes_setkey_dec_wrap(void *ctx
, const unsigned char *key
,
188 unsigned int key_bitlen
) {
189 return mbedtls_aes_setkey_dec((mbedtls_aes_context
*) ctx
, key
, key_bitlen
);
192 static int aes_setkey_enc_wrap(void *ctx
, const unsigned char *key
,
193 unsigned int key_bitlen
) {
194 return mbedtls_aes_setkey_enc((mbedtls_aes_context
*) ctx
, key
, key_bitlen
);
197 static void *aes_ctx_alloc(void) {
198 mbedtls_aes_context
*aes
= mbedtls_calloc(1, sizeof(mbedtls_aes_context
));
203 mbedtls_aes_init(aes
);
208 static void aes_ctx_free(void *ctx
) {
209 mbedtls_aes_free((mbedtls_aes_context
*) ctx
);
213 static const mbedtls_cipher_base_t aes_info
= {
214 MBEDTLS_CIPHER_ID_AES
,
216 #if defined(MBEDTLS_CIPHER_MODE_CBC)
219 #if defined(MBEDTLS_CIPHER_MODE_CFB)
220 aes_crypt_cfb128_wrap
,
222 #if defined(MBEDTLS_CIPHER_MODE_OFB)
225 #if defined(MBEDTLS_CIPHER_MODE_CTR)
228 #if defined(MBEDTLS_CIPHER_MODE_XTS)
231 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
240 static const mbedtls_cipher_info_t aes_128_ecb_info
= {
241 MBEDTLS_CIPHER_AES_128_ECB
,
251 static const mbedtls_cipher_info_t aes_192_ecb_info
= {
252 MBEDTLS_CIPHER_AES_192_ECB
,
262 static const mbedtls_cipher_info_t aes_256_ecb_info
= {
263 MBEDTLS_CIPHER_AES_256_ECB
,
273 #if defined(MBEDTLS_CIPHER_MODE_CBC)
274 static const mbedtls_cipher_info_t aes_128_cbc_info
= {
275 MBEDTLS_CIPHER_AES_128_CBC
,
285 static const mbedtls_cipher_info_t aes_192_cbc_info
= {
286 MBEDTLS_CIPHER_AES_192_CBC
,
296 static const mbedtls_cipher_info_t aes_256_cbc_info
= {
297 MBEDTLS_CIPHER_AES_256_CBC
,
306 #endif /* MBEDTLS_CIPHER_MODE_CBC */
308 #if defined(MBEDTLS_CIPHER_MODE_CFB)
309 static const mbedtls_cipher_info_t aes_128_cfb128_info
= {
310 MBEDTLS_CIPHER_AES_128_CFB128
,
320 static const mbedtls_cipher_info_t aes_192_cfb128_info
= {
321 MBEDTLS_CIPHER_AES_192_CFB128
,
331 static const mbedtls_cipher_info_t aes_256_cfb128_info
= {
332 MBEDTLS_CIPHER_AES_256_CFB128
,
341 #endif /* MBEDTLS_CIPHER_MODE_CFB */
343 #if defined(MBEDTLS_CIPHER_MODE_OFB)
344 static const mbedtls_cipher_info_t aes_128_ofb_info
= {
345 MBEDTLS_CIPHER_AES_128_OFB
,
355 static const mbedtls_cipher_info_t aes_192_ofb_info
= {
356 MBEDTLS_CIPHER_AES_192_OFB
,
366 static const mbedtls_cipher_info_t aes_256_ofb_info
= {
367 MBEDTLS_CIPHER_AES_256_OFB
,
376 #endif /* MBEDTLS_CIPHER_MODE_OFB */
378 #if defined(MBEDTLS_CIPHER_MODE_CTR)
379 static const mbedtls_cipher_info_t aes_128_ctr_info
= {
380 MBEDTLS_CIPHER_AES_128_CTR
,
390 static const mbedtls_cipher_info_t aes_192_ctr_info
= {
391 MBEDTLS_CIPHER_AES_192_CTR
,
401 static const mbedtls_cipher_info_t aes_256_ctr_info
= {
402 MBEDTLS_CIPHER_AES_256_CTR
,
411 #endif /* MBEDTLS_CIPHER_MODE_CTR */
413 #if defined(MBEDTLS_CIPHER_MODE_XTS)
414 static int xts_aes_setkey_enc_wrap(void *ctx
, const unsigned char *key
,
415 unsigned int key_bitlen
) {
416 mbedtls_aes_xts_context
*xts_ctx
= ctx
;
417 return (mbedtls_aes_xts_setkey_enc(xts_ctx
, key
, key_bitlen
));
420 static int xts_aes_setkey_dec_wrap(void *ctx
, const unsigned char *key
,
421 unsigned int key_bitlen
) {
422 mbedtls_aes_xts_context
*xts_ctx
= ctx
;
423 return (mbedtls_aes_xts_setkey_dec(xts_ctx
, key
, key_bitlen
));
426 static void *xts_aes_ctx_alloc(void) {
427 mbedtls_aes_xts_context
*xts_ctx
= mbedtls_calloc(1, sizeof(*xts_ctx
));
430 mbedtls_aes_xts_init(xts_ctx
);
435 static void xts_aes_ctx_free(void *ctx
) {
436 mbedtls_aes_xts_context
*xts_ctx
= ctx
;
441 mbedtls_aes_xts_free(xts_ctx
);
442 mbedtls_free(xts_ctx
);
445 static const mbedtls_cipher_base_t xts_aes_info
= {
446 MBEDTLS_CIPHER_ID_AES
,
448 #if defined(MBEDTLS_CIPHER_MODE_CBC)
451 #if defined(MBEDTLS_CIPHER_MODE_CFB)
454 #if defined(MBEDTLS_CIPHER_MODE_OFB)
457 #if defined(MBEDTLS_CIPHER_MODE_CTR)
460 #if defined(MBEDTLS_CIPHER_MODE_XTS)
463 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
466 xts_aes_setkey_enc_wrap
,
467 xts_aes_setkey_dec_wrap
,
472 static const mbedtls_cipher_info_t aes_128_xts_info
= {
473 MBEDTLS_CIPHER_AES_128_XTS
,
483 static const mbedtls_cipher_info_t aes_256_xts_info
= {
484 MBEDTLS_CIPHER_AES_256_XTS
,
493 #endif /* MBEDTLS_CIPHER_MODE_XTS */
495 #if defined(MBEDTLS_GCM_C)
496 static int gcm_aes_setkey_wrap(void *ctx
, const unsigned char *key
,
497 unsigned int key_bitlen
) {
498 return mbedtls_gcm_setkey((mbedtls_gcm_context
*) ctx
, MBEDTLS_CIPHER_ID_AES
,
502 static const mbedtls_cipher_base_t gcm_aes_info
= {
503 MBEDTLS_CIPHER_ID_AES
,
505 #if defined(MBEDTLS_CIPHER_MODE_CBC)
508 #if defined(MBEDTLS_CIPHER_MODE_CFB)
511 #if defined(MBEDTLS_CIPHER_MODE_OFB)
514 #if defined(MBEDTLS_CIPHER_MODE_CTR)
517 #if defined(MBEDTLS_CIPHER_MODE_XTS)
520 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
529 static const mbedtls_cipher_info_t aes_128_gcm_info
= {
530 MBEDTLS_CIPHER_AES_128_GCM
,
535 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
540 static const mbedtls_cipher_info_t aes_192_gcm_info
= {
541 MBEDTLS_CIPHER_AES_192_GCM
,
546 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
551 static const mbedtls_cipher_info_t aes_256_gcm_info
= {
552 MBEDTLS_CIPHER_AES_256_GCM
,
557 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
561 #endif /* MBEDTLS_GCM_C */
563 #if defined(MBEDTLS_CCM_C)
564 static int ccm_aes_setkey_wrap(void *ctx
, const unsigned char *key
,
565 unsigned int key_bitlen
) {
566 return mbedtls_ccm_setkey((mbedtls_ccm_context
*) ctx
, MBEDTLS_CIPHER_ID_AES
,
570 static const mbedtls_cipher_base_t ccm_aes_info
= {
571 MBEDTLS_CIPHER_ID_AES
,
573 #if defined(MBEDTLS_CIPHER_MODE_CBC)
576 #if defined(MBEDTLS_CIPHER_MODE_CFB)
579 #if defined(MBEDTLS_CIPHER_MODE_OFB)
582 #if defined(MBEDTLS_CIPHER_MODE_CTR)
585 #if defined(MBEDTLS_CIPHER_MODE_XTS)
588 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
597 static const mbedtls_cipher_info_t aes_128_ccm_info
= {
598 MBEDTLS_CIPHER_AES_128_CCM
,
603 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
608 static const mbedtls_cipher_info_t aes_192_ccm_info
= {
609 MBEDTLS_CIPHER_AES_192_CCM
,
614 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
619 static const mbedtls_cipher_info_t aes_256_ccm_info
= {
620 MBEDTLS_CIPHER_AES_256_CCM
,
625 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
629 #endif /* MBEDTLS_CCM_C */
631 #endif /* MBEDTLS_AES_C */
633 #if defined(MBEDTLS_CAMELLIA_C)
635 static int camellia_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
636 const unsigned char *input
, unsigned char *output
) {
637 return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context
*) ctx
, operation
, input
,
641 #if defined(MBEDTLS_CIPHER_MODE_CBC)
642 static int camellia_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
,
643 size_t length
, unsigned char *iv
,
644 const unsigned char *input
, unsigned char *output
) {
645 return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context
*) ctx
, operation
, length
, iv
,
648 #endif /* MBEDTLS_CIPHER_MODE_CBC */
650 #if defined(MBEDTLS_CIPHER_MODE_CFB)
651 static int camellia_crypt_cfb128_wrap(void *ctx
, mbedtls_operation_t operation
,
652 size_t length
, size_t *iv_off
, unsigned char *iv
,
653 const unsigned char *input
, unsigned char *output
) {
654 return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context
*) ctx
, operation
, length
,
655 iv_off
, iv
, input
, output
);
657 #endif /* MBEDTLS_CIPHER_MODE_CFB */
659 #if defined(MBEDTLS_CIPHER_MODE_CTR)
660 static int camellia_crypt_ctr_wrap(void *ctx
, size_t length
, size_t *nc_off
,
661 unsigned char *nonce_counter
, unsigned char *stream_block
,
662 const unsigned char *input
, unsigned char *output
) {
663 return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context
*) ctx
, length
, nc_off
,
664 nonce_counter
, stream_block
, input
, output
);
666 #endif /* MBEDTLS_CIPHER_MODE_CTR */
668 static int camellia_setkey_dec_wrap(void *ctx
, const unsigned char *key
,
669 unsigned int key_bitlen
) {
670 return mbedtls_camellia_setkey_dec((mbedtls_camellia_context
*) ctx
, key
, key_bitlen
);
673 static int camellia_setkey_enc_wrap(void *ctx
, const unsigned char *key
,
674 unsigned int key_bitlen
) {
675 return mbedtls_camellia_setkey_enc((mbedtls_camellia_context
*) ctx
, key
, key_bitlen
);
678 static void *camellia_ctx_alloc(void) {
679 mbedtls_camellia_context
*ctx
;
680 ctx
= mbedtls_calloc(1, sizeof(mbedtls_camellia_context
));
685 mbedtls_camellia_init(ctx
);
690 static void camellia_ctx_free(void *ctx
) {
691 mbedtls_camellia_free((mbedtls_camellia_context
*) ctx
);
695 static const mbedtls_cipher_base_t camellia_info
= {
696 MBEDTLS_CIPHER_ID_CAMELLIA
,
697 camellia_crypt_ecb_wrap
,
698 #if defined(MBEDTLS_CIPHER_MODE_CBC)
699 camellia_crypt_cbc_wrap
,
701 #if defined(MBEDTLS_CIPHER_MODE_CFB)
702 camellia_crypt_cfb128_wrap
,
704 #if defined(MBEDTLS_CIPHER_MODE_OFB)
707 #if defined(MBEDTLS_CIPHER_MODE_CTR)
708 camellia_crypt_ctr_wrap
,
710 #if defined(MBEDTLS_CIPHER_MODE_XTS)
713 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
716 camellia_setkey_enc_wrap
,
717 camellia_setkey_dec_wrap
,
722 static const mbedtls_cipher_info_t camellia_128_ecb_info
= {
723 MBEDTLS_CIPHER_CAMELLIA_128_ECB
,
733 static const mbedtls_cipher_info_t camellia_192_ecb_info
= {
734 MBEDTLS_CIPHER_CAMELLIA_192_ECB
,
744 static const mbedtls_cipher_info_t camellia_256_ecb_info
= {
745 MBEDTLS_CIPHER_CAMELLIA_256_ECB
,
755 #if defined(MBEDTLS_CIPHER_MODE_CBC)
756 static const mbedtls_cipher_info_t camellia_128_cbc_info
= {
757 MBEDTLS_CIPHER_CAMELLIA_128_CBC
,
767 static const mbedtls_cipher_info_t camellia_192_cbc_info
= {
768 MBEDTLS_CIPHER_CAMELLIA_192_CBC
,
778 static const mbedtls_cipher_info_t camellia_256_cbc_info
= {
779 MBEDTLS_CIPHER_CAMELLIA_256_CBC
,
788 #endif /* MBEDTLS_CIPHER_MODE_CBC */
790 #if defined(MBEDTLS_CIPHER_MODE_CFB)
791 static const mbedtls_cipher_info_t camellia_128_cfb128_info
= {
792 MBEDTLS_CIPHER_CAMELLIA_128_CFB128
,
795 "CAMELLIA-128-CFB128",
802 static const mbedtls_cipher_info_t camellia_192_cfb128_info
= {
803 MBEDTLS_CIPHER_CAMELLIA_192_CFB128
,
806 "CAMELLIA-192-CFB128",
813 static const mbedtls_cipher_info_t camellia_256_cfb128_info
= {
814 MBEDTLS_CIPHER_CAMELLIA_256_CFB128
,
817 "CAMELLIA-256-CFB128",
823 #endif /* MBEDTLS_CIPHER_MODE_CFB */
825 #if defined(MBEDTLS_CIPHER_MODE_CTR)
826 static const mbedtls_cipher_info_t camellia_128_ctr_info
= {
827 MBEDTLS_CIPHER_CAMELLIA_128_CTR
,
837 static const mbedtls_cipher_info_t camellia_192_ctr_info
= {
838 MBEDTLS_CIPHER_CAMELLIA_192_CTR
,
848 static const mbedtls_cipher_info_t camellia_256_ctr_info
= {
849 MBEDTLS_CIPHER_CAMELLIA_256_CTR
,
858 #endif /* MBEDTLS_CIPHER_MODE_CTR */
860 #if defined(MBEDTLS_GCM_C)
861 static int gcm_camellia_setkey_wrap(void *ctx
, const unsigned char *key
,
862 unsigned int key_bitlen
) {
863 return mbedtls_gcm_setkey((mbedtls_gcm_context
*) ctx
, MBEDTLS_CIPHER_ID_CAMELLIA
,
867 static const mbedtls_cipher_base_t gcm_camellia_info
= {
868 MBEDTLS_CIPHER_ID_CAMELLIA
,
870 #if defined(MBEDTLS_CIPHER_MODE_CBC)
873 #if defined(MBEDTLS_CIPHER_MODE_CFB)
876 #if defined(MBEDTLS_CIPHER_MODE_OFB)
879 #if defined(MBEDTLS_CIPHER_MODE_CTR)
882 #if defined(MBEDTLS_CIPHER_MODE_XTS)
885 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
888 gcm_camellia_setkey_wrap
,
889 gcm_camellia_setkey_wrap
,
894 static const mbedtls_cipher_info_t camellia_128_gcm_info
= {
895 MBEDTLS_CIPHER_CAMELLIA_128_GCM
,
900 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
905 static const mbedtls_cipher_info_t camellia_192_gcm_info
= {
906 MBEDTLS_CIPHER_CAMELLIA_192_GCM
,
911 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
916 static const mbedtls_cipher_info_t camellia_256_gcm_info
= {
917 MBEDTLS_CIPHER_CAMELLIA_256_GCM
,
922 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
926 #endif /* MBEDTLS_GCM_C */
928 #if defined(MBEDTLS_CCM_C)
929 static int ccm_camellia_setkey_wrap(void *ctx
, const unsigned char *key
,
930 unsigned int key_bitlen
) {
931 return mbedtls_ccm_setkey((mbedtls_ccm_context
*) ctx
, MBEDTLS_CIPHER_ID_CAMELLIA
,
935 static const mbedtls_cipher_base_t ccm_camellia_info
= {
936 MBEDTLS_CIPHER_ID_CAMELLIA
,
938 #if defined(MBEDTLS_CIPHER_MODE_CBC)
941 #if defined(MBEDTLS_CIPHER_MODE_CFB)
944 #if defined(MBEDTLS_CIPHER_MODE_OFB)
947 #if defined(MBEDTLS_CIPHER_MODE_CTR)
950 #if defined(MBEDTLS_CIPHER_MODE_XTS)
953 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
956 ccm_camellia_setkey_wrap
,
957 ccm_camellia_setkey_wrap
,
962 static const mbedtls_cipher_info_t camellia_128_ccm_info
= {
963 MBEDTLS_CIPHER_CAMELLIA_128_CCM
,
968 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
973 static const mbedtls_cipher_info_t camellia_192_ccm_info
= {
974 MBEDTLS_CIPHER_CAMELLIA_192_CCM
,
979 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
984 static const mbedtls_cipher_info_t camellia_256_ccm_info
= {
985 MBEDTLS_CIPHER_CAMELLIA_256_CCM
,
990 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
994 #endif /* MBEDTLS_CCM_C */
996 #endif /* MBEDTLS_CAMELLIA_C */
998 #if defined(MBEDTLS_ARIA_C)
1000 static int aria_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
1001 const unsigned char *input
, unsigned char *output
) {
1003 return mbedtls_aria_crypt_ecb((mbedtls_aria_context
*) ctx
, input
,
1007 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1008 static int aria_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
,
1009 size_t length
, unsigned char *iv
,
1010 const unsigned char *input
, unsigned char *output
) {
1011 return mbedtls_aria_crypt_cbc((mbedtls_aria_context
*) ctx
, operation
, length
, iv
,
1014 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1016 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1017 static int aria_crypt_cfb128_wrap(void *ctx
, mbedtls_operation_t operation
,
1018 size_t length
, size_t *iv_off
, unsigned char *iv
,
1019 const unsigned char *input
, unsigned char *output
) {
1020 return mbedtls_aria_crypt_cfb128((mbedtls_aria_context
*) ctx
, operation
, length
,
1021 iv_off
, iv
, input
, output
);
1023 #endif /* MBEDTLS_CIPHER_MODE_CFB */
1025 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1026 static int aria_crypt_ctr_wrap(void *ctx
, size_t length
, size_t *nc_off
,
1027 unsigned char *nonce_counter
, unsigned char *stream_block
,
1028 const unsigned char *input
, unsigned char *output
) {
1029 return mbedtls_aria_crypt_ctr((mbedtls_aria_context
*) ctx
, length
, nc_off
,
1030 nonce_counter
, stream_block
, input
, output
);
1032 #endif /* MBEDTLS_CIPHER_MODE_CTR */
1034 static int aria_setkey_dec_wrap(void *ctx
, const unsigned char *key
,
1035 unsigned int key_bitlen
) {
1036 return mbedtls_aria_setkey_dec((mbedtls_aria_context
*) ctx
, key
, key_bitlen
);
1039 static int aria_setkey_enc_wrap(void *ctx
, const unsigned char *key
,
1040 unsigned int key_bitlen
) {
1041 return mbedtls_aria_setkey_enc((mbedtls_aria_context
*) ctx
, key
, key_bitlen
);
1044 static void *aria_ctx_alloc(void) {
1045 mbedtls_aria_context
*ctx
;
1046 ctx
= mbedtls_calloc(1, sizeof(mbedtls_aria_context
));
1051 mbedtls_aria_init(ctx
);
1056 static void aria_ctx_free(void *ctx
) {
1057 mbedtls_aria_free((mbedtls_aria_context
*) ctx
);
1061 static const mbedtls_cipher_base_t aria_info
= {
1062 MBEDTLS_CIPHER_ID_ARIA
,
1063 aria_crypt_ecb_wrap
,
1064 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1065 aria_crypt_cbc_wrap
,
1067 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1068 aria_crypt_cfb128_wrap
,
1070 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1073 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1074 aria_crypt_ctr_wrap
,
1076 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1079 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1082 aria_setkey_enc_wrap
,
1083 aria_setkey_dec_wrap
,
1088 static const mbedtls_cipher_info_t aria_128_ecb_info
= {
1089 MBEDTLS_CIPHER_ARIA_128_ECB
,
1099 static const mbedtls_cipher_info_t aria_192_ecb_info
= {
1100 MBEDTLS_CIPHER_ARIA_192_ECB
,
1110 static const mbedtls_cipher_info_t aria_256_ecb_info
= {
1111 MBEDTLS_CIPHER_ARIA_256_ECB
,
1121 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1122 static const mbedtls_cipher_info_t aria_128_cbc_info
= {
1123 MBEDTLS_CIPHER_ARIA_128_CBC
,
1133 static const mbedtls_cipher_info_t aria_192_cbc_info
= {
1134 MBEDTLS_CIPHER_ARIA_192_CBC
,
1144 static const mbedtls_cipher_info_t aria_256_cbc_info
= {
1145 MBEDTLS_CIPHER_ARIA_256_CBC
,
1154 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1156 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1157 static const mbedtls_cipher_info_t aria_128_cfb128_info
= {
1158 MBEDTLS_CIPHER_ARIA_128_CFB128
,
1168 static const mbedtls_cipher_info_t aria_192_cfb128_info
= {
1169 MBEDTLS_CIPHER_ARIA_192_CFB128
,
1179 static const mbedtls_cipher_info_t aria_256_cfb128_info
= {
1180 MBEDTLS_CIPHER_ARIA_256_CFB128
,
1189 #endif /* MBEDTLS_CIPHER_MODE_CFB */
1191 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1192 static const mbedtls_cipher_info_t aria_128_ctr_info
= {
1193 MBEDTLS_CIPHER_ARIA_128_CTR
,
1203 static const mbedtls_cipher_info_t aria_192_ctr_info
= {
1204 MBEDTLS_CIPHER_ARIA_192_CTR
,
1214 static const mbedtls_cipher_info_t aria_256_ctr_info
= {
1215 MBEDTLS_CIPHER_ARIA_256_CTR
,
1224 #endif /* MBEDTLS_CIPHER_MODE_CTR */
1226 #if defined(MBEDTLS_GCM_C)
1227 static int gcm_aria_setkey_wrap(void *ctx
, const unsigned char *key
,
1228 unsigned int key_bitlen
) {
1229 return mbedtls_gcm_setkey((mbedtls_gcm_context
*) ctx
, MBEDTLS_CIPHER_ID_ARIA
,
1233 static const mbedtls_cipher_base_t gcm_aria_info
= {
1234 MBEDTLS_CIPHER_ID_ARIA
,
1236 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1239 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1242 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1245 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1248 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1251 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1254 gcm_aria_setkey_wrap
,
1255 gcm_aria_setkey_wrap
,
1260 static const mbedtls_cipher_info_t aria_128_gcm_info
= {
1261 MBEDTLS_CIPHER_ARIA_128_GCM
,
1266 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1271 static const mbedtls_cipher_info_t aria_192_gcm_info
= {
1272 MBEDTLS_CIPHER_ARIA_192_GCM
,
1277 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1282 static const mbedtls_cipher_info_t aria_256_gcm_info
= {
1283 MBEDTLS_CIPHER_ARIA_256_GCM
,
1288 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1292 #endif /* MBEDTLS_GCM_C */
1294 #if defined(MBEDTLS_CCM_C)
1295 static int ccm_aria_setkey_wrap(void *ctx
, const unsigned char *key
,
1296 unsigned int key_bitlen
) {
1297 return mbedtls_ccm_setkey((mbedtls_ccm_context
*) ctx
, MBEDTLS_CIPHER_ID_ARIA
,
1301 static const mbedtls_cipher_base_t ccm_aria_info
= {
1302 MBEDTLS_CIPHER_ID_ARIA
,
1304 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1307 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1310 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1313 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1316 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1319 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1322 ccm_aria_setkey_wrap
,
1323 ccm_aria_setkey_wrap
,
1328 static const mbedtls_cipher_info_t aria_128_ccm_info
= {
1329 MBEDTLS_CIPHER_ARIA_128_CCM
,
1334 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1339 static const mbedtls_cipher_info_t aria_192_ccm_info
= {
1340 MBEDTLS_CIPHER_ARIA_192_CCM
,
1345 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1350 static const mbedtls_cipher_info_t aria_256_ccm_info
= {
1351 MBEDTLS_CIPHER_ARIA_256_CCM
,
1356 MBEDTLS_CIPHER_VARIABLE_IV_LEN
,
1360 #endif /* MBEDTLS_CCM_C */
1362 #endif /* MBEDTLS_ARIA_C */
1364 #if defined(MBEDTLS_DES_C)
1366 static int des_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
1367 const unsigned char *input
, unsigned char *output
) {
1369 return mbedtls_des_crypt_ecb((mbedtls_des_context
*) ctx
, input
, output
);
1372 static int des3_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
1373 const unsigned char *input
, unsigned char *output
) {
1375 return mbedtls_des3_crypt_ecb((mbedtls_des3_context
*) ctx
, input
, output
);
1378 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1379 static int des_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
, size_t length
,
1380 unsigned char *iv
, const unsigned char *input
, unsigned char *output
) {
1381 return mbedtls_des_crypt_cbc((mbedtls_des_context
*) ctx
, operation
, length
, iv
, input
,
1384 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1386 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1387 static int des3_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
, size_t length
,
1388 unsigned char *iv
, const unsigned char *input
, unsigned char *output
) {
1389 return mbedtls_des3_crypt_cbc((mbedtls_des3_context
*) ctx
, operation
, length
, iv
, input
,
1392 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1394 static int des_setkey_dec_wrap(void *ctx
, const unsigned char *key
,
1395 unsigned int key_bitlen
) {
1396 ((void) key_bitlen
);
1398 return mbedtls_des_setkey_dec((mbedtls_des_context
*) ctx
, key
);
1401 static int des_setkey_enc_wrap(void *ctx
, const unsigned char *key
,
1402 unsigned int key_bitlen
) {
1403 ((void) key_bitlen
);
1405 return mbedtls_des_setkey_enc((mbedtls_des_context
*) ctx
, key
);
1408 static int des3_set2key_dec_wrap(void *ctx
, const unsigned char *key
,
1409 unsigned int key_bitlen
) {
1410 ((void) key_bitlen
);
1412 return mbedtls_des3_set2key_dec((mbedtls_des3_context
*) ctx
, key
);
1415 static int des3_set2key_enc_wrap(void *ctx
, const unsigned char *key
,
1416 unsigned int key_bitlen
) {
1417 ((void) key_bitlen
);
1419 return mbedtls_des3_set2key_enc((mbedtls_des3_context
*) ctx
, key
);
1422 static int des3_set3key_dec_wrap(void *ctx
, const unsigned char *key
,
1423 unsigned int key_bitlen
) {
1424 ((void) key_bitlen
);
1426 return mbedtls_des3_set3key_dec((mbedtls_des3_context
*) ctx
, key
);
1429 static int des3_set3key_enc_wrap(void *ctx
, const unsigned char *key
,
1430 unsigned int key_bitlen
) {
1431 ((void) key_bitlen
);
1433 return mbedtls_des3_set3key_enc((mbedtls_des3_context
*) ctx
, key
);
1436 static void *des_ctx_alloc(void) {
1437 mbedtls_des_context
*des
= mbedtls_calloc(1, sizeof(mbedtls_des_context
));
1442 mbedtls_des_init(des
);
1447 static void des_ctx_free(void *ctx
) {
1448 mbedtls_des_free((mbedtls_des_context
*) ctx
);
1452 static void *des3_ctx_alloc(void) {
1453 mbedtls_des3_context
*des3
;
1454 des3
= mbedtls_calloc(1, sizeof(mbedtls_des3_context
));
1459 mbedtls_des3_init(des3
);
1464 static void des3_ctx_free(void *ctx
) {
1465 mbedtls_des3_free((mbedtls_des3_context
*) ctx
);
1469 static const mbedtls_cipher_base_t des_info
= {
1470 MBEDTLS_CIPHER_ID_DES
,
1472 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1475 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1478 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1481 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1484 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1487 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1490 des_setkey_enc_wrap
,
1491 des_setkey_dec_wrap
,
1496 static const mbedtls_cipher_info_t des_ecb_info
= {
1497 MBEDTLS_CIPHER_DES_ECB
,
1499 MBEDTLS_KEY_LENGTH_DES
,
1507 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1508 static const mbedtls_cipher_info_t des_cbc_info
= {
1509 MBEDTLS_CIPHER_DES_CBC
,
1511 MBEDTLS_KEY_LENGTH_DES
,
1518 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1520 static const mbedtls_cipher_base_t des_ede_info
= {
1521 MBEDTLS_CIPHER_ID_DES
,
1522 des3_crypt_ecb_wrap
,
1523 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1524 des3_crypt_cbc_wrap
,
1526 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1529 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1532 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1535 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1538 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1541 des3_set2key_enc_wrap
,
1542 des3_set2key_dec_wrap
,
1547 static const mbedtls_cipher_info_t des_ede_ecb_info
= {
1548 MBEDTLS_CIPHER_DES_EDE_ECB
,
1550 MBEDTLS_KEY_LENGTH_DES_EDE
,
1558 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1559 static const mbedtls_cipher_info_t des_ede_cbc_info
= {
1560 MBEDTLS_CIPHER_DES_EDE_CBC
,
1562 MBEDTLS_KEY_LENGTH_DES_EDE
,
1569 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1571 static const mbedtls_cipher_base_t des_ede3_info
= {
1572 MBEDTLS_CIPHER_ID_3DES
,
1573 des3_crypt_ecb_wrap
,
1574 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1575 des3_crypt_cbc_wrap
,
1577 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1580 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1583 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1586 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1589 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1592 des3_set3key_enc_wrap
,
1593 des3_set3key_dec_wrap
,
1598 static const mbedtls_cipher_info_t des_ede3_ecb_info
= {
1599 MBEDTLS_CIPHER_DES_EDE3_ECB
,
1601 MBEDTLS_KEY_LENGTH_DES_EDE3
,
1608 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1609 static const mbedtls_cipher_info_t des_ede3_cbc_info
= {
1610 MBEDTLS_CIPHER_DES_EDE3_CBC
,
1612 MBEDTLS_KEY_LENGTH_DES_EDE3
,
1619 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1620 #endif /* MBEDTLS_DES_C */
1622 #if defined(MBEDTLS_BLOWFISH_C)
1624 static int blowfish_crypt_ecb_wrap(void *ctx
, mbedtls_operation_t operation
,
1625 const unsigned char *input
, unsigned char *output
) {
1626 return mbedtls_blowfish_crypt_ecb((mbedtls_blowfish_context
*) ctx
, operation
, input
,
1630 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1631 static int blowfish_crypt_cbc_wrap(void *ctx
, mbedtls_operation_t operation
,
1632 size_t length
, unsigned char *iv
, const unsigned char *input
,
1633 unsigned char *output
) {
1634 return mbedtls_blowfish_crypt_cbc((mbedtls_blowfish_context
*) ctx
, operation
, length
, iv
,
1637 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1639 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1640 static int blowfish_crypt_cfb64_wrap(void *ctx
, mbedtls_operation_t operation
,
1641 size_t length
, size_t *iv_off
, unsigned char *iv
,
1642 const unsigned char *input
, unsigned char *output
) {
1643 return mbedtls_blowfish_crypt_cfb64((mbedtls_blowfish_context
*) ctx
, operation
, length
,
1644 iv_off
, iv
, input
, output
);
1646 #endif /* MBEDTLS_CIPHER_MODE_CFB */
1648 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1649 static int blowfish_crypt_ctr_wrap(void *ctx
, size_t length
, size_t *nc_off
,
1650 unsigned char *nonce_counter
, unsigned char *stream_block
,
1651 const unsigned char *input
, unsigned char *output
) {
1652 return mbedtls_blowfish_crypt_ctr((mbedtls_blowfish_context
*) ctx
, length
, nc_off
,
1653 nonce_counter
, stream_block
, input
, output
);
1655 #endif /* MBEDTLS_CIPHER_MODE_CTR */
1657 static int blowfish_setkey_wrap(void *ctx
, const unsigned char *key
,
1658 unsigned int key_bitlen
) {
1659 return mbedtls_blowfish_setkey((mbedtls_blowfish_context
*) ctx
, key
, key_bitlen
);
1662 static void *blowfish_ctx_alloc(void) {
1663 mbedtls_blowfish_context
*ctx
;
1664 ctx
= mbedtls_calloc(1, sizeof(mbedtls_blowfish_context
));
1669 mbedtls_blowfish_init(ctx
);
1674 static void blowfish_ctx_free(void *ctx
) {
1675 mbedtls_blowfish_free((mbedtls_blowfish_context
*) ctx
);
1679 static const mbedtls_cipher_base_t blowfish_info
= {
1680 MBEDTLS_CIPHER_ID_BLOWFISH
,
1681 blowfish_crypt_ecb_wrap
,
1682 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1683 blowfish_crypt_cbc_wrap
,
1685 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1686 blowfish_crypt_cfb64_wrap
,
1688 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1691 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1692 blowfish_crypt_ctr_wrap
,
1694 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1697 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1700 blowfish_setkey_wrap
,
1701 blowfish_setkey_wrap
,
1706 static const mbedtls_cipher_info_t blowfish_ecb_info
= {
1707 MBEDTLS_CIPHER_BLOWFISH_ECB
,
1712 MBEDTLS_CIPHER_VARIABLE_KEY_LEN
,
1717 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1718 static const mbedtls_cipher_info_t blowfish_cbc_info
= {
1719 MBEDTLS_CIPHER_BLOWFISH_CBC
,
1724 MBEDTLS_CIPHER_VARIABLE_KEY_LEN
,
1728 #endif /* MBEDTLS_CIPHER_MODE_CBC */
1730 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1731 static const mbedtls_cipher_info_t blowfish_cfb64_info
= {
1732 MBEDTLS_CIPHER_BLOWFISH_CFB64
,
1737 MBEDTLS_CIPHER_VARIABLE_KEY_LEN
,
1741 #endif /* MBEDTLS_CIPHER_MODE_CFB */
1743 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1744 static const mbedtls_cipher_info_t blowfish_ctr_info
= {
1745 MBEDTLS_CIPHER_BLOWFISH_CTR
,
1750 MBEDTLS_CIPHER_VARIABLE_KEY_LEN
,
1754 #endif /* MBEDTLS_CIPHER_MODE_CTR */
1755 #endif /* MBEDTLS_BLOWFISH_C */
1757 #if defined(MBEDTLS_ARC4_C)
1758 static int arc4_crypt_stream_wrap(void *ctx
, size_t length
,
1759 const unsigned char *input
,
1760 unsigned char *output
) {
1761 return (mbedtls_arc4_crypt((mbedtls_arc4_context
*) ctx
, length
, input
, output
));
1764 static int arc4_setkey_wrap(void *ctx
, const unsigned char *key
,
1765 unsigned int key_bitlen
) {
1766 /* we get key_bitlen in bits, arc4 expects it in bytes */
1767 if (key_bitlen
% 8 != 0)
1768 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1770 mbedtls_arc4_setup((mbedtls_arc4_context
*) ctx
, key
, key_bitlen
/ 8);
1774 static void *arc4_ctx_alloc(void) {
1775 mbedtls_arc4_context
*ctx
;
1776 ctx
= mbedtls_calloc(1, sizeof(mbedtls_arc4_context
));
1781 mbedtls_arc4_init(ctx
);
1786 static void arc4_ctx_free(void *ctx
) {
1787 mbedtls_arc4_free((mbedtls_arc4_context
*) ctx
);
1791 static const mbedtls_cipher_base_t arc4_base_info
= {
1792 MBEDTLS_CIPHER_ID_ARC4
,
1794 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1797 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1800 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1803 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1806 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1809 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1810 arc4_crypt_stream_wrap
,
1818 static const mbedtls_cipher_info_t arc4_128_info
= {
1819 MBEDTLS_CIPHER_ARC4_128
,
1820 MBEDTLS_MODE_STREAM
,
1828 #endif /* MBEDTLS_ARC4_C */
1830 #if defined(MBEDTLS_CHACHA20_C)
1832 static int chacha20_setkey_wrap(void *ctx
, const unsigned char *key
,
1833 unsigned int key_bitlen
) {
1834 if (key_bitlen
!= 256U)
1835 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1837 if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context
*)ctx
, key
))
1838 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1843 static int chacha20_stream_wrap(void *ctx
, size_t length
,
1844 const unsigned char *input
,
1845 unsigned char *output
) {
1846 int ret
= MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED
;
1848 ret
= mbedtls_chacha20_update(ctx
, length
, input
, output
);
1849 if (ret
== MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA
)
1850 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1855 static void *chacha20_ctx_alloc(void) {
1856 mbedtls_chacha20_context
*ctx
;
1857 ctx
= mbedtls_calloc(1, sizeof(mbedtls_chacha20_context
));
1862 mbedtls_chacha20_init(ctx
);
1867 static void chacha20_ctx_free(void *ctx
) {
1868 mbedtls_chacha20_free((mbedtls_chacha20_context
*) ctx
);
1872 static const mbedtls_cipher_base_t chacha20_base_info
= {
1873 MBEDTLS_CIPHER_ID_CHACHA20
,
1875 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1878 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1881 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1884 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1887 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1890 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1891 chacha20_stream_wrap
,
1893 chacha20_setkey_wrap
,
1894 chacha20_setkey_wrap
,
1898 static const mbedtls_cipher_info_t chacha20_info
= {
1899 MBEDTLS_CIPHER_CHACHA20
,
1900 MBEDTLS_MODE_STREAM
,
1908 #endif /* MBEDTLS_CHACHA20_C */
1910 #if defined(MBEDTLS_CHACHAPOLY_C)
1912 static int chachapoly_setkey_wrap(void *ctx
,
1913 const unsigned char *key
,
1914 unsigned int key_bitlen
) {
1915 if (key_bitlen
!= 256U)
1916 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1918 if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context
*)ctx
, key
))
1919 return (MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
1924 static void *chachapoly_ctx_alloc(void) {
1925 mbedtls_chachapoly_context
*ctx
;
1926 ctx
= mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context
));
1931 mbedtls_chachapoly_init(ctx
);
1936 static void chachapoly_ctx_free(void *ctx
) {
1937 mbedtls_chachapoly_free((mbedtls_chachapoly_context
*) ctx
);
1941 static const mbedtls_cipher_base_t chachapoly_base_info
= {
1942 MBEDTLS_CIPHER_ID_CHACHA20
,
1944 #if defined(MBEDTLS_CIPHER_MODE_CBC)
1947 #if defined(MBEDTLS_CIPHER_MODE_CFB)
1950 #if defined(MBEDTLS_CIPHER_MODE_OFB)
1953 #if defined(MBEDTLS_CIPHER_MODE_CTR)
1956 #if defined(MBEDTLS_CIPHER_MODE_XTS)
1959 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
1962 chachapoly_setkey_wrap
,
1963 chachapoly_setkey_wrap
,
1964 chachapoly_ctx_alloc
,
1967 static const mbedtls_cipher_info_t chachapoly_info
= {
1968 MBEDTLS_CIPHER_CHACHA20_POLY1305
,
1969 MBEDTLS_MODE_CHACHAPOLY
,
1971 "CHACHA20-POLY1305",
1975 &chachapoly_base_info
1977 #endif /* MBEDTLS_CHACHAPOLY_C */
1979 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
1980 static int null_crypt_stream(void *ctx
, size_t length
,
1981 const unsigned char *input
,
1982 unsigned char *output
) {
1984 memmove(output
, input
, length
);
1988 static int null_setkey(void *ctx
, const unsigned char *key
,
1989 unsigned int key_bitlen
) {
1992 ((void) key_bitlen
);
1997 static void *null_ctx_alloc(void) {
1998 return ((void *) 1);
2001 static void null_ctx_free(void *ctx
) {
2005 static const mbedtls_cipher_base_t null_base_info
= {
2006 MBEDTLS_CIPHER_ID_NULL
,
2008 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2011 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2014 #if defined(MBEDTLS_CIPHER_MODE_OFB)
2017 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2020 #if defined(MBEDTLS_CIPHER_MODE_XTS)
2023 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
2032 static const mbedtls_cipher_info_t null_cipher_info
= {
2033 MBEDTLS_CIPHER_NULL
,
2034 MBEDTLS_MODE_STREAM
,
2042 #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
2044 #if defined(MBEDTLS_NIST_KW_C)
2045 static void *kw_ctx_alloc(void) {
2046 void *ctx
= mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context
));
2049 mbedtls_nist_kw_init((mbedtls_nist_kw_context
*) ctx
);
2054 static void kw_ctx_free(void *ctx
) {
2055 mbedtls_nist_kw_free(ctx
);
2059 static int kw_aes_setkey_wrap(void *ctx
, const unsigned char *key
,
2060 unsigned int key_bitlen
) {
2061 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context
*) ctx
,
2062 MBEDTLS_CIPHER_ID_AES
, key
, key_bitlen
, 1);
2065 static int kw_aes_setkey_unwrap(void *ctx
, const unsigned char *key
,
2066 unsigned int key_bitlen
) {
2067 return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context
*) ctx
,
2068 MBEDTLS_CIPHER_ID_AES
, key
, key_bitlen
, 0);
2071 static const mbedtls_cipher_base_t kw_aes_info
= {
2072 MBEDTLS_CIPHER_ID_AES
,
2074 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2077 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2080 #if defined(MBEDTLS_CIPHER_MODE_OFB)
2083 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2086 #if defined(MBEDTLS_CIPHER_MODE_XTS)
2089 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
2093 kw_aes_setkey_unwrap
,
2098 static const mbedtls_cipher_info_t aes_128_nist_kw_info
= {
2099 MBEDTLS_CIPHER_AES_128_KW
,
2109 static const mbedtls_cipher_info_t aes_192_nist_kw_info
= {
2110 MBEDTLS_CIPHER_AES_192_KW
,
2120 static const mbedtls_cipher_info_t aes_256_nist_kw_info
= {
2121 MBEDTLS_CIPHER_AES_256_KW
,
2131 static const mbedtls_cipher_info_t aes_128_nist_kwp_info
= {
2132 MBEDTLS_CIPHER_AES_128_KWP
,
2142 static const mbedtls_cipher_info_t aes_192_nist_kwp_info
= {
2143 MBEDTLS_CIPHER_AES_192_KWP
,
2153 static const mbedtls_cipher_info_t aes_256_nist_kwp_info
= {
2154 MBEDTLS_CIPHER_AES_256_KWP
,
2163 #endif /* MBEDTLS_NIST_KW_C */
2165 const mbedtls_cipher_definition_t mbedtls_cipher_definitions
[] = {
2166 #if defined(MBEDTLS_AES_C)
2167 { MBEDTLS_CIPHER_AES_128_ECB
, &aes_128_ecb_info
},
2168 { MBEDTLS_CIPHER_AES_192_ECB
, &aes_192_ecb_info
},
2169 { MBEDTLS_CIPHER_AES_256_ECB
, &aes_256_ecb_info
},
2170 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2171 { MBEDTLS_CIPHER_AES_128_CBC
, &aes_128_cbc_info
},
2172 { MBEDTLS_CIPHER_AES_192_CBC
, &aes_192_cbc_info
},
2173 { MBEDTLS_CIPHER_AES_256_CBC
, &aes_256_cbc_info
},
2175 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2176 { MBEDTLS_CIPHER_AES_128_CFB128
, &aes_128_cfb128_info
},
2177 { MBEDTLS_CIPHER_AES_192_CFB128
, &aes_192_cfb128_info
},
2178 { MBEDTLS_CIPHER_AES_256_CFB128
, &aes_256_cfb128_info
},
2180 #if defined(MBEDTLS_CIPHER_MODE_OFB)
2181 { MBEDTLS_CIPHER_AES_128_OFB
, &aes_128_ofb_info
},
2182 { MBEDTLS_CIPHER_AES_192_OFB
, &aes_192_ofb_info
},
2183 { MBEDTLS_CIPHER_AES_256_OFB
, &aes_256_ofb_info
},
2185 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2186 { MBEDTLS_CIPHER_AES_128_CTR
, &aes_128_ctr_info
},
2187 { MBEDTLS_CIPHER_AES_192_CTR
, &aes_192_ctr_info
},
2188 { MBEDTLS_CIPHER_AES_256_CTR
, &aes_256_ctr_info
},
2190 #if defined(MBEDTLS_CIPHER_MODE_XTS)
2191 { MBEDTLS_CIPHER_AES_128_XTS
, &aes_128_xts_info
},
2192 { MBEDTLS_CIPHER_AES_256_XTS
, &aes_256_xts_info
},
2194 #if defined(MBEDTLS_GCM_C)
2195 { MBEDTLS_CIPHER_AES_128_GCM
, &aes_128_gcm_info
},
2196 { MBEDTLS_CIPHER_AES_192_GCM
, &aes_192_gcm_info
},
2197 { MBEDTLS_CIPHER_AES_256_GCM
, &aes_256_gcm_info
},
2199 #if defined(MBEDTLS_CCM_C)
2200 { MBEDTLS_CIPHER_AES_128_CCM
, &aes_128_ccm_info
},
2201 { MBEDTLS_CIPHER_AES_192_CCM
, &aes_192_ccm_info
},
2202 { MBEDTLS_CIPHER_AES_256_CCM
, &aes_256_ccm_info
},
2204 #endif /* MBEDTLS_AES_C */
2206 #if defined(MBEDTLS_ARC4_C)
2207 { MBEDTLS_CIPHER_ARC4_128
, &arc4_128_info
},
2210 #if defined(MBEDTLS_BLOWFISH_C)
2211 { MBEDTLS_CIPHER_BLOWFISH_ECB
, &blowfish_ecb_info
},
2212 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2213 { MBEDTLS_CIPHER_BLOWFISH_CBC
, &blowfish_cbc_info
},
2215 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2216 { MBEDTLS_CIPHER_BLOWFISH_CFB64
, &blowfish_cfb64_info
},
2218 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2219 { MBEDTLS_CIPHER_BLOWFISH_CTR
, &blowfish_ctr_info
},
2221 #endif /* MBEDTLS_BLOWFISH_C */
2223 #if defined(MBEDTLS_CAMELLIA_C)
2224 { MBEDTLS_CIPHER_CAMELLIA_128_ECB
, &camellia_128_ecb_info
},
2225 { MBEDTLS_CIPHER_CAMELLIA_192_ECB
, &camellia_192_ecb_info
},
2226 { MBEDTLS_CIPHER_CAMELLIA_256_ECB
, &camellia_256_ecb_info
},
2227 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2228 { MBEDTLS_CIPHER_CAMELLIA_128_CBC
, &camellia_128_cbc_info
},
2229 { MBEDTLS_CIPHER_CAMELLIA_192_CBC
, &camellia_192_cbc_info
},
2230 { MBEDTLS_CIPHER_CAMELLIA_256_CBC
, &camellia_256_cbc_info
},
2232 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2233 { MBEDTLS_CIPHER_CAMELLIA_128_CFB128
, &camellia_128_cfb128_info
},
2234 { MBEDTLS_CIPHER_CAMELLIA_192_CFB128
, &camellia_192_cfb128_info
},
2235 { MBEDTLS_CIPHER_CAMELLIA_256_CFB128
, &camellia_256_cfb128_info
},
2237 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2238 { MBEDTLS_CIPHER_CAMELLIA_128_CTR
, &camellia_128_ctr_info
},
2239 { MBEDTLS_CIPHER_CAMELLIA_192_CTR
, &camellia_192_ctr_info
},
2240 { MBEDTLS_CIPHER_CAMELLIA_256_CTR
, &camellia_256_ctr_info
},
2242 #if defined(MBEDTLS_GCM_C)
2243 { MBEDTLS_CIPHER_CAMELLIA_128_GCM
, &camellia_128_gcm_info
},
2244 { MBEDTLS_CIPHER_CAMELLIA_192_GCM
, &camellia_192_gcm_info
},
2245 { MBEDTLS_CIPHER_CAMELLIA_256_GCM
, &camellia_256_gcm_info
},
2247 #if defined(MBEDTLS_CCM_C)
2248 { MBEDTLS_CIPHER_CAMELLIA_128_CCM
, &camellia_128_ccm_info
},
2249 { MBEDTLS_CIPHER_CAMELLIA_192_CCM
, &camellia_192_ccm_info
},
2250 { MBEDTLS_CIPHER_CAMELLIA_256_CCM
, &camellia_256_ccm_info
},
2252 #endif /* MBEDTLS_CAMELLIA_C */
2254 #if defined(MBEDTLS_ARIA_C)
2255 { MBEDTLS_CIPHER_ARIA_128_ECB
, &aria_128_ecb_info
},
2256 { MBEDTLS_CIPHER_ARIA_192_ECB
, &aria_192_ecb_info
},
2257 { MBEDTLS_CIPHER_ARIA_256_ECB
, &aria_256_ecb_info
},
2258 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2259 { MBEDTLS_CIPHER_ARIA_128_CBC
, &aria_128_cbc_info
},
2260 { MBEDTLS_CIPHER_ARIA_192_CBC
, &aria_192_cbc_info
},
2261 { MBEDTLS_CIPHER_ARIA_256_CBC
, &aria_256_cbc_info
},
2263 #if defined(MBEDTLS_CIPHER_MODE_CFB)
2264 { MBEDTLS_CIPHER_ARIA_128_CFB128
, &aria_128_cfb128_info
},
2265 { MBEDTLS_CIPHER_ARIA_192_CFB128
, &aria_192_cfb128_info
},
2266 { MBEDTLS_CIPHER_ARIA_256_CFB128
, &aria_256_cfb128_info
},
2268 #if defined(MBEDTLS_CIPHER_MODE_CTR)
2269 { MBEDTLS_CIPHER_ARIA_128_CTR
, &aria_128_ctr_info
},
2270 { MBEDTLS_CIPHER_ARIA_192_CTR
, &aria_192_ctr_info
},
2271 { MBEDTLS_CIPHER_ARIA_256_CTR
, &aria_256_ctr_info
},
2273 #if defined(MBEDTLS_GCM_C)
2274 { MBEDTLS_CIPHER_ARIA_128_GCM
, &aria_128_gcm_info
},
2275 { MBEDTLS_CIPHER_ARIA_192_GCM
, &aria_192_gcm_info
},
2276 { MBEDTLS_CIPHER_ARIA_256_GCM
, &aria_256_gcm_info
},
2278 #if defined(MBEDTLS_CCM_C)
2279 { MBEDTLS_CIPHER_ARIA_128_CCM
, &aria_128_ccm_info
},
2280 { MBEDTLS_CIPHER_ARIA_192_CCM
, &aria_192_ccm_info
},
2281 { MBEDTLS_CIPHER_ARIA_256_CCM
, &aria_256_ccm_info
},
2283 #endif /* MBEDTLS_ARIA_C */
2285 #if defined(MBEDTLS_DES_C)
2286 { MBEDTLS_CIPHER_DES_ECB
, &des_ecb_info
},
2287 { MBEDTLS_CIPHER_DES_EDE_ECB
, &des_ede_ecb_info
},
2288 { MBEDTLS_CIPHER_DES_EDE3_ECB
, &des_ede3_ecb_info
},
2289 #if defined(MBEDTLS_CIPHER_MODE_CBC)
2290 { MBEDTLS_CIPHER_DES_CBC
, &des_cbc_info
},
2291 { MBEDTLS_CIPHER_DES_EDE_CBC
, &des_ede_cbc_info
},
2292 { MBEDTLS_CIPHER_DES_EDE3_CBC
, &des_ede3_cbc_info
},
2294 #endif /* MBEDTLS_DES_C */
2296 #if defined(MBEDTLS_CHACHA20_C)
2297 { MBEDTLS_CIPHER_CHACHA20
, &chacha20_info
},
2300 #if defined(MBEDTLS_CHACHAPOLY_C)
2301 { MBEDTLS_CIPHER_CHACHA20_POLY1305
, &chachapoly_info
},
2304 #if defined(MBEDTLS_NIST_KW_C)
2305 { MBEDTLS_CIPHER_AES_128_KW
, &aes_128_nist_kw_info
},
2306 { MBEDTLS_CIPHER_AES_192_KW
, &aes_192_nist_kw_info
},
2307 { MBEDTLS_CIPHER_AES_256_KW
, &aes_256_nist_kw_info
},
2308 { MBEDTLS_CIPHER_AES_128_KWP
, &aes_128_nist_kwp_info
},
2309 { MBEDTLS_CIPHER_AES_192_KWP
, &aes_192_nist_kwp_info
},
2310 { MBEDTLS_CIPHER_AES_256_KWP
, &aes_256_nist_kwp_info
},
2313 #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
2314 { MBEDTLS_CIPHER_NULL
, &null_cipher_info
},
2315 #endif /* MBEDTLS_CIPHER_NULL_CIPHER */
2317 { MBEDTLS_CIPHER_NONE
, NULL
}
2320 #define NUM_CIPHERS ( sizeof(mbedtls_cipher_definitions) / \
2321 sizeof(mbedtls_cipher_definitions[0]) )
2322 int mbedtls_cipher_supported
[NUM_CIPHERS
];
2324 #endif /* MBEDTLS_CIPHER_C */