YACA: set_property tests (invalid param and proper operation) 88/78488/5
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Tue, 5 Jul 2016 17:03:54 +0000 (19:03 +0200)
committerLukasz Pawelczyk <l.pawelczyk@samsung.com>
Fri, 8 Jul 2016 10:04:09 +0000 (12:04 +0200)
Change-Id: I408f3f831370ca272601d5eeea632cfc1c4c01c7

src/yaca/yaca-test-sign.cpp

index 7dcf462..8d57408 100644 (file)
@@ -21,6 +21,8 @@
  * @author Dariusz Michaluk (d.michaluk@samsumg.com)
  */
 
+#include <vector>
+
 #include "dpl/test/test_runner.h"
 
 #include <yaca_sign.h>
@@ -103,7 +105,7 @@ RUNNER_TEST(T6040_yaca_sign_update_invalid_param, YacaTest)
 
     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(), nullptr, LOREM16_SIZE));
     YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), lorem16, 0));
 }
 
@@ -140,7 +142,7 @@ RUNNER_TEST(T6070_yaca_verify_update_invalid_param)
     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(), nullptr, LOREM16_SIZE));
     YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), lorem16, 0));
 }
 
@@ -165,10 +167,90 @@ RUNNER_TEST(T6090_yaca_sign_get_output_length_invalid_param)
 
     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));
+    YACA_INVALID_PARAM(yaca_context_get_output_length(ctx.get(), 0, nullptr));
+}
+
+RUNNER_TEST(T6100_yaca_sign_set_property_invalid_param)
+{
+    KeyPtr key = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
+    KeyPtr key_pub = extract_public_key(key);
+    KeyPtr key_dsa = generate_key(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_512BIT);
+    KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
+    CtxPtr ctx_sgn = sign_init(YACA_DIGEST_SHA1, key);
+    CtxPtr ctx_vrf = verify_init(YACA_DIGEST_SHA1, key_pub);
+    CtxPtr ctx_dsa = sign_init(YACA_DIGEST_SHA1, key_dsa);
+    CtxPtr ctx_hmac = hmac_init(YACA_DIGEST_SHA1, key_sym);
+    CtxPtr ctx_digest = digest_init(YACA_DIGEST_SHA1);
+    yaca_padding_e padding = YACA_PADDING_PKCS1;
+    yaca_padding_e padding_wrong = static_cast<yaca_padding_e>(-1);
+
+    std::vector<CtxPtr> contexts;
+    contexts.push_back(std::move(ctx_sgn));
+    contexts.push_back(std::move(ctx_vrf));
+    for (const CtxPtr &ctx: contexts) {
+        YACA_INVALID_PARAM(yaca_context_set_property(ctx.get(), YACA_PROPERTY_GCM_TAG,
+                                                     static_cast<void*>(&padding),
+                                                     sizeof(yaca_padding_e)));
+        YACA_INVALID_PARAM(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                                     nullptr,
+                                                     sizeof(yaca_padding_e)));
+        YACA_INVALID_PARAM(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                                     static_cast<void*>(&padding_wrong),
+                                                     sizeof(yaca_padding_e)));
+        YACA_INVALID_PARAM(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                                     static_cast<void*>(&padding),
+                                                     sizeof(yaca_padding_e) + 1));
+        YACA_INVALID_PARAM(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                                     static_cast<void*>(&padding),
+                                                     0));
+    }
+
+    YACA_INVALID_PARAM(yaca_context_set_property(ctx_dsa.get(), YACA_PROPERTY_PADDING,
+                                                 static_cast<void*>(&padding),
+                                                 sizeof(yaca_padding_e)));
+    YACA_INVALID_PARAM(yaca_context_set_property(ctx_hmac.get(), YACA_PROPERTY_PADDING,
+                                                 static_cast<void*>(&padding),
+                                                 sizeof(yaca_padding_e)));
+    YACA_INVALID_PARAM(yaca_context_set_property(ctx_digest.get(), YACA_PROPERTY_PADDING,
+                                                 static_cast<void*>(&padding),
+                                                 sizeof(yaca_padding_e)));
+
 }
 
