Advertisement
Guest User

Untitled

a guest
Sep 25th, 2016
1,194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <openssl/sha.h>
  6.  
  7. const char *coin_err;
  8. #define bail(s) { coin_err = s; return 0; }
  9.  
  10. int unbase58(const char *s, unsigned char *out, const int compressed) {
  11.     static const char *tmpl = "123456789"
  12.         "ABCDEFGHJKLMNPQRSTUVWXYZ"
  13.         "abcdefghijkmnopqrstuvwxyz";
  14.     int i, j, c, js = compressed ? 38 : 37;
  15.     const char *p;
  16.  
  17.     memset(out, 0, 40);
  18.     for (i = 0; s[i]; i++) {
  19.         if (!(p = strchr(tmpl, s[i])))
  20.             bail("bad char");
  21.  
  22.         c = p - tmpl;
  23.         for (j = js; j--; ) {
  24.             c += 58 * out[j];
  25.             out[j] = c % 256;
  26.             c /= 256;
  27.         }
  28.  
  29.         if (c) bail("address too long");
  30.     }
  31.  
  32.     return 1;
  33. }
  34.  
  35. int valid(const char *s, const int compressed) {
  36.     unsigned char dec[40], d1[SHA256_DIGEST_LENGTH], d2[SHA256_DIGEST_LENGTH];
  37.     int len = compressed ? 34 : 33;
  38.  
  39.     coin_err = "";
  40.     if (!unbase58(s, dec, compressed)) return 0;
  41.  
  42.     SHA256(SHA256(dec, len, d1), SHA256_DIGEST_LENGTH, d2);
  43.  
  44.     if (memcmp(dec + len, d2, 4))
  45.         bail("bad digest");
  46.  
  47.     return 1;
  48. }
  49.  
  50. #define C_1_INDEX 9
  51. #define C_2_INDEX 19
  52. #define C_3_INDEX 28
  53. #define C_4_INDEX 36
  54. #define C_5_INDEX 49
  55.  
  56. int main (void) {
  57.     const char *chars = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
  58.     int compressed;
  59.     char addr[100];
  60.     strcpy(addr, "KwDiBf89Q-GbjEhKnhX-uH7LrciV-Zi3qYjg-9M7rFU73sVHn-Wn");
  61.     compressed = addr[0] == 'K' || addr[0] == 'L';
  62.  
  63.     int i;
  64.     for (i = 0; addr[i]; i++) {
  65.         if (addr[i] == '-') printf("index: %d\n", i);
  66.     }
  67.  
  68.     int c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, status;
  69.     float startTime, endTime;
  70.     for (c1 = 0; c1 < 58; c1++) {
  71.         addr[C_1_INDEX] = chars[c1];
  72.         for (c2 = 0; c2 < 58; c2++) {
  73.             addr[C_2_INDEX] = chars[c2];
  74.             printf("Test: %c%c...", chars[c1], chars[c2]);fflush(stdout);
  75.             startTime = (float)clock()/CLOCKS_PER_SEC;
  76.             for (c3 = 0; c3 < 58; c3++) {
  77.                 addr[C_3_INDEX] = chars[c3];
  78.                 for (c4 = 0; c4 < 58; c4++) {
  79.                     addr[C_4_INDEX] = chars[c4];
  80.                     for (c5 = 0; c5 < 58; c5++) {
  81.                         addr[C_5_INDEX] = chars[c5];
  82.                         status = valid(addr, compressed);
  83.                         if (status) {
  84.                             printf("\nFOUND: %s\n", addr);
  85.                             return 1;
  86.                         }
  87.                     }
  88.                 }
  89.             }
  90.             endTime = (float)clock()/CLOCKS_PER_SEC;
  91.             printf("%fs\n", (endTime-startTime));
  92.         }
  93.     }
  94.  
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement