27 #include "mphell/mphell.h"
47 number_set_str(p,
"fffffffffffffffffffffffffffffffeffffffffffffffff", 16);
48 #if MPHELL_USE_AMNS == 1
50 #if MPHELL_USE_AMNS_32 == 0
51 amns_alloc_init_str(&AMNS,
"[16, 4, [-2, 0, 0, 0, 1], 52, 6172336866035235830030737468594796900503843124202341567269, [276558595304361, 45414025950417, -34859774231597, -43697934106541], [15163021665183677629, 10328824020132901291, 3520630562803742874, 2017188797426544734], [175018852767439, 167878561785955, 39999505818260, -16528460836324], [197873551048475, 174802838528544, 29957080636796, 208984152402038]]", p);
53 amns_alloc_init_str(&AMNS,
"[1, 9, [-2, 0, 0, 0, 0, 0, 0, 0, 0, 1], 25, 778621639070749301272595529543640079614006395911121441202, [701093, -169839, 992868, -808873, -49859, -1298542, 346565, 1453220, 10927], [3371333987, 1139504849, 3063325107, 1068215102, 2225669310, 3489025068, 823765184, 3434826107, 24083075], [2398376, 1499579, -352758, -1034120, -179340, 1441412, 1982754, 1026111, 990222], [1506274, 1189710, -669416, 2638499, 1835063, 598693, 1905562, -10756, 308592]]", p);
55 field_set_amns(k, AMNS);
76 field_elt_set_str(x,
"f14b8dbafa22b6ba35626d40d2d00001381bef07d2c3017", 16,
false, k, STACK_1);
77 field_elt_set_str(y,
"85ca4bcae9e156f1eab07c7b6cc500004ebbc0e5e3b237ce", 16,
false, k, STACK_1);
85 printf(
"x+1 = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
88 printf(
"x+y = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
93 printf(
"x-1 = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
96 printf(
"x-y = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
101 printf(
"x*y = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
104 printf(
"x^2 = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
109 printf(
"x/y = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
114 printf(
"x^3 = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
119 printf(
"x^n = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
126 printf(
"x^(-1) = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
132 printf(
"x^(1/2) = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
136 printf(
"x^(1/3) = ");
field_elt_print(res, 16,
true, k, STACK_1); printf(
"\n");
145 #if MPHELL_USE_AMNS == 1
void amns_free(amns_ptr *AMNS)
Free the amns system.
void amns_alloc_init_str(amns_ptr *AMNS, char *str, number p)
Allocate and initialise the amns system from the string generated by the Sage AMNS generator from htt...
void field_elt_pow_ui(fe_ptr dst, fe_srcptr src, const block n, field_srcptr k, uint8_t stack)
Set dst <- src^n.
void field_elt_free(fe_ptr *src, field_srcptr k)
Free space used by src.
void field_alloc(field_ptr k, const field_type type, const uint8_t size, field_ptr base)
Allocates space for the different fields of the structure pointed by k.
void field_elt_print(fe_srcptr src, const uint8_t base, const bool lift, field_srcptr k, uint8_t stack)
Print src in base specified by base.
void field_elt_sqrt(fe_ptr dst, fe_srcptr src, field_srcptr k, uint8_t stack)
Set dst <- src^(1/2)
void field_elt_pow_number(fe_ptr dst, fe_srcptr src, number_srcptr n, field_srcptr k, uint8_t stack)
Set dst <- src^n.
void field_elt_set_str(fe_ptr dst, const char *str, const uint8_t base, const bool isreduced, field_srcptr k, uint8_t stack)
Set dst to str, if Montgomery arithmetic is used, is_reduced == false -> transform dst into its Montg...
void field_elt_init(fe_ptr dst, field_srcptr k)
Initialise the field element.
bool field_elt_issquare(fe_srcptr src, field_srcptr k, uint8_t stack)
Test if src is a square using the Lengendre symbol.
void field_elt_cube_root(fe_ptr dst, fe_srcptr src, field_srcptr k, uint8_t stack)
Set dst <- src^(1/3)
void field_elt_inv(fe_ptr dst, fe_srcptr src, field_srcptr k, uint8_t stack)
Set dst <- src^(-1)
void field_elt_alloc(fe_ptr *dst, field_srcptr k)
Allocate space for a field element.
void field_free(field_ptr k)
Free the space of the field informations structure.
int8_t field_elt_ispower_number(fe_srcptr src, number_srcptr n, field_srcptr k, uint8_t stack)
Test if src is a n-power in src->k.
void field_elt_div(fe_ptr dst, fe_srcptr src1, fe_srcptr src2, field_srcptr k, uint8_t stack)
Set dst <- src1 / src2.
int8_t field_elt_ispower_ui(fe_srcptr src, const block n, field_srcptr k, uint8_t stack)
Test if src is a n-power in src->k.
void field_create(field_ptr k, const char *id, uint8_t stack, const uint32_t n,...)
Initialize the different fields of the structure pointed by k.
static void field_elt_add(fe_ptr dst, fe_srcptr src1, fe_srcptr src2, field_srcptr k)
Set dst <- src1 + src2.
static void field_elt_dec(fe_ptr dst, fe_srcptr src, field_srcptr k)
Set dst <- src - 1.
field_t field[1]
Address of a field structure.
fp_elt * field_elt
Generic field element.
static void field_elt_inc(fe_ptr dst, fe_srcptr src, field_srcptr k)
Set dst <- src + 1.
static void field_elt_sub(fe_ptr dst, fe_srcptr src1, fe_srcptr src2, field_srcptr k)
Set dst <- src1 - src2.
static void field_elt_mul(fe_ptr dst, fe_srcptr src1, fe_srcptr src2, field_srcptr k, uint8_t stack)
Set dst <- src1 * src2, if Montgomery arithmetic is used, the Montgomery multiplication will be used ...
static void field_elt_sqr(fe_ptr dst, fe_srcptr src, field_srcptr k, uint8_t stack)
Set dst <- src^2.
void free_mphell()
Free MPHELL memory, especially the big amount of temporary memory.
void init_mphell(const uint16_t security_strength, const random_type type, const entropy_type entropy)
Initialise MPHELL with security_strength bits of security (for random number only).
void number_free(number *dst)
Free a number_ptr allocated on the RAM memory (malloc)
void number_set_str(number_ptr dst, const char *str, const uint8_t base)
Set dst to str.
void number_init(number *dst, const uint8_t n)
Allocate a number_ptr on the RAM memory (malloc)
uint8_t bits_to_nblock(const uint16_t nbits)
Return the number of blocks required to store a nbits number.