aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/openssl/crypto/sha_ut.cpp
diff options
context:
space:
mode:
authorkomels <komels@yandex-team.ru>2022-04-14 13:10:53 +0300
committerkomels <komels@yandex-team.ru>2022-04-14 13:10:53 +0300
commit21c9b0e6b039e9765eb414c406c2b86e8cea6850 (patch)
treef40ebc18ff8958dfbd189954ad024043ca983ea5 /library/cpp/openssl/crypto/sha_ut.cpp
parent9a4effa852abe489707139c2b260dccc6f4f9aa9 (diff)
downloadydb-21c9b0e6b039e9765eb414c406c2b86e8cea6850.tar.gz
Final part on compatibility layer: LOGBROKER-7215
ref:777c67aadbf705d19034a09a792b2df61ba53697
Diffstat (limited to 'library/cpp/openssl/crypto/sha_ut.cpp')
-rw-r--r--library/cpp/openssl/crypto/sha_ut.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/library/cpp/openssl/crypto/sha_ut.cpp b/library/cpp/openssl/crypto/sha_ut.cpp
new file mode 100644
index 0000000000..4b6117f960
--- /dev/null
+++ b/library/cpp/openssl/crypto/sha_ut.cpp
@@ -0,0 +1,62 @@
+#include <library/cpp/testing/unittest/registar.h>
+
+#include "sha.h"
+
+constexpr TStringBuf SomeAlignedShaTestData = "some _aligned_ test data for SHA-family: align align align align";
+
+Y_UNIT_TEST_SUITE(SHA){
+ Y_UNIT_TEST(CheckOfTestDataAlignment){
+ UNIT_ASSERT_VALUES_EQUAL(SomeAlignedShaTestData.size() % sizeof(ui32), 0);
+ }
+
+ Y_UNIT_TEST(Sha1Value) {
+ // bash$ echo -n $SomeAlignedShaTestData | sha1sum
+ const TStringBuf precalculatedDigest =
+ "\xA2\x29\x8E\xE2\xEA\x06\x27\x45"
+ "\x27\xC7\x78\x87\x16\x21\x8A\xA5"
+ "\x0D\xBA\xBA\xB2"sv;
+
+ auto digest = NOpenSsl::NSha1::Calc(SomeAlignedShaTestData.data(), SomeAlignedShaTestData.size());
+
+ UNIT_ASSERT_VALUES_EQUAL(precalculatedDigest.size(), digest.size());
+ UNIT_ASSERT_VALUES_EQUAL(memcmp(precalculatedDigest.data(), digest.data(), digest.size()), 0);
+ }
+
+ Y_UNIT_TEST(Sha256Value) {
+ // bash$ echo -n $SomeAlignedShaTestData | sha256sum
+ const TStringBuf precalculatedDigest =
+ "\xED\x64\x0D\x43\xF7\x6D\x71\x98"
+ "\x39\x19\xF6\xE6\x70\x21\x82\x11"
+ "\xEF\x3B\xF0\xF4\x35\xBF\x42\xAB"
+ "\x1C\x5C\x01\xCD\x20\x33\xD2\xFA"sv;
+
+ auto digest = NOpenSsl::NSha256::Calc(SomeAlignedShaTestData.data(), SomeAlignedShaTestData.size());
+
+ UNIT_ASSERT_VALUES_EQUAL(precalculatedDigest.size(), digest.size());
+ UNIT_ASSERT_VALUES_EQUAL(memcmp(precalculatedDigest.data(), digest.data(), digest.size()), 0);
+ }
+
+ Y_UNIT_TEST(FragmentedEqualNotFragmented) {
+ const char* head = SomeAlignedShaTestData.data();
+ const char* current = head;
+ NOpenSsl::NSha1::TCalcer sha;
+ int intValue;
+ std::copy_n(current, sizeof(intValue), (char*)&intValue);
+ current += sizeof(intValue);
+ sha.UpdateWithPodValue(intValue);
+ double doubleValue;
+ std::copy_n(current, sizeof(doubleValue), (char*)&doubleValue);
+ current += sizeof(doubleValue);
+ sha.UpdateWithPodValue(doubleValue);
+ char str[7];
+ std::copy_n(current, std::size(str), str);
+ current += std::size(str);
+ sha.UpdateWithPodValue(str);
+ sha.Update(current, SomeAlignedShaTestData.size() - (current - head));
+ auto fragmentedDigest = sha.Final();
+
+ auto notFragmentedDigest = NOpenSsl::NSha1::Calc(SomeAlignedShaTestData.data(), SomeAlignedShaTestData.size());
+
+ UNIT_ASSERT_VALUES_EQUAL(memcmp(fragmentedDigest.data(), notFragmentedDigest.data(), notFragmentedDigest.size()), 0);
+ }
+}; // UNITTEST_SIMPLE_SUITE(SHA)