{
size_t bits;
yaca_key_type_e type;
+ size_t mask = 0xFFFFFFFF;
+
+ if (expected_type == YACA_KEY_TYPE_DH_PRIV)
+ mask = YACA_INTERNAL_KEYLEN_DH_PRIME_MASK;
auto key_ptr = generate_key(expected_type, expected_bits);
YACA_SUCCESS(yaca_key_get_bit_length(key_ptr.get(), &bits));
- YACA_ASSERT_MSG(bits == expected_bits,
+ YACA_ASSERT_MSG(bits == (expected_bits & mask),
"Expected key length: " << expected_bits << " got: " << bits);
YACA_SUCCESS(yaca_key_get_type(key_ptr.get(), &type));
YACA_ASSERT_MSG(type == expected_type,
- "Expected key type: " << expected_type << " got: " << bits);
+ "Expected key type: " << expected_type << " got: " << type);
+
+ bool do_params_test = false;
+ yaca_key_type_e params_type;
+
+ switch (expected_type) {
+ case YACA_KEY_TYPE_DSA_PRIV:
+ do_params_test = true;
+ params_type = YACA_KEY_TYPE_DSA_PARAMS;
+ break;
+ case YACA_KEY_TYPE_DH_PRIV:
+ do_params_test = true;
+ params_type = YACA_KEY_TYPE_DH_PARAMS;
+ break;
+ case YACA_KEY_TYPE_EC_PRIV:
+ do_params_test = true;
+ params_type = YACA_KEY_TYPE_EC_PARAMS;
+ break;
+ default:
+ break;
+ }
+
+ if (do_params_test) {
+ auto key_params = generate_key(params_type, expected_bits);
+
+ YACA_SUCCESS(yaca_key_get_bit_length(key_params.get(), &bits));
+ YACA_ASSERT_MSG(bits == (expected_bits & mask),
+ "Expected key length: " << expected_bits << " got: " << bits);
+
+ YACA_SUCCESS(yaca_key_get_type(key_params.get(), &type));
+ YACA_ASSERT_MSG(type == params_type,
+ "Expected key type: " << params_type << " got: " << type);
+
+ auto key_prv = generate_key_from_parameters(key_params);
+
+ YACA_SUCCESS(yaca_key_get_bit_length(key_ptr.get(), &bits));
+ YACA_ASSERT_MSG(bits == (expected_bits & mask),
+ "Expected key length: " << expected_bits << " got: " << bits);
+
+ YACA_SUCCESS(yaca_key_get_type(key_ptr.get(), &type));
+ YACA_ASSERT_MSG(type == expected_type,
+ "Expected key type: " << expected_type << " got: " << type);
+ }
}
void key_gen_invalid_param(yaca_key_type_e key_type,
key_gen_test(YACA_KEY_TYPE_DSA_PRIV, 1088);
}
-// ECDSA not yet implemented
-#if 0
-RUNNER_TEST(T4130_yaca_key_generate_ecdsa, YacaTest)
+RUNNER_TEST(T4130_yaca_key_generate_dh, YacaTest)
+{
+ key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_GENERATOR_2 | 333);
+ key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_GENERATOR_5 | 1024);
+ key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_1024_160);
+ key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_224);
+ key_gen_test(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
+}
+
+RUNNER_TEST(T4140_yaca_key_generate_ec, YacaTest)
{
- RUNNER_IGNORED_MSG("ECDSA is not supported yet");
- key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_CURVE_P192);
- key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_CURVE_P256);
- key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_CURVE_P384);
+ // This curve doesn't work on fedora:
+ //key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME192V1);
+ key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1);
+ key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP256K1);
+ key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1);
+ key_gen_test(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP521R1);
}
-#endif
RUNNER_TEST(T4200_yaca_key_get_type_invalid_param, YacaTest)
{