circom/c/buildasm/fr.c
c/buildasm/fr.cRaw
1#include "fr.h"
2#include <stdio.h>
3#include <stdlib.h>
4#include <gmp.h>
5
6void Fr_str2element(PFrElement pE, char *s) {
7 mpz_t r;
8 mpz_init(r);
9 mpz_set_str(r, s, 10);
10 pE->type = Fr_LONG;
11 for (int i=0; i<Fr_N64; i++) pE->longVal[i] = 0;
12 mpz_export((void *)pE->longVal, NULL, -1, 8, -1, 0, r);
13}
14
15char *Fr_element2str(PFrElement pE) {
16 mpz_t r;
17 mpz_t q;
18 if (pE->type == Fr_SHORT) {
19 if (pE->shortVal>=0) {
20 char *r = new char[32];
21 sprintf(r, "%d", pE->shortVal);
22 return r;
23 } else {
24 mpz_init(q);
25 mpz_import(q, Fr_N64, -1, 8, -1, 0, (const void *)Fr_q.longVal);
26 mpz_init_set_si(r, pE->shortVal);
27 mpz_add(r, r, q);
28 mpz_clear(q);
29 }
30 } else {
31 Fr_toNormal(pE);
32 mpz_init(r);
33 mpz_import(r, Fr_N64, -1, 8, -1, 0, (const void *)pE->longVal);
34 }
35 char *res = mpz_get_str (0, 10, r);
36 mpz_clear(r);
37 return res;
38}
39