aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/openssl/crypto/sha.cpp
diff options
context:
space:
mode:
authoralexvru <alexvru@ydb.tech>2023-08-15 21:09:36 +0300
committeralexvru <alexvru@ydb.tech>2023-08-15 21:42:49 +0300
commitd6f67906ea5b369b47bce8e0a7125d66114fdbde (patch)
treec9c44a3a1a396a6cab33e1260c67f2e5b8b76ea4 /library/cpp/openssl/crypto/sha.cpp
parentf096c967c8a4b645763f901c889ca0335a0e5412 (diff)
downloadydb-d6f67906ea5b369b47bce8e0a7125d66114fdbde.tar.gz
Support BS autoconfig KIKIMR-19031
Diffstat (limited to 'library/cpp/openssl/crypto/sha.cpp')
-rw-r--r--library/cpp/openssl/crypto/sha.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/library/cpp/openssl/crypto/sha.cpp b/library/cpp/openssl/crypto/sha.cpp
new file mode 100644
index 0000000000..c142b6635e
--- /dev/null
+++ b/library/cpp/openssl/crypto/sha.cpp
@@ -0,0 +1,62 @@
+#include "sha.h"
+
+#include <util/generic/yexception.h>
+
+#include <openssl/sha.h>
+
+namespace NOpenSsl {
+ namespace NSha1 {
+ static_assert(DIGEST_LENGTH == SHA_DIGEST_LENGTH);
+
+ TDigest Calc(const void* data, size_t dataSize) {
+ TDigest digest;
+ Y_ENSURE(SHA1(static_cast<const ui8*>(data), dataSize, digest.data()) != nullptr);
+ return digest;
+ }
+
+ TCalcer::TCalcer()
+ : Context{new SHAstate_st} {
+ Y_ENSURE(SHA1_Init(Context.Get()) == 1);
+ }
+
+ TCalcer::~TCalcer() {
+ }
+
+ void TCalcer::Update(const void* data, size_t dataSize) {
+ Y_ENSURE(SHA1_Update(Context.Get(), data, dataSize) == 1);
+ }
+
+ TDigest TCalcer::Final() {
+ TDigest digest;
+ Y_ENSURE(SHA1_Final(digest.data(), Context.Get()) == 1);
+ return digest;
+ }
+ }
+ namespace NSha256 {
+ static_assert(DIGEST_LENGTH == SHA256_DIGEST_LENGTH);
+
+ TDigest Calc(const void* data, size_t dataSize) {
+ TDigest digest;
+ Y_ENSURE(SHA256(static_cast<const ui8*>(data), dataSize, digest.data()) != nullptr);
+ return digest;
+ }
+
+ TCalcer::TCalcer()
+ : Context{new SHA256state_st} {
+ Y_ENSURE(SHA256_Init(Context.Get()) == 1);
+ }
+
+ TCalcer::~TCalcer() {
+ }
+
+ void TCalcer::Update(const void* data, size_t dataSize) {
+ Y_ENSURE(SHA256_Update(Context.Get(), data, dataSize) == 1);
+ }
+
+ TDigest TCalcer::Final() {
+ TDigest digest;
+ Y_ENSURE(SHA256_Final(digest.data(), Context.Get()) == 1);
+ return digest;
+ }
+ }
+}