Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #include <openssl/sha.h>
- const char *coin_err;
- #define bail(s) { coin_err = s; return 0; }
- int unbase58(const char *s, unsigned char *out, const int compressed) {
- static const char *tmpl = "123456789"
- "ABCDEFGHJKLMNPQRSTUVWXYZ"
- "abcdefghijkmnopqrstuvwxyz";
- int i, j, c, js = compressed ? 38 : 37;
- const char *p;
- memset(out, 0, 40);
- for (i = 0; s[i]; i++) {
- if (!(p = strchr(tmpl, s[i])))
- bail("bad char");
- c = p - tmpl;
- for (j = js; j--; ) {
- c += 58 * out[j];
- out[j] = c % 256;
- c /= 256;
- }
- if (c) bail("address too long");
- }
- return 1;
- }
- int valid(const char *s, const int compressed) {
- unsigned char dec[40], d1[SHA256_DIGEST_LENGTH], d2[SHA256_DIGEST_LENGTH];
- int len = compressed ? 34 : 33;
- coin_err = "";
- if (!unbase58(s, dec, compressed)) return 0;
- SHA256(SHA256(dec, len, d1), SHA256_DIGEST_LENGTH, d2);
- if (memcmp(dec + len, d2, 4))
- bail("bad digest");
- return 1;
- }
- #define C_1_INDEX 9
- #define C_2_INDEX 19
- #define C_3_INDEX 28
- #define C_4_INDEX 36
- #define C_5_INDEX 49
- int main (void) {
- const char *chars = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
- int compressed;
- char addr[100];
- strcpy(addr, "KwDiBf89Q-GbjEhKnhX-uH7LrciV-Zi3qYjg-9M7rFU73sVHn-Wn");
- compressed = addr[0] == 'K' || addr[0] == 'L';
- int i;
- for (i = 0; addr[i]; i++) {
- if (addr[i] == '-') printf("index: %d\n", i);
- }
- int c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, status;
- float startTime, endTime;
- for (c1 = 0; c1 < 58; c1++) {
- addr[C_1_INDEX] = chars[c1];
- for (c2 = 0; c2 < 58; c2++) {
- addr[C_2_INDEX] = chars[c2];
- printf("Test: %c%c...", chars[c1], chars[c2]);fflush(stdout);
- startTime = (float)clock()/CLOCKS_PER_SEC;
- for (c3 = 0; c3 < 58; c3++) {
- addr[C_3_INDEX] = chars[c3];
- for (c4 = 0; c4 < 58; c4++) {
- addr[C_4_INDEX] = chars[c4];
- for (c5 = 0; c5 < 58; c5++) {
- addr[C_5_INDEX] = chars[c5];
- status = valid(addr, compressed);
- if (status) {
- printf("\nFOUND: %s\n", addr);
- return 1;
- }
- }
- }
- }
- endTime = (float)clock()/CLOCKS_PER_SEC;
- printf("%fs\n", (endTime-startTime));
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement