There is a formula by which private keys are generated, from which public keys are then obtained: privateKey = seedPrivateKey + iterator; publicKey = privateKey * G; seedPrivateKey is the seed private key (which I know), iterator is two numbers represented in the code:
cl_ulong carry = 0;
cl_ulong4 seedRes;
seedRes.s[0] = seed.s[0] + round;
carry = seedRes.s[0] < round;
seedRes.s[1] = seed.s[1] + carry;
carry = !seedRes.s[1];
seedRes.s[2] = seed.s[2] + carry;
carry = !seedRes.s[2];
seedRes.s[3] = seed.s[3] + carry + r.foundId;
std::ostringstream ss;
ss << std::hex << std::setfill('0');
ss << std::setw(16) << seedRes.s[3] << std::setw(16) << seedRes.s[2] << std::setw(16) << seedRes.s[1] << std::setw(16) << seedRes.s[0];
//private key
const std::string privateKey = ss.str();
//The next step is to get the public key (privateKey * G)
...
round is a variable that constantly increases by one; foundId is a variable, no matter how it is obtained; I can get the initial private key from the generated public key by constantly decreasing and comparing it with the initial public key (until they equalize) using this formula seedPublicKey = publicKey - iterator * G, where publicKey is one of the generated public keys, iterator is the round and foundId variables, G is the eliptic curve point (sec256k1). The problem is that I don't know how to multiply these two numbers by G and then subtract the result from publicKey.