static int brainv2pass2hash160(unsigned char *pass, size_t pass_sz) { unsigned char hexout[33]; int ret; if ((ret = brainv2(pass, pass_sz, kdfsalt, kdfsalt_sz, hexout)) != 0) return ret; pass[pass_sz] = 0; return pass2hash160(hexout, sizeof(hexout)-1); }
static int brainv2salt2hash160(unsigned char *salt, size_t salt_sz) { unsigned char hexout[33]; int ret; if ((ret = brainv2(kdfpass, kdfpass_sz, salt, salt_sz, hexout)) != 0) return ret; salt[salt_sz] = 0; return pass2hash160(hexout, sizeof(hexout)-1); }
int main(int argc, char **argv) { char *line = NULL; size_t line_sz = 0; secp256k1_start(); /* use line buffered output */ setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IONBF, 0); if (argc == 2) { if ((bloom = bloom_open(argv[1])) == NULL) { fprintf(stderr, "failed to open bloom filter.\n"); exit(1); } } else if (argc > 2) { fprintf(stderr, "too many arguments\n"); exit(1); } while (getline(&line, &line_sz, stdin) > 0) { line[strlen(line)-1] = 0; pass2hash160(line, strlen(line)); if (argc == 2) { if (bloom_chk_hash160(bloom, hash160_uncmp.ul)) { fprintf(stdout, "matched: %08x%08x%08x%08x%08x:u:%s\n", ntohl(hash160_uncmp.ul[0]), ntohl(hash160_uncmp.ul[1]), ntohl(hash160_uncmp.ul[2]), ntohl(hash160_uncmp.ul[3]), ntohl(hash160_uncmp.ul[4]), line); } if (bloom_chk_hash160(bloom, hash160_compr.ul)) { fprintf(stdout, "matched: %08x%08x%08x%08x%08x:c:%s\n", ntohl(hash160_compr.ul[0]), ntohl(hash160_compr.ul[1]), ntohl(hash160_compr.ul[2]), ntohl(hash160_compr.ul[3]), ntohl(hash160_compr.ul[4]), line); } } else { fprintf(stdout, "%08x%08x%08x%08x%08x:u:%s\n", ntohl(hash160_uncmp.ul[0]), ntohl(hash160_uncmp.ul[1]), ntohl(hash160_uncmp.ul[2]), ntohl(hash160_uncmp.ul[3]), ntohl(hash160_uncmp.ul[4]), line); fprintf(stdout, "%08x%08x%08x%08x%08x:c:%s\n", ntohl(hash160_compr.ul[0]), ntohl(hash160_compr.ul[1]), ntohl(hash160_compr.ul[2]), ntohl(hash160_compr.ul[3]), ntohl(hash160_compr.ul[4]), line); } } secp256k1_stop(); return 0; }