Co-authored-by: Jorge Chavez-Saab <jorgechavezsaab@gmail.com> Co-authored-by: Maria Corte-Real Santos <36373796+mariascrs@users.noreply.github.com> Co-authored-by: Luca De Feo <github@defeo.lu> Co-authored-by: Jonathan Komada Eriksen <jonathan.eriksen97@gmail.com> Co-authored-by: Basil Hess <bhe@zurich.ibm.com> Co-authored-by: Antonin Leroux <18654258+tonioecto@users.noreply.github.com> Co-authored-by: Patrick Longa <plonga@microsoft.com> Co-authored-by: Lorenz Panny <lorenz@yx7.cc> Co-authored-by: Francisco Rodríguez-Henríquez <francisco.rodriguez@tii.ae> Co-authored-by: Sina Schaeffler <108983332+syndrakon@users.noreply.github.com> Co-authored-by: Benjamin Wesolowski <19474926+Calodeon@users.noreply.github.com>
91 lines
1.8 KiB
C
91 lines
1.8 KiB
C
#include <assert.h>
|
|
#include <time.h>
|
|
#include <stdio.h>
|
|
#include "../generic/include/fp2_tmp.h"
|
|
|
|
int main()
|
|
{
|
|
fp2_t fp2_0, fp2_1;
|
|
// ------------
|
|
fp2_set0(fp2_0);
|
|
fp2_set1(fp2_1);
|
|
// ------------
|
|
|
|
int i;
|
|
fp2_t a, b, c, d;
|
|
fp_t e;
|
|
|
|
for (i = 0; i < 1024; i++)
|
|
{
|
|
printf("[%3d%%] Testing fp2_t arithmetic", 100 * i / (int)1024);
|
|
fflush(stdout);
|
|
printf("\r\x1b[K");
|
|
|
|
// Random elements of fp
|
|
fp2_random(a);
|
|
fp2_random(b);
|
|
fp2_copy(c, a);
|
|
c.re[0] += 1;
|
|
fp2_copy(d, b);
|
|
d.re[0] -= 1;
|
|
|
|
assert(fp2_isequal(a,b) == 0); // different values check --> (a != b)
|
|
assert(fp2_isequal(c,c) == 1); // equal values check --> 1 (c == c)
|
|
|
|
// Testing neg
|
|
fp2_set0(b);
|
|
fp2_copy(c, a);
|
|
fp2_neg(a, a);
|
|
fp2_sub(c, b, c);
|
|
assert(fp2_isequal(a,c) == 1);
|
|
|
|
fp2_set1(a); // Now a == 1
|
|
fp2_set0(b); // Now b == 0
|
|
|
|
assert(fp2_is_zero(a) == 0);
|
|
assert(fp2_is_zero(b) == 1);
|
|
|
|
// testing c - c
|
|
fp2_sub(d, c, c);
|
|
assert(fp2_is_zero(d) == 1);
|
|
|
|
// tetsing c * 0
|
|
fp2_mul(d, c, b);
|
|
assert(fp2_is_zero(d) == 1);
|
|
|
|
// tetsing c * 1 ... recall, in Montgomery domain R mod p plays the role of the 1
|
|
fp2_set1(a);
|
|
fp2_mul(d, c, a);
|
|
assert(fp2_isequal(d, c) == 1);
|
|
|
|
// fp_set(e, 1); // Now e == 1
|
|
// fp2_pow(d, e, c);
|
|
// assert(fp2_isequal(d, c) == 1);
|
|
|
|
// fp_set(e, 0); // Now e == 0
|
|
// fp2_pow(d, e, c);
|
|
// assert(fp2_isone(d) == 1);
|
|
|
|
// fp2_set(a, 1); // Now e == R mod p
|
|
// fp_random(e);
|
|
// fp2_pow(d, e, a);
|
|
// assert(fp2_isone(d) == 1);
|
|
|
|
// Testing 1/a by computing (1/a) x a
|
|
fp2_random(a);
|
|
fp2_copy(b, a);
|
|
fp2_inv(a);
|
|
fp2_mul(c, a, b);
|
|
assert(fp2_isone(c) == 1);
|
|
|
|
fp2_random(a);
|
|
fp2_sqr(b, a);
|
|
assert( fp2_issquare(b) );
|
|
|
|
};
|
|
|
|
printf("[%2d%%] Tested fp2_t arithmetic:\tNo errors!\n", 100 * i / (int)1024);
|
|
printf("-- All tests passed.\n");
|
|
return 0;
|
|
}
|