aboutsummaryrefslogtreecommitdiff
path: root/src/cm/p1363.h
blob: 1064eda947bc1679665cbb60de015b67473ac2b9 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * ecgen, tool for generating Elliptic curve domain parameters
 * Copyright (C) 2017-2018 J08nY
 */
/**
 * @file p1363.h
 */
#ifndef ECGEN_CM_P1363_H
#define ECGEN_CM_P1363_H

#include <pari/pari.h>

typedef struct {
	GEN A;
	GEN B;
	GEN C;

	long m8;

	long I;
	long J;
	long K;
	GEN L;
	GEN M;
	GEN N;

	GEN lambda;
	GEN theta;
} p1363_form_t;

/**
 * Compute all the primitive reduced quadratic forms for a given discriminant.
 * @param D
 * @param forms
 * @return
 */
size_t p1363_forms(GEN D, p1363_form_t ***forms);

/**
 * Free the computed quadratic forms.
 * @param forms
 * @param nforms
 */
void p1363_free(p1363_form_t ***forms, size_t nforms);

/**
 * Compute the class invariant for discriminant D and form.
 * @param D
 * @param form
 * @param precision
 * @return
 */
GEN p1363_invariant(GEN D, p1363_form_t *form, long precision);

/**
 * Bit-precision computation for a Weber class polynomial from:
 * 		On the Efficient Generation of Elliptic Curves,
 * 		Elisavet Konstantinou, Yiannis C. Stamatiou, Christos Zaroliagis
 * @param D
 * @param forms
 * @param nforms
 * @return The pari precision required for W_D.
 */
long p1363_bit_precision(GEN D, p1363_form_t **forms, size_t nforms);

/**
 * Compute the reduced Webe class polynomial for discriminant D and quadratic
 * forms.
 * @param D
 * @param forms
 * @param nforms
 * @return
 */
GEN p1363_poly(GEN D, p1363_form_t **forms, size_t nforms);

GEN p1363_polclass(GEN D);

#endif  // ECGEN_CM_P1363_H