char *SuperNET_parsemainargs(struct supernet_info *myinfo,bits256 *wallethashp,bits256 *wallet2privp,char *argjsonstr) { cJSON *exchanges=0,*json = 0; char *wallet2fname,*coinargs=0,*secret,*filestr; long allocsize; bits256 wallethash,wallet2priv; int32_t n,len; uint8_t secretbuf[8192]; wallethash = wallet2priv = GENESIS_PRIVKEY; if ( argjsonstr != 0 ) { if ( (filestr= OS_filestr(&allocsize,argjsonstr)) != 0 ) { json = cJSON_Parse(filestr); free(filestr); } if ( json != 0 || (json= cJSON_Parse(argjsonstr)) != 0 ) { printf("ARGSTR.(%s)\n",argjsonstr); if ( jobj(json,"numhelpers") != 0 ) IGUANA_NUMHELPERS = juint(json,"numhelpers"); if ( (secret= jstr(json,"passphrase")) != 0 ) { len = (int32_t)strlen(secret); if ( is_hexstr(secret,0) != 0 && len == 128 ) { len >>= 1; decode_hex(secretbuf,len,secret); } else vcalc_sha256(0,secretbuf,(void *)secret,len), len = sizeof(bits256);
bits256 SuperNET_wallet2priv(char *wallet2fname,bits256 wallethash) { char *wallet2str; uint32_t r,i,crc; long allocsize; bits256 wallet2priv; wallet2priv = GENESIS_PRIVKEY; if ( wallet2fname[0] != 0 && (wallet2str= OS_filestr(&allocsize,wallet2fname)) != 0 ) { r = crc = calc_crc32(0,wallet2str,(int32_t)allocsize); r %= 32; for (i=0; i<allocsize; i++) wallet2str[i] ^= wallethash.bytes[(i + r) % 32]; vcalc_sha256(0,wallet2priv.bytes,(void *)wallet2str,(int32_t)allocsize); free(wallet2str); //char str[65]; printf("wallet2priv.(%s) from.(%s) crc.%u and passphrase r.%d len.%ld\n",bits256_str(str,wallet2priv),wallet2fname,crc,r,allocsize); } else if ( wallet2fname[0] != 0 ) printf("SuperNET_wallet2priv cant open (%s)\n",wallet2fname); return(wallet2priv); }
int32_t main(int32_t argc,char **argv) { cJSON *argjson,*array,*filejson,*obj,*fobj; char *fname,*filestr,*fstr,*str,*field; int32_t i,n; long filesize; printf("argv[2]: %s\n",argv[2]); if ( argc > 2 && (argjson= cJSON_Parse(argv[2])) != 0 ) { fname = argv[1]; printf("got file: %s\n",fname); if ( (filestr= OS_filestr(&filesize,fname)) != 0 ) { if ( (filejson= cJSON_Parse(filestr)) != 0 ) { if ( (array= jarray(&n,argjson,"fields")) != 0 ) { for (i=0; i<n; i++) { obj = jitem(array,i); if ( (field= jfieldname(obj)) != 0 && (obj= obj->child) != 0 ) { if ( (fobj= jobj(filejson,field)) != 0 ) { fstr = jprint(fobj,0); str = jprint(obj,0); if ( strcmp(fstr,str) != 0 ) { printf("{\"error\":\"field.(%s) in (%s) i.%d of n.%d mismatch (%s) != (%s)\"}\n",field,fname,i,n,fstr,str); fprintf(stderr,"{\"error\":\"field.(%s) in (%s) i.%d of n.%d mismatch (%s) != (%s)\"}\n",field,fname,i,n,fstr,str); } else printf("{\"result\":\"MATCHED.[%s] (%s).(%s)\"}\n",fname,field,fstr); free(str); free(fstr); } else fprintf(stderr,"cant find field.(%s) in (%s)\n",field,fname); } else fprintf(stderr,"no fieldname array[%d]\n",i); } } else fprintf(stderr,"no fields array\n"); free_json(filejson); } else fprintf(stderr,"cant parse.(%s)\n",filestr); free(filestr); } else fprintf(stderr,"cant load (%s)\n",fname); } else fprintf(stderr,"argc.%d fname.(%s) error\n",argc,argv[1]); }