mirror of
https://github.com/SChernykh/p2pool.git
synced 2025-03-12 09:29:51 +00:00
Updated dependencies
This commit is contained in:
parent
3484b24caa
commit
a073923a82
2 changed files with 45 additions and 9 deletions
52
external/src/cryptonote/crypto-ops.c
vendored
52
external/src/cryptonote/crypto-ops.c
vendored
|
@ -3831,15 +3831,51 @@ int sc_isnonzero(const unsigned char *s) {
|
||||||
s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1;
|
s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ge_p3_is_point_at_infinity(const ge_p3 *p) {
|
int ge_p3_is_point_at_infinity_vartime(const ge_p3 *p) {
|
||||||
// X = 0 and Y == Z
|
// https://eprint.iacr.org/2008/522
|
||||||
int n;
|
// X == T == 0 and Y/Z == 1
|
||||||
for (n = 0; n < 10; ++n)
|
// note: convert all pieces to canonical bytes in case rounding is required (i.e. an element is > q)
|
||||||
|
// note2: even though T = XY/Z is true for valid point representations (implying it isn't necessary to
|
||||||
|
// test T == 0), the input to this function might NOT be valid, so we must test T == 0
|
||||||
|
char result_X_bytes[32];
|
||||||
|
fe_tobytes((unsigned char*)&result_X_bytes, p->X);
|
||||||
|
|
||||||
|
// X != 0
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
{
|
{
|
||||||
if (p->X[n] | p->T[n])
|
if (result_X_bytes[i])
|
||||||
return 0;
|
|
||||||
if (p->Y[n] != p->Z[n])
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
|
char result_T_bytes[32];
|
||||||
|
fe_tobytes((unsigned char*)&result_T_bytes, p->T);
|
||||||
|
|
||||||
|
// T != 0
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
|
{
|
||||||
|
if (result_T_bytes[i])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char result_Y_bytes[32];
|
||||||
|
char result_Z_bytes[32];
|
||||||
|
fe_tobytes((unsigned char*)&result_Y_bytes, p->Y);
|
||||||
|
fe_tobytes((unsigned char*)&result_Z_bytes, p->Z);
|
||||||
|
|
||||||
|
// Y != Z
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
|
{
|
||||||
|
if (result_Y_bytes[i] != result_Z_bytes[i])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// is Y nonzero? then Y/Z == 1
|
||||||
|
for (int i = 0; i < 32; ++i)
|
||||||
|
{
|
||||||
|
if (result_Y_bytes[i] != 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Y/Z = 0/0
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
2
external/src/cryptonote/crypto-ops.h
vendored
2
external/src/cryptonote/crypto-ops.h
vendored
|
@ -162,4 +162,4 @@ void fe_add(fe h, const fe f, const fe g);
|
||||||
void fe_tobytes(unsigned char *, const fe);
|
void fe_tobytes(unsigned char *, const fe);
|
||||||
void fe_invert(fe out, const fe z);
|
void fe_invert(fe out, const fe z);
|
||||||
|
|
||||||
int ge_p3_is_point_at_infinity(const ge_p3 *p);
|
int ge_p3_is_point_at_infinity_vartime(const ge_p3 *p);
|
||||||
|
|
Loading…
Reference in a new issue