/** @cond Don't include those defines in doxygen, they are not to be used directly */
/* types */
-#define YACA_INTERNAL_KEYLEN_TYPE_MASK (0xF << 28)
-#define YACA_INTERNAL_KEYLEN_TYPE_BITS (0U << 28)
-#define YACA_INTERNAL_KEYLEN_TYPE_DH (1U << 28)
-#define YACA_INTERNAL_KEYLEN_TYPE_DH_RFC (2U << 28)
-#define YACA_INTERNAL_KEYLEN_TYPE_EC (3U << 28)
+#define YACA_KEYLEN_COMPONENT_TYPE_MASK (0xF << 28)
+#define YACA_KEYLEN_COMPONENT_TYPE_BITS (0U << 28)
+#define YACA_KEYLEN_COMPONENT_TYPE_DH (1U << 28)
+#define YACA_KEYLEN_COMPONENT_TYPE_DH_RFC (2U << 28)
+#define YACA_KEYLEN_COMPONENT_TYPE_EC (3U << 28)
/* DH type */
-#define YACA_INTERNAL_KEYLEN_DH_GEN_MASK (0xF << 24)
-#define YACA_INTERNAL_KEYLEN_DH_GEN_2 (0U << 24)
-#define YACA_INTERNAL_KEYLEN_DH_GEN_5 (1U << 24)
+#define YACA_KEYLEN_COMPONENT_DH_GEN_MASK (0xF << 24)
+#define YACA_KEYLEN_COMPONENT_DH_GEN_2 (0U << 24)
+#define YACA_KEYLEN_COMPONENT_DH_GEN_5 (1U << 24)
-#define YACA_INTERNAL_KEYLEN_DH_PRIME_MASK (0xFFFF << 0)
+#define YACA_KEYLEN_COMPONENT_DH_PRIME_MASK (0xFFFF << 0)
/* DH_RFC type */
-#define YACA_INTERNAL_KEYLEN_DH_RFC_MASK (0xF << 24)
-#define YACA_INTERNAL_KEYLEN_DH_RFC_160 (0U << 24)
-#define YACA_INTERNAL_KEYLEN_DH_RFC_224 (1U << 24)
-#define YACA_INTERNAL_KEYLEN_DH_RFC_256 (2U << 24)
+#define YACA_KEYLEN_COMPONENT_DH_RFC_MASK (0xF << 24)
+#define YACA_KEYLEN_COMPONENT_DH_RFC_160 (0U << 24)
+#define YACA_KEYLEN_COMPONENT_DH_RFC_224 (1U << 24)
+#define YACA_KEYLEN_COMPONENT_DH_RFC_256 (2U << 24)
/* EC type */
-#define YACA_INTERNAL_KEYLEN_EC_PRIME (0U << 24)
-#define YACA_INTERNAL_KEYLEN_EC_SECP (1U << 24)
-#define YACA_INTERNAL_KEYLEN_EC_SECT (2U << 24)
-#define YACA_INTERNAL_KEYLEN_EC_BRAINPOOL (3U << 24)
-
-#define YACA_INTERNAL_KEYLEN_EC_V (0U << 20)
-#define YACA_INTERNAL_KEYLEN_EC_R (1U << 20)
-#define YACA_INTERNAL_KEYLEN_EC_K (2U << 20)
-#define YACA_INTERNAL_KEYLEN_EC_T (3U << 20)
-
-#define YACA_INTERNAL_KEYLEN_EC_1 (0U << 16)
-#define YACA_INTERNAL_KEYLEN_EC_2 (1U << 16)
-#define YACA_INTERNAL_KEYLEN_EC_3 (2U << 16)
-#define YACA_INTERNAL_KEYLEN_EC_4 (3U << 16)
+#define YACA_KEYLEN_COMPONENT_EC_PRIME (0U << 24)
+#define YACA_KEYLEN_COMPONENT_EC_SECP (1U << 24)
+#define YACA_KEYLEN_COMPONENT_EC_SECT (2U << 24)
+#define YACA_KEYLEN_COMPONENT_EC_BRAINPOOL (3U << 24)
+
+#define YACA_KEYLEN_COMPONENT_EC_V (0U << 20)
+#define YACA_KEYLEN_COMPONENT_EC_R (1U << 20)
+#define YACA_KEYLEN_COMPONENT_EC_K (2U << 20)
+#define YACA_KEYLEN_COMPONENT_EC_T (3U << 20)
+
+#define YACA_KEYLEN_COMPONENT_EC_1 (0U << 16)
+#define YACA_KEYLEN_COMPONENT_EC_2 (1U << 16)
+#define YACA_KEYLEN_COMPONENT_EC_3 (2U << 16)
+#define YACA_KEYLEN_COMPONENT_EC_4 (3U << 16)
/** @endcond */
/**
*/
typedef enum {
/** Elliptic curve prime192v1 */
- YACA_KEY_LENGTH_EC_PRIME192V1 = YACA_INTERNAL_KEYLEN_TYPE_EC | YACA_INTERNAL_KEYLEN_EC_PRIME | YACA_INTERNAL_KEYLEN_EC_V | YACA_INTERNAL_KEYLEN_EC_1 | 192U,
+ YACA_KEY_LENGTH_EC_PRIME192V1 = YACA_KEYLEN_COMPONENT_TYPE_EC | YACA_KEYLEN_COMPONENT_EC_PRIME | YACA_KEYLEN_COMPONENT_EC_V | YACA_KEYLEN_COMPONENT_EC_1 | 192U,
/** Elliptic curve prime256v1 */
- YACA_KEY_LENGTH_EC_PRIME256V1 = YACA_INTERNAL_KEYLEN_TYPE_EC | YACA_INTERNAL_KEYLEN_EC_PRIME | YACA_INTERNAL_KEYLEN_EC_V | YACA_INTERNAL_KEYLEN_EC_1 | 256U,
+ YACA_KEY_LENGTH_EC_PRIME256V1 = YACA_KEYLEN_COMPONENT_TYPE_EC | YACA_KEYLEN_COMPONENT_EC_PRIME | YACA_KEYLEN_COMPONENT_EC_V | YACA_KEYLEN_COMPONENT_EC_1 | 256U,
/** Elliptic curve secp256k1 */
- YACA_KEY_LENGTH_EC_SECP256K1 = YACA_INTERNAL_KEYLEN_TYPE_EC | YACA_INTERNAL_KEYLEN_EC_SECP | YACA_INTERNAL_KEYLEN_EC_K | YACA_INTERNAL_KEYLEN_EC_1 | 256U,
+ YACA_KEY_LENGTH_EC_SECP256K1 = YACA_KEYLEN_COMPONENT_TYPE_EC | YACA_KEYLEN_COMPONENT_EC_SECP | YACA_KEYLEN_COMPONENT_EC_K | YACA_KEYLEN_COMPONENT_EC_1 | 256U,
/** Elliptic curve secp384r1 */
- YACA_KEY_LENGTH_EC_SECP384R1 = YACA_INTERNAL_KEYLEN_TYPE_EC | YACA_INTERNAL_KEYLEN_EC_SECP | YACA_INTERNAL_KEYLEN_EC_R | YACA_INTERNAL_KEYLEN_EC_1 | 384U,
+ YACA_KEY_LENGTH_EC_SECP384R1 = YACA_KEYLEN_COMPONENT_TYPE_EC | YACA_KEYLEN_COMPONENT_EC_SECP | YACA_KEYLEN_COMPONENT_EC_R | YACA_KEYLEN_COMPONENT_EC_1 | 384U,
/** Elliptic curve secp521r1 */
- YACA_KEY_LENGTH_EC_SECP521R1 = YACA_INTERNAL_KEYLEN_TYPE_EC | YACA_INTERNAL_KEYLEN_EC_SECP | YACA_INTERNAL_KEYLEN_EC_R | YACA_INTERNAL_KEYLEN_EC_1 | 521U
+ YACA_KEY_LENGTH_EC_SECP521R1 = YACA_KEYLEN_COMPONENT_TYPE_EC | YACA_KEYLEN_COMPONENT_EC_SECP | YACA_KEYLEN_COMPONENT_EC_R | YACA_KEYLEN_COMPONENT_EC_1 | 521U
} yaca_key_bit_length_ec_e;
/**
* To be or'ed with safe prime length in bits. Prime length is recommended
* to be 2048 bits or higher.
*/
-#define YACA_KEY_LENGTH_DH_GENERATOR_2 (YACA_INTERNAL_KEYLEN_TYPE_DH | YACA_INTERNAL_KEYLEN_DH_GEN_2)
+#define YACA_KEY_LENGTH_DH_GENERATOR_2 (YACA_KEYLEN_COMPONENT_TYPE_DH | YACA_KEYLEN_COMPONENT_DH_GEN_2)
/**
* @brief A value indicating generator equal 5 for DH parameters.
* To be or'ed with safe prime length in bits. Prime length is recommended
* to be 2048 bits or higher.
*/
-#define YACA_KEY_LENGTH_DH_GENERATOR_5 (YACA_INTERNAL_KEYLEN_TYPE_DH | YACA_INTERNAL_KEYLEN_DH_GEN_5)
+#define YACA_KEY_LENGTH_DH_GENERATOR_5 (YACA_KEYLEN_COMPONENT_TYPE_DH | YACA_KEYLEN_COMPONENT_DH_GEN_5)
/**
* @brief Enumeration of YACA DH parameters taken from RFC 5114.
*/
typedef enum {
/** RFC 5114 DH parameters 1024_160 */
- YACA_KEY_LENGTH_DH_RFC_1024_160 = YACA_INTERNAL_KEYLEN_TYPE_DH_RFC | YACA_INTERNAL_KEYLEN_DH_RFC_160 | 1024U,
+ YACA_KEY_LENGTH_DH_RFC_1024_160 = YACA_KEYLEN_COMPONENT_TYPE_DH_RFC | YACA_KEYLEN_COMPONENT_DH_RFC_160 | 1024U,
/** RFC 5114 DH parameters 2048_224 */
- YACA_KEY_LENGTH_DH_RFC_2048_224 = YACA_INTERNAL_KEYLEN_TYPE_DH_RFC | YACA_INTERNAL_KEYLEN_DH_RFC_224 | 2048U,
+ YACA_KEY_LENGTH_DH_RFC_2048_224 = YACA_KEYLEN_COMPONENT_TYPE_DH_RFC | YACA_KEYLEN_COMPONENT_DH_RFC_224 | 2048U,
/** RFC 5114 DH parameters 2048_256 */
- YACA_KEY_LENGTH_DH_RFC_2048_256 = YACA_INTERNAL_KEYLEN_TYPE_DH_RFC | YACA_INTERNAL_KEYLEN_DH_RFC_256 | 2048U
+ YACA_KEY_LENGTH_DH_RFC_2048_256 = YACA_KEYLEN_COMPONENT_TYPE_DH_RFC | YACA_KEYLEN_COMPONENT_DH_RFC_256 | 2048U
} yaca_key_bit_length_dh_rfc_e;
/**
switch (evp_id) {
case EVP_PKEY_DSA:
- if ((key_bit_len & YACA_INTERNAL_KEYLEN_TYPE_MASK) != YACA_INTERNAL_KEYLEN_TYPE_BITS ||
+ if ((key_bit_len & YACA_KEYLEN_COMPONENT_TYPE_MASK) != YACA_KEYLEN_COMPONENT_TYPE_BITS ||
key_bit_len > INT_MAX || key_bit_len < 512 || key_bit_len % 64 != 0)
return YACA_ERROR_INVALID_PARAMETER;
break;
case EVP_PKEY_DH:
- if ((key_bit_len & YACA_INTERNAL_KEYLEN_TYPE_MASK) == YACA_INTERNAL_KEYLEN_TYPE_DH) {
- size_t gen_block = key_bit_len & YACA_INTERNAL_KEYLEN_DH_GEN_MASK;
- size_t prime_len_block = key_bit_len & YACA_INTERNAL_KEYLEN_DH_PRIME_MASK;
+ if ((key_bit_len & YACA_KEYLEN_COMPONENT_TYPE_MASK) == YACA_KEYLEN_COMPONENT_TYPE_DH) {
+ size_t gen_block = key_bit_len & YACA_KEYLEN_COMPONENT_DH_GEN_MASK;
+ size_t prime_len_block = key_bit_len & YACA_KEYLEN_COMPONENT_DH_PRIME_MASK;
/* This is impossible now as we take only 16 bits,
* but for the sake of type safety */
return YACA_ERROR_INVALID_PARAMETER;
dh_prime_len = prime_len_block;
- if (gen_block == YACA_INTERNAL_KEYLEN_DH_GEN_2)
+ if (gen_block == YACA_KEYLEN_COMPONENT_DH_GEN_2)
dh_generator = 2;
- else if (gen_block == YACA_INTERNAL_KEYLEN_DH_GEN_5)
+ else if (gen_block == YACA_KEYLEN_COMPONENT_DH_GEN_5)
dh_generator = 5;
else
return YACA_ERROR_INVALID_PARAMETER;
- } else if ((key_bit_len & YACA_INTERNAL_KEYLEN_TYPE_MASK) == YACA_INTERNAL_KEYLEN_TYPE_DH_RFC) {
+ } else if ((key_bit_len & YACA_KEYLEN_COMPONENT_TYPE_MASK) == YACA_KEYLEN_COMPONENT_TYPE_DH_RFC) {
if (key_bit_len == YACA_KEY_LENGTH_DH_RFC_1024_160)
dh_rfc5114 = 1; /* OpenSSL magic numbers */
else if (key_bit_len == YACA_KEY_LENGTH_DH_RFC_2048_224)
}
if (evp_id == EVP_PKEY_RSA) {
- if ((key_bit_len & YACA_INTERNAL_KEYLEN_TYPE_MASK) != YACA_INTERNAL_KEYLEN_TYPE_BITS ||
+ if ((key_bit_len & YACA_KEYLEN_COMPONENT_TYPE_MASK) != YACA_KEYLEN_COMPONENT_TYPE_BITS ||
key_bit_len > INT_MAX || key_bit_len % 8 != 0) {
ret = YACA_ERROR_INVALID_PARAMETER;
goto exit;