_KEM_DHKEMP384R1=44, #define GCRY_KEM_DHKEMP384R1 GCRY_KEM_DHKEMP384R1 GCRY_KEM_DHKEMP521R1=45 #define GCRY_KEM_DHKEMP521R1 GCRY_KEM_DHKEMP521R1 }; /* * Before C99, limitation is 31 significant initial characters in a * macro name * * 1 ... 31 * | | * v v * _______________________________ */ #define GCRY_KEM_SNTRUP761_SECKEY_LEN 1763 #define GCRY_KEM_SNTRUP761_PUBKEY_LEN 1158 #define GCRY_KEM_SNTRUP761_ENCAPS_LEN 1039 #define GCRY_KEM_SNTRUP761_CIPHER_LEN GCRY_KEM_SNTRUP761_ENCAPS_LEN #define GCRY_KEM_SNTRUP761_SHARED_LEN 32 #define GCRY_KEM_CM6688128F_SECKEY_LEN 13932 #define GCRY_KEM_CM6688128F_PUBKEY_LEN 1044992 #define GCRY_KEM_CM6688128F_ENCAPS_LEN 208 #define GCRY_KEM_CM6688128F_CIPHER_LEN GCRY_KEM_CM6688128F_ENCAPS_LEN #define GCRY_KEM_CM6688128F_SHARED_LEN 32 #ifdef _GCRYPT_IN_LIBGCRYPT /* This is not yet part of the public API. */ #define GCRY_KEM_MLKEM_RANDOM_LEN 32 #define GCRY_KEM_MLKEM512_RANDOM_LEN GCRY_KEM_MLKEM_RANDOM_LEN #define GCRY_KEM_MLKEM768_RANDOM_LEN GCRY_KEM_MLKEM_RANDOM_LEN #define GCRY_KEM_MLKEM1024_RANDOM_LEN GCRY_KEM_MLKEM_RANDOM_LEN #endif /*_GCRYPT_IN_LIBGCRYPT*/ #define GCRY_KEM_MLKEM512_SECKEY_LEN (2*384+2*384+32+2*32) /* 1632 */ #define GCRY_KEM_MLKEM512_PUBKEY_LEN (2*384+32) /* 800 */ #define GCRY_KEM_MLKEM512_ENCAPS_LEN (128+2*320) /* 768 */ #define GCRY_KEM_MLKEM512_CIPHER_LEN GCRY_KEM_MLKEM512_ENCAPS_LEN #define GCRY_KEM_MLKEM512_SHARED_LEN 32 #define GCRY_KEM_MLKEM768_SECKEY_LEN (3*384+3*384+32+2*32) /* 2400 */ #define GCRY_KEM_MLKEM768_PUBKEY_LEN (3*384+32) /* 1184 */ #define GCRY_KEM_MLKEM768_ENCAPS_LEN (128+3*320) /* 1088 */ #define GCRY_KEM_MLKEM768_CIPHER_LEN GCRY_KEM_MLKEM768_ENCAPS_LEN #define GCRY_KEM_MLKEM768_SHARED_LEN 32 #define GCRY_KEM_MLKEM1024_SECKEY_LEN (4*384+4*384+32+2*32) /* 3168 */ #define GCRY_KEM_MLKEM1024_PUBKEY_LEN (4*384+32) /* 1568 */ #define GCRY_KEM_MLKEM1024_ENCAPS_LEN (160+4*352) /* 1568 */ #define GCRY_KEM_MLKEM1024_CIPHER_LEN GCRY_KEM_MLKEM1024_ENCAPS_LEN #define GCRY_KEM_MLKEM1024_SHARED_LEN 32 /* For ECC, seckey, pubkey, and ciphertext is defined by the curve. */ #define GCRY_KEM_ECC_X25519_SECKEY_LEN 32 #define GCRY_KEM_ECC_X25519_PUBKEY_LEN 32 #define GCRY_KEM_ECC_X25519_ENCAPS_LEN 32 #define GCRY_KEM_ECC_X25519_CIPHER_LEN GCRY_KEM_ECC_X25519_ENCAPS_LEN /* And shared secret is specific to the protocol. */ #define GCRY_KEM_RAW_X25519_SHARED_LEN 32 #define GCRY_KEM_DHKEM25519_SECKEY_LEN GCRY_KEM_ECC_X25519_SECKEY_LEN #define GCRY_KEM_DHKEM25519_PUBKEY_LEN GCRY_KEM_ECC_X25519_PUBKEY_LEN #define GCRY_KEM_DHKEM25519_ENCAPS_LEN GCRY_KEM_ECC_X25519_ENCAPS_LEN #define GCRY_KEM_DHKEM25519_CIPHER_LEN GCRY_KEM_DHKEM25519_ENCAPS_LEN #define GCRY_KEM_DHKEM25519_SHARED_LEN 32 #define GCRY_KEM_ECC_BP256_SECKEY_LEN 32 #define GCRY_KEM_ECC_BP256_PUBKEY_LEN (1+32+32) #define GCRY_KEM_ECC_BP256_ENCAPS_LEN (1+32+32) #define GCRY_KEM_ECC_BP256_CIPHER_LEN GCRY_KEM_ECC_BP256_ENCAPS_LEN #define GCRY_KEM_RAW_BP256_SHARED_LEN (1+32+32) #define GCRY_KEM_ECC_BP384_SECKEY_LEN 48 #define GCRY_KEM_ECC_BP384_PUBKEY_LEN (1+48+48) #define GCRY_KEM_ECC_BP384_ENCAPS_LEN (1+48+48) #define GCRY_KEM_ECC_BP384_CIPHER_LEN GCRY_KEM_ECC_BP384_ENCAPS_LEN #define GCRY_KEM_RAW_BP384_SHARED_LEN (1+48+48) /* Generate a new key pair with ALGO. */ gcry_error_t gcry_kem_keypair (int algo, void *pubkey, size_t pubkey_len, void *seckey, size_t seckey_len); /* With ALGO, for a PUBKEY, generate SHARED secret and encapsulate it into CIPHERTEXT. */ gcry_error_t gcry_kem_encap (int algo, const void *pubkey, size_t pubkey_len, void *ciphertext, size_t ciphertext_len, void *shared, size_t shared_len, const void *optional, size_t optional_len); /* With ALGO, for a SECKEY and CIPHERTEXT, compute its SHARED secret. */ gcry_error_t gcry_kem_decap (int algo, const void *seckey, size_t seckey_len, const void *ciphertext, size_t ciphertext_len, void *shared, size_t shared_len, const void *optional, size_t optional_len);