Main question is, how can we guess the first few digits? If even if we guess the 4 first digits correctly, the fifth digit would cause a problem if we make a mistake.
sincerely i have not investigated much in this technique, due to lack of time.
I only know that dividing by 5 with this technique, you will not worry about floating numbers.
I have applied the technique in 2 rounds and everything seems to be on the right track.
honestly do not know how many rounds are possible, but in my opinion it is a good idea.
x=2000000000000000
t=1185429467683753
A0=x-t
>>814570532316247
A1=t/5
>>237085893536750.6
A2=A0/5
>>162914106463249.4
A3=t-A1
>>948343574147002.4
A4= A0-A2
>>651656425852997.6
A5=A4-A1
>>785429467683753
A6=A3-A2
>>414570532316247
#---------------------------
t=A5
>>785429467683753
A0=A6
>>414570532316247
A1=t/5
>>157085893536750.6
A2=A0/5
>>82914106463249.4
A3=t-A1
>>628343574147002.4
A4= A0-A2
>>331656425852997.6
A5=A3-A2
>>545429467683753
A6=A4-A1
>>414570532316247
we obtain.
target=1185429467683753
R= 545429467683753
Will this work with your script of dividing by 3 you have posted before? Or do you have a script for this one as well?
Ok.
I'm working on Kangaroo Twimi algorithm on hash160.
I don't know if it will work, but this is an idea.
It uses two EC_POINT objects (K and W) and iteratively moves them around the elliptic curve by adding random steps until they land on the same point.
When the Kangaroo and Wallaby points collide, the algorithm returns the discrete logarithm k.
bool kangarooTwimi(const EC_GROUP* group, const BIGNUM* order, BIGNUM* x, BIGNUM* result) {
BIGNUM* k = BN_new();
BIGNUM* k1 = BN_new();
BIGNUM* k2 = BN_new();
BIGNUM* x1 = BN_new();
BIGNUM* x2 = BN_new();
// Set k to a random value
BN_rand_range(k, order);
EC_POINT* G = EC_POINT_new(group);
EC_POINT* kG = EC_POINT_new(group);
EC_POINT* xG = EC_POINT_new(group); // Create an EC_POINT for x
EC_POINT_mul(group, G, k, NULL, NULL, NULL); // G = k * G
while (true) {
EC_POINT_mul(group, kG, NULL, G, k, NULL); // kG = k * G
// Use EC_POINT_mul to compute xG = x * G
EC_POINT_mul(group, xG, NULL, NULL, x, NULL);
// Extract affine coordinates
EC_POINT_get_affine_coordinates_GFp(group, kG, k1, NULL, NULL);
EC_POINT_get_affine_coordinates_GFp(group, xG, x1, NULL, NULL);
if (BN_cmp(k1, x1) == 0) {
BN_copy(result, k);
BN_free(k);
BN_free(k1);
BN_free(k2);
BN_free(x1);
BN_free(x2);
EC_POINT_free(G);
EC_POINT_free(kG);
EC_POINT_free(xG);
return true;
}
BN_add(k, k, BN_value_one());
}
}
rest is similiar as Bytea HASH160 Search from here :
https://bitcointalk.org/index.php?topic=1306983.msg63029958#msg63029958100% OpenSSL code...
I wish I knew anything about coding, I could give my opinion, but your idea is great, I can work on different values until I get a result, but could you also work on a scalar mod n script alone please? I mean just scalar mod n, no EC involved, scratch that, I believe if you can write a script where it takes both scalar and points and does the magic on both but with the ability to output points for scalar results. If you don't understand me, I will explain later, I'm in pain now.😉