YACA: key generation tests for EC, DH and also related to parameters 28/81328/3
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Mon, 25 Jul 2016 12:40:54 +0000 (14:40 +0200)
committerLukasz Pawelczyk <l.pawelczyk@samsung.com>
Thu, 4 Aug 2016 07:39:05 +0000 (09:39 +0200)
Change-Id: If09542527ce793c87380cc74e8f2d9c6d89a6404

src/yaca/yaca-test-common.cpp
src/yaca/yaca-test-common.h
src/yaca/yaca-test-key.cpp

index 3f5aa3a9f97b479430ce5b45b03fa14d09bdacda..2fb89d8fa9117eccedc6ed392b8779e8552d885e 100644 (file)
@@ -94,6 +94,14 @@ KeyPtr generate_key(yaca_key_type_e type, size_t bit_len)
     return wrap_ptr(key);
 }
 
+KeyPtr generate_key_from_parameters(const KeyPtr &params)
+{
+    yaca_key_h key;
+    YACA_SUCCESS(yaca_key_generate_from_parameters(params.get(), &key));
+    YACA_ASSERT_MSG(key != YACA_KEY_NULL, "NULL key generated");
+    return wrap_ptr(key);
+}
+
 KeyPtr extract_public_key(const KeyPtr &key_prv)
 {
     yaca_key_h key_pub;
index eabe560f358edc58d031f32aa07f626fa725d6c1..447a03b383ebd747b615ba0e9627efa501f53a5f 100644 (file)
@@ -124,6 +124,8 @@ KeyPtr null_key();
 
 KeyPtr generate_key(yaca_key_type_e type, size_t bit_len);
 
+KeyPtr generate_key_from_parameters(const KeyPtr &params);
+
 KeyPtr extract_public_key(const KeyPtr &key_prv);
 
 KeyPtr extract_parameters(const KeyPtr &key);
index 6919a1cb29f37ced8665cb5375873ee118bb8bdb..fc0baada381a36c44f73bb7dd2eef297cbbed503 100644 (file)
@@ -38,16 +38,62 @@ void key_gen_test(yaca_key_type_e expected_type, size_t expected_bits)
 {
     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,
@@ -373,16 +419,24 @@ RUNNER_TEST(T4120_yaca_key_generate_dsa, YacaTest)
     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)
 {