YACA: invalid param tests for yaca_key_derive_dh/_kdf 52/82752/5
authorDariusz Michaluk <d.michaluk@samsung.com>
Fri, 5 Aug 2016 12:35:01 +0000 (14:35 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 10 Aug 2016 15:01:37 +0000 (08:01 -0700)
Change-Id: I89787aad7caf11403ee2bf6594dd162567bd33d8

src/yaca/yaca-test-key.cpp

index b87deac..fa32287 100644 (file)
@@ -230,18 +230,6 @@ RUNNER_TEST(T4006_yaca_key_free)
 {
 }
 
-RUNNER_TEST(T4007_yaca_key_derive_dh)
-{
-}
-
-RUNNER_TEST(T4008_yaca_key_derive_kea)
-{
-}
-
-RUNNER_TEST(T4009_yaca_key_derive_pbkdf2)
-{
-}
-
 RUNNER_TEST(T4010_yaca_key_invalid_param, YacaTest)
 {
     yaca_key_h out = YACA_KEY_NULL;
@@ -633,6 +621,99 @@ RUNNER_TEST(T4230_yaca_key_import_invalid_param, YacaTest)
                                        key_rsa_pub_data.get(), key_rsa_pub_data_len, &out));
 }
 
+RUNNER_TEST(T4233_yaca_key_derive_dh_invalid_param, YacaTest)
+{
+    char *secret;
+    size_t secret_len;
+
+    KeyPtr key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
+    KeyPtr key_dh_pub = extract_public_key(key_dh_priv);
+
+    KeyPtr key_dh_priv_2048_224 = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_224);
+    KeyPtr key_dh_pub_2048_224 = extract_public_key(key_dh_priv_2048_224);
+
+    KeyPtr key_ecdh_priv = generate_key(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP521R1);
+    KeyPtr key_ecdh_pub = extract_public_key(key_ecdh_priv);
+
+    KeyPtr key_ecdh_priv_256V1 = generate_key(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_PRIME256V1);
+    KeyPtr key_ecdh_pub_256V1 = extract_public_key(key_ecdh_priv_256V1);
+
+    KeyPtr key_rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
+    KeyPtr key_rsa_pub = extract_public_key(key_rsa_priv);
+
+    KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(null_key().get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_pub.get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_pub.get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_pub.get(), key_dh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_sym.get(), key_dh_pub.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(null_key().get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_pub.get(), key_ecdh_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_sym.get(), key_ecdh_pub.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), null_key().get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_ecdh_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_rsa_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_sym.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), null_key().get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_dh_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_rsa_priv.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_sym.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_rsa_priv.get(), key_rsa_pub.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub.get(), nullptr, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_priv.get(), nullptr, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub.get(), &secret, nullptr));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_pub.get(), &secret, nullptr));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv.get(), key_dh_pub_2048_224.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_dh_priv_2048_224.get(), key_dh_pub.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv.get(), key_ecdh_pub_256V1.get(), &secret, &secret_len));
+    YACA_INVALID_PARAM(yaca_key_derive_dh(key_ecdh_priv_256V1.get(), key_ecdh_pub.get(), &secret, &secret_len));
+}
+
+RUNNER_TEST(T4236_yaca_key_derive_kdf_invalid_param, YacaTest)
+{
+    yaca_kdf_e kdf = YACA_KDF_X942;
+    yaca_digest_algorithm_e digest = YACA_DIGEST_SHA512;
+    char *secret;
+    size_t secret_len;
+    char *info = NULL;
+    size_t info_len = 0;
+    char *key_material;
+
+    KeyPtr key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
+    KeyPtr peer_key_dh_priv = generate_key(YACA_KEY_TYPE_DH_PRIV, YACA_KEY_LENGTH_DH_RFC_2048_256);
+    KeyPtr peer_key_dh_pub = extract_public_key(peer_key_dh_priv);
+
+    YACA_SUCCESS(yaca_key_derive_dh(key_dh_priv.get(), peer_key_dh_pub.get(), &secret, &secret_len));
+
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(static_cast<yaca_kdf_e>(-1),
+                                           digest, secret, secret_len, info, info_len, 512, &key_material));
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, static_cast<yaca_digest_algorithm_e>(-1),
+                                           secret, secret_len, info, info_len, 512, &key_material));
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, nullptr, secret_len, info, info_len, 512, &key_material));
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, 0, info, info_len, 512, &key_material));
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, secret_len, info, info_len, 0, &key_material));
+    YACA_INVALID_PARAM(yaca_key_derive_kdf(kdf, digest, secret, secret_len, info, info_len, 512, nullptr));
+}
+
 RUNNER_TEST(T4240_yaca_key_derive_pbkdf2_invalid_param, YacaTest)
 {
     yaca_key_h key;