| 11 | } |
| 12 | |
| 13 | void run(const uint8_t *data, size_t size) |
| 14 | { |
| 15 | const char hrp_inv[5] = "lnbc\0", hrp_addr[3] = "bc\0"; |
| 16 | char *bech32_str, *hrp_out, *addr; |
| 17 | uint8_t *data_out; |
| 18 | size_t data_out_len; |
| 19 | int wit_version; |
| 20 | bech32_encoding benc; |
| 21 | |
| 22 | /* Buffer size is defined in each function's doc comment. */ |
| 23 | bech32_str = malloc(size + strlen(hrp_inv) + 8); |
| 24 | benc = data[0] ? BECH32_ENCODING_BECH32 : BECH32_ENCODING_BECH32M; |
| 25 | /* FIXME: needs a dictionary / a startup seed corpus to pass this more |
| 26 | * frequently. */ |
| 27 | if (bech32_encode(bech32_str, hrp_inv, data+1, size-1, size-1, benc) == 1) { |
| 28 | hrp_out = malloc(strlen(bech32_str) - 6); |
| 29 | data_out = malloc(strlen(bech32_str) - 8); |
| 30 | assert(bech32_decode(hrp_out, data_out, &data_out_len, bech32_str, size) == benc); |
| 31 | free(hrp_out); |
| 32 | free(data_out); |
| 33 | } |
| 34 | free(bech32_str); |
| 35 | |
| 36 | data_out = malloc(size); |
| 37 | |
| 38 | /* This is also used as part of sign and check message. */ |
| 39 | data_out_len = 0; |
| 40 | bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 1); |
| 41 | data_out_len = 0; |
| 42 | bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 0); |
| 43 | |
| 44 | addr = malloc(73 + strlen(hrp_addr)); |
| 45 | wit_version = 0; |
| 46 | if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) |
| 47 | segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); |
| 48 | wit_version = 1; |
| 49 | if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) |
| 50 | segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); |
| 51 | free(addr); |
| 52 | |
| 53 | free(data_out); |
| 54 | } |
nothing calls this directly
no test coverage detected