Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
fp2.c File Reference
#include <string.h>
#include <assert.h>
#include "fp2.h"
Include dependency graph for fp2.c:

Go to the source code of this file.

Functions

void fp2_copy (fp2 *x, const fp2 *y)
 
void fp2_add (fp2 *x, const fp2 *y, const fp2 *z)
 
void fp2_sub (fp2 *x, const fp2 *y, const fp2 *z)
 
void fp2_neg (fp2 *x, const fp2 *y)
 
void fp2_mul (fp2 *x, const fp2 *y, const fp2 *z)
 
void fp2_sqr (fp2 *x, const fp2 *y)
 
void fp2_inv (fp2 *x)
 
void fp2_test (void)
 

Function Documentation

◆ fp2_add()

void fp2_add ( fp2 x,
const fp2 y,
const fp2 z 
)

Definition at line 16 of file fp2.c.

17{
18 fp_add3(&(x->re), &(y->re), &(z->re));
19 fp_add3(&(x->im), &(y->im), &(z->im));
20}
fp re
Definition fp2.h:18
fp im
Definition fp2.h:18

References fp2::im, and fp2::re.

◆ fp2_copy()

void fp2_copy ( fp2 x,
const fp2 y 
)

Definition at line 10 of file fp2.c.

11{
12 fp_copy(x->re, y->re);
13 fp_copy(x->im, y->im);
14}
#define fp_copy
Definition fp-gmp.h:79

References fp_copy, fp2::im, and fp2::re.

◆ fp2_inv()

void fp2_inv ( fp2 x)

Definition at line 59 of file fp2.c.

60{
61 fp t0, t1;
62
63 fp_sqr(t0, x->re);
64 fp_sqr(t1, x->im);
65 fp_add3(&t0, (const fp *)t0, (const fp *)t1);
66 fp_inv(t0);
67 fp_mul3(&(x->re), (const fp *)x->re, (const fp *)t0);
68 fp_mul3(&(x->im), (const fp *)x->im, (const fp *)t0);
69 fp_neg1(&(x->im));
70}
#define fp_sqr
Definition fp-gmp.h:73
uint64_t fp[NUMBER_OF_WORDS]
Definition fp-gmp.h:22
#define fp_inv
Definition fp-gmp.h:88
for i

References fp_inv, and fp_sqr.

◆ fp2_mul()

void fp2_mul ( fp2 x,
const fp2 y,
const fp2 z 
)

Definition at line 34 of file fp2.c.

35{
36 fp t0, t1;
37
38 fp_add3(&t0, &(y->re), &(y->im));
39 fp_add3(&t1, &(z->re), &(z->im));
40 fp_mul3(&t0, (const fp *)t0, (const fp *)t1);
41 fp_mul3(&t1, &(y->im), &(z->im));
42 fp_mul3(&(x->re), &(y->re), &(z->re));
43 fp_sub3(&(x->im), (const fp *)t0, (const fp *)t1);
44 fp_sub3(&(x->im), (const fp *)(x->im), (const fp *)(x->re));
45 fp_sub3(&(x->re), (const fp *)(x->re), (const fp *)t1);
46}

References fp2::im, and fp2::re.

◆ fp2_neg()

void fp2_neg ( fp2 x,
const fp2 y 
)

Definition at line 28 of file fp2.c.

29{
30 fp_neg2(&(x->re), &(y->re));
31 fp_neg2(&(x->im), &(y->im));
32}

References fp2::im, and fp2::re.

◆ fp2_sqr()

void fp2_sqr ( fp2 x,
const fp2 y 
)

Definition at line 48 of file fp2.c.

49{
50 fp sum, diff;
51
52 fp_add3(&sum, &(y->re), &(y->im));
53 fp_sub3(&diff, &(y->re), &(y->im));
54 fp_mul3(&(x->im), &(y->re), &(y->im));
55 fp_add3(&(x->im), (const fp *)(x->im), (const fp *)(x->im));
56 fp_mul3(&(x->re), (const fp *)sum, (const fp *)diff);
57}

References fp2::im, and fp2::re.

◆ fp2_sub()

void fp2_sub ( fp2 x,
const fp2 y,
const fp2 z 
)

Definition at line 22 of file fp2.c.

23{
24 fp_sub3(&(x->re), &(y->re), &(z->re));
25 fp_sub3(&(x->im), &(y->im), &(z->im));
26}

References fp2::im, and fp2::re.

◆ fp2_test()

void fp2_test ( void  )

Definition at line 72 of file fp2.c.

73{
74
75 fp2 a, b, c;
76
77 for (int64_t i = 0; i <= 10000; i++)
78 {
79 fp_random(a.im);
80 fp_random(a.re);
81
82 fp2_copy(&b, &a);
83 fp2_inv(&a);
84 fp2_mul(&c, &a, &b);
85 assert(fp_isone(c.re) == 1);
86 assert(fp_iszero(c.im) == 1);
87 }
88}
#define fp2_mul
Definition fp2.h:33
#define fp2_copy
Definition fp2.h:21
#define fp2_inv
Definition fp2.h:39
#define fp_random
Definition fp-gmp.h:85
assert(var1 eq var2)
Definition fp2.h:17
f a
Definition to_model.m:12

References a, assert(), fp2_copy, fp2_inv, fp2_mul, fp_random, and i.

Here is the call graph for this function: