mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 08:55:19 +00:00
sync rsaenh with wine 1.1.23
svn path=/trunk/; revision=41325
This commit is contained in:
parent
565e63dab6
commit
1430611396
2 changed files with 48 additions and 53 deletions
|
@ -42,6 +42,53 @@
|
|||
static const int KARATSUBA_MUL_CUTOFF = 88, /* Min. number of digits before Karatsuba multiplication is used. */
|
||||
KARATSUBA_SQR_CUTOFF = 128; /* Min. number of digits before Karatsuba squaring is used. */
|
||||
|
||||
|
||||
/* trim unused digits */
|
||||
static void mp_clamp(mp_int *a);
|
||||
|
||||
/* compare |a| to |b| */
|
||||
static int mp_cmp_mag(const mp_int *a, const mp_int *b);
|
||||
|
||||
/* Counts the number of lsbs which are zero before the first zero bit */
|
||||
static int mp_cnt_lsb(const mp_int *a);
|
||||
|
||||
/* computes a = B**n mod b without division or multiplication useful for
|
||||
* normalizing numbers in a Montgomery system.
|
||||
*/
|
||||
static int mp_montgomery_calc_normalization(mp_int *a, const mp_int *b);
|
||||
|
||||
/* computes x/R == x (mod N) via Montgomery Reduction */
|
||||
static int mp_montgomery_reduce(mp_int *a, const mp_int *m, mp_digit mp);
|
||||
|
||||
/* setups the montgomery reduction */
|
||||
static int mp_montgomery_setup(const mp_int *a, mp_digit *mp);
|
||||
|
||||
/* Barrett Reduction, computes a (mod b) with a precomputed value c
|
||||
*
|
||||
* Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely
|
||||
* compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code].
|
||||
*/
|
||||
static int mp_reduce(mp_int *a, const mp_int *b, const mp_int *c);
|
||||
|
||||
/* reduces a modulo b where b is of the form 2**p - k [0 <= a] */
|
||||
static int mp_reduce_2k(mp_int *a, const mp_int *n, mp_digit d);
|
||||
|
||||
/* determines k value for 2k reduction */
|
||||
static int mp_reduce_2k_setup(const mp_int *a, mp_digit *d);
|
||||
|
||||
/* used to setup the Barrett reduction for a given modulus b */
|
||||
static int mp_reduce_setup(mp_int *a, const mp_int *b);
|
||||
|
||||
/* set to a digit */
|
||||
static void mp_set(mp_int *a, mp_digit b);
|
||||
|
||||
/* b = a*a */
|
||||
static int mp_sqr(const mp_int *a, mp_int *b);
|
||||
|
||||
/* c = a * a (mod b) */
|
||||
static int mp_sqrmod(const mp_int *a, mp_int *b, mp_int *c);
|
||||
|
||||
|
||||
static void bn_reverse(unsigned char *s, int len);
|
||||
static int s_mp_add(mp_int *a, mp_int *b, mp_int *c);
|
||||
static int s_mp_exptmod (const mp_int * G, const mp_int * X, mp_int * P, mp_int * Y);
|
||||
|
@ -3589,7 +3636,7 @@ ERR:
|
|||
}
|
||||
|
||||
/* determines the setup value */
|
||||
int
|
||||
static int
|
||||
mp_reduce_2k_setup(const mp_int *a, mp_digit *d)
|
||||
{
|
||||
int res, p;
|
||||
|
@ -3677,12 +3724,6 @@ int mp_shrink (mp_int * a)
|
|||
return MP_OKAY;
|
||||
}
|
||||
|
||||
/* get the size for an signed equivalent */
|
||||
int mp_signed_bin_size (const mp_int * a)
|
||||
{
|
||||
return 1 + mp_unsigned_bin_size (a);
|
||||
}
|
||||
|
||||
/* computes b = a*a */
|
||||
int
|
||||
mp_sqr (const mp_int * a, mp_int * b)
|
||||
|
|
|
@ -249,9 +249,6 @@ int mp_shrink(mp_int *a);
|
|||
#define mp_iseven(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 0)) ? MP_YES : MP_NO)
|
||||
#define mp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? MP_YES : MP_NO)
|
||||
|
||||
/* set to a digit */
|
||||
void mp_set(mp_int *a, mp_digit b);
|
||||
|
||||
/* set a 32-bit const */
|
||||
int mp_set_int(mp_int *a, unsigned long b);
|
||||
|
||||
|
@ -270,14 +267,8 @@ int mp_copy(const mp_int *a, mp_int *b);
|
|||
/* inits and copies, a = b */
|
||||
int mp_init_copy(mp_int *a, const mp_int *b);
|
||||
|
||||
/* trim unused digits */
|
||||
void mp_clamp(mp_int *a);
|
||||
|
||||
/* ---> digit manipulation <--- */
|
||||
|
||||
/* Counts the number of lsbs which are zero before the first zero bit */
|
||||
int mp_cnt_lsb(const mp_int *a);
|
||||
|
||||
/* I Love Earth! */
|
||||
|
||||
/* makes a pseudo-random int of a given size */
|
||||
|
@ -301,9 +292,6 @@ int mp_neg(mp_int *a, mp_int *b);
|
|||
/* compare a to b */
|
||||
int mp_cmp(const mp_int *a, const mp_int *b);
|
||||
|
||||
/* compare |a| to |b| */
|
||||
int mp_cmp_mag(const mp_int *a, const mp_int *b);
|
||||
|
||||
/* c = a + b */
|
||||
int mp_add(mp_int *a, mp_int *b, mp_int *c);
|
||||
|
||||
|
@ -313,9 +301,6 @@ int mp_sub(mp_int *a, mp_int *b, mp_int *c);
|
|||
/* c = a * b */
|
||||
int mp_mul(const mp_int *a, const mp_int *b, mp_int *c);
|
||||
|
||||
/* b = a*a */
|
||||
int mp_sqr(const mp_int *a, mp_int *b);
|
||||
|
||||
/* c = a mod b, 0 <= c < b */
|
||||
int mp_mod(const mp_int *a, mp_int *b, mp_int *c);
|
||||
|
||||
|
@ -344,9 +329,6 @@ int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);
|
|||
/* d = a * b (mod c) */
|
||||
int mp_mulmod(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d);
|
||||
|
||||
/* c = a * a (mod b) */
|
||||
int mp_sqrmod(const mp_int *a, mp_int *b, mp_int *c);
|
||||
|
||||
/* c = 1/a (mod b) */
|
||||
int mp_invmod(const mp_int *a, mp_int *b, mp_int *c);
|
||||
|
||||
|
@ -374,39 +356,12 @@ int mp_is_square(mp_int *arg, int *ret);
|
|||
/* computes the jacobi c = (a | n) (or Legendre if b is prime) */
|
||||
int mp_jacobi(mp_int *a, mp_int *n, int *c);
|
||||
|
||||
/* used to setup the Barrett reduction for a given modulus b */
|
||||
int mp_reduce_setup(mp_int *a, const mp_int *b);
|
||||
|
||||
/* Barrett Reduction, computes a (mod b) with a precomputed value c
|
||||
*
|
||||
* Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely
|
||||
* compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code].
|
||||
*/
|
||||
int mp_reduce(mp_int *a, const mp_int *b, const mp_int *c);
|
||||
|
||||
/* setups the montgomery reduction */
|
||||
int mp_montgomery_setup(const mp_int *a, mp_digit *mp);
|
||||
|
||||
/* computes a = B**n mod b without division or multiplication useful for
|
||||
* normalizing numbers in a Montgomery system.
|
||||
*/
|
||||
int mp_montgomery_calc_normalization(mp_int *a, const mp_int *b);
|
||||
|
||||
/* computes x/R == x (mod N) via Montgomery Reduction */
|
||||
int mp_montgomery_reduce(mp_int *a, const mp_int *m, mp_digit mp);
|
||||
|
||||
/* returns 1 if a is a valid DR modulus */
|
||||
int mp_dr_is_modulus(mp_int *a);
|
||||
|
||||
/* returns true if a can be reduced with mp_reduce_2k */
|
||||
int mp_reduce_is_2k(mp_int *a);
|
||||
|
||||
/* determines k value for 2k reduction */
|
||||
int mp_reduce_2k_setup(const mp_int *a, mp_digit *d);
|
||||
|
||||
/* reduces a modulo b where b is of the form 2**p - k [0 <= a] */
|
||||
int mp_reduce_2k(mp_int *a, const mp_int *n, mp_digit d);
|
||||
|
||||
/* d = a**b (mod c) */
|
||||
int mp_exptmod(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d);
|
||||
|
||||
|
@ -466,7 +421,6 @@ int mp_unsigned_bin_size(const mp_int *a);
|
|||
int mp_read_unsigned_bin(mp_int *a, const unsigned char *b, int c);
|
||||
int mp_to_unsigned_bin(const mp_int *a, unsigned char *b);
|
||||
|
||||
int mp_signed_bin_size(const mp_int *a);
|
||||
int mp_read_signed_bin(mp_int *a, unsigned char *b, int c);
|
||||
int mp_to_signed_bin(mp_int *a, unsigned char *b);
|
||||
|
||||
|
|
Loading…
Reference in a new issue