mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
fixed Elligator tests
This commit is contained in:
parent
6142e93252
commit
0d2d7e5e71
@ -40,7 +40,7 @@ namespace crypto
|
|||||||
BN_free (u); BN_free (iu);
|
BN_free (u); BN_free (iu);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Elligator2::Encode (const uint8_t * key, uint8_t * encoded) const
|
bool Elligator2::Encode (const uint8_t * key, uint8_t * encoded, bool highY, bool random) const
|
||||||
{
|
{
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
BN_CTX * ctx = BN_CTX_new ();
|
BN_CTX * ctx = BN_CTX_new ();
|
||||||
@ -63,9 +63,12 @@ namespace crypto
|
|||||||
|
|
||||||
if (Legendre (uxxA, ctx) != -1)
|
if (Legendre (uxxA, ctx) != -1)
|
||||||
{
|
{
|
||||||
uint8_t randByte; // random highest bits and high y
|
uint8_t randByte = 0; // random highest bits and high y
|
||||||
|
if (random)
|
||||||
|
{
|
||||||
RAND_bytes (&randByte, 1);
|
RAND_bytes (&randByte, 1);
|
||||||
bool highY = randByte & 0x01;
|
highY = randByte & 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
BIGNUM * r = BN_CTX_get (ctx);
|
BIGNUM * r = BN_CTX_get (ctx);
|
||||||
if (highY)
|
if (highY)
|
||||||
@ -83,6 +86,7 @@ namespace crypto
|
|||||||
SquareRoot (r, r, ctx);
|
SquareRoot (r, r, ctx);
|
||||||
bn2buf (r, encoded, 32);
|
bn2buf (r, encoded, 32);
|
||||||
|
|
||||||
|
if (random)
|
||||||
encoded[0] |= (randByte & 0xC0); // copy two highest bits from randByte
|
encoded[0] |= (randByte & 0xC0); // copy two highest bits from randByte
|
||||||
for (size_t i = 0; i < 16; i++) // To Little Endian
|
for (size_t i = 0; i < 16; i++) // To Little Endian
|
||||||
{
|
{
|
||||||
|
@ -17,7 +17,7 @@ namespace crypto
|
|||||||
Elligator2 ();
|
Elligator2 ();
|
||||||
~Elligator2 ();
|
~Elligator2 ();
|
||||||
|
|
||||||
bool Encode (const uint8_t * key, uint8_t * encoded) const;
|
bool Encode (const uint8_t * key, uint8_t * encoded, bool highY = false, bool random = true) const;
|
||||||
bool Decode (const uint8_t * encoded, uint8_t * key) const;
|
bool Decode (const uint8_t * encoded, uint8_t * key) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -69,9 +69,9 @@ int main ()
|
|||||||
uint8_t buf[32];
|
uint8_t buf[32];
|
||||||
i2p::crypto::Elligator2 el;
|
i2p::crypto::Elligator2 el;
|
||||||
// encoding tests
|
// encoding tests
|
||||||
el.Encode (key, buf);
|
el.Encode (key, buf, false, false);
|
||||||
assert(memcmp (buf, encoded_key, 32) == 0);
|
assert(memcmp (buf, encoded_key, 32) == 0);
|
||||||
el.Encode (key, buf, true); // with highY
|
el.Encode (key, buf, true, false); // with highY
|
||||||
assert(memcmp (buf, encoded_key_high_y, 32) == 0);
|
assert(memcmp (buf, encoded_key_high_y, 32) == 0);
|
||||||
// decoding tests
|
// decoding tests
|
||||||
el.Decode (encoded1, buf);
|
el.Decode (encoded1, buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user