From: Dariusz Michaluk Date: Tue, 20 Sep 2016 11:28:04 +0000 (+0200) Subject: YACA: Add more yaca sign API tests. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f93caf622e025179360f7d291133585c8bbec9aa;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git YACA: Add more yaca sign API tests. Change-Id: I9e2e2b1e354814000c5e3b5ee5ef877f10c83e8c --- diff --git a/src/yaca/test-vectors/sign_param_comb.txt b/src/yaca/test-vectors/sign_param_comb.txt new file mode 100644 index 00000000..3dda1bb5 --- /dev/null +++ b/src/yaca/test-vectors/sign_param_comb.txt @@ -0,0 +1,415 @@ +# YACA_KEY_LENGTH_EC_PRIME192V1 - 805306560 +# YACA_KEY_LENGTH_EC_PRIME256V1 - 805306624 +# YACA_KEY_LENGTH_EC_SECP256K1 - 824180992 +# YACA_KEY_LENGTH_EC_SECP384R1 - 823132544 +# YACA_KEY_LENGTH_EC_SECP521R1 - 823132681 + +key_type=EC_PRIV +key_len_bits=805306560 +padding= +algo=SHA1 + +key_type=EC_PRIV +key_len_bits=805306560 +padding= +algo=SHA224 + +key_type=EC_PRIV +key_len_bits=805306560 +padding= +algo=SHA256 + +key_type=EC_PRIV +key_len_bits=805306560 +padding= +algo=SHA384 + +key_type=EC_PRIV +key_len_bits=805306560 +padding= +algo=SHA512 + +key_type=EC_PRIV +key_len_bits=805306624 +padding= +algo=SHA1 + +key_type=EC_PRIV +key_len_bits=805306624 +padding= +algo=SHA224 + +key_type=EC_PRIV +key_len_bits=805306624 +padding= +algo=SHA256 + +key_type=EC_PRIV +key_len_bits=805306624 +padding= +algo=SHA384 + +key_type=EC_PRIV +key_len_bits=805306624 +padding= +algo=SHA512 + +key_type=EC_PRIV +key_len_bits=824180992 +padding= +algo=SHA1 + +key_type=EC_PRIV +key_len_bits=824180992 +padding= +algo=SHA224 + +key_type=EC_PRIV +key_len_bits=824180992 +padding= +algo=SHA256 + +key_type=EC_PRIV +key_len_bits=824180992 +padding= +algo=SHA384 + +key_type=EC_PRIV +key_len_bits=824180992 +padding= +algo=SHA512 + +key_type=EC_PRIV +key_len_bits=823132544 +padding= +algo=SHA1 + +key_type=EC_PRIV +key_len_bits=823132544 +padding= +algo=SHA224 + +key_type=EC_PRIV +key_len_bits=823132544 +padding= +algo=SHA256 + +key_type=EC_PRIV +key_len_bits=823132544 +padding= +algo=SHA384 + +key_type=EC_PRIV +key_len_bits=823132544 +padding= +algo=SHA512 + +key_type=EC_PRIV +key_len_bits=823132681 +padding= +algo=SHA1 + +key_type=EC_PRIV +key_len_bits=823132681 +padding= +algo=SHA224 + +key_type=EC_PRIV +key_len_bits=823132681 +padding= +algo=SHA256 + +key_type=EC_PRIV +key_len_bits=823132681 +padding= +algo=SHA384 + +key_type=EC_PRIV +key_len_bits=823132681 +padding= +algo=SHA512 + +key_type=DSA_PRIV +key_len_bits=512 +padding= +algo=SHA1 + +key_type=DSA_PRIV +key_len_bits=512 +padding= +algo=SHA224 + +key_type=DSA_PRIV +key_len_bits=512 +padding= +algo=SHA256 + +key_type=DSA_PRIV +key_len_bits=512 +padding= +algo=SHA384 + +key_type=DSA_PRIV +key_len_bits=512 +padding= +algo=SHA512 + +key_type=DSA_PRIV +key_len_bits=1024 +padding= +algo=SHA1 + +key_type=DSA_PRIV +key_len_bits=1024 +padding= +algo=SHA224 + +key_type=DSA_PRIV +key_len_bits=1024 +padding= +algo=SHA256 + +key_type=DSA_PRIV +key_len_bits=1024 +padding= +algo=SHA384 + +key_type=DSA_PRIV +key_len_bits=1024 +padding= +algo=SHA512 + +key_type=DSA_PRIV +key_len_bits=2048 +padding= +algo=SHA1 + +key_type=DSA_PRIV +key_len_bits=2048 +padding= +algo=SHA224 + +key_type=DSA_PRIV +key_len_bits=2048 +padding= +algo=SHA256 + +key_type=DSA_PRIV +key_len_bits=2048 +padding= +algo=SHA384 + +key_type=DSA_PRIV +key_len_bits=2048 +padding= +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1 +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1 +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1_PSS +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1_PSS +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1_PSS +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=512 +padding=PKCS1_PSS +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=512 +padding=X931 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=512 +padding=X931 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1 +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=PKCS1_PSS +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=X931 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=X931 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=X931 +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=1024 +padding=X931 +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1 +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=MD5 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=SHA224 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=PKCS1_PSS +algo=SHA512 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=X931 +algo=SHA1 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=X931 +algo=SHA256 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=X931 +algo=SHA384 + +key_type=RSA_PRIV +key_len_bits=2048 +padding=X931 +algo=SHA512 diff --git a/src/yaca/yaca-test-sign.cpp b/src/yaca/yaca-test-sign.cpp index a5bea1e9..77ecf323 100644 --- a/src/yaca/yaca-test-sign.cpp +++ b/src/yaca/yaca-test-sign.cpp @@ -58,15 +58,21 @@ RUNNER_TEST_GROUP_INIT(T6000_YACA_SIGN); RUNNER_TEST(T6010_yaca_sign_init_invalid_param, YacaTest) { yaca_context_h ctx = YACA_CONTEXT_NULL; - KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); - KeyPtr pub = extract_public_key(prv); + KeyPair rsa(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT); + KeyPair dsa(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT); + KeyPair ec(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1); KeyPtr sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT); - YACA_INVALID_PARAM(yaca_sign_initialize(nullptr, YACA_DIGEST_MD5, prv.get())); - YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, static_cast(-1), prv.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(nullptr, YACA_DIGEST_MD5, rsa.prv.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, static_cast(-1), + rsa.prv.get())); YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, YACA_KEY_NULL)); - YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, pub.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, rsa.pub.get())); YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, sym.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_SHA384, rsa.prv.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_SHA512, rsa.prv.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, dsa.prv.get())); + YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, ec.prv.get())); } RUNNER_TEST(T6020_yaca_sign_hmac_init_invalid_param, YacaTest) @@ -124,15 +130,21 @@ RUNNER_TEST(T6050_yaca_sign_final_invalid_param, YacaTest) RUNNER_TEST(T6060_yaca_verify_init_invalid_param) { yaca_context_h ctx = YACA_CONTEXT_NULL; - KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); - KeyPtr pub = extract_public_key(prv); + KeyPair rsa(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT); + KeyPair dsa(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT); + KeyPair ec(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1); KeyPtr sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT); - YACA_INVALID_PARAM(yaca_verify_initialize(nullptr, YACA_DIGEST_MD5, pub.get())); - YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, static_cast(-1), prv.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(nullptr, YACA_DIGEST_MD5, rsa.pub.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, static_cast(-1), + rsa.prv.get())); YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, YACA_KEY_NULL)); - YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, prv.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, rsa.prv.get())); YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, sym.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_SHA384, rsa.pub.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_SHA512, rsa.pub.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, dsa.pub.get())); + YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, ec.pub.get())); } RUNNER_TEST(T6070_yaca_verify_update_invalid_param) @@ -178,12 +190,20 @@ RUNNER_TEST(T6095_yaca_sign_verify_call_order_invalid_param) CtxPtr ctx_vrf = verify_init(YACA_DIGEST_SHA1, key_pub); size_t output_len = get_output_length(ctx_sgn); Buffer output(output_len); + yaca_padding_e padding = YACA_PADDING_PKCS1_PSS; YACA_SUCCESS(yaca_sign_finalize(ctx_sgn.get(), output.data(), &output_len)); YACA_SUCCESS(yaca_verify_finalize(ctx_vrf.get(), output.data(), output_len)); YACA_INVALID_PARAM(yaca_sign_update(ctx_sgn.get(), output.data(), output_len)); + YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING, + static_cast(&padding), + sizeof(yaca_padding_e))); + YACA_INVALID_PARAM(yaca_verify_update(ctx_vrf.get(), output.data(), output_len)); + YACA_INVALID_PARAM(yaca_context_set_property(ctx_vrf.get(), YACA_PROPERTY_PADDING, + static_cast(&padding), + sizeof(yaca_padding_e))); } RUNNER_TEST(T6100_yaca_sign_set_property_invalid_param) @@ -221,27 +241,23 @@ RUNNER_TEST(T6100_yaca_sign_set_property_invalid_param) 0)); } - YACA_INVALID_PARAM(yaca_context_set_property(ctx_dsa.get(), YACA_PROPERTY_PADDING, + padding = YACA_PADDING_X931; + ctx_sgn = sign_init(YACA_DIGEST_MD5, key); + YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING, static_cast(&padding), sizeof(yaca_padding_e))); - YACA_INVALID_PARAM(yaca_context_set_property(ctx_hmac.get(), YACA_PROPERTY_PADDING, + ctx_sgn = sign_init(YACA_DIGEST_SHA224, key); + YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING, static_cast(&padding), sizeof(yaca_padding_e))); - YACA_INVALID_PARAM(yaca_context_set_property(ctx_digest.get(), YACA_PROPERTY_PADDING, + + YACA_INVALID_PARAM(yaca_context_set_property(ctx_dsa.get(), YACA_PROPERTY_PADDING, static_cast(&padding), sizeof(yaca_padding_e))); - - ctx_sgn = sign_init(YACA_DIGEST_SHA256, key); - size_t output_len = get_output_length(ctx_sgn); - Buffer output(output_len); - YACA_SUCCESS(yaca_sign_finalize(ctx_sgn.get(), output.data(), &output_len)); - YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING, + YACA_INVALID_PARAM(yaca_context_set_property(ctx_hmac.get(), YACA_PROPERTY_PADDING, static_cast(&padding), sizeof(yaca_padding_e))); - - ctx_vrf = verify_init(YACA_DIGEST_SHA256, key_pub); - YACA_SUCCESS(yaca_verify_finalize(ctx_vrf.get(), output.data(), output_len)); - YACA_INVALID_PARAM(yaca_context_set_property(ctx_vrf.get(), YACA_PROPERTY_PADDING, + YACA_INVALID_PARAM(yaca_context_set_property(ctx_digest.get(), YACA_PROPERTY_PADDING, static_cast(&padding), sizeof(yaca_padding_e))); } @@ -258,7 +274,6 @@ RUNNER_TEST(T6120_yaca_sign_get_output_length) }; const std::vector lengths = { - YACA_KEY_LENGTH_512BIT, YACA_KEY_LENGTH_1024BIT, YACA_KEY_LENGTH_2048BIT, YACA_KEY_LENGTH_3072BIT, @@ -586,3 +601,32 @@ RUNNER_TEST(T6180_yaca_sign_verify_padding_test_vectors, YacaTest) } } } + +RUNNER_TEST(T6190_yaca_sign_param_combinations, YacaTest) +{ + auto tvv = loadTestVector("sign_param_comb.txt"); + + for (const auto& tv : tvv) { + yaca_key_type_e key_type; + size_t key_len; + yaca_padding_e padding; + yaca_digest_algorithm_e algo; + + tv.get("key_type", key_type); + tv.get("key_len_bits", key_len); + if (key_type == YACA_KEY_TYPE_RSA_PRIV) + tv.get("padding", padding); + tv.get("algo", algo); + + KeyPtr key = generate_key(key_type, key_len); + CtxPtr ctx = sign_init(algo, key); + + if (key_type == YACA_KEY_TYPE_RSA_PRIV) + YACA_SUCCESS(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING, + (void*)&padding, sizeof(yaca_padding_e))); + + size_t output_len = get_output_length(ctx); + Buffer output(output_len); + YACA_SUCCESS(yaca_sign_finalize(ctx.get(), output.data(), &output_len)); + } +} diff --git a/src/yaca/yaca-test-vector.cpp b/src/yaca/yaca-test-vector.cpp index b145a67c..49b8b510 100644 --- a/src/yaca/yaca-test-vector.cpp +++ b/src/yaca/yaca-test-vector.cpp @@ -120,6 +120,16 @@ std::unordered_map str2kdf = { std::make_pair("X962", YACA_KDF_X962) }; +std::unordered_map str2padding = { + std::make_pair("NONE", YACA_PADDING_NONE), + std::make_pair("X931", YACA_PADDING_X931), + std::make_pair("PKCS1", YACA_PADDING_PKCS1), + std::make_pair("PKCS1_PSS", YACA_PADDING_PKCS1_PSS), + std::make_pair("PKCS1_OAEP", YACA_PADDING_PKCS1_OAEP), + std::make_pair("PKCS1_SSLV23", YACA_PADDING_PKCS1_SSLV23), + std::make_pair("PKCS7", YACA_PADDING_PKCS7) +}; + } // anonymous namespace void TestVector::add(const std::string &key, const std::string &val) @@ -174,6 +184,11 @@ void TestVector::get(const std::string &key, yaca_kdf_e &val) const val = str2kdf.at(value(key)); } +void TestVector::get(const std::string &key, yaca_padding_e &val) const +{ + val = str2padding.at(value(key)); +} + void TestVector::reset() { m_data.clear(); diff --git a/src/yaca/yaca-test-vector.h b/src/yaca/yaca-test-vector.h index 1e34481b..06ee01b4 100644 --- a/src/yaca/yaca-test-vector.h +++ b/src/yaca/yaca-test-vector.h @@ -57,6 +57,8 @@ public: void get(const std::string &key, yaca_block_cipher_mode_e &val) const; /* special case for kdf */ void get(const std::string &key, yaca_kdf_e &val) const; + /* special case for padding */ + void get(const std::string &key, yaca_padding_e &val) const; void reset();