Skip to content

Commit

Permalink
Deleted custombloom due drop performance,
Browse files Browse the repository at this point in the history
  • Loading branch information
albertobsd committed Apr 1, 2021
1 parent f204f0d commit 6a92828
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 61 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# Version Last
- Change N variable type for modes address,rmd160 and xpoint, from uint32_t to uint64_t

# Version 0.1.20210331
- Small changes to be compiled with mingw on Windows
- Changed sort funtions and binary search for modes address/rmd160/xpoint, now those modes can load MAX 2^64 items
Expand Down
4 changes: 1 addition & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
default:
gcc -O3 -c bloom/bloom.c -o bloom.o
gcc -O3 -c custombloom/bloom.c -o custombloom.o
gcc -O3 -c sha256/sha256.c -o sha256.o
gcc -O3 -c base58/base58.c -o base58.o
gcc -O3 -c rmd160/rmd160.c -o rmd160.o
gcc -O3 -c sha3/sha3.c -o sha3.o
gcc -O3 -c xxhash/xxhash.c -o xxhash.o
gcc -O3 -c keyhunt.c -o keyhunt.o -lm
gcc -o keyhunt keyhunt.o base58.o rmd160.o sha256.o custombloom.o bloom.o xxhash.o -lgmp -lm -lpthread -ggdb
gcc -o keyhunt keyhunt.o base58.o rmd160.o sha256.o bloom.o xxhash.o -lgmp -lm -lpthread
gcc -O3 hexcharstoraw.c -o hexcharstoraw -lm
gcc -o bPfile bPfile.c -lgmp -lm
clean:
rm -r *.o

26 changes: 0 additions & 26 deletions custombloom/LICENSE

This file was deleted.

65 changes: 33 additions & 32 deletions keyhunt.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ email: alberto.bsd@gmail.com
#include "rmd160/rmd160.h"
#include "sha256/sha256.h"
#include "bloom/bloom.h"
#include "custombloom/bloom.h"
#include "sha3/sha3.h"
#include "util.h"
#ifdef WIN32
Expand Down Expand Up @@ -128,7 +127,7 @@ const char *default_filename = "addresses.txt";
pthread_t *tid = NULL;
pthread_mutex_t write_keys;
pthread_mutex_t write_random;
pthread_mutex_t threads_end;

pthread_mutex_t bsgs_thread;

struct Elliptic_Curve EC;
Expand All @@ -137,7 +136,7 @@ struct Point G;

unsigned int *steps = NULL;
unsigned int *ends = NULL;
uint32_t N = 0;
uint64_t N = 0;
gmp_randstate_t state;

uint64_t N_SECUENTIAL_MAX = 0xffffffff;
Expand All @@ -162,6 +161,7 @@ int FLAGRANDOM = 0;
int FLAG_N = 0;
int FLAGPRECALCUTED_P_FILE = 0;
int FLAGPRECALCUTED_MP_FILE = 0;
int FLAGBLOOMFILTER = 0;

