arnaucube
arnaucube/circomPublic Self-hosted repository
circom/ports/c/buildasm/fr.h.ejs
ports/c/buildasm/fr.h.ejsRaw
 1#ifndef __<%=name.toUpperCase()%>_H
 2#define __<%=name.toUpperCase()%>_H
 3
 4#include <stdint.h>
 5#define <%=name%>_N64 <%= n64 %>
 6#define <%=name%>_SHORT 0x00000000
 7#define <%=name%>_LONG 0x80000000
 8#define <%=name%>_LONGMONTGOMERY 0xC0000000
 9typedef struct __attribute__((__packed__)) {
10    int32_t shortVal;
11    uint32_t type;
12    uint64_t longVal[<%=name%>_N64];
13} <%=name%>Element;
14typedef <%=name%>Element *P<%=name%>Element;
15extern <%=name%>Element <%=name%>_q;
16extern "C" void <%=name%>_copy(P<%=name%>Element r, P<%=name%>Element a);
17extern "C" void <%=name%>_copyn(P<%=name%>Element r, P<%=name%>Element a, int n);
18extern "C" void <%=name%>_add(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
19extern "C" void <%=name%>_sub(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
20extern "C" void <%=name%>_neg(P<%=name%>Element r, P<%=name%>Element a);
21extern "C" void <%=name%>_mul(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
22extern "C" void <%=name%>_square(P<%=name%>Element r, P<%=name%>Element a);
23extern "C" void <%=name%>_band(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
24extern "C" void <%=name%>_bor(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
25extern "C" void <%=name%>_bxor(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
26extern "C" void <%=name%>_bnot(P<%=name%>Element r, P<%=name%>Element a);
27extern "C" void <%=name%>_eq(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
28extern "C" void <%=name%>_neq(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
29extern "C" void <%=name%>_lt(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
30extern "C" void <%=name%>_gt(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
31extern "C" void <%=name%>_leq(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
32extern "C" void <%=name%>_geq(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
33extern "C" void <%=name%>_land(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
34extern "C" void <%=name%>_lor(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
35extern "C" void <%=name%>_lnot(P<%=name%>Element r, P<%=name%>Element a);
36extern "C" void <%=name%>_toNormal(P<%=name%>Element pE);
37extern "C" void <%=name%>_toLongNormal(P<%=name%>Element pE);
38extern "C" void <%=name%>_toMontgomery(P<%=name%>Element pE);
39
40extern "C" int <%=name%>_isTrue(P<%=name%>Element pE);
41extern "C" int <%=name%>_toInt(P<%=name%>Element pE);
42
43extern "C" void <%=name%>_fail();
44
45extern <%=name%>Element <%=name%>_q;
46
47// Pending functions to convert
48
49void <%=name%>_str2element(P<%=name%>Element pE, char const*s);
50char *<%=name%>_element2str(P<%=name%>Element pE);
51void <%=name%>_idiv(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
52void <%=name%>_mod(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
53void <%=name%>_inv(P<%=name%>Element r, P<%=name%>Element a);
54void <%=name%>_div(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
55void <%=name%>_shl(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
56void <%=name%>_shr(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
57void <%=name%>_pow(P<%=name%>Element r, P<%=name%>Element a, P<%=name%>Element b);
58
59
60void <%=name%>_init();
61
62
63
64#endif // __<%=name.toUpperCase()%>_H
65
66
67