committed by
Christian Decker
1 changed files with 50 additions and 0 deletions
@ -0,0 +1,50 @@ |
|||||
|
#include <stdint.h> |
||||
|
#include <string.h> |
||||
|
#include <tests/fuzz/libfuzz.h> |
||||
|
|
||||
|
#include <common/bech32.h> |
||||
|
|
||||
|
void init(int *argc, char ***argv) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
void run(const uint8_t *data, size_t size) |
||||
|
{ |
||||
|
const char hrp_inv[5] = "lnbc\0", hrp_addr[3] = "bc\0"; |
||||
|
char *bech32_str, *hrp_out, *addr; |
||||
|
uint8_t *data_out; |
||||
|
size_t data_out_len; |
||||
|
int wit_version; |
||||
|
|
||||
|
/* Buffer size is defined in each function's doc comment. */ |
||||
|
bech32_str = malloc(size + strlen(hrp_inv) + 8); |
||||
|
/* FIXME: needs a dictionary / a startup seed corpus to pass this more
|
||||
|
* frequently. */ |
||||
|
if (bech32_encode(bech32_str, hrp_inv, data, size, size) == 1) { |
||||
|
hrp_out = malloc(strlen(bech32_str) - 6); |
||||
|
data_out = malloc(strlen(bech32_str) - 8); |
||||
|
bech32_decode(hrp_out, data_out, &data_out_len, bech32_str, size); |
||||
|
free(hrp_out); |
||||
|
free(data_out); |
||||
|
} |
||||
|
free(bech32_str); |
||||
|
|
||||
|
data_out = malloc(size); |
||||
|
|
||||
|
/* This is also used as part of sign and check message. */ |
||||
|
data_out_len = 0; |
||||
|
bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 1); |
||||
|
data_out_len = 0; |
||||
|
bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 0); |
||||
|
|
||||
|
addr = malloc(73 + strlen(hrp_addr)); |
||||
|
wit_version = 0; |
||||
|
if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) |
||||
|
segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); |
||||
|
wit_version = 1; |
||||
|
if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) |
||||
|
segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); |
||||
|
free(addr); |
||||
|
|
||||
|
free(data_out); |
||||
|
} |
Loading…
Reference in new issue