/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/openssl/crypto/sha.h
112 строк
2 KB
danibw
Add SHA224 to library/cpp/openssl/crypto
29 ноя 2023, 20:06
29 ноя 2023, 20:06
5fe6302
Код
Авторство
О чём код?
#pragma once #include <util/generic/ptr.h> #include <util/generic/strbuf.h> #include <util/system/types.h> #include <array> struct SHAstate_st; struct SHA256state_st; namespace NOpenSsl::NSha1 { constexpr size_t DIGEST_LENGTH = 20; using TDigest = std::array<ui8, DIGEST_LENGTH>; // not fragmented input TDigest Calc(const void* data, size_t dataSize); inline TDigest Calc(TStringBuf s) { return Calc(s.data(), s.length()); } // fragmented input class TCalcer { public: TCalcer(); ~TCalcer(); void Update(const void* data, size_t dataSize); void Update(TStringBuf s) { Update(s.data(), s.length()); } template <typename T> void UpdateWithPodValue(const T& value) { Update(&value, sizeof(value)); } TDigest Final(); private: THolder<SHAstate_st> Context; }; } namespace NOpenSsl::NSha256 { constexpr size_t DIGEST_LENGTH = 32; using TDigest = std::array<ui8, DIGEST_LENGTH>; // not fragmented input TDigest Calc(const void* data, size_t dataSize); inline TDigest Calc(TStringBuf s) { return Calc(s.data(), s.length()); } // fragmented input class TCalcer { public: TCalcer(); ~TCalcer(); void Update(const void* data, size_t dataSize); void Update(TStringBuf s) { Update(s.data(), s.length()); } template <typename T> void UpdateWithPodValue(const T& value) { Update(&value, sizeof(value)); } TDigest Final(); private: THolder<SHA256state_st> Context; }; } namespace NOpenSsl::NSha224 { constexpr size_t DIGEST_LENGTH = 28; using TDigest = std::array<ui8, DIGEST_LENGTH>; // not fragmented input TDigest Calc(const void* data, size_t dataSize); inline TDigest Calc(TStringBuf s) { return Calc(s.data(), s.length()); } // fragmented input class TCalcer { public: TCalcer(); ~TCalcer(); void Update(const void* data, size_t dataSize); void Update(TStringBuf s) { Update(s.data(), s.length()); } template <typename T> void UpdateWithPodValue(const T& value) { Update(&value, sizeof(value)); } TDigest Final(); private: THolder<SHA256state_st> Context; }; }