56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
/***********************************************************************
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
***********************************************************************/
|
|
|
|
#ifndef SECP256K1_TESTUTIL_H
|
|
#define SECP256K1_TESTUTIL_H
|
|
|
|
#include "field.h"
|
|
#include "testrand.h"
|
|
#include "util.h"
|
|
|
|
static void random_fe(secp256k1_fe *x) {
|
|
unsigned char bin[32];
|
|
do {
|
|
secp256k1_testrand256(bin);
|
|
if (secp256k1_fe_set_b32_limit(x, bin)) {
|
|
return;
|
|
}
|
|
} while(1);
|
|
}
|
|
|
|
static void random_fe_non_zero(secp256k1_fe *nz) {
|
|
do {
|
|
random_fe(nz);
|
|
} while (secp256k1_fe_is_zero(nz));
|
|
}
|
|
|
|
static void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) {
|
|
CHECK(a->infinity == b->infinity);
|
|
if (a->infinity) {
|
|
return;
|
|
}
|
|
CHECK(secp256k1_fe_equal(&a->x, &b->x));
|
|
CHECK(secp256k1_fe_equal(&a->y, &b->y));
|
|
}
|
|
|
|
static void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) {
|
|
secp256k1_fe z2s;
|
|
secp256k1_fe u1, u2, s1, s2;
|
|
CHECK(a->infinity == b->infinity);
|
|
if (a->infinity) {
|
|
return;
|
|
}
|
|
/* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
|
|
secp256k1_fe_sqr(&z2s, &b->z);
|
|
secp256k1_fe_mul(&u1, &a->x, &z2s);
|
|
u2 = b->x;
|
|
secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z);
|
|
s2 = b->y;
|
|
CHECK(secp256k1_fe_equal(&u1, &u2));
|
|
CHECK(secp256k1_fe_equal(&s1, &s2));
|
|
}
|
|
|
|
#endif /* SECP256K1_TESTUTIL_H */
|