Closed alekssolov closed 5 months ago
There is no way to conver a single value ( array oflong long unsigned int x[4]
) to a point you need at least two values x and y and i don't see how to use it.
To be honest keyhunt doesn't relay on ComputePublicKey too much, it is only called a few times to conver the intermediate Base keys into publickeys, but 99.9999% part of the remaning process depends only of public key point addition and some other shortcuts.
To albertobsd. You wrote: "There is no way to conver a single value ( array of long long unsigned int x[4] ) to a point you need at least two values x and y and i don't see how to use it." Answer:
typedef struct { BN_ULONG X[P256_LIMBS]; BN_ULONG Y[P256_LIMBS]; BN_ULONG Z[P256_LIMBS]; } POINT256; POINT256 point; BN_ULONG seckey[P256_LIMBS]; BN_ULONG x[P256_LIMBS]; BN_ULONG y[P256_LIMBS]; secp256k1_scalar_mul_gen(&point, seckey); secp256k1_point_get_affine(x, y, &point); Next questions: Is it possible to convert now x & y to your class "Point"? and Is it possible to convert x & y from your class "Int" to your class "Point"?
as you see the point need at least X and Y to work some other classes and algorithms use Z for some calculations that are optimized.
So if you only have X with the secp256k1_sqr_mont then I don't know how to use it and to be honest i don't have any motivation to include it.
Why? Because keyhunt doesn't relay much on the ComputePublicKey as I mention before. So even if you increment the speed of that function 10 times more the current speed, it will not change the overall speed of the program.
I suggest increasing the speed of the secp256k1 in KeyHunt. I found this: https://github.com/piggypiggy/secp256k1-x64 This library aims to provide the most efficient implementation of secp256k1 curve arithmetic. For example, function secp256k1_sqr_mont (the fastest, according to the developer) i suggest to use in SECP256K1.cpp:
Point Secp256K1::ComputePublicKey(Int privKey) { Point Q; long long unsigned int x[4]; //result of the montgomery square Int result; Q.Clear(); secp256k1_sqr_mont(x, (const long long unsigned int)(&(privKey->bits64))); result.Set32Bytes((unsigned char*)x); // Set the result ??????????? result to Q ??????????? Q.Reduce(); return Q;
The question is how convert Int to Point? Does anyone have any ideas? In this topic discuss similar functions: [https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/1edd745c0ce89a8ce11d451e816863358c74c662/official/小%20Z%20的靓号钱包/README.md]