* @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)