flush//刷新缓存,强制输出
如:cout<<"大家好!"<<flush; 则会立即输出这句话。
mp_int a;生成任意长度的大整数
mp_init( &a ); //要紧接着对其进行初始化,两个对照使用
mp_rand( &e, 100 );//产生比特位是100的伪随机数
mp_gcd( &e, &euler, &gcd ); //求出e,euler的最大公约数gcd
mp_cmp_d( &gcd, 1 );//将变量gcd的值与1进行比较,若不相等,则值为1,相等,则值为0
mp_invmod( &e, &euler, &d );//求e对于模euler的模逆d ,即满足e * d = 1 mod euler
保存一个mp_int的数到文件中(文件变量为fp1)
mp_fread( &n, 10, fp1 ); //以十进制的形式从fp1中读出n
mp_fwrite( &n, 10, fp1 );//以十进制的形式把n保存到文件fp1中
//使用文件,并判断文件是否打开出错的用法!
FILE *fin, *fout;
fin = fopen ( file1, "r" );
re=mp_invmod(&e,&f_n,&d);//求e的逆
if (re != MP_OKAY) {
printf("求e的逆错误! %d/n", re);
}
注:一般一个函数都会有一个返回值,通过判断其是否为MP_OKAY知道其是否执行
fout= fopen ( file2, "w" );
if( !fin || !fout )
{
cout<<"打开文件出错!!"<<endl;
system("pause"); exit(0);
}
mp_set_int( &M, ch ); //将ch转换成mp_int类型,结果存放于M
int temp;
temp=mp_get_int( &M );//将mp_int类型,转换成int类型
mp_exptmod( &M, &e, &n, &C );//C= M^e mod n
求一定位数的素数的函数原型为:
int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat);
其中:a为返回值,t为回测次数,通常可为10,size指产生的素数的位数,
flags有四种取值可能,分别为:
LTM_PRIME_BBS - make prime congruent to 3 mod 4
LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS)
LTM_PRIME_2MSB_OFF - make the 2nd highest bit zero
LTM_PRIME_2MSB_ON - make the 2nd highest bit one
其中LTM_PRIME_BBS最常用
bs是一个函数
int bs(unsigned char *dst, int len, void *dat)
{
int x;
for (x = 0; x < len; x++) dst[x] = rand() & 0xFF;
return len;
}
*dat通常可使其为NULL
mp_mul( &p, &q, &n ); //已知p,q,求n:n=p*q
mp_sub_d( &p, 1, &p ); //求p=p-1