int len_vanity;
int bitrange;
Expand All @@ -180,8 +180,8 @@ int *bsgs_found;
struct Point *OriginalPointsBSGS;
struct bsgs_xvalue *bPtable;
struct address_value *addressTable;
struct custombloom bloom_bP[256];
struct custombloom bloom_bPx2nd; //Second Bloom filter check
struct bloom bloom_bP[256];
struct bloom bloom_bPx2nd; //Second Bloom filter check
uint64_t bloom_bP_totalbytes = 0;
char *precalculated_p_filename;
uint64_t bsgs_m;
Expand Down Expand Up @@ -238,7 +238,7 @@ int main(int argc, char **argv) {
mpz_init_set_ui(TWO,2);


while ((c = getopt(argc, argv, "dehqRwb:c:f:g:k:l:m:n:p:r:s:t:v:-:")) != -1) {
while ((c = getopt(argc, argv, "dehqRwzb:c:f:g:k:l:m:n:p:r:s:t:v:-:")) != -1) {
switch(c) {
case 'h':
printf("\nUsage:\n-h\t\tshow this help\n");
Expand All @@ -250,7 +250,7 @@ int main(int argc, char **argv) {
printf("\t\tYour file MUST be sordted if no you are going to lose collisions\n");
printf("-f file\t\tSpecify filename with addresses or xpoints or uncompressed public keys\n");
printf("-g count\tJust for the stats, mark as counted every debugcount keys \n");
printf("-k value\tUse this with bsgs mode, k value is factor for M, more speed but more RAM use wisely\n");
printf("-k value\tUse this only with bsgs mode, k value is factor for M, more speed but more RAM use wisely\n");
printf("-l look\tWhat type of address/hash160 are you looking for < compress , uncompress , both>\n");
printf("-m mode\t\tmode of search for cryptos. ( bsgs , xpoint , rmd160 , address ) default: address (more slow)\n");
printf("-n uptoN\tCheck for N secuential numbers before the random chossen this only work with -R option\n");
Expand All @@ -263,6 +263,7 @@ int main(int argc, char **argv) {
printf("-t tn\t\tThreads number, must be positive integer\n");
printf("-v va\t\tSearch for vanity Address, only with -m address\n");
printf("-w\t\tMark the input file as RAW data xpoint fixed 32 byte each point. Valid only with -m xpoint\n");
printf("-z\t\tSave and load bloom bloomfilter from File\n");
printf("\t\tUse the hexcharstoraw tool to create a raw file from your current hexadecimal file\n");
printf("\nExample\n\n");
printf("%s -t 16 -r 00000001:FFFFFFFF -s 0\n\n",argv[0]);
Expand Down Expand Up @@ -467,6 +468,10 @@ int main(int argc, char **argv) {
printf("[+] Data marked as RAW\n");
FLAGRAWDATA = 1;
break;
case 'z':
printf("[+] Bloom filter marked to be saved\n");
FLAGBLOOMFILTER = 1;
break;
default:
printf("[E] Unknow opcion %c\n",c);
break;
Expand Down Expand Up @@ -539,7 +544,6 @@ int main(int argc, char **argv) {
}
}
}

N =0;
if(FLAGMODE != MODE_BSGS) {
aux = malloc(1000);
Expand Down Expand Up @@ -615,18 +619,18 @@ int main(int argc, char **argv) {
}
fseek(fd,0,SEEK_SET);

printf("[+] Allocating memory for %u elements: %.2f MB\n",N,(double)(sizeof(struct address_value)*N)/1048576);
printf("[+] Allocating memory for %"PRIu64" elements: %.2f MB\n",N,(double)(sizeof(struct address_value)*N)/1048576);
i = 0;

do {
addressTable = malloc(sizeof(struct address_value)*N);
i++;
} while(addressTable == NULL && i < 10);
if(addressTable == NULL) {
fprintf(stderr,"[E] Can't alloc memory for %u elements\n",N);
fprintf(stderr,"[E] Can't alloc memory for %"PRIu64" elements\n",N);
exit(0);
}
printf("[+] Initializing bloom filter for %u elements.\n",N);
printf("[+] Initializing bloom filter for %"PRIu64" elements.\n",N);
if(N <= 1000) {
if(bloom_init2(&bloom,1000,0.00001) == 1){
fprintf(stderr,"[E] error bloom_init for 10000 elements.\n");
Expand All @@ -640,7 +644,7 @@ int main(int argc, char **argv) {
exit(0);
}
}
printf("[+] Loading data to the bloomfilter\n");
printf("[+] Loading data to the bloomfilter total: %.2f MB\n",(double)(((double) bloom.bytes)/(double)1048576));
i = 0;
switch (FLAGMODE) {
case MODE_ADDRESS:
Expand Down Expand Up @@ -807,13 +811,13 @@ int main(int argc, char **argv) {
printf("[+] Bloomfilter completed\n");
if(FLAGALREADYSORTED) {
printf("[+] File mark already sorted, skipping sort proccess\n");
printf("[+] %i values were loaded\n",N);
printf("[+] %"PRIu64" values were loaded\n",N);
_sort(addressTable,N);
}
else {
printf("[+] Sorting data\n");
_sort(addressTable,N);
printf("[+] %i values were loaded and sorted\n",N);
printf("[+] %"PRIu64" values were loaded and sorted\n",N);
}
}
if(FLAGMODE == MODE_BSGS) {
Expand Down Expand Up @@ -1031,35 +1035,35 @@ int main(int argc, char **argv) {

for(i=0; i< 256; i++) {
if(((int)(bsgs_m/256)) > 1000) {
if(custombloom_init2(&bloom_bP[i],(int)(bsgs_m/256),0.000001) == 1){
if(bloom_init2(&bloom_bP[i],(int)(bsgs_m/256),0.000001) == 1){
fprintf(stderr,"[E] error bloom_init [%"PRIu64"]\n",i);
exit(0);
}
}
else {
if(custombloom_init2(&bloom_bP[i],1000,0.000001) == 1){
if(bloom_init2(&bloom_bP[i],1000,0.000001) == 1){
fprintf(stderr,"[E] error bloom_init for 1000 elements [%"PRIu64"]\n",i);
exit(0);
}
}
bloom_bP_totalbytes += bloom_bP[i].bytes;
if(FLAGDEBUG) custombloom_print(&bloom_bP[i]);
if(FLAGDEBUG) bloom_print(&bloom_bP[i]);
}
printf("[+] Init 1st bloom filter for %lu elements : %.2f MB\n",bsgs_m,(float)((uint64_t)bloom_bP_totalbytes/(uint64_t)1048576));

if(bsgs_m2 > 1000) {
if(custombloom_init2(&bloom_bPx2nd,bsgs_m2,0.000001) == 1){
if(bloom_init2(&bloom_bPx2nd,bsgs_m2,0.000001) == 1){
fprintf(stderr,"[E] error bloom_init for %lu elements\n",bsgs_m2);
exit(0);
}
}
else {
if(custombloom_init2(&bloom_bPx2nd,1000,0.000001) == 1){
if(bloom_init2(&bloom_bPx2nd,1000,0.000001) == 1){
fprintf(stderr,"[E] error bloom_init for 1000 elements\n");
exit(0);
}
}
if(FLAGDEBUG) custombloom_print(&bloom_bPx2nd);
if(FLAGDEBUG) bloom_print(&bloom_bPx2nd);
printf("[+] Init 2nd bloom filter for %lu elements : %.2f MB\n",bsgs_m2,(double)((double)bloom_bPx2nd.bytes/(double)1048576));
//bloom_print(&bloom_bPx2nd);

Expand Down Expand Up @@ -1295,8 +1299,6 @@ int main(int argc, char **argv) {
}
}
}while(continue_flag);


}

void Point_Doubling(struct Point *P, struct Point *R) {
Expand Down Expand Up @@ -2128,7 +2130,7 @@ void *thread_process_bsgs(void *vargp) {
//printf("Looking X : %s\n",xpoint_str);
/* Lookup for the xpoint_raw into the bloom filter*/

r = custombloom_check(&bloom_bP[((unsigned char)xpoint_raw[0])],xpoint_raw,32);
r = bloom_check(&bloom_bP[((unsigned char)xpoint_raw[0])],xpoint_raw,32);
if(r) {
bloom_counter++;
/* Lookup for the xpoint_raw into the full sorted list*/
Expand Down Expand Up @@ -2277,7 +2279,7 @@ void *thread_process_bsgs_random(void *vargp) {
gmp_sprintf(xpoint_str,"%0.64Zx",BSGS_S.x);
hexs2bin(xpoint_str,(unsigned char*)xpoint_raw);

r = custombloom_check(&bloom_bP[((unsigned char)xpoint_raw[0])],xpoint_raw,32);
r = bloom_check(&bloom_bP[((unsigned char)xpoint_raw[0])],xpoint_raw,32);
if(r) {
bloom_counter++;
/* Lookup for the xpoint_raw into the full sorted list*/
Expand Down Expand Up @@ -2379,7 +2381,7 @@ int bsgs_secondcheck(mpz_t start_range,uint32_t a,struct Point *target,mpz_t *pr
do {
gmp_sprintf(xpoint_str,"%0.64Zx",BSGS_S.x);
hexs2bin(xpoint_str,(unsigned char*)xpoint_raw);
r = custombloom_check(&bloom_bPx2nd,xpoint_raw,32);
r = bloom_check(&bloom_bPx2nd,xpoint_raw,32);
if(r) {
//printf("bloom_bPx2nd MAYBE!!\n");
/* Lookup for the xpoint_raw into the full sorted list*/
Expand Down Expand Up @@ -2453,10 +2455,10 @@ void *thread_bPload(void *vargp) {
if(i < bsgs_m2) {
memcpy(bPtable[j].value,rawvalue+16,BSGS_XVALUE_RAM);
bPtable[j].index = j;
custombloom_add(&bloom_bPx2nd, rawvalue, BSGS_BUFFERXPOINTLENGTH);
bloom_add(&bloom_bPx2nd, rawvalue, BSGS_BUFFERXPOINTLENGTH);
j++;
}
custombloom_add(&bloom_bP[((uint8_t)rawvalue[0])], rawvalue ,BSGS_BUFFERXPOINTLENGTH);
bloom_add(&bloom_bP[((uint8_t)rawvalue[0])], rawvalue ,BSGS_BUFFERXPOINTLENGTH);
Point_Addition(&G,&temp,&P);
i++;
tt->counter++;
Expand All @@ -2473,7 +2475,6 @@ void *thread_bPloadFile(void *vargp) {
FILE *fd;
char rawvalue[32];
struct bPload *tt;

uint32_t j;
uint64_t i;
tt = (struct bPload *)vargp;
Expand All @@ -2484,19 +2485,19 @@ void *thread_bPloadFile(void *vargp) {
}
i = tt->from -1;
j = tt->from -1;
if(fseek(fd,i*32,SEEK_SET) != 0) {
fprintf(stderr,"Can't seek the file\n");
if(fseek(fd,(uint64_t)(i*32),SEEK_SET) != 0) {
fprintf(stderr,"Can't seek the file at index %"PRIu64", offset %"PRIu64"\n",i,(uint64_t)(i*32));
exit(0);
}
do {
if(fread(rawvalue,1,32,fd) == 32) {
if(i < bsgs_m2) {
memcpy(bPtable[j].value,rawvalue+16,BSGS_XVALUE_RAM);
bPtable[j].index = j;
custombloom_add(&bloom_bPx2nd, rawvalue, BSGS_BUFFERXPOINTLENGTH);
bloom_add(&bloom_bPx2nd, rawvalue, BSGS_BUFFERXPOINTLENGTH);
j++;
}
custombloom_add(&bloom_bP[((uint8_t)rawvalue[0])], rawvalue ,BSGS_BUFFERXPOINTLENGTH);
bloom_add(&bloom_bP[((uint8_t)rawvalue[0])], rawvalue ,BSGS_BUFFERXPOINTLENGTH);
i++;
tt->counter++;
}
Expand Down

0 comments on commit 6a92828

Please sign in to comment.