36 #include "crypto_config.h"
64 #ifndef GPL_LICENSE_TERMS_ACCEPTED
65 #error Before compiling CycloneCRYPTO Open, you must accept the terms of the GPL license
69 #define CYCLONE_CRYPTO_VERSION_STRING "2.4.0"
71 #define CYCLONE_CRYPTO_MAJOR_VERSION 2
73 #define CYCLONE_CRYPTO_MINOR_VERSION 4
75 #define CYCLONE_CRYPTO_REV_NUMBER 0
78 #ifndef CRYPTO_STATIC_MEM_SUPPORT
79 #define CRYPTO_STATIC_MEM_SUPPORT DISABLED
80 #elif (CRYPTO_STATIC_MEM_SUPPORT != ENABLED && CRYPTO_STATIC_MEM_SUPPORT != DISABLED)
81 #error CRYPTO_STATIC_MEM_SUPPORT parameter is not valid
86 #define MPI_SUPPORT ENABLED
87 #elif (MPI_SUPPORT != ENABLED && MPI_SUPPORT != DISABLED)
88 #error MPI_SUPPORT parameter is not valid
92 #ifndef MPI_ASM_SUPPORT
93 #define MPI_ASM_SUPPORT DISABLED
94 #elif (MPI_ASM_SUPPORT != ENABLED && MPI_ASM_SUPPORT != DISABLED)
95 #error MPI_ASM_SUPPORT parameter is not valid
99 #ifndef BASE64_SUPPORT
100 #define BASE64_SUPPORT ENABLED
101 #elif (BASE64_SUPPORT != ENABLED && BASE64_SUPPORT != DISABLED)
102 #error BASE64_SUPPORT parameter is not valid
106 #ifndef BASE64URL_SUPPORT
107 #define BASE64URL_SUPPORT ENABLED
108 #elif (BASE64URL_SUPPORT != ENABLED && BASE64URL_SUPPORT != DISABLED)
109 #error BASE64URL_SUPPORT parameter is not valid
113 #ifndef RADIX64_SUPPORT
114 #define RADIX64_SUPPORT ENABLED
115 #elif (RADIX64_SUPPORT != ENABLED && RADIX64_SUPPORT != DISABLED)
116 #error RADIX64_SUPPORT parameter is not valid
121 #define MD2_SUPPORT DISABLED
122 #elif (MD2_SUPPORT != ENABLED && MD2_SUPPORT != DISABLED)
123 #error MD2_SUPPORT parameter is not valid
128 #define MD4_SUPPORT DISABLED
129 #elif (MD4_SUPPORT != ENABLED && MD4_SUPPORT != DISABLED)
130 #error MD4_SUPPORT parameter is not valid
135 #define MD5_SUPPORT DISABLED
136 #elif (MD5_SUPPORT != ENABLED && MD5_SUPPORT != DISABLED)
137 #error MD5_SUPPORT parameter is not valid
141 #ifndef RIPEMD128_SUPPORT
142 #define RIPEMD128_SUPPORT DISABLED
143 #elif (RIPEMD128_SUPPORT != ENABLED && RIPEMD128_SUPPORT != DISABLED)
144 #error RIPEMD128_SUPPORT parameter is not valid
148 #ifndef RIPEMD160_SUPPORT
149 #define RIPEMD160_SUPPORT DISABLED
150 #elif (RIPEMD160_SUPPORT != ENABLED && RIPEMD160_SUPPORT != DISABLED)
151 #error RIPEMD160_SUPPORT parameter is not valid
156 #define SHA1_SUPPORT ENABLED
157 #elif (SHA1_SUPPORT != ENABLED && SHA1_SUPPORT != DISABLED)
158 #error SHA1_SUPPORT parameter is not valid
162 #ifndef SHA224_SUPPORT
163 #define SHA224_SUPPORT ENABLED
164 #elif (SHA224_SUPPORT != ENABLED && SHA224_SUPPORT != DISABLED)
165 #error SHA224_SUPPORT parameter is not valid
169 #ifndef SHA256_SUPPORT
170 #define SHA256_SUPPORT ENABLED
171 #elif (SHA256_SUPPORT != ENABLED && SHA256_SUPPORT != DISABLED)
172 #error SHA256_SUPPORT parameter is not valid
176 #ifndef SHA384_SUPPORT
177 #define SHA384_SUPPORT ENABLED
178 #elif (SHA384_SUPPORT != ENABLED && SHA384_SUPPORT != DISABLED)
179 #error SHA384_SUPPORT parameter is not valid
183 #ifndef SHA512_SUPPORT
184 #define SHA512_SUPPORT ENABLED
185 #elif (SHA512_SUPPORT != ENABLED && SHA512_SUPPORT != DISABLED)
186 #error SHA512_SUPPORT parameter is not valid
190 #ifndef SHA512_224_SUPPORT
191 #define SHA512_224_SUPPORT DISABLED
192 #elif (SHA512_224_SUPPORT != ENABLED && SHA512_224_SUPPORT != DISABLED)
193 #error SHA512_224_SUPPORT parameter is not valid
197 #ifndef SHA512_256_SUPPORT
198 #define SHA512_256_SUPPORT DISABLED
199 #elif (SHA512_256_SUPPORT != ENABLED && SHA512_256_SUPPORT != DISABLED)
200 #error SHA512_256_SUPPORT parameter is not valid
204 #ifndef SHA3_224_SUPPORT
205 #define SHA3_224_SUPPORT DISABLED
206 #elif (SHA3_224_SUPPORT != ENABLED && SHA3_224_SUPPORT != DISABLED)
207 #error SHA3_224_SUPPORT parameter is not valid
211 #ifndef SHA3_256_SUPPORT
212 #define SHA3_256_SUPPORT DISABLED
213 #elif (SHA3_256_SUPPORT != ENABLED && SHA3_256_SUPPORT != DISABLED)
214 #error SHA3_256_SUPPORT parameter is not valid
218 #ifndef SHA3_384_SUPPORT
219 #define SHA3_384_SUPPORT DISABLED
220 #elif (SHA3_384_SUPPORT != ENABLED && SHA3_384_SUPPORT != DISABLED)
221 #error SHA3_384_SUPPORT parameter is not valid
225 #ifndef SHA3_512_SUPPORT
226 #define SHA3_512_SUPPORT DISABLED
227 #elif (SHA3_512_SUPPORT != ENABLED && SHA3_512_SUPPORT != DISABLED)
228 #error SHA3_512_SUPPORT parameter is not valid
232 #ifndef SHAKE_SUPPORT
233 #define SHAKE_SUPPORT DISABLED
234 #elif (SHAKE_SUPPORT != ENABLED && SHAKE_SUPPORT != DISABLED)
235 #error SHAKE_SUPPORT parameter is not valid
239 #ifndef CSHAKE_SUPPORT
240 #define CSHAKE_SUPPORT DISABLED
241 #elif (CSHAKE_SUPPORT != ENABLED && CSHAKE_SUPPORT != DISABLED)
242 #error CSHAKE_SUPPORT parameter is not valid
246 #ifndef KECCAK_SUPPORT
247 #define KECCAK_SUPPORT DISABLED
248 #elif (KECCAK_SUPPORT != ENABLED && KECCAK_SUPPORT != DISABLED)
249 #error KECCAK_SUPPORT parameter is not valid
253 #ifndef BLAKE2B_SUPPORT
254 #define BLAKE2B_SUPPORT DISABLED
255 #elif (BLAKE2B_SUPPORT != ENABLED && BLAKE2B_SUPPORT != DISABLED)
256 #error BLAKE2B_SUPPORT parameter is not valid
260 #ifndef BLAKE2B160_SUPPORT
261 #define BLAKE2B160_SUPPORT DISABLED
262 #elif (BLAKE2B160_SUPPORT != ENABLED && BLAKE2B160_SUPPORT != DISABLED)
263 #error BLAKE2B160_SUPPORT parameter is not valid
267 #ifndef BLAKE2B256_SUPPORT
268 #define BLAKE2B256_SUPPORT DISABLED
269 #elif (BLAKE2B256_SUPPORT != ENABLED && BLAKE2B256_SUPPORT != DISABLED)
270 #error BLAKE2B256_SUPPORT parameter is not valid
274 #ifndef BLAKE2B384_SUPPORT
275 #define BLAKE2B384_SUPPORT DISABLED
276 #elif (BLAKE2B384_SUPPORT != ENABLED && BLAKE2B384_SUPPORT != DISABLED)
277 #error BLAKE2B384_SUPPORT parameter is not valid
281 #ifndef BLAKE2B512_SUPPORT
282 #define BLAKE2B512_SUPPORT DISABLED
283 #elif (BLAKE2B512_SUPPORT != ENABLED && BLAKE2B512_SUPPORT != DISABLED)
284 #error BLAKE2B512_SUPPORT parameter is not valid
288 #ifndef BLAKE2S_SUPPORT
289 #define BLAKE2S_SUPPORT DISABLED
290 #elif (BLAKE2S_SUPPORT != ENABLED && BLAKE2S_SUPPORT != DISABLED)
291 #error BLAKE2S_SUPPORT parameter is not valid
295 #ifndef BLAKE2S128_SUPPORT
296 #define BLAKE2S128_SUPPORT DISABLED
297 #elif (BLAKE2S128_SUPPORT != ENABLED && BLAKE2S128_SUPPORT != DISABLED)
298 #error BLAKE2S128_SUPPORT parameter is not valid
302 #ifndef BLAKE2S160_SUPPORT
303 #define BLAKE2S160_SUPPORT DISABLED
304 #elif (BLAKE2S160_SUPPORT != ENABLED && BLAKE2S160_SUPPORT != DISABLED)
305 #error BLAKE2S160_SUPPORT parameter is not valid
309 #ifndef BLAKE2S224_SUPPORT
310 #define BLAKE2S224_SUPPORT DISABLED
311 #elif (BLAKE2S224_SUPPORT != ENABLED && BLAKE2S224_SUPPORT != DISABLED)
312 #error BLAKE2S224_SUPPORT parameter is not valid
316 #ifndef BLAKE2S256_SUPPORT
317 #define BLAKE2S256_SUPPORT DISABLED
318 #elif (BLAKE2S256_SUPPORT != ENABLED && BLAKE2S256_SUPPORT != DISABLED)
319 #error BLAKE2S256_SUPPORT parameter is not valid
324 #define SM3_SUPPORT DISABLED
325 #elif (SM3_SUPPORT != ENABLED && SM3_SUPPORT != DISABLED)
326 #error SM3_SUPPORT parameter is not valid
330 #ifndef TIGER_SUPPORT
331 #define TIGER_SUPPORT DISABLED
332 #elif (TIGER_SUPPORT != ENABLED && TIGER_SUPPORT != DISABLED)
333 #error TIGER_SUPPORT parameter is not valid
337 #ifndef WHIRLPOOL_SUPPORT
338 #define WHIRLPOOL_SUPPORT DISABLED
339 #elif (WHIRLPOOL_SUPPORT != ENABLED && WHIRLPOOL_SUPPORT != DISABLED)
340 #error WHIRLPOOL_SUPPORT parameter is not valid
345 #define CMAC_SUPPORT DISABLED
346 #elif (CMAC_SUPPORT != ENABLED && CMAC_SUPPORT != DISABLED)
347 #error CMAC_SUPPORT parameter is not valid
352 #define HMAC_SUPPORT ENABLED
353 #elif (HMAC_SUPPORT != ENABLED && HMAC_SUPPORT != DISABLED)
354 #error HMAC_SUPPORT parameter is not valid
359 #define GMAC_SUPPORT DISABLED
360 #elif (GMAC_SUPPORT != ENABLED && GMAC_SUPPORT != DISABLED)
361 #error GMAC_SUPPORT parameter is not valid
366 #define KMAC_SUPPORT DISABLED
367 #elif (KMAC_SUPPORT != ENABLED && KMAC_SUPPORT != DISABLED)
368 #error KMAC_SUPPORT parameter is not valid
372 #ifndef XCBC_MAC_SUPPORT
373 #define XCBC_MAC_SUPPORT DISABLED
374 #elif (XCBC_MAC_SUPPORT != ENABLED && XCBC_MAC_SUPPORT != DISABLED)
375 #error XCBC_MAC_SUPPORT parameter is not valid
380 #define RC2_SUPPORT DISABLED
381 #elif (RC2_SUPPORT != ENABLED && RC2_SUPPORT != DISABLED)
382 #error RC2_SUPPORT parameter is not valid
387 #define RC4_SUPPORT DISABLED
388 #elif (RC4_SUPPORT != ENABLED && RC4_SUPPORT != DISABLED)
389 #error RC4_SUPPORT parameter is not valid
394 #define RC6_SUPPORT DISABLED
395 #elif (RC6_SUPPORT != ENABLED && RC6_SUPPORT != DISABLED)
396 #error RC6_SUPPORT parameter is not valid
400 #ifndef CAST128_SUPPORT
401 #define CAST128_SUPPORT DISABLED
402 #elif (CAST128_SUPPORT != ENABLED && CAST128_SUPPORT != DISABLED)
403 #error CAST128_SUPPORT parameter is not valid
407 #ifndef CAST256_SUPPORT
408 #define CAST256_SUPPORT DISABLED
409 #elif (CAST256_SUPPORT != ENABLED && CAST256_SUPPORT != DISABLED)
410 #error CAST256_SUPPORT parameter is not valid
415 #define IDEA_SUPPORT DISABLED
416 #elif (IDEA_SUPPORT != ENABLED && IDEA_SUPPORT != DISABLED)
417 #error IDEA_SUPPORT parameter is not valid
422 #define DES_SUPPORT DISABLED
423 #elif (DES_SUPPORT != ENABLED && DES_SUPPORT != DISABLED)
424 #error DES_SUPPORT parameter is not valid
429 #define DES3_SUPPORT DISABLED
430 #elif (DES3_SUPPORT != ENABLED && DES3_SUPPORT != DISABLED)
431 #error DES3_SUPPORT parameter is not valid
436 #define AES_SUPPORT ENABLED
437 #elif (AES_SUPPORT != ENABLED && AES_SUPPORT != DISABLED)
438 #error AES_SUPPORT parameter is not valid
442 #ifndef BLOWFISH_SUPPORT
443 #define BLOWFISH_SUPPORT DISABLED
444 #elif (BLOWFISH_SUPPORT != ENABLED && BLOWFISH_SUPPORT != DISABLED)
445 #error BLOWFISH_SUPPORT parameter is not valid
449 #ifndef TWOFISH_SUPPORT
450 #define TWOFISH_SUPPORT DISABLED
451 #elif (TWOFISH_SUPPORT != ENABLED && TWOFISH_SUPPORT != DISABLED)
452 #error TWOFISH_SUPPORT parameter is not valid
457 #define MARS_SUPPORT DISABLED
458 #elif (MARS_SUPPORT != ENABLED && MARS_SUPPORT != DISABLED)
459 #error MARS_SUPPORT parameter is not valid
463 #ifndef SERPENT_SUPPORT
464 #define SERPENT_SUPPORT DISABLED
465 #elif (SERPENT_SUPPORT != ENABLED && SERPENT_SUPPORT != DISABLED)
466 #error SERPENT_SUPPORT parameter is not valid
470 #ifndef CAMELLIA_SUPPORT
471 #define CAMELLIA_SUPPORT DISABLED
472 #elif (CAMELLIA_SUPPORT != ENABLED && CAMELLIA_SUPPORT != DISABLED)
473 #error CAMELLIA_SUPPORT parameter is not valid
478 #define ARIA_SUPPORT DISABLED
479 #elif (ARIA_SUPPORT != ENABLED && ARIA_SUPPORT != DISABLED)
480 #error ARIA_SUPPORT parameter is not valid
485 #define SEED_SUPPORT DISABLED
486 #elif (SEED_SUPPORT != ENABLED && SEED_SUPPORT != DISABLED)
487 #error SEED_SUPPORT parameter is not valid
492 #define SM4_SUPPORT DISABLED
493 #elif (SM4_SUPPORT != ENABLED && SM4_SUPPORT != DISABLED)
494 #error SM4_SUPPORT parameter is not valid
498 #ifndef PRESENT_SUPPORT
499 #define PRESENT_SUPPORT DISABLED
500 #elif (PRESENT_SUPPORT != ENABLED && PRESENT_SUPPORT != DISABLED)
501 #error PRESENT_SUPPORT parameter is not valid
506 #define TEA_SUPPORT DISABLED
507 #elif (TEA_SUPPORT != ENABLED && TEA_SUPPORT != DISABLED)
508 #error TEA_SUPPORT parameter is not valid
513 #define XTEA_SUPPORT DISABLED
514 #elif (XTEA_SUPPORT != ENABLED && XTEA_SUPPORT != DISABLED)
515 #error XTEA_SUPPORT parameter is not valid
519 #ifndef TRIVIUM_SUPPORT
520 #define TRIVIUM_SUPPORT DISABLED
521 #elif (TRIVIUM_SUPPORT != ENABLED && TRIVIUM_SUPPORT != DISABLED)
522 #error TRIVIUM_SUPPORT parameter is not valid
527 #define ZUC_SUPPORT DISABLED
528 #elif (ZUC_SUPPORT != ENABLED && ZUC_SUPPORT != DISABLED)
529 #error ZUC_SUPPORT parameter is not valid
534 #define ECB_SUPPORT ENABLED
535 #elif (ECB_SUPPORT != ENABLED && ECB_SUPPORT != DISABLED)
536 #error ECB_SUPPORT parameter is not valid
541 #define CBC_SUPPORT ENABLED
542 #elif (CBC_SUPPORT != ENABLED && CBC_SUPPORT != DISABLED)
543 #error CBC_SUPPORT parameter is not valid
548 #define CFB_SUPPORT ENABLED
549 #elif (CFB_SUPPORT != ENABLED && CFB_SUPPORT != DISABLED)
550 #error CFB_SUPPORT parameter is not valid
555 #define OFB_SUPPORT ENABLED
556 #elif (OFB_SUPPORT != ENABLED && OFB_SUPPORT != DISABLED)
557 #error OFB_SUPPORT parameter is not valid
562 #define CTR_SUPPORT ENABLED
563 #elif (CTR_SUPPORT != ENABLED && CTR_SUPPORT != DISABLED)
564 #error CTR_SUPPORT parameter is not valid
569 #define XTS_SUPPORT ENABLED
570 #elif (XTS_SUPPORT != ENABLED && XTS_SUPPORT != DISABLED)
571 #error XTS_SUPPORT parameter is not valid
576 #define CCM_SUPPORT ENABLED
577 #elif (CCM_SUPPORT != ENABLED && CCM_SUPPORT != DISABLED)
578 #error CCM_SUPPORT parameter is not valid
583 #define GCM_SUPPORT ENABLED
584 #elif (GCM_SUPPORT != ENABLED && GCM_SUPPORT != DISABLED)
585 #error GCM_SUPPORT parameter is not valid
589 #ifndef SALSA20_SUPPORT
590 #define SALSA20_SUPPORT DISABLED
591 #elif (SALSA20_SUPPORT != ENABLED && SALSA20_SUPPORT != DISABLED)
592 #error SALSA20_SUPPORT parameter is not valid
596 #ifndef CHACHA_SUPPORT
597 #define CHACHA_SUPPORT DISABLED
598 #elif (CHACHA_SUPPORT != ENABLED && CHACHA_SUPPORT != DISABLED)
599 #error CHACHA_SUPPORT parameter is not valid
603 #ifndef POLY1305_SUPPORT
604 #define POLY1305_SUPPORT DISABLED
605 #elif (POLY1305_SUPPORT != ENABLED && POLY1305_SUPPORT != DISABLED)
606 #error POLY1305_SUPPORT parameter is not valid
610 #ifndef CHACHA20_POLY1305_SUPPORT
611 #define CHACHA20_POLY1305_SUPPORT DISABLED
612 #elif (CHACHA20_POLY1305_SUPPORT != ENABLED && CHACHA20_POLY1305_SUPPORT != DISABLED)
613 #error CHACHA20_POLY1305_SUPPORT parameter is not valid
618 #define DH_SUPPORT DISABLED
619 #elif (DH_SUPPORT != ENABLED && DH_SUPPORT != DISABLED)
620 #error DH_SUPPORT parameter is not valid
625 #define RSA_SUPPORT ENABLED
626 #elif (RSA_SUPPORT != ENABLED && RSA_SUPPORT != DISABLED)
627 #error RSA_SUPPORT parameter is not valid
632 #define DSA_SUPPORT DISABLED
633 #elif (DSA_SUPPORT != ENABLED && DSA_SUPPORT != DISABLED)
634 #error DSA_SUPPORT parameter is not valid
639 #define EC_SUPPORT ENABLED
640 #elif (EC_SUPPORT != ENABLED && EC_SUPPORT != DISABLED)
641 #error EC_SUPPORT parameter is not valid
646 #define ECDH_SUPPORT ENABLED
647 #elif (ECDH_SUPPORT != ENABLED && ECDH_SUPPORT != DISABLED)
648 #error ECDH_SUPPORT parameter is not valid
652 #ifndef ECDSA_SUPPORT
653 #define ECDSA_SUPPORT ENABLED
654 #elif (ECDSA_SUPPORT != ENABLED && ECDSA_SUPPORT != DISABLED)
655 #error ECDSA_SUPPORT parameter is not valid
659 #ifndef SNTRUP761_SUPPORT
660 #define SNTRUP761_SUPPORT DISABLED
661 #elif (SNTRUP761_SUPPORT != ENABLED && SNTRUP761_SUPPORT != DISABLED)
662 #error SNTRUP761_SUPPORT parameter is not valid
666 #ifndef KYBER512_SUPPORT
667 #define KYBER512_SUPPORT DISABLED
668 #elif (KYBER512_SUPPORT != ENABLED && KYBER512_SUPPORT != DISABLED)
669 #error KYBER512_SUPPORT parameter is not valid
673 #ifndef KYBER768_SUPPORT
674 #define KYBER768_SUPPORT DISABLED
675 #elif (KYBER768_SUPPORT != ENABLED && KYBER768_SUPPORT != DISABLED)
676 #error KYBER768_SUPPORT parameter is not valid
680 #ifndef KYBER1024_SUPPORT
681 #define KYBER1024_SUPPORT DISABLED
682 #elif (KYBER1024_SUPPORT != ENABLED && KYBER1024_SUPPORT != DISABLED)
683 #error KYBER1024_SUPPORT parameter is not valid
688 #define HKDF_SUPPORT DISABLED
689 #elif (HKDF_SUPPORT != ENABLED && HKDF_SUPPORT != DISABLED)
690 #error HKDF_SUPPORT parameter is not valid
694 #ifndef PBKDF_SUPPORT
695 #define PBKDF_SUPPORT DISABLED
696 #elif (PBKDF_SUPPORT != ENABLED && PBKDF_SUPPORT != DISABLED)
697 #error PBKDF_SUPPORT parameter is not valid
701 #ifndef CONCAT_KDF_SUPPORT
702 #define CONCAT_KDF_SUPPORT DISABLED
703 #elif (CONCAT_KDF_SUPPORT != ENABLED && CONCAT_KDF_SUPPORT != DISABLED)
704 #error CONCAT_KDF_SUPPORT parameter is not valid
708 #ifndef BCRYPT_SUPPORT
709 #define BCRYPT_SUPPORT DISABLED
710 #elif (BCRYPT_SUPPORT != ENABLED && BCRYPT_SUPPORT != DISABLED)
711 #error BCRYPT_SUPPORT parameter is not valid
715 #ifndef SCRYPT_SUPPORT
716 #define SCRYPT_SUPPORT DISABLED
717 #elif (SCRYPT_SUPPORT != ENABLED && SCRYPT_SUPPORT != DISABLED)
718 #error SCRYPT_SUPPORT parameter is not valid
722 #ifndef YARROW_SUPPORT
723 #define YARROW_SUPPORT ENABLED
724 #elif (YARROW_SUPPORT != ENABLED && YARROW_SUPPORT != DISABLED)
725 #error YARROW_SUPPORT parameter is not valid
730 #define OID_SUPPORT ENABLED
731 #elif (OID_SUPPORT != ENABLED && OID_SUPPORT != DISABLED)
732 #error OID_SUPPORT parameter is not valid
737 #define ASN1_SUPPORT ENABLED
738 #elif (ASN1_SUPPORT != ENABLED && ASN1_SUPPORT != DISABLED)
739 #error ASN1_SUPPORT parameter is not valid
744 #define PEM_SUPPORT ENABLED
745 #elif (PEM_SUPPORT != ENABLED && PEM_SUPPORT != DISABLED)
746 #error PEM_SUPPORT parameter is not valid
751 #define X509_SUPPORT ENABLED
752 #elif (X509_SUPPORT != ENABLED && X509_SUPPORT != DISABLED)
753 #error X509_SUPPORT parameter is not valid
757 #ifndef PKCS5_SUPPORT
758 #define PKCS5_SUPPORT DISABLED
759 #elif (PKCS5_SUPPORT != ENABLED && PKCS5_SUPPORT != DISABLED)
760 #error PKCS5_SUPPORT parameter is not valid
764 #ifndef cryptoAllocMem
765 #define cryptoAllocMem(size) osAllocMem(size)
769 #ifndef cryptoFreeMem
770 #define cryptoFreeMem(p) osFreeMem(p)
774 #define ROL8(a, n) (((a) << (n)) | ((a) >> (8 - (n))))
775 #define ROL16(a, n) (((a) << (n)) | ((a) >> (16 - (n))))
776 #define ROL32(a, n) (((a) << (n)) | ((a) >> (32 - (n))))
777 #define ROL64(a, n) (((a) << (n)) | ((a) >> (64 - (n))))
780 #define ROR8(a, n) (((a) >> (n)) | ((a) << (8 - (n))))
781 #define ROR16(a, n) (((a) >> (n)) | ((a) << (16 - (n))))
782 #define ROR32(a, n) (((a) >> (n)) | ((a) << (32 - (n))))
783 #define ROR64(a, n) (((a) >> (n)) | ((a) << (64 - (n))))
786 #define SHL8(a, n) ((a) << (n))
787 #define SHL16(a, n) ((a) << (n))
788 #define SHL32(a, n) ((a) << (n))
789 #define SHL64(a, n) ((a) << (n))
792 #define SHR8(a, n) ((a) >> (n))
793 #define SHR16(a, n) ((a) >> (n))
794 #define SHR32(a, n) ((a) >> (n))
795 #define SHR64(a, n) ((a) >> (n))
798 #define _U8(x) ((uint8_t) (x))
799 #define _U16(x) ((uint16_t) (x))
800 #define _U32(x) ((uint32_t) (x))
801 #define _U64(x) ((uint64_t) (x))
804 #define CRYPTO_TEST_Z_8(a) \
805 _U8((_U8((_U8(a) | (~_U8(a) + 1U))) >> 7U) ^ 1U)
808 #define CRYPTO_TEST_NZ_8(a) \
809 _U8(_U8((_U8(a) | (~_U8(a) + 1U))) >> 7U)
812 #define CRYPTO_TEST_EQ_8(a, b) \
813 _U8((_U8(((_U8(a) ^ _U8(b)) | (~(_U8(a) ^ _U8(b)) + 1U))) >> 7U) ^ 1U)
816 #define CRYPTO_TEST_NEQ_8(a, b) \
817 _U8(_U8(((_U8(a) ^ _U8(b)) | (~(_U8(a) ^ _U8(b)) + 1U))) >> 7U)
820 #define CRYPTO_TEST_LT_8(a, b) \
821 _U8(_U8((((_U8(a) - _U8(b)) ^ _U8(b)) | (_U8(a) ^ _U8(b))) ^ _U8(a)) >> 7U)
824 #define CRYPTO_TEST_LTE_8(a, b) \
825 _U8((_U8((((_U8(b) - _U8(a)) ^ _U8(a)) | (_U8(a) ^ _U8(b))) ^ _U8(b)) >> 7U) ^ 1U)
828 #define CRYPTO_TEST_GT_8(a, b) \
829 _U8(_U8((((_U8(b) - _U8(a)) ^ _U8(a)) | (_U8(a) ^ _U8(b))) ^ _U8(b)) >> 7U)
832 #define CRYPTO_TEST_GTE_8(a, b) \
833 _U8((_U8((((_U8(a) - _U8(b)) ^ _U8(b)) | (_U8(a) ^ _U8(b))) ^ _U8(a)) >> 7U) ^ 1U)
836 #define CRYPTO_SELECT_8(a, b, c) \
837 _U8((_U8(a) & (_U8(c) - 1U)) | (_U8(b) & ~(_U8(c) - 1U)))
840 #define CRYPTO_TEST_Z_16(a) \
841 _U16((_U16((_U16(a) | (~_U16(a) + 1U))) >> 15U) ^ 1U)
844 #define CRYPTO_TEST_NZ_16(a) \
845 _U16(_U16((_U16(a) | (~_U16(a) + 1U))) >> 15U)
848 #define CRYPTO_TEST_EQ_16(a, b) \
849 _U16((_U16(((_U16(a) ^ _U16(b)) | (~(_U16(a) ^ _U16(b)) + 1U))) >> 15U) ^ 1U)
852 #define CRYPTO_TEST_NEQ_16(a, b) \
853 _U16(_U16(((_U16(a) ^ _U16(b)) | (~(_U16(a) ^ _U16(b)) + 1U))) >> 15U)
856 #define CRYPTO_TEST_LT_16(a, b) \
857 _U16(_U16((((_U16(a) - _U16(b)) ^ _U16(b)) | (_U16(a) ^ _U16(b))) ^ _U16(a)) >> 15U)
860 #define CRYPTO_TEST_LTE_16(a, b) \
861 _U16((_U16((((_U16(b) - _U16(a)) ^ _U16(a)) | (_U16(a) ^ _U16(b))) ^ _U16(b)) >> 15U) ^ 1U)
864 #define CRYPTO_TEST_GT_16(a, b) \
865 _U16(_U16((((_U16(b) - _U16(a)) ^ _U16(a)) | (_U16(a) ^ _U16(b))) ^ _U16(b)) >> 15U)
868 #define CRYPTO_TEST_GTE_16(a, b) \
869 _U16((_U16((((_U16(a) - _U16(b)) ^ _U16(b)) | (_U16(a) ^ _U16(b))) ^ _U16(a)) >> 15U) ^ 1U)
872 #define CRYPTO_SELECT_16(a, b, c) \
873 _U16((_U16(a) & (_U16(c) - 1U)) | (_U16(b) & ~(_U16(c) - 1U)))
876 #define CRYPTO_TEST_Z_32(a) \
877 _U32((_U32((_U32(a) | (~_U32(a) + 1U))) >> 31U) ^ 1U)
880 #define CRYPTO_TEST_NZ_32(a) \
881 _U32(_U32((_U32(a) | (~_U32(a) + 1U))) >> 31U)
884 #define CRYPTO_TEST_EQ_32(a, b) \
885 _U32((_U32(((_U32(a) ^ _U32(b)) | (~(_U32(a) ^ _U32(b)) + 1U))) >> 31U) ^ 1U)
888 #define CRYPTO_TEST_NEQ_32(a, b) \
889 _U32(_U32(((_U32(a) ^ _U32(b)) | (~(_U32(a) ^ _U32(b)) + 1U))) >> 31U)
892 #define CRYPTO_TEST_LT_32(a, b) \
893 _U32(_U32((((_U32(a) - _U32(b)) ^ _U32(b)) | (_U32(a) ^ _U32(b))) ^ _U32(a)) >> 31U)
896 #define CRYPTO_TEST_LTE_32(a, b) \
897 _U32((_U32((((_U32(b) - _U32(a)) ^ _U32(a)) | (_U32(a) ^ _U32(b))) ^ _U32(b)) >> 31U) ^ 1U)
900 #define CRYPTO_TEST_GT_32(a, b) \
901 _U32(_U32((((_U32(b) - _U32(a)) ^ _U32(a)) | (_U32(a) ^ _U32(b))) ^ _U32(b)) >> 31U)
904 #define CRYPTO_TEST_GTE_32(a, b) \
905 _U32((_U32((((_U32(a) - _U32(b)) ^ _U32(b)) | (_U32(a) ^ _U32(b))) ^ _U32(a)) >> 31U) ^ 1U)
908 #define CRYPTO_SELECT_32(a, b, c) \
909 _U32((_U32(a) & (_U32(c) - 1U)) | (_U32(b) & ~(_U32(c) - 1U)))
912 #define CRYPTO_SELECT_64(a, b, c) \
913 _U64((_U64(a) & (_U64(c) - 1U)) | (_U64(b) & ~(_U64(c) - 1U)))
917 #define PrngAlgo struct _PrngAlgo
972 uint8_t *output,
size_t length);
975 uint8_t *output,
size_t length);
987 void *prngContext, uint8_t *pk, uint8_t *sk);
990 void *prngContext, uint8_t *ct, uint8_t *ss,
const uint8_t *pk);
1002 const uint8_t *input,
size_t length,
size_t entropy);
void(* CipherAlgoDeinit)(void *context)
error_t(* HashAlgoCompute)(const void *data, size_t length, uint8_t *digest)
void(* HashAlgoFinalRaw)(void *context, uint8_t *digest)
void(* HashAlgoFinal)(void *context, uint8_t *digest)
void(* CipherAlgoDecryptBlock)(void *context, const uint8_t *input, uint8_t *output)
error_t(* CipherAlgoInit)(void *context, const uint8_t *key, size_t keyLen)
error_t(* KemAlgoGenerateKeyPair)(const PrngAlgo *prngAlgo, void *prngContext, uint8_t *pk, uint8_t *sk)
void(* PrngAlgoDeinit)(void *context)
void(* HashAlgoUpdate)(void *context, const void *data, size_t length)
void(* CipherAlgoEncryptBlock)(void *context, const uint8_t *input, uint8_t *output)
error_t(* PrngAlgoRead)(void *context, uint8_t *output, size_t length)
error_t(* KemAlgoEncapsulate)(const PrngAlgo *prngAlgo, void *prngContext, uint8_t *ct, uint8_t *ss, const uint8_t *pk)
error_t(* PrngAlgoSeed)(void *context, const uint8_t *input, size_t length)
error_t(* PrngAlgoAddEntropy)(void *context, uint_t source, const uint8_t *input, size_t length, size_t entropy)
void(* CipherAlgoEncryptStream)(void *context, const uint8_t *input, uint8_t *output, size_t length)
void(* CipherAlgoDecryptStream)(void *context, const uint8_t *input, uint8_t *output, size_t length)
error_t(* PrngAlgoInit)(void *context)
CipherMode
Cipher operation modes.
@ CIPHER_MODE_CHACHA20_POLY1305
CipherAlgoType
Encryption algorithm type.
@ CIPHER_ALGO_TYPE_STREAM
error_t(* KemAlgoDecapsulate)(uint8_t *ss, const uint8_t *ct, const uint8_t *sk)
void(* HashAlgoInit)(void *context)
Common interface for pseudo-random number generators (PRNG)
PrngAlgoAddEntropy addEntropy
Common interface for encryption algorithms.
CipherAlgoEncryptBlock encryptBlock
CipherAlgoDecryptBlock decryptBlock
CipherAlgoEncryptStream encryptStream
CipherAlgoDecryptStream decryptStream
Common interface for hash algorithms.
HashAlgoFinalRaw finalRaw
Common interface for key encapsulation mechanisms (KEM)
KemAlgoGenerateKeyPair generateKeyPair
KemAlgoDecapsulate decapsulate
KemAlgoEncapsulate encapsulate