Hi, i'm having some issues saving the private key once found, it does not get saved?
It does not save. Are you compiling your own version? If so, I can give you a code snippet to add to source file that will generate a saved file with pub and priv key.
No i'm just using the release version, ah that's a little concerning, would be nice to save in case of a power outage, crash or accidental cmd close.
It looks something like this:
in Kangaroo.cpp
bool Kangaroo::output(string msg) {
FILE *f = stdout;
f = fopen("Result.txt", "a");
if (f == NULL) {
printf("[error] Cannot open file Result.txt for writing! \n");
f = stdout;
return false;
}
else {
fprintf(f, "%s\n", msg.c_str());
fclose(f);
printf("[i] Success saved to file Result.txt\n");
return true;
}
}
and
bool Kangaroo::CheckKey(Int d1,Int d2,uint8_t type) {
// Resolve equivalence collision
if(type & 0x1)
d1.ModNegK1order();
if(type & 0x2)
d2.ModNegK1order();
Int pk(&d1);
pk.ModAddK1order(&d2);
Point P = secp->ComputePublicKey(&pk);
if(P.equals(keyToSearch)) {
// Key solved
#ifdef USE_SYMMETRY
pk.ModAddK1order(&rangeWidthDiv2);
#endif
pk.ModAddK1order(&rangeStart);
Point PR = secp->ComputePublicKey(&pk);
::printf("\nKey#%2d [%dN]Pub: 0x%s \n",keyIdx,type,secp->GetPublicKeyHex(true,keysToSearch[keyIdx]).c_str());
// Save Priv
std::string prvkey = pk.GetBase16().c_str();
bool save_pk = output(prvkey + string(":") + string("04") + PR.x.GetBase16().c_str() + PR.y.GetBase16().c_str() );
if( PR.equals(keysToSearch[keyIdx]) ) {
::printf(" Priv: 0x%s \n",pk.GetBase16().c_str());
} else {
::printf(" Failed !\n");
::printf(" Priv: 0x%s \n",pk.GetBase16().c_str());
return false;
}
return true;
}
if(P.equals(keyToSearchNeg)) {
// Key solved
pk.ModNegK1order();
#ifdef USE_SYMMETRY
pk.ModAddK1order(&rangeWidthDiv2);
#endif
pk.ModAddK1order(&rangeStart);
Point PR = secp->ComputePublicKey(&pk);
::printf("\nKey#%2d [%dS]Pub: 0x%s \n",keyIdx,type,secp->GetPublicKeyHex(true,keysToSearch[keyIdx]).c_str());
// Save Priv
std::string prvkeyNeg = pk.GetBase16().c_str();
bool save_pk = output(prvkeyNeg + string(":") + string("04") + PR.x.GetBase16().c_str() + PR.y.GetBase16().c_str() );
if(PR.equals(keysToSearch[keyIdx]) ) {
::printf(" Priv: 0x%s \n",pk.GetBase16().c_str());
} else {
::printf(" Failed !\n");
::printf(" Priv: 0x%s \n",pk.GetBase16().c_str());
return false;
}
return true;
}
return false;
}
Add in Kangaroo.h
bool output(std::string msg);
But I do not need this, I use my version. Where the problem with RAM is solved, can change the number of files to save DP. But the problems with disk space have begun

GPU #0 Tesla P100-PCIE-16GB (56x64 cores) Grid(112x128) (177.0 MB used; GRP size: 128)


Maybe it will be on Github.