Crypt-MatrixSSL
view release on metacpan or search on metacpan
matrixssl-1-8-6-open/src/crypto/peersec/mpi.c view on Meta::CPAN
/******************************************************************************/
/*
Call only from mp_exptmod to make sure this fast version qualifies
*/
static int32 mp_exptmod_fast(psPool_t *pool, mp_int * G, mp_int * X,
mp_int * P, mp_int * Y, int32 redmode)
{
mp_int M[TAB_SIZE], res;
mp_digit buf, mp;
int32 err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize;
/*
use a pointer to the reduction algorithm. This allows us to use
one of many reduction algorithms without modding the guts of
the code with if statements everywhere.
*/
int32 (*redux)(mp_int*,mp_int*,mp_digit);
/*
matrixssl-1-8-6-open/src/crypto/peersec/mpi.c view on Meta::CPAN
goto LBL_RES;
}
}
/*
set initial mode and bit cnt
*/
mode = 0;
bitcnt = 1;
buf = 0;
digidx = X->used - 1;
bitcpy = 0;
bitbuf = 0;
for (;;) {
/*
grab next digit as required
*/
if (--bitcnt == 0) {
/* if digidx == -1 we are out of digits so break */
if (digidx == -1) {
break;
}
/* read next digit and reset bitcnt */
buf = X->dp[digidx--];
bitcnt = (int)DIGIT_BIT;
}
/* grab the next msb from the exponent */
y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1;
buf <<= (mp_digit)1;
/*
if the bit is zero and mode == 0 then we ignore it
These represent the leading zero bits before the first 1 bit
( run in 0.350 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )