forked from ibphoenix/tomsfastmath
add fp_rand()
it's a port of the function in libtommath
This commit is contained in:
parent
56438df4cf
commit
ec7f25200f
@ -317,6 +317,9 @@ const char *fp_ident(void);
|
||||
/* set to a small digit */
|
||||
void fp_set(fp_int *a, fp_digit b);
|
||||
|
||||
/* makes a pseudo-random int of a given size */
|
||||
void fp_rand(fp_int *a, int digits);
|
||||
|
||||
/* copy from a to b */
|
||||
#define fp_copy(a, b) (void)(((a) != (b)) && memcpy((b), (a), sizeof(fp_int)))
|
||||
#define fp_init_copy(a, b) fp_copy(b, a)
|
||||
|
41
src/misc/fp_rand.c
Normal file
41
src/misc/fp_rand.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* TomsFastMath, a fast ISO C bignum library.
|
||||
*
|
||||
* This project is meant to fill in where LibTomMath
|
||||
* falls short. That is speed ;-)
|
||||
*
|
||||
* This project is public domain and free for all purposes.
|
||||
*
|
||||
* Tom St Denis, tomstdenis@gmail.com
|
||||
*/
|
||||
#include <tfm.h>
|
||||
|
||||
/* makes a pseudo-random int of a given size */
|
||||
|
||||
void fp_rand(fp_int *a, int digits)
|
||||
{
|
||||
fp_digit d;
|
||||
|
||||
fp_zero(a);
|
||||
if (digits <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* first place a random non-zero digit */
|
||||
do {
|
||||
d = ((fp_digit) abs (rand ())) & FP_MASK;
|
||||
} while (d == 0);
|
||||
|
||||
fp_add_d (a, d, a);
|
||||
|
||||
while (--digits > 0) {
|
||||
fp_lshd (a, 1);
|
||||
fp_add_d (a, ((fp_digit) abs (rand ())), a);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
/* $Source$ */
|
||||
/* $Revision$ */
|
||||
/* $Date$ */
|
Loading…
Reference in New Issue
Block a user