1
1
from flint.flintlib.flint cimport ulong, slong
2
- from flint.flintlib.fmpz cimport fmpz_t, fmpz_preinvn_struct
2
+ from flint.flintlib.fmpz cimport fmpz_t, fmpz_struct, fmpz_preinvn_struct
3
3
from flint.flintlib.nmod cimport nmod_t
4
4
5
- # unimported types {'fmpz_mod_discrete_log_pohlig_hellman_t'}
6
-
7
5
cdef extern from " flint/fmpz_mod.h" :
6
+ #
7
+ # fmpz_mod structs, a la Pohlig - Hellman
8
+ #
8
9
ctypedef struct fmpz_mod_ctx_struct:
9
10
fmpz_t n
10
11
nmod_t mod
@@ -13,6 +14,36 @@ cdef extern from "flint/fmpz_mod.h":
13
14
fmpz_preinvn_struct * ninv_huge
14
15
ctypedef fmpz_mod_ctx_struct fmpz_mod_ctx_t[1 ]
15
16
17
+ #
18
+ # discrete logs structs, a la Pohlig - Hellman
19
+ #
20
+
21
+ ctypedef struct fmpz_mod_discrete_log_pohlig_hellman_table_entry_struct:
22
+ fmpz_t gammapow
23
+ ulong cm
24
+
25
+ ctypedef struct fmpz_mod_discrete_log_pohlig_hellman_entry_struct:
26
+ slong exp
27
+ ulong prime
28
+ fmpz_t gamma
29
+ fmpz_t gammainv
30
+ fmpz_t startingbeta
31
+ fmpz_t co
32
+ fmpz_t startinge
33
+ fmpz_t idem
34
+ ulong cbound
35
+ ulong dbound
36
+ fmpz_mod_discrete_log_pohlig_hellman_table_entry_struct * table # length cbound */
37
+
38
+ ctypedef struct fmpz_mod_discrete_log_pohlig_hellman_struct:
39
+ fmpz_mod_ctx_t fpctx
40
+ fmpz_t pm1 # p - 1 */
41
+ fmpz_t alpha # p.r. of p */
42
+ fmpz_t alphainv
43
+ slong num_factors # factors of p - 1
44
+ fmpz_mod_discrete_log_pohlig_hellman_entry_struct * entries
45
+ ctypedef fmpz_mod_discrete_log_pohlig_hellman_struct fmpz_mod_discrete_log_pohlig_hellman_t[1 ]
46
+
16
47
# Parsed from here
17
48
void fmpz_mod_ctx_init(fmpz_mod_ctx_t ctx, const fmpz_t n)
18
49
void fmpz_mod_ctx_clear(fmpz_mod_ctx_t ctx)
@@ -37,9 +68,9 @@ cdef extern from "flint/fmpz_mod.h":
37
68
int fmpz_mod_divides(fmpz_t a, const fmpz_t b, const fmpz_t c, const fmpz_mod_ctx_t ctx)
38
69
void fmpz_mod_pow_ui(fmpz_t a, const fmpz_t b, ulong e, const fmpz_mod_ctx_t ctx)
39
70
int fmpz_mod_pow_fmpz(fmpz_t a, const fmpz_t b, const fmpz_t e, const fmpz_mod_ctx_t ctx)
40
- # void fmpz_mod_discrete_log_pohlig_hellman_init(fmpz_mod_discrete_log_pohlig_hellman_t L)
41
- # void fmpz_mod_discrete_log_pohlig_hellman_clear(fmpz_mod_discrete_log_pohlig_hellman_t L)
42
- # double fmpz_mod_discrete_log_pohlig_hellman_precompute_prime(fmpz_mod_discrete_log_pohlig_hellman_t L, const fmpz_t p)
43
- # const fmpz_struct * fmpz_mod_discrete_log_pohlig_hellman_primitive_root(const fmpz_mod_discrete_log_pohlig_hellman_t L)
44
- # void fmpz_mod_discrete_log_pohlig_hellman_run(fmpz_t x, const fmpz_mod_discrete_log_pohlig_hellman_t L, const fmpz_t y)
71
+ void fmpz_mod_discrete_log_pohlig_hellman_init(fmpz_mod_discrete_log_pohlig_hellman_t L)
72
+ void fmpz_mod_discrete_log_pohlig_hellman_clear(fmpz_mod_discrete_log_pohlig_hellman_t L)
73
+ double fmpz_mod_discrete_log_pohlig_hellman_precompute_prime(fmpz_mod_discrete_log_pohlig_hellman_t L, const fmpz_t p)
74
+ const fmpz_struct * fmpz_mod_discrete_log_pohlig_hellman_primitive_root(const fmpz_mod_discrete_log_pohlig_hellman_t L)
75
+ void fmpz_mod_discrete_log_pohlig_hellman_run(fmpz_t x, const fmpz_mod_discrete_log_pohlig_hellman_t L, const fmpz_t y)
45
76
int fmpz_next_smooth_prime(fmpz_t a, const fmpz_t b)
0 commit comments