@@ -39,13 +39,28 @@ void run(const uint8_t *data, size_t size)
39
39
assert (memcmp (data_out , data + 1 , data_out_len ) == 0 );
40
40
}
41
41
42
- data_out = tal_arr (tmpctx , uint8_t , size );
42
+ /* Convert data to 5-bit values (0-31) */
43
+ u8 * five_bit_data = tal_dup_arr (tmpctx , u8 , data , size , 0 );
44
+ for (size_t i = 0 ; i < size ; i ++ )
45
+ five_bit_data [i ] &= 0x1F ;
43
46
44
- /* This is also used as part of sign and check message. */
45
- data_out_len = 0 ;
46
- bech32_convert_bits (data_out , & data_out_len , 8 , data , size , 5 , 1 );
47
+ u8 * eight_bit_data = tal_arr (tmpctx , u8 , size );
48
+ size_t eight_bit_len = 0 ;
49
+ /* Convert 5-to-8 without padding */
50
+ if (bech32_convert_bits (eight_bit_data , & eight_bit_len , 8 ,
51
+ five_bit_data , size , 5 , 0 )) {
52
+ u8 * five_bit_deconv = tal_arr (tmpctx , u8 , size );
53
+ size_t five_bit_deconv_len = 0 ;
54
+ /* Convert 8-to-5 with padding */
55
+ if (bech32_convert_bits (five_bit_deconv , & five_bit_deconv_len , 5 ,
56
+ eight_bit_data , eight_bit_len , 8 , 1 )) {
57
+ assert (five_bit_deconv_len == size );
58
+ assert (memcmp (five_bit_data , five_bit_deconv , five_bit_deconv_len ) == 0 );
59
+ }
60
+ }
61
+
62
+ data_out = tal_arr (tmpctx , uint8_t , size );
47
63
data_out_len = 0 ;
48
- bech32_convert_bits (data_out , & data_out_len , 8 , data , size , 5 , 0 );
49
64
50
65
addr = tal_arr (tmpctx , char , 73 + strlen (hrp_addr ));
51
66
for (int wit_version = 0 ; wit_version <= 16 ; ++ wit_version ) {
0 commit comments