diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-06-25 14:32:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-06-25 14:32:10 +0000 |
commit | 65a1f0a17cc2d98c4764a852603659e871ff8157 (patch) | |
tree | aea8d07f26643e2bcb1ea54734cb4905eb86122b /include/bignum.h | |
parent | Initial commit. (diff) | |
download | samhain-65a1f0a17cc2d98c4764a852603659e871ff8157.tar.xz samhain-65a1f0a17cc2d98c4764a852603659e871ff8157.zip |
Adding upstream version 4.1.4.upstream/4.1.4
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'include/bignum.h')
-rw-r--r-- | include/bignum.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/include/bignum.h b/include/bignum.h new file mode 100644 index 0000000..298594c --- /dev/null +++ b/include/bignum.h @@ -0,0 +1,85 @@ +#ifndef _BIGNUM_H_ +#define _BIGNUM_H_ + +#include "internal.h" + +typedef struct big_struct bignum; + +#define BIG_SIGN_0 0 +#define BIG_SIGN_PLUS 1 +#define BIG_SIGN_MINUS -1 + +#define BIG_OK 0 +#define BIG_MEMERR 1 +#define BIG_DIV_ZERO 2 +#define BIG_ARGERR 3 + +#ifdef BIG_SHORT_NAMES +#define big_set_big big_sb +#define big_set_long big_sl +#define big_set_ulong big_usl +#define big_string big_rs +#define big_leqp big_lq +#define big_expt big_x +#endif + +/* External variables to take care about when using the bignums */ +typedef int bigerr_t; +extern int big_errno; +extern char *big_end_string; + +/* External functions to enable use of bignums */ +extern bigerr_t big_init_pkg(void); +extern void big_release_pkg(void); + +extern bigerr_t big_create(bignum *a); +extern void big_destroy(bignum *a); + +extern unsigned long big_bitcount(bignum *a); + +extern bigerr_t big_set_big(bignum *a, bignum *b); +extern void big_set_long(long n, bignum *a); +extern void big_set_ulong(unsigned long n, bignum *a); +extern bigerr_t big_set_string(char *numstr, int base, bignum *a); + +extern int big_long(bignum *a, long *n); +extern int big_ulong(bignum *a, unsigned long *n); +extern char *big_string(bignum *a, int base); + +extern int big_sign(bignum *a); +extern bigerr_t big_abs(bignum *a, bignum *b); + +extern bigerr_t big_negate(bignum *a, bignum *b); + +extern int big_compare(bignum *a, bignum *b); +extern int big_lessp(bignum *a, bignum *b); +extern int big_leqp(bignum *a, bignum *b); +extern int big_equalp(bignum *a, bignum *b); +extern int big_geqp(bignum *a, bignum *b); +extern int big_greaterp(bignum *a, bignum *b); + +extern int big_zerop(bignum *a); +extern int big_evenp(bignum *a); +extern int big_oddp(bignum *a); + +extern bigerr_t big_add(bignum *a, bignum *b, bignum *c); +extern bigerr_t big_sub(bignum *a, bignum *b, bignum *c); + +extern bigerr_t big_mul(bignum *a, bignum *b, bignum *c); + +extern bigerr_t big_trunc(bignum *a, bignum *b, bignum *c, bignum *r); +extern bigerr_t big_floor(bignum *a, bignum *b, bignum *c, bignum *r); +extern bigerr_t big_ceil(bignum *a, bignum *b, bignum *c, bignum *r); +extern bigerr_t big_round(bignum *a, bignum *b, bignum *c, bignum *r); + +extern bigerr_t big_random(bignum *a, bignum *b); + +extern bigerr_t big_expt(bignum *a, unsigned long z, bignum *x); +extern bigerr_t big_exptmod(bignum *a_in, bignum *z_in, bignum *n, bignum *x); +extern bigerr_t big_gcd(bignum *a, bignum *b, bignum *g); + +#ifndef NULL +#define NULL 0 +#endif + +#endif /* _BIGNUM_H_ */ |