YACA: Tests for digest simple API 23/75823/8
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 21 Jun 2016 13:55:34 +0000 (15:55 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 23 Jun 2016 12:17:34 +0000 (14:17 +0200)
Change-Id: I83936cc9458dedc9c9c8626e441f5b0e18e94291

src/yaca/yaca-test-simple.cpp

index 2a29932..83d6b73 100644 (file)
  * @author Dariusz Michaluk (d.michaluk@samsumg.com)
  */
 
+#include <yaca_simple.h>
+
 #include "dpl/test/test_runner.h"
+#include "yaca-test-common.h"
+#include "yaca-test-vector.h"
 
-#include <yaca_simple.h>
+namespace {
+
+void check_test_vector(yaca_digest_algorithm_e algo,
+                       size_t repeats,
+                       const Buffer& single_input,
+                       const Buffer& expected)
+{
+    /* concatenate input if needed */
+    Buffer input(single_input);
+    for (size_t i = 1; i < repeats; i++)
+        input.insert(input.end(), single_input.begin(), single_input.end());
+
+    char* digest;
+    size_t digest_len;
+    YACA_SUCCESS(yaca_simple_calculate_digest(algo,
+                                              input.data(),
+                                              input.size(),
+                                              &digest,
+                                              &digest_len));
+    RUNNER_ASSERT_MSG(digest != NULL, "NULL digest calculated");
+
+    auto digest_ptr = wrap_ptr(digest);
+
+    YACA_ASSERT_MSG(digest_len == expected.size(),
+                    "Digest calculated for \""  <<
+                    truncate_str(std::string(input.data(), input.size()), 16)
+                    << "\" with " << digest2str(algo) << " is " <<
+                    digest_len * 8 <<" bits long. Expected " <<
+                    expected.size() * 8 << " bits");
+
+    int ret = yaca_memcmp(digest_ptr.get(), expected.data(), digest_len);
+    YACA_ASSERT_MSG(YACA_ERROR_NONE == ret,
+                    "Digest calculated for \"" <<
+                    truncate_str(std::string(input.data(), input.size()), 16)
+                    << "\" with " << digest2str(algo) <<
+                    " is different than expected");
+}
+
+} // anonymous namespace
 
 
 RUNNER_TEST_GROUP_INIT(T7000_YACA_SIMPLE);
 
-RUNNER_TEST(T7001_yaca_digest_calc)
+RUNNER_TEST(T7010_yaca_simple_calculate_digest_invalid_param, YacaTest)
+{
+    char* digest;
+    size_t digest_len;
+    Buffer data = random_buffer(42);
+
+    YACA_INVALID_PARAM(yaca_simple_calculate_digest(static_cast<yaca_digest_algorithm_e>(-1),
+                                                    data.data(),
+                                                    data.size(),
+                                                    &digest,
+                                                    &digest_len));
+    YACA_INVALID_PARAM(yaca_simple_calculate_digest(YACA_DIGEST_MD5,
+                                                    nullptr,
+                                                    data.size(),
+                                                    &digest,
+                                                    &digest_len));
+    YACA_INVALID_PARAM(yaca_simple_calculate_digest(YACA_DIGEST_MD5,
+                                                    data.data(),
+                                                    0,
+                                                    &digest,
+                                                    &digest_len));
+    YACA_INVALID_PARAM(yaca_simple_calculate_digest(YACA_DIGEST_MD5,
+                                                    data.data(),
+                                                    data.size(),
+                                                    nullptr,
+                                                    &digest_len));
+    YACA_INVALID_PARAM(yaca_simple_calculate_digest(YACA_DIGEST_MD5,
+                                                    data.data(),
+                                                    data.size(),
+                                                    &digest,
+                                                    nullptr));
+}
+
+RUNNER_TEST(T7020_yaca_simple_calculate_digest_ascii_vectors, YacaTest)
+{
+    auto tvv = loadTestVector("digest_ascii.txt");
+
+    for (const auto& tv : tvv) {
+        yaca_digest_algorithm_e algo;
+        size_t repeats;
+        std::string input;
+        Buffer expected;
+
+        tv.get("algo", algo);
+        tv.get("repeats", repeats);
+        tv.get("input", input);
+        tv.get("output", expected);
+
+        check_test_vector(algo, repeats, Buffer(input.begin(), input.end()), expected);
+    }
+}
+
+RUNNER_TEST(T7030_yaca_simple_calculate_digest_binary_vectors, YacaTest)
 {
+    auto tvv = loadTestVector("digest_binary.txt");
+
+    for (const auto& tv : tvv) {
+        yaca_digest_algorithm_e algo;
+        size_t repeats;
+        Buffer input;
+        Buffer expected;
+
+        tv.get("algo", algo);
+        tv.get("repeats", repeats);
+        tv.get("input", input);
+        tv.get("output", expected);
+
+        check_test_vector(algo, repeats, input, expected);
+    }
 }
 
 RUNNER_TEST(T7002_yaca_encrypt)