From ee43a0c1fd4715b51cb77b0259f9193e09dbcdc8 Mon Sep 17 00:00:00 2001 From: Lukasz Pawelczyk Date: Thu, 16 Jun 2016 14:30:08 +0200 Subject: [PATCH] YACA: Base signature tests, without the actual sign/verify operations Change-Id: Idfc60b0eb2496f829c2582bb5c8e3a4329498f0f --- src/yaca/yaca-test-sign.cpp | 130 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 6 deletions(-) diff --git a/src/yaca/yaca-test-sign.cpp b/src/yaca/yaca-test-sign.cpp index af4de1f..68b9507 100644 --- a/src/yaca/yaca-test-sign.cpp +++ b/src/yaca/yaca-test-sign.cpp @@ -24,30 +24,148 @@ #include "dpl/test/test_runner.h" #include +#include +#include "yaca-test-common.h" +#include "lorem.h" + + +namespace { + +void sign_length_test(yaca_digest_algorithm_e algo, + const KeyPtr &key) +{ + CtxPtr ctx = sign_init(algo, key); + size_t output_len; + size_t key_bit_len; + + YACA_SUCCESS(yaca_key_get_bit_length(key.get(), &key_bit_len)); + + YACA_SUCCESS(yaca_context_get_output_length(ctx.get(), 0, &output_len)); + + YACA_ASSERT_MSG(output_len * 8 == key_bit_len, + "Sign " << digest2str(algo) << " produces " << output_len * 8 << + " bit signature. Expected " << key_bit_len << " bits."); +} + +} // anonymous namespace RUNNER_TEST_GROUP_INIT(T6000_YACA_SIGN); -RUNNER_TEST(T6001_yaca_sign_init) +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); + 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(&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, sym.get())); +} + +RUNNER_TEST(T6020_yaca_sign_update_invalid_param, YacaTest) { + KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); + CtxPtr ctx = sign_init(YACA_DIGEST_MD5, prv); + CtxPtr ctx_bad = digest_init(YACA_DIGEST_MD5); + + YACA_INVALID_PARAM(yaca_sign_update(YACA_CONTEXT_NULL, lorem16, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_sign_update(ctx_bad.get(), lorem16, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), NULL, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), lorem16, 0)); } -RUNNER_TEST(T6002_yaca_sign_update) +RUNNER_TEST(T6030_yaca_sign_final_invalid_param, YacaTest) { + KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); + CtxPtr ctx = sign_init(YACA_DIGEST_MD5, prv); + size_t sign_len = get_output_length(ctx); + BufPtr sign = create_yaca_buffer(sign_len); + + YACA_INVALID_PARAM(yaca_sign_finalize(YACA_CONTEXT_NULL, sign.get(), &sign_len)); + YACA_INVALID_PARAM(yaca_sign_finalize(ctx.get(), nullptr, &sign_len)); + YACA_INVALID_PARAM(yaca_sign_finalize(ctx.get(), sign.get(), nullptr)); } -RUNNER_TEST(T6003_yaca_sign_final) +RUNNER_TEST(T6040_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); + 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(&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, sym.get())); } -RUNNER_TEST(T6004_yaca_verify_init) +RUNNER_TEST(T6050_yaca_verify_update_invalid_param) { + KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); + KeyPtr pub = extract_public_key(prv); + CtxPtr ctx = verify_init(YACA_DIGEST_MD5, pub); + + YACA_INVALID_PARAM(yaca_sign_update(YACA_CONTEXT_NULL, lorem16, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), NULL, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), lorem16, 0)); } -RUNNER_TEST(T6005_yaca_verify_update) +RUNNER_TEST(T6060_yaca_verify_final_invalid_param) { + KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); + KeyPtr pub = extract_public_key(prv); + CtxPtr ctx = verify_init(YACA_DIGEST_MD5, pub); + + YACA_INVALID_PARAM(yaca_verify_finalize(YACA_CONTEXT_NULL, lorem16, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_verify_finalize(ctx.get(), nullptr, LOREM16_SIZE)); + YACA_INVALID_PARAM(yaca_verify_finalize(ctx.get(), lorem16, 0)); } -RUNNER_TEST(T6006_yaca_verify_final) +RUNNER_TEST(T6070_yaca_sign_get_output_length_invalid_param) { + KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT); + KeyPtr pub = extract_public_key(prv); + CtxPtr ctx = sign_init(YACA_DIGEST_MD5, prv); + CtxPtr ctx_vrf = verify_init(YACA_DIGEST_MD5, pub); + size_t output_len; + + YACA_INVALID_PARAM(yaca_context_get_output_length(ctx_vrf.get(), 0, &output_len)); + YACA_INVALID_PARAM(yaca_context_get_output_length(ctx.get(), 1, &output_len)); + YACA_INVALID_PARAM(yaca_context_get_output_length(ctx.get(), 0, NULL)); +} + +RUNNER_TEST(T6080_yaca_sign_get_output_length) +{ + const std::vector digests = { + YACA_DIGEST_MD5, + YACA_DIGEST_SHA1, + YACA_DIGEST_SHA224, + YACA_DIGEST_SHA256, + YACA_DIGEST_SHA384, + YACA_DIGEST_SHA512 + }; + + const std::vector lengths = { + YACA_KEY_LENGTH_256BIT, + YACA_KEY_LENGTH_512BIT, + YACA_KEY_LENGTH_1024BIT, + YACA_KEY_LENGTH_2048BIT, + YACA_KEY_LENGTH_3072BIT, + YACA_KEY_LENGTH_4096BIT + }; + + std::vector keys; + + /* pre-generate keys to shorten the test execution time */ + for (auto &l: lengths) + keys.push_back(generate_key(YACA_KEY_TYPE_RSA_PRIV, l)); + + for (auto &d: digests) + for (const auto &k: keys) + sign_length_test(d, k); } -- 2.7.4