YACA: import/export tests for EC, DH and parameters 56/81356/3
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Mon, 25 Jul 2016 14:19:35 +0000 (16:19 +0200)
committerLukasz Pawelczyk <l.pawelczyk@samsung.com>
Thu, 4 Aug 2016 07:40:16 +0000 (09:40 +0200)
Change-Id: Ie645a41accbbbd521ddb4fcd9337a93279ac0982

src/yaca/test-vectors/key.txt
src/yaca/yaca-test-key.cpp

index 3237ec7..81b0528 100644 (file)
@@ -195,3 +195,135 @@ key_len_bits=1024
 key_format=PKCS8
 key_file_format=DER
 password=123456qwerty
+
+### DH key_len_bits explained:
+# YACA_KEY_LENGTH_DH_RFC_2048_256      - 570427392
+# YACA_KEY_LENGTH_DH_GENERATOR_2 | 333 - 268435789
+
+########################### DH DEFAULT ###########################
+key_type=DH_PRIV
+key_len_bits=268435789
+key_format=DEFAULT
+key_file_format=PEM
+password=
+
+key_type=DH_PRIV
+key_len_bits=570427392
+key_format=DEFAULT
+key_file_format=PEM
+password=
+
+key_type=DH_PRIV
+key_len_bits=268435789
+key_format=DEFAULT
+key_file_format=PEM
+password=123456qwerty
+
+key_type=DH_PRIV
+key_len_bits=570427392
+key_format=DEFAULT
+key_file_format=PEM
+password=123456qwerty
+
+key_type=DH_PRIV
+key_len_bits=268435789
+key_format=DEFAULT
+key_file_format=DER
+password=
+
+key_type=DH_PRIV
+key_len_bits=570427392
+key_format=DEFAULT
+key_file_format=DER
+password=
+
+########################### DH PKCS8 ###########################
+key_type=DH_PRIV
+key_len_bits=268435789
+key_format=PKCS8
+key_file_format=PEM
+password=123456qwerty
+
+key_type=DH_PRIV
+key_len_bits=570427392
+key_format=PKCS8
+key_file_format=PEM
+password=123456qwerty
+
+key_type=DH_PRIV
+key_len_bits=268435789
+key_format=PKCS8
+key_file_format=DER
+password=123456qwerty
+
+key_type=DH_PRIV
+key_len_bits=570427392
+key_format=PKCS8
+key_file_format=DER
+password=123456qwerty
+
+### EC key_len_bits explained:
+# YACA_KEY_LENGTH_EC_PRIME256V1 - 805306624
+# YACA_KEY_LENGTH_EC_SECP521R1  - 823132681
+
+########################### EC DEFAULT ###########################
+key_type=EC_PRIV
+key_len_bits=805306624
+key_format=DEFAULT
+key_file_format=PEM
+password=
+
+key_type=EC_PRIV
+key_len_bits=823132681
+key_format=DEFAULT
+key_file_format=PEM
+password=
+
+key_type=EC_PRIV
+key_len_bits=805306624
+key_format=DEFAULT
+key_file_format=PEM
+password=123456qwerty
+
+key_type=EC_PRIV
+key_len_bits=823132681
+key_format=DEFAULT
+key_file_format=PEM
+password=123456qwerty
+
+key_type=EC_PRIV
+key_len_bits=805306624
+key_format=DEFAULT
+key_file_format=DER
+password=
+
+key_type=EC_PRIV
+key_len_bits=823132681
+key_format=DEFAULT
+key_file_format=DER
+password=
+
+########################### EC PKCS8 ###########################
+key_type=EC_PRIV
+key_len_bits=805306624
+key_format=PKCS8
+key_file_format=PEM
+password=123456qwerty
+
+key_type=EC_PRIV
+key_len_bits=823132681
+key_format=PKCS8
+key_file_format=PEM
+password=123456qwerty
+
+key_type=EC_PRIV
+key_len_bits=805306624
+key_format=PKCS8
+key_file_format=DER
+password=123456qwerty
+
+key_type=EC_PRIV
+key_len_bits=823132681
+key_format=PKCS8
+key_file_format=DER
+password=123456qwerty
index da7bf3a..b87deac 100644 (file)
 
 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;
@@ -666,21 +679,18 @@ RUNNER_TEST(T4250_yaca_key_export_import, YacaTest)
         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:
@@ -688,16 +698,37 @@ RUNNER_TEST(T4250_yaca_key_export_import, YacaTest)
                 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);
+            }
         }
     }
 }