arnaucube
arnaucube/circomPublic Self-hosted repository
circom/c/buildasm/fr.c.ejs
c/buildasm/fr.c.ejsRaw
 1#include "<%=name.toLowerCase()+".h"%>"
 2#include <stdio.h>
 3#include <stdlib.h>
 4#include <gmp.h>
 5
 6void <%=name%>_str2element(P<%=name%>Element pE, char *s) {
 7    mpz_t r;
 8    mpz_init(r);
 9    mpz_set_str(r, s, 10);
10    pE->type = <%=name%>_LONG;
11    for (int i=0; i<<%=name%>_N64; i++) pE->longVal[i] = 0;
12    mpz_export((void *)pE->longVal, NULL, -1, 8, -1, 0, r);
13}
14
15char *<%=name%>_element2str(P<%=name%>Element pE) {
16    mpz_t r;
17    mpz_t q;
18    if (pE->type == <%=name%>_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, <%=name%>_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        <%=name%>_toNormal(pE);
32        mpz_init(r);
33        mpz_import(r, <%=name%>_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