Browse Source

fixed Elligator tests

pull/1474/head
orignal 5 years ago
parent
commit
0d2d7e5e71
  1. 10
      libi2pd/Elligator.cpp
  2. 2
      libi2pd/Elligator.h
  3. 4
      tests/test-elligator.cpp

10
libi2pd/Elligator.cpp

@ -40,7 +40,7 @@ namespace crypto @@ -40,7 +40,7 @@ namespace crypto
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;
BN_CTX * ctx = BN_CTX_new ();
@ -63,9 +63,12 @@ namespace crypto @@ -63,9 +63,12 @@ namespace crypto
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);
bool highY = randByte & 0x01;
highY = randByte & 0x01;
}
BIGNUM * r = BN_CTX_get (ctx);
if (highY)
@ -83,6 +86,7 @@ namespace crypto @@ -83,6 +86,7 @@ namespace crypto
SquareRoot (r, r, ctx);
bn2buf (r, encoded, 32);
if (random)
encoded[0] |= (randByte & 0xC0); // copy two highest bits from randByte
for (size_t i = 0; i < 16; i++) // To Little Endian
{

2
libi2pd/Elligator.h

@ -17,7 +17,7 @@ namespace crypto @@ -17,7 +17,7 @@ namespace crypto
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;
private:

4
tests/test-elligator.cpp

@ -69,9 +69,9 @@ int main () @@ -69,9 +69,9 @@ int main ()
uint8_t buf[32];
i2p::crypto::Elligator2 el;
// encoding tests
el.Encode (key, buf);
el.Encode (key, buf, false, false);
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);
// decoding tests
el.Decode (encoded1, buf);

Loading…
Cancel
Save