bgn_internal.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef _BIGNUM_INTERNAL_H
  2. #define _BIGNUM_INTERNAL_H
  3. #include "bgn_export.h"
  4. /**************************************************************************
  5. * INTERNAL DEFINIITION
  6. **************************************************************************/
  7. #define ciL ((int) sizeof(unsigned long))
  8. #define biL (ciL << 3)
  9. #define biH (ciL << 2)
  10. #define B_T_L(i) (((i) + biL - 1) / biL)
  11. #define C_T_L(i) (((i) + ciL - 1) / ciL)
  12. /**************************************************************************
  13. * INTERNAL FUNCTIONS
  14. **************************************************************************/
  15. void bgn_init(bgn *P_X);
  16. void bgn_free(bgn *P_X);
  17. int bgn_grow(bgn *P_X, int nbl);
  18. int bgn_copy(bgn *P_X, const bgn *P_Y);
  19. void bgn_swap(bgn *P_X, bgn *P_Y);
  20. int bgn_lset(bgn *P_X, int z);
  21. int bgn_lsb(const bgn *P_X);
  22. int bgn_msb(const bgn *P_X);
  23. int bgn_size(const bgn *P_X);
  24. int bgn_shift_l(bgn *P_X, int count);
  25. int bgn_shift_r(bgn *P_X, int count);
  26. int bgn_cmp_abs(const bgn *P_X, const bgn *P_Y);
  27. int bgn_cmp_num(const bgn *P_X, const bgn *P_Y);
  28. int bgn_cmp_int(const bgn *P_X, int z);
  29. int bgn_add_abs(bgn *P_X, const bgn *P_A, const bgn *P_B);
  30. int bgn_sub_abs(bgn *P_X, const bgn *P_A, const bgn *P_B);
  31. int bgn_add_bgn(bgn *P_X, const bgn *P_A, const bgn *P_B);
  32. int bgn_sub_bgn(bgn *P_X, const bgn *P_A, const bgn *P_B);
  33. int bgn_add_int(bgn *P_X, const bgn *P_A, int b);
  34. int bgn_sub_int(bgn *P_X, const bgn *P_A, int b);
  35. int bgn_mul_bgn(bgn *P_X, const bgn *P_A, const bgn *B);
  36. int bgn_mul_int(bgn *P_X, const bgn *P_A, unsigned long b);
  37. int bgn_div_bgn(bgn *P_Q, bgn *P_R, const bgn *P_A, const bgn *P_B);
  38. int bgn_div_int(bgn *P_Q, bgn *P_R, const bgn *P_A, int b);
  39. int bgn_mod_bgn(bgn *P_R, const bgn *P_A, const bgn *P_B);
  40. int bgn_mod_int(unsigned long *r, const bgn *P_A, int b);
  41. int bgn_exp_mod(bgn *P_X, const bgn *P_E, const bgn *P_N, bgn *_RR);
  42. int bgn_inv_mod(bgn *P_X, const bgn *P_A, const bgn *P_N);
  43. int bgn_is_prime(bgn *P_X, int (*f_rng) (void *), void *p_rng);
  44. void montg_init(unsigned long *mm, const bgn *P_N);
  45. void montg_mul(bgn *P_A, const bgn *P_B, const bgn *P_N, unsigned long mm, const bgn *P_T);
  46. void montg_red(bgn *P_A, const bgn *P_N, unsigned long mm, const bgn *P_T);
  47. void bgn_sub_hlp(int n, unsigned long *s, unsigned long *d);
  48. void bgn_mul_hlp(int i, unsigned long *s, unsigned long *d, unsigned long b);
  49. #endif