-RUNNER_TEST(T6100_yaca_sign_get_output_length)
+RUNNER_TEST(T6110_yaca_sign_get_property_invalid_param)
+{
+    KeyPtr key = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
+    KeyPtr key_pub = extract_public_key(key);
+    KeyPtr key_dsa = generate_key(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_512BIT);
+    KeyPtr key_sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
+    CtxPtr ctx_sgn = sign_init(YACA_DIGEST_SHA1, key);
+    CtxPtr ctx_vrf = verify_init(YACA_DIGEST_SHA1, key_pub);
+    CtxPtr ctx_dsa = sign_init(YACA_DIGEST_SHA1, key_dsa);
+    CtxPtr ctx_hmac = hmac_init(YACA_DIGEST_SHA1, key_sym);
+    CtxPtr ctx_digest = digest_init(YACA_DIGEST_SHA1);
+    yaca_padding_e *padding;
+    size_t padding_len;
+
+    std::vector<CtxPtr> contexts;
+    contexts.push_back(std::move(ctx_sgn));
+    contexts.push_back(std::move(ctx_vrf));
+    for (const CtxPtr &ctx: contexts) {
+        YACA_INVALID_PARAM(yaca_context_get_property(ctx.get(), YACA_PROPERTY_GCM_TAG,
+                                                     (void**)&padding, &padding_len));
+        YACA_INVALID_PARAM(yaca_context_get_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                                     nullptr, &padding_len));
+    }
+
+    YACA_INVALID_PARAM(yaca_context_get_property(ctx_dsa.get(), YACA_PROPERTY_PADDING,
+                                                 (void**)&padding, &padding_len));
+    YACA_INVALID_PARAM(yaca_context_get_property(ctx_hmac.get(), YACA_PROPERTY_PADDING,
+                                                 (void**)&padding, &padding_len));
+    YACA_INVALID_PARAM(yaca_context_get_property(ctx_digest.get(), YACA_PROPERTY_PADDING,
+                                                 (void**)&padding, &padding_len));
+
+}
+
+RUNNER_TEST(T6120_yaca_sign_get_output_length)
 {
     const std::vector<yaca_digest_algorithm_e> digests = {
         YACA_DIGEST_MD5,
@@ -199,7 +281,7 @@ RUNNER_TEST(T6100_yaca_sign_get_output_length)
             sign_length_test(d, k);
 }
 
-RUNNER_TEST(T6110_yaca_sign_test_vectors, YacaTest)
+RUNNER_TEST(T6130_yaca_sign_test_vectors, YacaTest)
 {
     auto tvv = loadTestVector("sign_ascii.txt");
 
@@ -251,7 +333,7 @@ RUNNER_TEST(T6110_yaca_sign_test_vectors, YacaTest)
     }
 }
 
-RUNNER_TEST(T6120_yaca_sign_verify_test_vectors, YacaTest)
+RUNNER_TEST(T6140_yaca_sign_verify_test_vectors, YacaTest)
 {
     auto tvv = loadTestVector("sign_verify_ascii.txt");
 
@@ -317,7 +399,7 @@ RUNNER_TEST(T6120_yaca_sign_verify_test_vectors, YacaTest)
     }
 }
 
-RUNNER_TEST(T6130_yaca_sign_hmac_test_vectors, YacaTest)
+RUNNER_TEST(T6150_yaca_sign_hmac_test_vectors, YacaTest)
 {
     auto tvv = loadTestVector("sign_hmac_ascii.txt");
 
@@ -365,7 +447,7 @@ RUNNER_TEST(T6130_yaca_sign_hmac_test_vectors, YacaTest)
     }
 }
 
-RUNNER_TEST(T6140_yaca_sign_cmac_test_vectors, YacaTest)
+RUNNER_TEST(T6160_yaca_sign_cmac_test_vectors, YacaTest)
 {
     auto tvv = loadTestVector("sign_cmac_ascii.txt");
 
@@ -413,7 +495,38 @@ RUNNER_TEST(T6140_yaca_sign_cmac_test_vectors, YacaTest)
     }
 }
 
-RUNNER_TEST(T6150_yaca_sign_verify_padding_test_vectors, YacaTest)
+RUNNER_TEST(T6170_yaca_sign_get_set_property, YacaTest)
+{
+    KeyPtr key = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+    CtxPtr ctx = sign_init(YACA_DIGEST_SHA1, key);
+    yaca_padding_e *padding_get;
+    size_t padding_len;
+
+    YACA_SUCCESS(yaca_context_get_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                           (void**)&padding_get, &padding_len));
+    YACA_ASSERT_MSG(*padding_get == YACA_PADDING_PKCS1, "The default padding is not PKCS1");
+    YACA_ASSERT_MSG(padding_len == sizeof(yaca_padding_e), "The property length returned is incorrect");
+    yaca_free(padding_get);
+
+    std::vector<yaca_padding_e> paddings = {
+        YACA_PADDING_PKCS1_PSS,
+        YACA_PADDING_X931,
+        YACA_PADDING_PKCS1
+    };
+
+    for (auto padding: paddings) {
+        YACA_SUCCESS(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                               static_cast<void*>(&padding), sizeof(yaca_padding_e)));
+        YACA_SUCCESS(yaca_context_get_property(ctx.get(), YACA_PROPERTY_PADDING,
+                                               (void**)&padding_get, &padding_len));
+        YACA_ASSERT_MSG(*padding_get == padding, "Failed to properly set padding to " <<
+                        padding2str(padding));
+        YACA_ASSERT_MSG(padding_len == sizeof(yaca_padding_e), "The property length returned is incorrect");
+        yaca_free(padding_get);
+    }
+}
+
+RUNNER_TEST(T6180_yaca_sign_verify_padding_test_vectors, YacaTest)
 {
     auto tvv = loadTestVector("sign_verify_ascii.txt");