YACA: Base signature tests, without the actual sign/verify operations 93/75093/6
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Thu, 16 Jun 2016 12:30:08 +0000 (14:30 +0200)
committerLukasz Pawelczyk <l.pawelczyk@samsung.com>
Fri, 17 Jun 2016 11:24:15 +0000 (13:24 +0200)
Change-Id: Idfc60b0eb2496f829c2582bb5c8e3a4329498f0f

src/yaca/yaca-test-sign.cpp

index af4de1f..68b9507 100644 (file)
 #include "dpl/test/test_runner.h"
 
 #include <yaca_sign.h>
+#include <yaca_types.h>
 
+#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<yaca_digest_algorithm_e>(-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<yaca_digest_algorithm_e>(-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<yaca_digest_algorithm_e> digests = {
+        YACA_DIGEST_MD5,
+        YACA_DIGEST_SHA1,
+        YACA_DIGEST_SHA224,
+        YACA_DIGEST_SHA256,
+        YACA_DIGEST_SHA384,
+        YACA_DIGEST_SHA512
+    };
+
+    const std::vector<yaca_key_bit_length_e> 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<KeyPtr> 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);
 }