blob: f5f9fcb9ba8a3bc5225a34e6949fe4834efb2c2e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/*
* ecgen, tool for generating Elliptic curve domain parameters
* Copyright (C) 2017 J08nY
*/
#include "gens.h"
#include "point.h"
static int gens_put(curve_t *curve, GEN generators, long len) {
curve->generators = points_new((size_t)len);
curve->ngens = (size_t)len;
for (long i = 1; i <= len; ++i) {
point_t *p = point_new();
p->point = gel(generators, i);
p->order = ellorder(curve->curve, p->point, NULL);
p->cofactor = divii(curve->order, p->order);
curve->generators[i - 1] = p;
}
return 1;
}
GENERATOR(gens_gen_any) {
GEN generators = ellff_get_gens(curve->curve);
long len = glength(generators);
return gens_put(curve, generators, len);
}
GENERATOR(gens_gen_one) {
pari_sp ltop = avma;
GEN generators = ellff_get_gens(curve->curve);
long len = glength(generators);
if (len == 2) {
avma = ltop;
return -5;
}
return gens_put(curve, generators, len);
}
UNROLL(gens_unroll) {
if (curve->generators) {
points_free_deep(&curve->generators, curve->ngens);
}
return -1;
}
|