diff options
author | danila-eremin <danila-eremin@yandex-team.ru> | 2022-02-10 16:46:21 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:21 +0300 |
commit | 358e631d1a69242d3ae4d6e6b1e4f7581d03133b (patch) | |
tree | db997f29fd5f1b32ede8ce681a7c73ec0a0714d0 /library/cpp/digest | |
parent | bf23f1e45d4627b54a70900ef362c1be748cc787 (diff) | |
download | ydb-358e631d1a69242d3ae4d6e6b1e4f7581d03133b.tar.gz |
Restoring authorship annotation for <danila-eremin@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/digest')
-rw-r--r-- | library/cpp/digest/md5/bench/main.cpp | 12 | ||||
-rw-r--r-- | library/cpp/digest/md5/bench/ya.make | 2 | ||||
-rw-r--r-- | library/cpp/digest/md5/md5.cpp | 190 | ||||
-rw-r--r-- | library/cpp/digest/md5/md5.h | 46 | ||||
-rw-r--r-- | library/cpp/digest/md5/md5_ut.cpp | 8 |
5 files changed, 129 insertions, 129 deletions
diff --git a/library/cpp/digest/md5/bench/main.cpp b/library/cpp/digest/md5/bench/main.cpp index 70672e6741..e633a64704 100644 --- a/library/cpp/digest/md5/bench/main.cpp +++ b/library/cpp/digest/md5/bench/main.cpp @@ -1,15 +1,15 @@ -#include <benchmark/benchmark.h> - +#include <benchmark/benchmark.h> + #include <library/cpp/digest/md5/md5.h> #define MD5_DEF(N) \ - static void MD5Benchmark_##N(benchmark::State& st) { \ + static void MD5Benchmark_##N(benchmark::State& st) { \ char buf[N]; \ - for (auto _ : st) { \ + for (auto _ : st) { \ Y_DO_NOT_OPTIMIZE_AWAY(MD5().Update(buf, sizeof(buf))); \ } \ - } \ - BENCHMARK(MD5Benchmark_##N); + } \ + BENCHMARK(MD5Benchmark_##N); MD5_DEF(32) MD5_DEF(64) diff --git a/library/cpp/digest/md5/bench/ya.make b/library/cpp/digest/md5/bench/ya.make index 5c3e3c1c42..0c7211f82a 100644 --- a/library/cpp/digest/md5/bench/ya.make +++ b/library/cpp/digest/md5/bench/ya.make @@ -1,4 +1,4 @@ -G_BENCHMARK() +G_BENCHMARK() OWNER( pg diff --git a/library/cpp/digest/md5/md5.cpp b/library/cpp/digest/md5/md5.cpp index 24a5b69eef..b10e63e425 100644 --- a/library/cpp/digest/md5/md5.cpp +++ b/library/cpp/digest/md5/md5.cpp @@ -1,17 +1,17 @@ #include "md5.h" -#include <library/cpp/string_utils/base64/base64.h> +#include <library/cpp/string_utils/base64/base64.h> #include <util/stream/input.h> #include <util/stream/file.h> #include <util/string/hex.h> -#include <contrib/libs/nayuki_md5/md5.h> +#include <contrib/libs/nayuki_md5/md5.h> namespace { - constexpr size_t MD5_BLOCK_LENGTH = 64; - constexpr size_t MD5_PADDING_SHIFT = 56; + constexpr size_t MD5_BLOCK_LENGTH = 64; + constexpr size_t MD5_PADDING_SHIFT = 56; constexpr size_t MD5_HEX_DIGEST_LENGTH = 32; struct TMd5Stream: public IOutputStream { @@ -26,14 +26,14 @@ namespace { MD5* M_; }; - - inline TArrayRef<const ui8> MakeUnsignedArrayRef(const void* data, const size_t size) { - return MakeArrayRef(static_cast<const ui8*>(data), size); - } - - inline TArrayRef<const ui8> MakeUnsignedArrayRef(const TArrayRef<const char>& data) { - return MakeUnsignedArrayRef(data.data(), data.size()); - } + + inline TArrayRef<const ui8> MakeUnsignedArrayRef(const void* data, const size_t size) { + return MakeArrayRef(static_cast<const ui8*>(data), size); + } + + inline TArrayRef<const ui8> MakeUnsignedArrayRef(const TArrayRef<const char>& data) { + return MakeUnsignedArrayRef(data.data(), data.size()); + } } char* MD5::File(const char* filename, char* buf) { @@ -57,23 +57,23 @@ TString MD5::File(const TString& filename) { return buf; } -char* MD5::Data(const TArrayRef<const ui8>& data, char* buf) { - return MD5().Update(data).End(buf); -} - +char* MD5::Data(const TArrayRef<const ui8>& data, char* buf) { + return MD5().Update(data).End(buf); +} + char* MD5::Data(const void* data, size_t len, char* buf) { - return Data(MakeUnsignedArrayRef(data, len), buf); + return Data(MakeUnsignedArrayRef(data, len), buf); } -TString MD5::Data(const TArrayRef<const ui8>& data) { +TString MD5::Data(const TArrayRef<const ui8>& data) { TString buf; buf.ReserveAndResize(MD5_HEX_DIGEST_LENGTH); - Data(data, buf.begin()); + Data(data, buf.begin()); return buf; } TString MD5::Data(TStringBuf data) { - return Data(MakeUnsignedArrayRef(data)); + return Data(MakeUnsignedArrayRef(data)); } char* MD5::Stream(IInputStream* in, char* buf) { @@ -88,7 +88,7 @@ MD5& MD5::Update(IInputStream* in) { return *this; } -static const ui8 PADDING[MD5_BLOCK_LENGTH] = { +static const ui8 PADDING[MD5_BLOCK_LENGTH] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -96,8 +96,8 @@ static const ui8 PADDING[MD5_BLOCK_LENGTH] = { /* MD5 initialization. Begins an MD5 operation, writing a new context. */ void MD5::Init() { - BufferSize = 0; - StreamSize = 0; + BufferSize = 0; + StreamSize = 0; /* Load magic initialization constants. */ State[0] = 0x67452301; State[1] = 0xefcdab89; @@ -111,30 +111,30 @@ void MD5::Init() { * context. */ -void MD5::UpdatePart(TArrayRef<const ui8> data) { - /* Count input bytes */ - StreamSize += data.size(); - if (BufferSize > 0) { - /* Filling remaining buffer */ - const ui8 freeBufferSize = MD5_BLOCK_LENGTH - BufferSize; - const ui8 partLen = data.size() >= freeBufferSize ? freeBufferSize : data.size(); - memcpy(&Buffer[BufferSize], data.data(), partLen); - BufferSize += partLen; - data = data.Slice(partLen); - if (BufferSize == MD5_BLOCK_LENGTH) { - /* Buffer is full and ready for hashing */ - md5_compress(State, Buffer); - BufferSize = 0; - } - } - /* Processing input by chanks */ - while (data.size() >= MD5_BLOCK_LENGTH) { - md5_compress(State, data.data()); - data = data.Slice(MD5_BLOCK_LENGTH); - } - /* Save remaining input in buffer */ - memcpy(Buffer, data.data(), data.size()); - BufferSize += data.size(); +void MD5::UpdatePart(TArrayRef<const ui8> data) { + /* Count input bytes */ + StreamSize += data.size(); + if (BufferSize > 0) { + /* Filling remaining buffer */ + const ui8 freeBufferSize = MD5_BLOCK_LENGTH - BufferSize; + const ui8 partLen = data.size() >= freeBufferSize ? freeBufferSize : data.size(); + memcpy(&Buffer[BufferSize], data.data(), partLen); + BufferSize += partLen; + data = data.Slice(partLen); + if (BufferSize == MD5_BLOCK_LENGTH) { + /* Buffer is full and ready for hashing */ + md5_compress(State, Buffer); + BufferSize = 0; + } + } + /* Processing input by chanks */ + while (data.size() >= MD5_BLOCK_LENGTH) { + md5_compress(State, data.data()); + data = data.Slice(MD5_BLOCK_LENGTH); + } + /* Save remaining input in buffer */ + memcpy(Buffer, data.data(), data.size()); + BufferSize += data.size(); } /* @@ -142,19 +142,19 @@ void MD5::UpdatePart(TArrayRef<const ui8> data) { */ void MD5::Pad() { - size_t streamSize = StreamSize; - - const size_t paddingSize = (MD5_PADDING_SHIFT > BufferSize) ? (MD5_PADDING_SHIFT - BufferSize) : (MD5_PADDING_SHIFT + MD5_BLOCK_LENGTH - BufferSize); - Update(PADDING, paddingSize); - - // Size of stream in bits - // If size greater than 2^64 - 1 only lower 64 bits used - streamSize <<= 3; - for (int i = 0; i < 8; ++i, streamSize >>= 8) { - // Storing in reverse order - Buffer[MD5_PADDING_SHIFT + i] = static_cast<ui8>(streamSize & 0xFFU); - } - md5_compress(State, Buffer); + size_t streamSize = StreamSize; + + const size_t paddingSize = (MD5_PADDING_SHIFT > BufferSize) ? (MD5_PADDING_SHIFT - BufferSize) : (MD5_PADDING_SHIFT + MD5_BLOCK_LENGTH - BufferSize); + Update(PADDING, paddingSize); + + // Size of stream in bits + // If size greater than 2^64 - 1 only lower 64 bits used + streamSize <<= 3; + for (int i = 0; i < 8; ++i, streamSize >>= 8) { + // Storing in reverse order + Buffer[MD5_PADDING_SHIFT + i] = static_cast<ui8>(streamSize & 0xFFU); + } + md5_compress(State, Buffer); } /* @@ -162,35 +162,35 @@ void MD5::Pad() { * the message digest and zeroizing the context. */ -ui8* MD5::Final(ui8 digest[16]) { +ui8* MD5::Final(ui8 digest[16]) { /* Do padding. */ Pad(); /* Store state in digest */ - memcpy(digest, State, 16); + memcpy(digest, State, 16); /* Zeroize sensitive information. */ - Init(); + Init(); return digest; } char* MD5::End(char* buf) { static const char hex[] = "0123456789abcdef"; - ui8 digest[16]; + ui8 digest[16]; if (!buf) buf = (char*)malloc(33); if (!buf) return nullptr; Final(digest); - for (ui8 i = 0; i < MD5_HEX_DIGEST_LENGTH / 2; i++) { - buf[i * 2] = hex[digest[i] >> 4]; - buf[i * 2 + 1] = hex[digest[i] & 0x0f]; + for (ui8 i = 0; i < MD5_HEX_DIGEST_LENGTH / 2; i++) { + buf[i * 2] = hex[digest[i] >> 4]; + buf[i * 2 + 1] = hex[digest[i] & 0x0f]; } - buf[32] = '\0'; + buf[32] = '\0'; return buf; } char* MD5::End_b64(char* buf) { - ui8 digest[16]; + ui8 digest[16]; if (!buf) buf = (char*)malloc(25); if (!buf) @@ -202,7 +202,7 @@ char* MD5::End_b64(char* buf) { } ui64 MD5::EndHalfMix() { - ui8 digest[16]; + ui8 digest[16]; Final(digest); ui64 res = 0; for (int i = 3; i >= 0; i--) { @@ -212,47 +212,47 @@ ui64 MD5::EndHalfMix() { return res; } -TString MD5::Calc(TStringBuf data) { - return Calc(MakeUnsignedArrayRef(data)); -} +TString MD5::Calc(TStringBuf data) { + return Calc(MakeUnsignedArrayRef(data)); +} -TString MD5::Calc(const TArrayRef<const ui8>& data) { - return Data(data); -} +TString MD5::Calc(const TArrayRef<const ui8>& data) { + return Data(data); +} -TString MD5::CalcRaw(TStringBuf data) { - return CalcRaw(MakeUnsignedArrayRef(data)); +TString MD5::CalcRaw(TStringBuf data) { + return CalcRaw(MakeUnsignedArrayRef(data)); } -TString MD5::CalcRaw(const TArrayRef<const ui8>& data) { +TString MD5::CalcRaw(const TArrayRef<const ui8>& data) { TString result; - result.ReserveAndResize(16); - MD5().Update(data).Final(reinterpret_cast<ui8*>(result.begin())); + result.ReserveAndResize(16); + MD5().Update(data).Final(reinterpret_cast<ui8*>(result.begin())); return result; } ui64 MD5::CalcHalfMix(const char* data, size_t len) { - return CalcHalfMix(MakeUnsignedArrayRef(data, len)); -} - -ui64 MD5::CalcHalfMix(TStringBuf data) { - return CalcHalfMix(MakeUnsignedArrayRef(data)); -} - -ui64 MD5::CalcHalfMix(const TArrayRef<const ui8>& data) { - return MD5().Update(data).EndHalfMix(); + return CalcHalfMix(MakeUnsignedArrayRef(data, len)); } -bool MD5::IsMD5(TStringBuf data) { - return IsMD5(MakeUnsignedArrayRef(data)); +ui64 MD5::CalcHalfMix(TStringBuf data) { + return CalcHalfMix(MakeUnsignedArrayRef(data)); } -bool MD5::IsMD5(const TArrayRef<const ui8>& data) { +ui64 MD5::CalcHalfMix(const TArrayRef<const ui8>& data) { + return MD5().Update(data).EndHalfMix(); +} + +bool MD5::IsMD5(TStringBuf data) { + return IsMD5(MakeUnsignedArrayRef(data)); +} + +bool MD5::IsMD5(const TArrayRef<const ui8>& data) { if (data.size() != 32) { return false; } - for (const ui8 *p = data.data(), *e = data.data() + data.size(); p != e; ++p) { - if (Char2DigitTable[*p] == '\xff') { + for (const ui8 *p = data.data(), *e = data.data() + data.size(); p != e; ++p) { + if (Char2DigitTable[*p] == '\xff') { return false; } } diff --git a/library/cpp/digest/md5/md5.h b/library/cpp/digest/md5/md5.h index 2c17aa0518..6dea247e3d 100644 --- a/library/cpp/digest/md5/md5.h +++ b/library/cpp/digest/md5/md5.h @@ -14,20 +14,20 @@ public: void Init(); inline MD5& Update(const void* data, size_t len) { - return Update(MakeArrayRef(static_cast<const ui8*>(data), len)); - } + return Update(MakeArrayRef(static_cast<const ui8*>(data), len)); + } - inline MD5& Update(TStringBuf data) { - return Update(data.data(), data.size()); - } + inline MD5& Update(TStringBuf data) { + return Update(data.data(), data.size()); + } - inline MD5& Update(const TArrayRef<const ui8> data) { - UpdatePart(data); + inline MD5& Update(const TArrayRef<const ui8> data) { + UpdatePart(data); return *this; } void Pad(); - ui8* Final(ui8[16]); + ui8* Final(ui8[16]); // buf must be char[33]; char* End(char* buf); @@ -49,29 +49,29 @@ public: static TString File(const TString& filename); static char* Data(const void* data, size_t len, char* buf); - static char* Data(const TArrayRef<const ui8>& data, char* buf); - static TString Data(const TArrayRef<const ui8>& data); + static char* Data(const TArrayRef<const ui8>& data, char* buf); + static TString Data(const TArrayRef<const ui8>& data); static TString Data(TStringBuf data); static char* Stream(IInputStream* in, char* buf); - static TString Calc(TStringBuf data); // 32-byte hex-encoded - static TString Calc(const TArrayRef<const ui8>& data); // 32-byte hex-encoded - static TString CalcRaw(TStringBuf data); // 16-byte raw - static TString CalcRaw(const TArrayRef<const ui8>& data); // 16-byte raw + static TString Calc(TStringBuf data); // 32-byte hex-encoded + static TString Calc(const TArrayRef<const ui8>& data); // 32-byte hex-encoded + static TString CalcRaw(TStringBuf data); // 16-byte raw + static TString CalcRaw(const TArrayRef<const ui8>& data); // 16-byte raw - static ui64 CalcHalfMix(TStringBuf data); - static ui64 CalcHalfMix(const TArrayRef<const ui8>& data); + static ui64 CalcHalfMix(TStringBuf data); + static ui64 CalcHalfMix(const TArrayRef<const ui8>& data); static ui64 CalcHalfMix(const char* data, size_t len); - static bool IsMD5(TStringBuf data); - static bool IsMD5(const TArrayRef<const ui8>& data); + static bool IsMD5(TStringBuf data); + static bool IsMD5(const TArrayRef<const ui8>& data); private: - void UpdatePart(TArrayRef<const ui8> data); + void UpdatePart(TArrayRef<const ui8> data); private: - ui8 BufferSize; /* size of buffer */ - ui8 Buffer[64]; /* input buffer */ - ui32 State[4]; /* state (ABCD) */ - ui64 StreamSize; /* total bytes in input stream */ + ui8 BufferSize; /* size of buffer */ + ui8 Buffer[64]; /* input buffer */ + ui32 State[4]; /* state (ABCD) */ + ui64 StreamSize; /* total bytes in input stream */ }; diff --git a/library/cpp/digest/md5/md5_ut.cpp b/library/cpp/digest/md5/md5_ut.cpp index 1c3e4ad0a9..3b596d9d74 100644 --- a/library/cpp/digest/md5/md5_ut.cpp +++ b/library/cpp/digest/md5/md5_ut.cpp @@ -18,11 +18,11 @@ Y_UNIT_TEST_SUITE(TMD5Test) { TString s(r.End(rs)); s.to_lower(); - UNIT_ASSERT_NO_DIFF(s, TStringBuf("3ac00dd696b966fd74deee3c35a59d8f")); + UNIT_ASSERT_NO_DIFF(s, TStringBuf("3ac00dd696b966fd74deee3c35a59d8f")); TString result = r.Calc(TStringBuf(b)); result.to_lower(); - UNIT_ASSERT_NO_DIFF(result, TStringBuf("3ac00dd696b966fd74deee3c35a59d8f")); + UNIT_ASSERT_NO_DIFF(result, TStringBuf("3ac00dd696b966fd74deee3c35a59d8f")); } Y_UNIT_TEST(TestFile) { @@ -39,10 +39,10 @@ Y_UNIT_TEST_SUITE(TMD5Test) { TString fileHash = MD5::File(tmpFile.data(), fileBuf); TString memoryHash = MD5::Data((const unsigned char*)s.data(), s.size(), memBuf); - UNIT_ASSERT_NO_DIFF(fileHash, memoryHash); + UNIT_ASSERT_NO_DIFF(fileHash, memoryHash); fileHash = MD5::File(tmpFile); - UNIT_ASSERT_NO_DIFF(fileHash, memoryHash); + UNIT_ASSERT_NO_DIFF(fileHash, memoryHash); NFs::Remove(tmpFile); fileHash = MD5::File(tmpFile); |