commit c4bb7fa1943bd7c43cd2cbda47ec6e85a31be25f
parent 2c9e1acf5c593a343d6576877895111a23548505
Author: vaplv <vaplv@free.fr>
Date: Fri, 11 Sep 2020 11:56:35 +0200
Test the sha256 hash function
Diffstat:
2 files changed, 120 insertions(+), 0 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -222,6 +222,7 @@ if(NOT NO_TEST)
new_test(test_free_list rsys)
new_test(test_func_name)
new_test(test_hash_table rsys)
+ new_test(test_hash_sha256 rsys)
new_test(test_image rsys)
new_test(test_library rsys)
new_test(test_list rsys)
diff --git a/src/test_hash_sha256.c b/src/test_hash_sha256.c
@@ -0,0 +1,119 @@
+/* Copyright (C) 2013-2020 Vincent Forest (vaplv@free.fr)
+ *
+ * The RSys library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The RSys library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the RSys library. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "hash.h"
+#include "mem_allocator.h"
+#include <string.h>
+
+struct test_str {
+ const char* str;
+ const char* sha256sum;
+};
+struct test_data {
+ const void* mem;
+ const size_t len;
+ const char* sha256sum;
+};
+
+static void
+chk_hash(const void* data, const size_t data_len, const char* sha256sum)
+{
+ hash256_T hash;
+ char hash_str[65];
+ ASSERT(sha256sum);
+ CHK(hash_sha256(NULL, data, data_len, hash) == RES_OK);
+ hash256_to_cstr(hash, hash_str);
+ CHK(!strcmp(hash_str, sha256sum));
+}
+
+int
+main(int argc, char** argv)
+{
+ char* data = NULL;
+ (void)argc, (void)argv;
+
+ CHK(data = mem_alloc(0x6000003e));
+
+ data[0] = '\0';
+ chk_hash(data, 0,
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+
+ sprintf(data, "abc");
+ chk_hash(data, strlen(data),
+ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
+
+ sprintf(data, "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
+ chk_hash(data, strlen(data),
+ "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
+
+ data[0] = (char)0xbd;
+ chk_hash(data, 1,
+ "68325720aabd7c82f30f554b313d0570c95accbb7dc4b5aae11204c08ffe732b");
+
+ data[0] = (char)0xc9;
+ data[1] = (char)0x8c;
+ data[2] = (char)0x8e;
+ data[3] = (char)0x55;
+ chk_hash(data, 4,
+ "7abc22c0ae5af26ce93dbb94433a0e0b2e119d014f8e7f65bd56c61ccccd9504");
+
+ memset(data, 0, 55);
+ chk_hash(data, 55,
+ "02779466cdec163811d078815c633f21901413081449002f24aa3e80f0b88ef7");
+
+ memset(data, 0, 56);
+ chk_hash(data, 56,
+ "d4817aa5497628e7c77e6b606107042bbba3130888c5f47a375e6179be789fbb");
+
+ memset(data, 0, 57);
+ chk_hash(data, 57,
+ "65a16cb7861335d5ace3c60718b5052e44660726da4cd13bb745381b235a1785");
+
+ memset(data, 0, 64);
+ chk_hash(data, 64,
+ "f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b");
+
+ memset(data, 0, 1000);
+ chk_hash(data, 1000,
+ "541b3e9daa09b20bf85fa273e5cbd3e80185aa4ec298e765db87742b70138a53");
+
+ memset(data, 'A', 1000);
+ chk_hash(data, 1000,
+ "c2e686823489ced2017f6059b8b239318b6364f6dcd835d0a519105a1eadd6e4");
+
+ memset(data, 'U', 1005);
+ chk_hash(data, 1005,
+ "f4d62ddec0f3dd90ea1380fa16a5ff8dc4c54b21740650f24afc4120903552b0");
+
+ memset(data, 0, 1000000);
+ chk_hash(data, 1000000,
+ "d29751f2649b32ff572b5e0a9f541ea660a50f94ff0beedfb0b692b924cc8025");
+
+ memset(data, 'Z', 0x20000000);
+ chk_hash(data, 0x20000000,
+ "15a1868c12cc53951e182344277447cd0979536badcc512ad24c67e9b2d4f3dd");
+
+ memset(data, 0, 0x41000000);
+ chk_hash(data, 0x41000000,
+ "461c19a93bd4344f9215f5ec64357090342bc66b15a148317d276e31cbc20b53");
+
+ memset(data, 'B', 0x6000003e);
+ chk_hash(data, 0x6000003e,
+ "c23ce8a7895f4b21ec0daf37920ac0a262a220045a03eb2dfed48ef9b05aabea");
+
+ mem_rm(data);
+ CHK(mem_allocated_size() == 0);
+ return 0;
+}