1 /* ISC license. */
2 
3 #ifndef BIGUINT_H
4 #define BIGUINT_H
5 
6 #include <sys/types.h>
7 #include <stdint.h>
8 #include <skalibs/gccattributes.h>
9 
10 extern void bu_pack (char *, uint32_t const *, unsigned int) ;
11 extern void bu_unpack (char const *, uint32_t *, unsigned int) ;
12 extern void bu_pack_big (char *, uint32_t const *, unsigned int) ;
13 extern void bu_unpack_big (char const *, uint32_t *, unsigned int) ;
14 extern size_t bu_fmt (char *, uint32_t const *, unsigned int) ;
15 extern size_t bu_scanlen (char const *, size_t *) ;
16 extern int bu_scan (char const *, size_t, uint32_t *, unsigned int, size_t) ;
17 
18 extern unsigned int bu_len (uint32_t const *, unsigned int) gccattr_pure ;
19 extern void bu_zero (uint32_t *, unsigned int) ;
20 extern int bu_copy (uint32_t *, unsigned int, uint32_t const *, unsigned int) ;
21 extern int bu_cmp (uint32_t const *, unsigned int, uint32_t const *, unsigned int) gccattr_pure ;
22 
23 #define bu_add(c, cn, a, an, b, bn) bu_addc(c, cn, a, an, b, (bn), 0)
24 extern int bu_addc (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int, int) ;
25 #define bu_sub(c, cn, a, an, b, bn) bu_subc(c, cn, a, an, b, (bn), 0)
26 extern int bu_subc (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int, int) ;
27 extern int bu_mul (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int) ;
28 extern int bu_div (uint32_t const *, unsigned int, uint32_t const *, unsigned int, uint32_t *, unsigned int, uint32_t *, unsigned int) ;
29 extern int bu_mod (uint32_t *, unsigned int, uint32_t const *, unsigned int) ;
30 extern int bu_gcd (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int) ;
31 
32 #define bu_slb(a, n) bu_slbc(a, n, 0)
33 extern int bu_slbc (uint32_t *, unsigned int, int) ;
34 #define bu_srb(a, n) bu_srbc(a, n, 0)
35 extern int bu_srbc (uint32_t *, unsigned int, int) ;
36 
37 extern int bu_addmod (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int) ;
38 extern int bu_submod (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int) ;
39 extern int bu_invmod (uint32_t *, unsigned int, uint32_t const *, unsigned int) ;
40 extern int bu_divmod (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int, uint32_t const *, unsigned int) ;
41 
42 extern void bu_scan_internal (char const *, size_t, uint32_t *) ;
43 extern void bu_copy_internal (uint32_t *, uint32_t const *, unsigned int) ;
44 extern void bu_div_internal (uint32_t *, unsigned int, uint32_t const *, unsigned int, uint32_t *, unsigned int) ;
45 extern void bu_divmod_internal (uint32_t *, uint32_t *, uint32_t const *, unsigned int) ;
46 
47 #endif
48