diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-08 18:25:47 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-08 18:25:47 +0300 |
commit | a3ac8a71f16e0db7d50d5b1235466ff754e0d228 (patch) | |
tree | 8433eb84ffae296ccb9ae094d08491c86c48bdb1 /library/cpp/digest/md5/md5.h | |
parent | 60312eaed2e51caa7ed482270d3545a9d27cb284 (diff) | |
download | ydb-a3ac8a71f16e0db7d50d5b1235466ff754e0d228.tar.gz |
intermediate changes
ref:f398132a6a7101a031da4a85ff8dc9f360af7d8a
Diffstat (limited to 'library/cpp/digest/md5/md5.h')
-rw-r--r-- | library/cpp/digest/md5/md5.h | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/library/cpp/digest/md5/md5.h b/library/cpp/digest/md5/md5.h index 1568567e3c0..2c17aa05181 100644 --- a/library/cpp/digest/md5/md5.h +++ b/library/cpp/digest/md5/md5.h @@ -1,7 +1,5 @@ #pragma once -#include <util/system/defaults.h> -#include <util/generic/string.h> #include <util/generic/array_ref.h> #include <util/generic/strbuf.h> @@ -16,26 +14,20 @@ public: void Init(); inline MD5& Update(const void* data, size_t len) { - const char* buf = (const char*)data; - - while (len) { - // NOTE: we don't want buffSz to be near Max<unsigned int>() - // because otherwise integer overflow might happen in UpdatePart - const unsigned int buffSz = Min(size_t(Max<unsigned int>() / 2), len); - - UpdatePart(buf, buffSz); - buf += buffSz; - len -= buffSz; - } - return *this; + return Update(MakeArrayRef(static_cast<const ui8*>(data), len)); } - inline MD5& Update(const TStringBuf& data) { + inline MD5& Update(TStringBuf data) { return Update(data.data(), data.size()); } + inline MD5& Update(const TArrayRef<const ui8> data) { + UpdatePart(data); + return *this; + } + void Pad(); - unsigned char* Final(unsigned char[16]); + ui8* Final(ui8[16]); // buf must be char[33]; char* End(char* buf); @@ -57,23 +49,29 @@ public: static TString File(const TString& filename); static char* Data(const void* data, size_t len, char* buf); - static TString Data(TArrayRef<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(const TStringBuf& data); // 32-byte hex-encoded - static TString CalcRaw(const TStringBuf& 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(const TStringBuf& 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(const TStringBuf& data); + static bool IsMD5(TStringBuf data); + static bool IsMD5(const TArrayRef<const ui8>& data); private: - void UpdatePart(const void* data, unsigned int len); + void UpdatePart(TArrayRef<const ui8> data); private: - ui32 State[4]; /* state (ABCD) */ - ui32 Count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char Buffer[64]; /* input buffer */ + ui8 BufferSize; /* size of buffer */ + ui8 Buffer[64]; /* input buffer */ + ui32 State[4]; /* state (ABCD) */ + ui64 StreamSize; /* total bytes in input stream */ }; |