Skip to content

Fix botan hash backend UB #322

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions trantor/utils/crypto/botan.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Hash128 md5(const void* data, size_t len)
Hash128 hash;
auto md5 = Botan::HashFunction::create("MD5");
md5->update((const unsigned char*)data, len);
md5->final((unsigned char*)&hash);
md5->final((unsigned char*)&hash.bytes);
return hash;
}

Expand All @@ -21,7 +21,7 @@ Hash160 sha1(const void* data, size_t len)
Hash160 hash;
auto sha1 = Botan::HashFunction::create("SHA-1");
sha1->update((const unsigned char*)data, len);
sha1->final((unsigned char*)&hash);
sha1->final((unsigned char*)&hash.bytes);
return hash;
}

Expand All @@ -30,7 +30,7 @@ Hash256 sha256(const void* data, size_t len)
Hash256 hash;
auto sha256 = Botan::HashFunction::create("SHA-256");
sha256->update((const unsigned char*)data, len);
sha256->final((unsigned char*)&hash);
sha256->final((unsigned char*)&hash.bytes);
return hash;
}

Expand All @@ -40,7 +40,7 @@ Hash256 sha3(const void* data, size_t len)
auto sha3 = Botan::HashFunction::create("SHA-3(256)");
assert(sha3 != nullptr);
sha3->update((const unsigned char*)data, len);
sha3->final((unsigned char*)&hash);
sha3->final((unsigned char*)&hash.bytes);
return hash;
}

Expand All @@ -50,7 +50,7 @@ Hash256 blake2b(const void* data, size_t len)
auto blake2b = Botan::HashFunction::create("BLAKE2b(256)");
assert(blake2b != nullptr);
blake2b->update((const unsigned char*)data, len);
blake2b->final((unsigned char*)&hash);
blake2b->final((unsigned char*)&hash.bytes);
return hash;
}

Expand Down
20 changes: 10 additions & 10 deletions trantor/utils/crypto/openssl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Hash128 md5(const void* data, size_t len)
auto ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, md5, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
EVP_MD_free(md5);
return hash;
Expand All @@ -36,7 +36,7 @@ Hash128 md5(const void* data, size_t len)
MD5_CTX ctx;
MD5_Init(&ctx);
MD5_Update(&ctx, data, len);
MD5_Final((unsigned char*)&hash, &ctx);
MD5_Final((unsigned char*)&hash.bytes, &ctx);
return hash;
#endif
}
Expand All @@ -49,7 +49,7 @@ Hash160 sha1(const void* data, size_t len)
auto ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, sha1, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
EVP_MD_free(sha1);
return hash;
Expand All @@ -58,7 +58,7 @@ Hash160 sha1(const void* data, size_t len)
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, data, len);
SHA1_Final((unsigned char*)&hash, &ctx);
SHA1_Final((unsigned char*)&hash.bytes, &ctx);
return hash;
#endif
}
Expand All @@ -71,7 +71,7 @@ Hash256 sha256(const void* data, size_t len)
auto ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, sha256, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
EVP_MD_free(sha256);
return hash;
Expand All @@ -80,7 +80,7 @@ Hash256 sha256(const void* data, size_t len)
SHA256_CTX ctx;
SHA256_Init(&ctx);
SHA256_Update(&ctx, data, len);
SHA256_Final((unsigned char*)&hash, &ctx);
SHA256_Final((unsigned char*)&hash.bytes, &ctx);
return hash;
#endif
}
Expand All @@ -95,7 +95,7 @@ Hash256 sha3(const void* data, size_t len)
auto ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, sha3, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
EVP_MD_free(sha3);
return hash;
Expand All @@ -107,7 +107,7 @@ Hash256 sha3(const void* data, size_t len)
EVP_MD_CTX* ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, sha3, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
return hash;
}
Expand All @@ -126,13 +126,13 @@ Hash256 blake2b(const void* data, size_t len)
auto ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(ctx, blake2b, nullptr);
EVP_DigestUpdate(ctx, data, len);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash, nullptr);
EVP_DigestFinal_ex(ctx, (unsigned char*)&hash.bytes, nullptr);
EVP_MD_CTX_free(ctx);
EVP_MD_free(blake2b);
return hash;
}
#endif
trantor_blake2b(&hash, sizeof(hash), data, len, nullptr, 0);
trantor_blake2b(&hash.bytes, sizeof(hash), data, len, nullptr, 0);
return hash;
}

Expand Down