YACA: Binary input message digest tests 17/75617/9
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Mon, 20 Jun 2016 15:44:27 +0000 (17:44 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 23 Jun 2016 11:10:42 +0000 (13:10 +0200)
Change-Id: I588fe4fbe707e3b7477272eb9f629e55694660bd

src/yaca/test-vectors/digest_binary.txt [new file with mode: 0644]
src/yaca/yaca-test-digest.cpp

diff --git a/src/yaca/test-vectors/digest_binary.txt b/src/yaca/test-vectors/digest_binary.txt
new file mode 100644 (file)
index 0000000..8e4cd7b
--- /dev/null
@@ -0,0 +1,74 @@
+############### SHA1 ###############
+algo=SHA1
+repeats=1
+input=5e
+output=5e6f80a34a9798cafc6a5db96cc57ba4c4db59c2
+
+algo=SHA1
+repeats=1
+input=9a7dfdf1ecead06ed646aa55fe757146
+output=82abff6605dbe1c17def12a394fa22a82b544a35
+
+algo=SHA1
+repeats=1
+input=f78f92141bcd170ae89b4fba15a1d59f3fd84d223c9251bdacbbae61d05ed115a06a7ce117b7beead24421ded9c32592bd57edeae39c39fa1fe8946a84d0cf1f7beead1713e2e0959897347f67c80b0400c209815d6b10a683836fd5562a56cab1a28e81b6576654631cf16566b86e3b33a108b05307c00aff14a768ed7350606a0f85e6a91d396f5b5cbe577f9b38807c7d523d6d792f6ebc24a4ecf2b3a427cdbbfb
+output=cb0082c8f197d260991ba6a460e76e202bad27b3
+
+############### SHA224 ###############
+algo=SHA224
+repeats=1
+input=07
+output=00ecd5f138422b8ad74c9799fd826c531bad2fcabc7450bee2aa8c2a
+
+algo=SHA224
+repeats=1
+input=18804005dd4fbd1556299d6f9d93df62
+output=df90d78aa78821c99b40ba4c966921accd8ffb1e98ac388e56191db1
+
+############### SHA256 ###############
+algo=SHA256
+repeats=1
+input=19
+output=68aa2e2ee5dff96e3355e6c7ee373e3d6a4e17f75f9518d843709c0c9bc3e3d4
+
+algo=SHA256
+repeats=1
+input=e3d72570dcdd787ce3887ab2cd684652
+output=175ee69b02ba9b58e2b0a5fd13819cea573f3940a94f825128cf4209beabb4e8
+
+algo=SHA256
+repeats=1
+input=8326754e2277372f4fc12b20527afef04d8a056971b11ad57123a7c137760000d7bef6f3c1f7a9083aa39d810db310777dab8b1e7f02b84a26c773325f8b2374de7a4b5a58cb5c5cf35bcee6fb946e5bd694fa593a8beb3f9d6592ecedaa66ca82a29d0c51bcf9336230e5d784e4c0a43f8d79a30a165cbabe452b774b9c7109a97d138f129228966f6c0adc106aad5a9fdd30825769b2c671af6759df28eb393d54d6
+output=97dbca7df46d62c8a422c941dd7e835b8ad3361763f7e9b2d95f4f0da6e1ccbc
+
+############### SHA384 ###############
+algo=SHA384
+repeats=1
+input=b9
+output=bc8089a19007c0b14195f4ecc74094fec64f01f90929282c2fb392881578208ad466828b1c6c283d2722cf0ad1ab6938
+
+algo=SHA384
+repeats=1
+input=a41c497779c0375ff10a7f4e08591739
+output=c9a68443a005812256b8ec76b00516f0dbb74fab26d665913f194b6ffb0e91ea9967566b58109cbc675cc208e4c823f7
+
+algo=SHA384
+repeats=1
+input=399669e28f6b9c6dbcbb6912ec10ffcf74790349b7dc8fbe4a8e7b3b5621db0f3e7dc87f823264bbe40d1811c9ea2061e1c84ad10a23fac1727e7202fc3f5042e6bf58cba8a2746e1f64f9b9ea352c711507053cf4e5339d52865f25cc22b5e87784a12fc961d66cb6e89573199a2ce6565cbdf13dca403832cfcb0e8b7211e83af32a11ac17929ff1c073a51cc027aaedeff85aad7c2b7c5a803e2404d96d2a77357bda1a6daeed17151cb9bc5125a422e941de0ca0fc5011c23ecffefdd09676711cf3db0a3440720e1615c1f22fbc3c721de521e1b99ba1bd5577408642147ed096
+output=4f440db1e6edd2899fa335f09515aa025ee177a79f4b4aaf38e42b5c4de660f5de8fb2a5b2fbd2a3cbffd20cff1288c0
+
+############### SHA512 ###############
+algo=SHA512
+repeats=1
+input=d0
+output=9992202938e882e73e20f6b69e68a0a7149090423d93c81bab3f21678d4aceeee50e4e8cafada4c85a54ea8306826c4ad6e74cece9631bfa8a549b4ab3fbba15
+
+algo=SHA512
+repeats=1
+input=8d4e3c0e3889191491816e9d98bff0a0
+output=cb0b67a4b8712cd73c9aabc0b199e9269b20844afb75acbdd1c153c9828924c3ddedaafe669c5fdd0bc66f630f6773988213eb1b16f517ad0de4b2f0c95c90f8
+
+algo=SHA512
+repeats=1
+input=a55f20c411aad132807a502d65824e31a2305432aa3d06d3e282a8d84e0de1de6974bf495469fc7f338f8054d58c26c49360c3e87af56523acf6d89d03e56ff2f868002bc3e431edc44df2f0223d4bb3b243586e1a7d924936694fcbbaf88d9519e4eb50a644f8e4f95eb0ea95bc4465c8821aacd2fe15ab4981164bbb6dc32f969087a145b0d9cc9c67c22b763299419cc4128be9a077b3ace634064e6d99283513dc06e7515d0d73132e9a0dc6d3b1f8b246f1a98a3fc72941b1e3bb2098e8bf16f268d64f0b0f4707fe1ea1a1791ba2f3c0c758e5f551863a96c949ad47d7fb40d2
+output=c665befb36da189d78822d10528cbf3b12b3eef726039909c1a16a270d48719377966b957a878e720584779a62825c18da26415e49a7176a894e7510fd1451f5
\ No newline at end of file
index 3856977..df1d42d 100644 (file)
@@ -47,6 +47,44 @@ void digest_length_test(yaca_digest_algorithm_e algo, size_t expected_bit_len)
                     " bit digest. Expected " << expected_bit_len << " bits.");
 }
 
