Moved mp_mul_si() into bn_mp_prime_strong_lucas_selfridge.c as a local function

This commit is contained in:
czurnieden 2018-05-21 22:54:55 +02:00 committed by Steffen Jaeckel
parent 934dd31738
commit 08cee4325d
4 changed files with 41 additions and 55 deletions

View File

@ -1,50 +0,0 @@
#include "tommath_private.h"
#ifdef BN_MP_MUL_SI_C
/* LibTomMath, multiple-precision integer library -- Tom St Denis
*
* LibTomMath is a library that provides multiple-precision
* integer arithmetic as well as number theoretic functionality.
*
* The library was designed directly after the MPI library by
* Michael Fromberger but has been written from scratch with
* additional optimizations in place.
*
* The library is free for all purposes without any express
* guarantee it works.
*/
// multiply bigint a with int d and put the result in c
// Like mp_mul_d() but with a signed long as the small input
int mp_mul_si(const mp_int *a, long d, mp_int *c)
{
mp_int t;
int err, neg = 0;
if ((err = mp_init(&t)) != MP_OKAY) {
return err;
}
if (d < 0) {
neg = 1;
d = -d;
}
// mp_digit might be smaller than a long, which excludes
// the use of mp_mul_d() here.
if ((err = mp_set_long(&t, (unsigned long) d)) != MP_OKAY) {
goto LBL_MPMULSI_ERR;
}
if ((err = mp_mul(a, &t, c)) != MP_OKAY) {
goto LBL_MPMULSI_ERR;
}
if (neg == 1) {
c->sign = (a->sign == MP_NEG) ? MP_ZPOS: MP_NEG;
}
LBL_MPMULSI_ERR:
mp_clear(&t);
return err;
}
#endif

View File

@ -14,7 +14,6 @@
* guarantee it works. * guarantee it works.
*/ */
#ifdef MP_8BIT #ifdef MP_8BIT
/* /*
* floor of positive solution of * floor of positive solution of

View File

@ -14,8 +14,49 @@
* guarantee it works. * guarantee it works.
*/ */
/*
* 8-bit is just too small. You can try the Frobenius test
* but that frobenius test can fail, too, for the same reason.
*/
#ifndef MP_8BIT #ifndef MP_8BIT
/*
* multiply bigint a with int d and put the result in c
* Like mp_mul_d() but with a signed long as the small input
*/
static int mp_mul_si(const mp_int *a, long d, mp_int *c)
{
mp_int t;
int err, neg = 0;
if ((err = mp_init(&t)) != MP_OKAY) {
return err;
}
if (d < 0) {
neg = 1;
d = -d;
}
/*
* mp_digit might be smaller than a long, which excludes
* the use of mp_mul_d() here.
*/
if ((err = mp_set_long(&t, (unsigned long) d)) != MP_OKAY) {
goto LBL_MPMULSI_ERR;
}
if ((err = mp_mul(a, &t, c)) != MP_OKAY) {
goto LBL_MPMULSI_ERR;
}
if (neg == 1) {
c->sign = (a->sign == MP_NEG) ? MP_ZPOS: MP_NEG;
}
LBL_MPMULSI_ERR:
mp_clear(&t);
return err;
}
/* /*
Strong Lucas-Selfridge test. Strong Lucas-Selfridge test.
returns MP_YES if it is a strong L-S prime, MP_NO if it is composite returns MP_YES if it is a strong L-S prime, MP_NO if it is composite

View File

@ -364,10 +364,6 @@ int mp_sub_d(const mp_int *a, mp_digit b, mp_int *c);
/* c = a * b */ /* c = a * b */
int mp_mul_d(const mp_int *a, mp_digit b, mp_int *c); int mp_mul_d(const mp_int *a, mp_digit b, mp_int *c);
/* multiply bigint a with int d and put the result in c
Like mp_mul_d() but with a signed long as the small input */
int mp_mul_si(const mp_int *a, long d, mp_int *c);
/* a/b => cb + d == a */ /* a/b => cb + d == a */
int mp_div_d(const mp_int *a, mp_digit b, mp_int *c, mp_digit *d); int mp_div_d(const mp_int *a, mp_digit b, mp_int *c, mp_digit *d);