Skip to content

Commit fc2a704

Browse files
committed
use fallback hashing when botan does not support it
1 parent b8d8ebf commit fc2a704

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ if(TRANTOR_TLS_PROVIDER STREQUAL "None"
178178
endif()
179179
endif()
180180

181-
if(TRANTOR_TLS_PROVIDER STREQUAL "None")
181+
if(TRANTOR_TLS_PROVIDER STREQUAL "None" OR TRANTOR_TLS_PROVIDER STREQUAL "Botan")
182182
set(TRANTOR_SOURCES
183183
${TRANTOR_SOURCES}
184184
trantor/utils/crypto/sha3.cc

trantor/utils/crypto/botan.cc

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33

44
#include <cassert>
55

6+
#include "md5.h"
7+
#include "sha1.h"
8+
#include "sha3.h"
9+
#include "blake2.h"
10+
611
namespace trantor
712
{
813
namespace utils
@@ -11,6 +16,15 @@ Hash128 md5(const void* data, size_t len)
1116
{
1217
Hash128 hash;
1318
auto md5 = Botan::HashFunction::create("MD5");
19+
if (md5 == nullptr)
20+
{
21+
MD5_CTX ctx;
22+
trantor_md5_init(&ctx);
23+
trantor_md5_update(&ctx, (const unsigned char*)data, len);
24+
trantor_md5_final(&ctx, (unsigned char*)&hash);
25+
return hash;
26+
}
27+
1428
md5->update((const unsigned char*)data, len);
1529
md5->final((unsigned char*)&hash);
1630
return hash;
@@ -20,6 +34,14 @@ Hash160 sha1(const void* data, size_t len)
2034
{
2135
Hash160 hash;
2236
auto sha1 = Botan::HashFunction::create("SHA-1");
37+
if (sha1 == nullptr)
38+
{
39+
SHA1_CTX ctx;
40+
TrantorSHA1Init(&ctx);
41+
TrantorSHA1Update(&ctx, (const unsigned char*)data, len);
42+
TrantorSHA1Final((unsigned char*)&hash, &ctx);
43+
return hash;
44+
}
2345
sha1->update((const unsigned char*)data, len);
2446
sha1->final((unsigned char*)&hash);
2547
return hash;
@@ -29,6 +51,7 @@ Hash256 sha256(const void* data, size_t len)
2951
{
3052
Hash256 hash;
3153
auto sha256 = Botan::HashFunction::create("SHA-256");
54+
assert(sha256 != nullptr); // Botan guarantees that SHA-256 is available
3255
sha256->update((const unsigned char*)data, len);
3356
sha256->final((unsigned char*)&hash);
3457
return hash;
@@ -38,6 +61,11 @@ Hash256 sha3(const void* data, size_t len)
3861
{
3962
Hash256 hash;
4063
auto sha3 = Botan::HashFunction::create("SHA-3(256)");
64+
if (sha3 == nullptr)
65+
{
66+
trantor_sha3((const unsigned char*)data, len, &hash, sizeof(hash));
67+
return hash;
68+
}
4169
assert(sha3 != nullptr);
4270
sha3->update((const unsigned char*)data, len);
4371
sha3->final((unsigned char*)&hash);
@@ -48,7 +76,11 @@ Hash256 blake2b(const void* data, size_t len)
4876
{
4977
Hash256 hash;
5078
auto blake2b = Botan::HashFunction::create("BLAKE2b(256)");
51-
assert(blake2b != nullptr);
79+
if (blake2b == nullptr)
80+
{
81+
trantor_blake2b(&hash, sizeof(hash), data, len, NULL, 0);
82+
return hash;
83+
}
5284
blake2b->update((const unsigned char*)data, len);
5385
blake2b->final((unsigned char*)&hash);
5486
return hash;

0 commit comments

Comments
 (0)