+void check_test_vector(yaca_digest_algorithm_e algo,
+                       size_t repeats,
+                       const Buffer& input,
+                       const Buffer& expected)
+{
+    auto ctx_ptr = digest_init(algo);
+    size_t out_len;
+
+    out_len = get_output_length(ctx_ptr);
+
+    if (input.size() > 0) {
+        for (size_t i = 0; i < repeats; i++)
+            YACA_SUCCESS(yaca_digest_update(ctx_ptr.get(),
+                                            input.data(),
+                                            input.size()));
+    }
+
+    Buffer output(out_len);
+    YACA_SUCCESS(yaca_digest_finalize(ctx_ptr.get(), output.data(), &out_len));
+    RUNNER_ASSERT_MSG(output.size() >= out_len,
+                      "Length returned from yaca_digest_finalize() (" << out_len <<
+                      ") is greater than the one returned from yaca_context_get_output_length() ("
+                      << output.size() << ")");
+    output.resize(out_len);
+
+    YACA_ASSERT_MSG(output.size() == expected.size(),
+                    "Digest calculated for \""  <<
+                    truncate_str(std::string(input.data(), input.size()), 16)
+                    << "\" with " << digest2str(algo) << " is " << output.size() * 8
+                    <<" bits long. Expected " << expected.size() * 8 << " bits");
+
+    int ret = yaca_memcmp(output.data(), expected.data(), output.size());
+    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(T2000_YACA_DIGEST);
@@ -122,7 +160,7 @@ RUNNER_TEST(T2050_yaca_digest_get_output_length, YacaTest)
     digest_length_test(YACA_DIGEST_SHA512, 512);
 }
 
-RUNNER_TEST(T2060_yaca_digest_test_vectors, YacaTest)
+RUNNER_TEST(T2060_yaca_digest_test_ascii_vectors, YacaTest)
 {
     auto tvv = loadTestVector("digest_ascii.txt");
 
@@ -137,34 +175,25 @@ RUNNER_TEST(T2060_yaca_digest_test_vectors, YacaTest)
         tv.get("input", input);
         tv.get("output", expected);
 
-        auto ctx_ptr = digest_init(algo);
-        size_t out_len;
-
-        out_len = get_output_length(ctx_ptr);
-
-        if (input.size() > 0) {
-            for (size_t i = 0; i < repeats; i++)
-                YACA_SUCCESS(yaca_digest_update(ctx_ptr.get(),
-                                                input.c_str(),
-                                                input.size()));
-        }
-
-        Buffer output(out_len);
-        YACA_SUCCESS(yaca_digest_finalize(ctx_ptr.get(), output.data(), &out_len));
-        RUNNER_ASSERT_MSG(output.size() >= out_len,
-                          "Length returned from yaca_digest_finalize() (" << out_len <<
-                          ") is greater than the one returned from yaca_context_get_output_length() ("
-                          << output.size() << ")");
-        output.resize(out_len);
-
-        YACA_ASSERT_MSG(output.size() == expected.size(),
-                        " Digest calculated for \""  << truncate_str(input, 16) << "\" with "
-                        << digest2str(algo) << " is " << output.size() * 8
-                        <<" bits long. Expected " << expected.size() * 8 << " bits");
-
-        int ret = yaca_memcmp(output.data(), expected.data(), output.size());
-        YACA_ASSERT_MSG(YACA_ERROR_NONE == ret,
-                        "Digest calculated for \"" << truncate_str(input, 16) << "\" with "
-                        << digest2str(algo) << " is different than expected");
+        check_test_vector(algo, repeats, Buffer(input.begin(), input.end()), expected);
+    }
+}
+
+RUNNER_TEST(T2070_yaca_digest_test_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);
     }
 }