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

Function from_bech32_charset

common/bech32_util.c:63–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61}
62
63bool from_bech32_charset(const tal_t *ctx,
64 const char *bech32,
65 size_t bech32_len,
66 char **hrp, u8 **data)
67{
68 u5 *u5data;
69 const char *sep;
70 bool upper = false, lower = false;
71 size_t datalen;
72
73 sep = memchr(bech32, '1', bech32_len);
74 if (!sep)
75 return false;
76
77 *hrp = tal_strndup(ctx, bech32, sep - bech32);
78 for (size_t i = 0; i < strlen(*hrp); i++)
79 (*hrp)[i] = fixup_char((*hrp)[i], &upper, &lower);
80
81 datalen = bech32_len - (sep + 1 - bech32);
82 u5data = tal_arr(NULL, u5, datalen);
83 for (size_t i = 0; i < datalen; i++) {
84 int c = sep[1+i];
85 if (c < 0 || c > 128)
86 goto fail;
87 c = fixup_char(c, &upper, &lower);
88 if (bech32_charset_rev[c] == -1)
89 goto fail;
90 u5data[i] = bech32_charset_rev[c];
91 }
92
93 /* Check case consistency */
94 if (upper && lower)
95 goto fail;
96
97 *data = tal_arr(ctx, u8, 0);
98 bech32_pull_bits(data, u5data, tal_bytelen(u5data) * 5);
99 tal_free(u5data);
100 return true;
101
102fail:
103 *hrp = tal_free(*hrp);
104 tal_free(u5data);
105 return false;
106}
107
108char *to_bech32_charset(const tal_t *ctx,
109 const char *hrp, const u8 *data)

Callers 3

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