ECC代码中调用的大数库(tommath)函数总结

来源:互联网 发布:ubuntu 卸载cuda9 编辑:程序博客网 时间:2024/05/16 14:17

1.   mp_int a

typedef struct

{

int used,alloc,sign;

mp_digit *dp;

}mp_int

mp_digit是无符号整数;dp是存放大整数的地址;used为实际使用的mp_digit单元;sign=0,表示非负数;=1表示负数。

2.   mp_init

函数原型为:int mp_init(mp_int *a)

初始化mp_int结构,函数返回MP_OKAY,就可以认为该结构已正确初始化,可以安全的被库中其他函数使用

3. mp_init_set_int

函数原型:int mp_init_set_int (mp_int * a, unsigned long b);

初始化mp_int结构并设置大常量。它接受一个“长”数据类型作为输入,并且总是将其当作一个32位整数。

输入一个mp_int类型的和一个“长”整型b,输出a等于b。

4.mp_init_set

函数原型:int mp_init_set (mp_int * a, mp_digit b);

其中b是一个数据位。

初始化mp_int结构并设置小常量。例如将mp_int结构设置成一个相对较小的值(1或2等).

5. mp_toradix

函数调用形式为:int mp_toradix(mp_int *a, char *str, int radix)

此算法计算mp_int类型的a的以r为基的表示法,并把数位存在数组temp(char型)中并以字符串形式输出到屏幕上。

6. mp_prime_random_ex

函数原型:int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat);

*dat一般可设置为NULL。

求一定位数的素数

a为返回值,t为回测次数,通常可为10,size指产生的素数的位数

7.mp_expt_d

函数原型为:int mp_expt_d(mp_int *a, mp_digit b, mp_int *c)

此算法计算a的b次幂,其中b为单数位数字。

8. mp_sqr

函数原型为:int mp_sqr(mp_int *a, mp_int *b)

输入mp_int类型的a,输出b=a^2.分配了一个临时mp_int b来保存平方结果。

9.mp_sqrt

int mp_sqrt(mp_int *arg, mp_int *ret);

此算法为开平方根算法。

10.mp_mul_d

函数原型为:int mp_mul_d(mp_int *a, mp_digit b, mp_int *c)

单数位乘法。此算法快速计算mp_int与单数位值的乘积。输入mp_int a和mp_digit b,输出c=ab

11.mp_mul

函数原型:int mp_mul(mp_int *a, mp_int *b, mp_int *c);

计算两个数的有符号乘积。返回结果为目标操作数c=ab。

12.mp_add

函数原型:int mp_add(mp_int *a, mp_int *b, mp_int *c)

输入两个mp_int类型的a和b,输出有符号加法c=a+b。

13.mp_sub

函数原型:int mp_sub(mp_int *a, mp_int *b, mp_int *c);

输入两个mp_int类型的a和b,输出有符号加法c=a-b。

14.mp_mod

函数原型为:int mp_mod(mp_int *a, mp_int *b, mp_int *c)

输入两个mp_int类型的a和b ,输出c=a mod b, 0 <= c < b

15.mp_cmp

函数原型:int mp_cmp(mp_int *a, mp_int *b)

有符号数的比较。输入两个mp_int类型的a和b,输出有符号数比较结果(a在b的左边)

函数返回值为MP_GT=1时为大于;MP_EQ=0时为等于;MP_LT=-1时为小于。

16.mp_clear

函数原型:void mp_clear(mp_int *a);

输入:mp_int类型的变量a,输出:回收为a分配的内存。

17.mp_copy

函数原型:int mp_copy(mp_int *a, mp_int *b);

该算法拷贝了mp_int结构a,算法成功终止时,mp_int结构b就和a代表同一个整数值。mp_int结构b是结构a的完整但不同的拷贝,mp_int结构a可以修改并且不会影响mp_int结构b的值。

18.mp_init_copy

函数原型:int mp_init_copy(mp_int *a, mp_int *b);

初始化mp_int结构a,并将b拷贝到a 。

19. mp_zero

函数原型:void mp_zero(mp_int *a);

输入mp_int 类型的a,并将a的内容清零。

20.mp_invmod

函数原型:int mp_invmod(mp_int *a, mp_int *b, mp_int *c);

输入mp_int a和b,(a,b)=1,p>=2,0<a<p,输出模逆c=a^-1(mod b)。即ab=1(mod p)

21.mp_mulmod

函数原型:int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

此算法求解 d = a * b (mod c)

22. mp_submod

函数原型:int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d);

文章来自http://hi.baidu.com/237rxd/blog/item/66a38a8bd37598739f2fb437.html

0 0
原创粉丝点击