Skip to content

Instantly share code, notes, and snippets.

@jonasschnelli
Created June 3, 2018 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonasschnelli/a820d1c937c58292d388f83c1c5aef94 to your computer and use it in GitHub Desktop.
Save jonasschnelli/a820d1c937c58292d388f83c1c5aef94 to your computer and use it in GitHub Desktop.
Simple 4 char bech32 bruteforce
char hrp[8];
char bech32_str[128] = "xp1qqqqqq8z4rsgv54z9a92yla4m2yrsqdlwdl7gn6qldvwkuh3zrg66z8ad2snf832tgaxcuv3kmwugzl5x8wtnkj2q3a03ky0kg8p7dvv4czpjqgvv4zgn";
int range[4] = {10, 15, 20, 36};
uint8_t dblcheck5[100] = {};
size_t dblcheck5_len = 0;
if (!bech32_decode(hrp, dblcheck5, &dblcheck5_len, bech32_str)) {
printf("bech32_decode fails: '%s'\n", bech32_str);
}
uint8_t dblcheck8[128] = {};
size_t dblcheck8_len = 0;
convert_bits(dblcheck8, &dblcheck8_len, 8, dblcheck5, dblcheck5_len, 5, 1);
int rcnt[4] = {0,0,0,0};
char ochar[4] = {bech32_str[range[0]],bech32_str[range[1]],bech32_str[range[2]],bech32_str[range[3]]};
int total = 0;
btc_hdnode *node = btc_hdnode_new();
char addr[128];
while(1) {
dblcheck8_len = 0;
bech32_str[range[0]] = charset[rcnt[0]];
bech32_str[range[1]] = charset[rcnt[1]];
bech32_str[range[2]] = charset[rcnt[2]];
bech32_str[range[3]] = charset[rcnt[3]];
if (!bech32_decode(hrp, dblcheck5, &dblcheck5_len, bech32_str)) {
}
convert_bits(dblcheck8, &dblcheck8_len, 8, dblcheck5, dblcheck5_len, 5, 1);
memcpy(node->chain_code, dblcheck8+8, 32);
memcpy(node->private_key, dblcheck8+8+32, 32);
btc_hdnode_private_ckd(node, 1);
btc_hdnode_get_p2pkh_address(node, &btc_chainparams_main, addr, 128);
rcnt[3]++;
if (rcnt[3]>31) {
rcnt[2]++;rcnt[3]=0;
printf("stupup l2: %d %d %d %d\n", rcnt[0], rcnt[1], rcnt[2], rcnt[3]);
if (rcnt[2]>31) {
rcnt[1]++;rcnt[2]=0;
if (rcnt[1]>31) {
rcnt[0]++;rcnt[1]=0;
if (rcnt[0]>31) {
break;
}
}
}
}
total++;
}
printf("total: %d\n", total);
exit(1);
}
@jonasschnelli
Copy link
Author

Compiled with -O0 (should probably compile -O2). Code runs non-parallelized.

total: 1048575

real	1m5.231s
user	1m4.056s
sys	0m0.796s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment