Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
fp2.h
Go to the documentation of this file.
1//
2// Quadratic field arithmetic assuming p = 3 mod 4: GF(p²)
3//
4
5#ifndef SSEC_QUADRATIC_FIELD_H
6#define SSEC_QUADRATIC_FIELD_H
7
8#include "fp.h"
9
10typedef struct {
11 fp_t re;// real part: a
12 fp_t im;// imaginary part: b
13} fp2_t; // Elements of the form a + ib where i²=-1
14
15
16void fp2_add(fp2_t *output, fp2_t input_a, fp2_t input_b);
17void fp2_sub(fp2_t *output, fp2_t input_a, fp2_t input_b);
18void fp2_mul(fp2_t *output, fp2_t input_a, fp2_t input_b);
19void fp2_sqr(fp2_t *output, fp2_t input);
20void fp2_neg(fp2_t *output, fp2_t input);
21
22void fp2_set_to_one(fp2_t *output);
23void fp2_set_to_zero(fp2_t *output);
24void fp2_copy(fp2_t *output, fp2_t input);
25void fp2_cswap(fp2_t *input_a, fp2_t *input_b, uint64_t input);
26void fp2_cset(fp2_t *output, fp2_t input, uint64_t input_mask);
27
28void fp2_inv(fp2_t *output, fp2_t input);
29void fp2_half(fp2_t *output, fp2_t input);
30
31void fp2_to_mont(fp2_t *output, fp2_t input);
32void fp2_from_mont(fp2_t *output, fp2_t input);
33
34void fp2_conj(fp2_t *output, fp2_t input);
35
36void fp2_to_bytes(uint8_t *output, fp2_t input);
37void fp2_from_bytes(fp2_t *output, const uint8_t *input);
38
39int64_t fp2_is_zero(fp2_t input);
40uint8_t fp2_is_equal(fp2_t input_a, fp2_t input_b);
41void fp2_linear_pass_in(fp2_t *output, const fp2_t *input, uint8_t input_length, uint8_t input_index);
42void fp2_linear_pass_out(fp2_t *output, fp2_t input, uint8_t input_length, uint8_t input_index);
43uint8_t fp2_locate_zero(const fp2_t *input, uint8_t input_length);
44
45uint8_t fp2_is_square(fp2_t input);
46
47void fp2_batchinv(fp2_t *output_list, const fp2_t *input_list, uint8_t input_length);
48void fp2_sqrt_slow(fp2_t *output, fp2_t input);
49void fp2_sqrt_fast(fp2_t *output, fp2_t input);
50void fp2_curt(fp2_t *output, fp2_t input);
51#endif // SSEC_QUADRATIC_FIELD_H
void fp2_from_bytes(fp2_t *output, const uint8_t *input)
void fp2_to_bytes(uint8_t *output, fp2_t input)
Definition fp2.c:131
void fp2_sqrt_slow(fp2_t *output, fp2_t input)
Definition fp2.c:283
uint8_t fp2_is_equal(fp2_t input_a, fp2_t input_b)
Definition fp2.c:154
void fp2_linear_pass_out(fp2_t *output, fp2_t input, uint8_t input_length, uint8_t input_index)
Definition fp2.c:170
void fp2_conj(fp2_t *output, fp2_t input)
Definition fp2.c:125
void fp2_batchinv(fp2_t *output_list, const fp2_t *input_list, uint8_t input_length)
Definition fp2.c:202
void fp2_linear_pass_in(fp2_t *output, const fp2_t *input, uint8_t input_length, uint8_t input_index)
Definition fp2.c:159
void fp2_set_to_zero(fp2_t *output)
Definition fp2.c:54
void fp2_cset(fp2_t *output, fp2_t input, uint64_t input_mask)
Definition fp2.c:81
int64_t fp2_is_zero(fp2_t input)
Definition fp2.c:149
void fp2_sqrt_fast(fp2_t *output, fp2_t input)
Definition fp2.c:333
void fp2_half(fp2_t *output, fp2_t input)
Definition fp2.c:107
void fp2_from_mont(fp2_t *output, fp2_t input)
Definition fp2.c:119
void fp2_to_mont(fp2_t *output, fp2_t input)
Definition fp2.c:113
void fp2_curt(fp2_t *output, fp2_t input)
Definition fp2.c:399
uint8_t fp2_is_square(fp2_t input)
Definition fp2.c:192
uint8_t fp2_locate_zero(const fp2_t *input, uint8_t input_length)
Definition fp2.c:181
void fp2_cswap(fp2_t *input_a, fp2_t *input_b, uint64_t input)
Definition fp2.c:65
void fp2_set_to_one(fp2_t *output)
Definition fp2.c:49
uint64_t fp_t[FIELD_64BITS_WORDS]
Definition fp.h:12
Definition fp2.h:10
fp_t re
Definition fp2.h:11
fp_t im
Definition fp2.h:12