Tommath学习笔记

   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
 
 
    
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值