namespace {
+bool is_key_private(yaca_key_type_e key_type)
+{
+ switch (key_type) {
+ case YACA_KEY_TYPE_RSA_PRIV:
+ case YACA_KEY_TYPE_DSA_PRIV:
+ case YACA_KEY_TYPE_DH_PRIV:
+ case YACA_KEY_TYPE_EC_PRIV:
+ return true;
+ default:
+ return false;
+ }
+}
+
void key_gen_test(yaca_key_type_e expected_type, size_t expected_bits)
{
size_t bits;
assert_keys_equal(key, key_imp);
/* password test for asymmetric DEFAULT PEM */
- if (key_format == YACA_KEY_FORMAT_DEFAULT &&
- (key_type == YACA_KEY_TYPE_RSA_PRIV || key_type == YACA_KEY_TYPE_DSA_PRIV) &&
+ if (key_format == YACA_KEY_FORMAT_DEFAULT && is_key_private(key_type) &&
key_file_format == YACA_KEY_FILE_FORMAT_PEM)
import_key_wrong_password(key_type, password, key_data.get(), key_data_len);
/* password test for asymmetric PKCS8 PEM and DER */
- if (key_format == YACA_KEY_FORMAT_PKCS8 &&
- (key_type == YACA_KEY_TYPE_RSA_PRIV || key_type == YACA_KEY_TYPE_DSA_PRIV))
+ if (key_format == YACA_KEY_FORMAT_PKCS8 && is_key_private(key_type))
import_key_wrong_password(key_type, password, key_data.get(), key_data_len);
- /* public key test for asymmetric DEFAULT PEM and DER */
- if (key_format == YACA_KEY_FORMAT_DEFAULT &&
- (key_type == YACA_KEY_TYPE_RSA_PRIV || key_type == YACA_KEY_TYPE_DSA_PRIV)) {
- KeyPtr key_pub = extract_public_key(key);
- yaca_key_type_e key_pub_type = static_cast<yaca_key_type_e>(-1); // fix clang
+ /* public key and params test for asymmetric DEFAULT PEM and DER */
+ if (key_format == YACA_KEY_FORMAT_DEFAULT && is_key_private(key_type)) {
+ yaca_key_type_e key_pub_type = static_cast<yaca_key_type_e>(-1);
+ yaca_key_type_e key_params_type = static_cast<yaca_key_type_e>(-1);
switch (key_type) {
case YACA_KEY_TYPE_RSA_PRIV:
break;
case YACA_KEY_TYPE_DSA_PRIV:
key_pub_type = YACA_KEY_TYPE_DSA_PUB;
+ key_params_type = YACA_KEY_TYPE_DSA_PARAMS;
+ break;
+ case YACA_KEY_TYPE_DH_PRIV:
+ key_pub_type = YACA_KEY_TYPE_DH_PUB;
+ key_params_type = YACA_KEY_TYPE_DH_PARAMS;
+ break;
+ case YACA_KEY_TYPE_EC_PRIV:
+ key_pub_type = YACA_KEY_TYPE_EC_PUB;
+ key_params_type = YACA_KEY_TYPE_EC_PARAMS;
break;
default:
RUNNER_FAIL_MSG("Wrong key_type passed");
}
- size_t key_pub_data_len;
- ChrPtr key_pub_data = export_key(key_pub, key_format, key_file_format, nullptr, &key_pub_data_len);
- KeyPtr key_pub_imp = import_key(key_pub_type, nullptr, key_pub_data.get(), key_pub_data_len);
+ if (key_pub_type != static_cast<yaca_key_type_e>(-1)) {
+ KeyPtr key_pub = extract_public_key(key);
+ size_t key_pub_data_len;
+ ChrPtr key_pub_data = export_key(key_pub, key_format, key_file_format, nullptr, &key_pub_data_len);
+ KeyPtr key_pub_imp = import_key(key_pub_type, nullptr, key_pub_data.get(), key_pub_data_len);
- assert_keys_equal(key_pub, key_pub_imp);
+ assert_keys_equal(key_pub, key_pub_imp);
+ }
+
+ if (key_params_type != static_cast<yaca_key_type_e>(-1)) {
+ KeyPtr key_params = extract_parameters(key);
+ size_t key_params_data_len;
+ ChrPtr key_params_data = export_key(key_params, key_format, key_file_format, nullptr, &key_params_data_len);
+ KeyPtr key_params_imp = import_key(key_params_type, nullptr, key_params_data.get(), key_params_data_len);
+
+ assert_keys_equal(key_params, key_params_imp);
+ }
}
}
}