Skip to content

Commit 2854403

Browse files
committed
Fix VULN-1845
1 parent c8249b6 commit 2854403

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

unittests/crypto/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
set(sources
2-
rand.cpp)
2+
rand.cpp
3+
vuln1845.cpp)
34

45
include_directories(
56
${CMAKE_SOURCE_DIR}/include

unittests/crypto/vuln1845.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <cstddef>
2+
3+
extern "C" {
4+
#include "trezor/crypto/segwit_addr.h"
5+
#include "trezor/crypto/ecdsa.h"
6+
#include "trezor/crypto/cash_addr.h"
7+
}
8+
9+
#include "gtest/gtest.h"
10+
11+
#include <cinttypes>
12+
#include <string>
13+
#include <vector>
14+
15+
16+
TEST(Vuln1845, Bech32Decode) {
17+
std::string input = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefg";
18+
std::vector<char> hrp(input.size() - 6);
19+
std::vector<uint8_t> data(input.size() - 8);
20+
21+
size_t data_len;
22+
ASSERT_NE(1, bech32_decode(&hrp[0], &data[0], &data_len, input.c_str()));
23+
}
24+
25+
TEST(Vuln1845, CashAddrDecode) {
26+
std::vector<uint8_t> addr_raw(MAX_ADDR_RAW_SIZE);
27+
size_t len;
28+
29+
ASSERT_FALSE(cash_addr_decode(&addr_raw[0], &len, "bitcoincash:",
30+
"\x53\x74\x32\x63\x74\x79\x70\x63\x45\x74\x53\x49\x3a\x4d\x63\x4e"
31+
"\x53\x74\x36\x63\x74\x65\x63\x43\x43\x43\x43\x43\x43\x4a\x43\x43"
32+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43"
33+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43"
34+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43"
35+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43"
36+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43"
37+
"\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x43\x61\x00\x61\x61"
38+
"\x28"));
39+
}

0 commit comments

Comments
 (0)