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

    技术2022-05-14  19

    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)