MCPcopy Create free account
hub / github.com/ElementsProject/lightning / from_bech32_charset

Function from_bech32_charset

common/bech32_util.c:74–120  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72}
73
74bool from_bech32_charset(const tal_t *ctx,
75 const char *bech32,
76 size_t bech32_len,
77 char **hrp, u8 **data)
78{
79 u5 *u5data;
80 const char *sep;
81 bool upper = false, lower = false;
82 size_t datalen;
83
84 sep = memchr(bech32, '1', bech32_len);
85 if (!sep)
86 return false;
87
88 *hrp = tal_strndup(ctx, bech32, sep - bech32);
89 for (size_t i = 0; i < strlen(*hrp); i++)
90 (*hrp)[i] = fixup_char((*hrp)[i], &upper, &lower);
91
92 datalen = bech32_len - (sep + 1 - bech32);
93 u5data = tal_arr(NULL, u5, datalen);
94 for (size_t i = 0; i < datalen; i++) {
95 int c = sep[1+i];
96 c = fixup_char(c, &upper, &lower);
97 if (c < 0 || c >= 128)
98 goto fail;
99 if (bech32_charset_rev[c] == -1)
100 goto fail;
101 u5data[i] = bech32_charset_rev[c];
102 }
103
104 /* Check case consistency */
105 if (upper && lower)
106 goto fail;
107
108 *data = tal_arr(ctx, u8, 0);
109 if (!bech32_pull_bits(data, u5data, tal_bytelen(u5data) * 5)) {
110 tal_free(*data);
111 goto fail;
112 }
113 tal_free(u5data);
114 return true;
115
116fail:
117 *hrp = tal_free(*hrp);
118 tal_free(u5data);
119 return false;
120}
121
122/* BOLT #12:
123 * # Encoding

Callers 3

b12_string_to_dataFunction · 0.70
createinvoice_doneFunction · 0.50
mainFunction · 0.50

Calls 4

fixup_charFunction · 0.85
bech32_pull_bitsFunction · 0.85
tal_bytelenFunction · 0.85
tal_freeFunction · 0.85

Tested by

no test coverage detected