flint_sys/
nmod_vec.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/nmod_vec.html).
4
5use crate::deps::*;
6use crate::flint::*;
7use libc::c_int;
8
9#[repr(C)]
10#[derive(Debug, Copy, Clone, Hash)]
11pub struct nmod_t {
12    pub n: mp_limb_t,
13    pub ninv: mp_limb_t,
14    pub norm: mp_limb_t,
15}
16
17#[repr(C)]
18#[derive(Debug, Copy, Clone)]
19pub struct nmod_discrete_log_pohlig_hellman_table_entry_struct {
20    pub gammapow: mp_limb_t,
21    pub cm: mp_limb_t,
22}
23
24#[repr(C)]
25#[derive(Debug, Copy, Clone)]
26pub struct nmod_discrete_log_pohlig_hellman_entry_struct {
27    pub exp: mp_limb_signed_t,
28    pub prime: mp_limb_t,
29    pub gamma: mp_limb_t,
30    pub gammainv: mp_limb_t,
31    pub startingbeta: mp_limb_t,
32    pub co: mp_limb_t,
33    pub startinge: mp_limb_t,
34    pub idem: mp_limb_t,
35    pub cbound: mp_limb_t,
36    pub dbound: mp_limb_t,
37    pub table: *mut nmod_discrete_log_pohlig_hellman_table_entry_struct,
38}
39
40#[repr(C)]
41#[derive(Debug, Copy, Clone)]
42pub struct nmod_discrete_log_pohlig_hellman_struct {
43    pub mod_: nmod_t,
44    pub alpha: mp_limb_t,
45    pub alphainv: mp_limb_t,
46    pub num_factors: mp_limb_signed_t,
47    pub entries: *mut nmod_discrete_log_pohlig_hellman_entry_struct,
48}
49
50pub type nmod_discrete_log_pohlig_hellman_t = [nmod_discrete_log_pohlig_hellman_struct; 1usize];
51
52extern "C" {
53    pub fn _nmod_add(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
54    pub fn _nmod_sub(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
55    pub fn nmod_add(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
56    pub fn nmod_sub(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
57    pub fn nmod_neg(a: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
58    pub fn nmod_mul(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
59    pub fn nmod_addmul(a: mp_limb_t, b: mp_limb_t, c: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
60    pub fn nmod_inv(a: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
61    pub fn nmod_div(a: mp_limb_t, b: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
62    pub fn nmod_pow_ui(a: mp_limb_t, exp: mp_limb_t, mod_: nmod_t) -> mp_limb_t;
63    pub fn nmod_init(mod_: *mut nmod_t, n: mp_limb_t);
64    pub fn _nmod_vec_init(len: mp_limb_signed_t) -> mp_ptr;
65    pub fn _nmod_vec_clear(vec: mp_ptr);
66    pub fn _nmod_vec_randtest(
67        vec: mp_ptr,
68        state: *mut flint_rand_s,
69        len: mp_limb_signed_t,
70        mod_: nmod_t,
71    );
72    pub fn _nmod_vec_zero(vec: mp_ptr, len: mp_limb_signed_t);
73    pub fn _nmod_vec_max_bits(vec: mp_srcptr, len: mp_limb_signed_t) -> mp_limb_t;
74    pub fn _nmod_vec_set(res: mp_ptr, vec: mp_srcptr, len: mp_limb_signed_t);
75    pub fn _nmod_vec_swap(a: mp_ptr, b: mp_ptr, length: mp_limb_signed_t);
76    pub fn _nmod_vec_equal(vec: mp_srcptr, vec2: mp_srcptr, len: mp_limb_signed_t) -> c_int;
77    pub fn _nmod_vec_is_zero(vec: mp_srcptr, len: mp_limb_signed_t) -> c_int;
78    pub fn _nmod_vec_reduce(res: mp_ptr, vec: mp_srcptr, len: mp_limb_signed_t, mod_: nmod_t);
79    pub fn _nmod_vec_add(
80        res: mp_ptr,
81        vec1: mp_srcptr,
82        vec2: mp_srcptr,
83        len: mp_limb_signed_t,
84        mod_: nmod_t,
85    );
86    pub fn _nmod_vec_sub(
87        res: mp_ptr,
88        vec1: mp_srcptr,
89        vec2: mp_srcptr,
90        len: mp_limb_signed_t,
91        mod_: nmod_t,
92    );
93    pub fn _nmod_vec_neg(res: mp_ptr, vec: mp_srcptr, len: mp_limb_signed_t, mod_: nmod_t);
94    pub fn _nmod_vec_scalar_mul_nmod(
95        res: mp_ptr,
96        vec: mp_srcptr,
97        len: mp_limb_signed_t,
98        c: mp_limb_t,
99        mod_: nmod_t,
100    );
101    pub fn _nmod_vec_scalar_mul_nmod_shoup(
102        res: mp_ptr,
103        vec: mp_srcptr,
104        len: mp_limb_signed_t,
105        c: mp_limb_t,
106        mod_: nmod_t,
107    );
108    pub fn _nmod_vec_scalar_addmul_nmod(
109        res: mp_ptr,
110        vec: mp_srcptr,
111        len: mp_limb_signed_t,
112        c: mp_limb_t,
113        mod_: nmod_t,
114    );
115    pub fn _nmod_vec_dot_bound_limbs(len: mp_limb_signed_t, mod_: nmod_t) -> c_int;
116    pub fn _nmod_vec_dot(
117        vec1: mp_srcptr,
118        vec2: mp_srcptr,
119        len: mp_limb_signed_t,
120        mod_: nmod_t,
121        nlimbs: c_int,
122    ) -> mp_limb_t;
123    pub fn _nmod_vec_dot_ptr(
124        vec1: mp_srcptr,
125        vec2: *const mp_ptr,
126        offset: mp_limb_signed_t,
127        len: mp_limb_signed_t,
128        mod_: nmod_t,
129        nlimbs: c_int,
130    ) -> mp_limb_t;
131    pub fn nmod_discrete_log_pohlig_hellman_init(L: *mut nmod_discrete_log_pohlig_hellman_struct);
132    pub fn nmod_discrete_log_pohlig_hellman_clear(L: *mut nmod_discrete_log_pohlig_hellman_struct);
133    pub fn nmod_discrete_log_pohlig_hellman_precompute_prime(
134        L: *mut nmod_discrete_log_pohlig_hellman_struct,
135        p: mp_limb_t,
136    ) -> f64;
137    pub fn nmod_discrete_log_pohlig_hellman_run(
138        L: *mut nmod_discrete_log_pohlig_hellman_struct,
139        y: mp_limb_t,
140    ) -> mp_limb_t;
141    pub fn nmod_discrete_log_pohlig_hellman_primitive_root(
142        L: *mut nmod_discrete_log_pohlig_hellman_struct,
143    ) -> mp_limb_t;
144}