arnaucube
arnaucube/circomPublic Self-hosted repository
circom/c/buildasm/fr.h
c/buildasm/fr.hRaw
 1#ifndef __FR_H
 2#define __FR_H
 3
 4#include <stdint.h>
 5#define Fr_N64 4
 6#define Fr_SHORT 0x00000000
 7#define Fr_LONG 0x80000000
 8#define Fr_LONGMONTGOMERY 0xC0000000
 9typedef struct __attribute__((__packed__)) {
10    int32_t shortVal;
11    u_int32_t type;
12    u_int64_t longVal[Fr_N64];
13} FrElement;
14typedef FrElement *PFrElement;
15extern FrElement Fr_q;
16extern "C" void Fr_copy(PFrElement r, PFrElement a);
17extern "C" void Fr_copyn(PFrElement r, PFrElement a, int n);
18extern "C" void Fr_add(PFrElement r, PFrElement a, PFrElement b);
19extern "C" void Fr_sub(PFrElement r, PFrElement a, PFrElement b);
20extern "C" void Fr_neg(PFrElement r, PFrElement a);
21extern "C" void Fr_mul(PFrElement r, PFrElement a, PFrElement b);
22extern "C" void Fr_square(PFrElement r, PFrElement a);
23extern "C" void Fr_band(PFrElement r, PFrElement a, PFrElement b);
24extern "C" void Fr_bor(PFrElement r, PFrElement a, PFrElement b);
25extern "C" void Fr_bxor(PFrElement r, PFrElement a, PFrElement b);
26extern "C" void Fr_bnot(PFrElement r, PFrElement a);
27extern "C" void Fr_eq(PFrElement r, PFrElement a, PFrElement b);
28extern "C" void Fr_neq(PFrElement r, PFrElement a, PFrElement b);
29extern "C" void Fr_lt(PFrElement r, PFrElement a, PFrElement b);
30extern "C" void Fr_gt(PFrElement r, PFrElement a, PFrElement b);
31extern "C" void Fr_leq(PFrElement r, PFrElement a, PFrElement b);
32extern "C" void Fr_geq(PFrElement r, PFrElement a, PFrElement b);
33extern "C" void Fr_land(PFrElement r, PFrElement a, PFrElement b);
34extern "C" void Fr_lor(PFrElement r, PFrElement a, PFrElement b);
35extern "C" void Fr_lnot(PFrElement r, PFrElement a);
36extern "C" void Fr_toNormal(PFrElement pE);
37extern "C" void Fr_toLongNormal(PFrElement pE);
38extern "C" void Fr_toMontgomery(PFrElement pE);
39
40extern "C" int Fr_isTrue(PFrElement pE);
41extern "C" int Fr_toInt(PFrElement pE);
42
43extern "C" void Fr_fail();
44
45extern FrElement Fr_q;
46
47// Pending functions to convert
48
49void Fr_str2element(PFrElement pE, char const*s);
50char *Fr_element2str(PFrElement pE);
51void Fr_idiv(PFrElement r, PFrElement a, PFrElement b);
52void Fr_mod(PFrElement r, PFrElement a, PFrElement b);
53void Fr_inv(PFrElement r, PFrElement a);
54void Fr_div(PFrElement r, PFrElement a, PFrElement b);
55void Fr_shl(PFrElement r, PFrElement a, PFrElement b);
56void Fr_shr(PFrElement r, PFrElement a, PFrElement b);
57void Fr_pow(PFrElement r, PFrElement a, PFrElement b);
58
59
60void Fr_init();
61
62
63
64#endif // __FR_H
65
66
67