blob: 4821442ce67e23a28237e32efec38985cc494d85 (
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include "curve.h"
#include "gen/seed.h"
#include "obj/subgroup.h"
OBJ(curve, curve_t, curve_copy, curve_clone)
curve_t *curve_copy(const curve_t *src, curve_t *dest) {
if (src->seed) dest->seed = seed_new_copy(src->seed);
if (src->field) dest->field = gcopy(src->field);
if (src->a) dest->a = gcopy(src->a);
if (src->b) dest->b = gcopy(src->b);
if (src->curve) dest->curve = gcopy(src->curve);
if (src->order) dest->order = gcopy(src->order);
if (src->generators) {
dest->generators = subgroups_new_copy(src->generators, src->ngens);
dest->ngens = src->ngens;
}
return dest;
}
curve_t *curve_clone(const curve_t *src, curve_t *dest) {
if (src->seed) dest->seed = seed_new_clone(src->seed);
if (src->field) dest->field = gclone(src->field);
if (src->a) dest->a = gclone(src->a);
if (src->b) dest->b = gclone(src->b);
if (src->curve) dest->curve = gclone(src->curve);
if (src->order) dest->order = gclone(src->order);
if (src->generators) {
dest->generators = subgroups_new_clone(src->generators, src->ngens);
dest->ngens = src->ngens;
}
return dest;
}
void curve_free(curve_t **curve) {
if (*curve) {
seed_free(&(*curve)->seed);
subgroups_free_deep(&(*curve)->generators, (*curve)->ngens);
if ((*curve)->curve) {
// TODO, this is possibly dangerous...
obj_free((*curve)->curve);
if (isclone((*curve)->curve)) {
gunclone((*curve)->curve);
}
}
if ((*curve)->field && isclone((*curve)->field)) {
gunclone((*curve)->field);
}
if ((*curve)->a && isclone((*curve)->a)) {
gunclone((*curve)->a);
}
if ((*curve)->b && isclone((*curve)->b)) {
gunclone((*curve)->b);
}
if ((*curve)->order && isclone((*curve)->order)) {
gunclone((*curve)->order);
}
try_free(*curve);
*curve = NULL;
}
}
|