MIRACL大数运算库使用手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MIRACL大数运算库使用手册
游贵荣
一.MIRACL简介
MIRACL(Multiprecision Integer and Rational Arithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了RSA 公开密码学、Diffie-Hellman密钥交换(Key Exchange)、AES、DSA数字签名,还包含了较新的椭圆曲线密码学(Elliptic Curve Cryptography)等等。运算速度快,并提供源代码。MIARCL是当前使用比较广泛的基于公钥加密算法保护实现的大数库之一,据说要使用该库用于商业软件,需要交纳一笔昂贵的授权费——1000$。
二.MIRACL常用函数调用手册
声明:此处只列出和大数相关的简单运算函数,以及产生大数随机数的函数调用手册,具体请查看manual.doc文档。不当之处,请大家批评指正!
函数原型: void absol(big x, big y);
功能说明: 取x的绝对值,y=|x|
函数原型: void add(big x, big y, big z);
功能说明: 两个大数相加,z=x+y
Example: add(x,x,x); // This doubles the value of x.
函数原型: void bigbits(int n, big x);
功能说明: 产生一个n位的大整数,初始化随机种子由irand函数实现
Example: bigbits(100,x); //This generates a 100 bit random number
函数原型: int cinstr(big x, char *s);
功能说明: 将大数字符串转换成大数
返回值: 输入字符数的个数
Example: mip->IOBASE=16; // input large hex number into big x
cinstr(x,”AF12398065BFE4C96DB723A”);
函数原型: int compare(big x, big y);
功能说明: 比较两个大数的大小
返回值: x>y时返回+1, x=y时返回0, x 函数原型: void convert(int n, big x); 功能说明: 将一个整数n转换成一个大数x 函数原型: void copy(big x, big y); 功能说明: 将一个大数赋值给另一个大数,y=x 函数原型: int cotstr(big x, char *s); 功能说明: 将一个大数根据其进制转换成一个字符串 返回值: 字符串长度 函数原型: void decr(big x, int n, big z) ; 功能说明: 将一个大数减去一个整数, z=x-n. 函数原型: void divide(big x, big y, big z); 功能说明: 两个大数相除,z=x/y; x=x mod y,当变量y和z相同时,x为余数,商不返回(即y的值不变);当x和z相同时,x为商,余数不返回。 Example: divide(x,y,y);//x为余数,y值不变 函数原型: BOOL divisible(big x, big y) 功能说明: 测试x能否整除y 返回值: y除x余数为0,返回TRUE,否则返回FALSE 函数原型: int igcd(int x, int y) ; 功能说明: 返回两个整数的最大公约数 函数原型: void incr(big x, int n, big z); 功能说明: 将一个大数加上一个整数, z=x+n Example: incr(x,2,x); /* This increments x by 2. */ 函数原型: void mirkill(big x); 功能说明:释放内存大数所占的内存 函数原型: miracl *mirsys(int nd, int nb); 功能说明: 初始化MIRACL系统,该函数必须在调用MIRACL库函数之前先执行Example: miracl *mip=mirsys(500,10);//初始化500位的10进行制数 函数原型: void mirexit(); 功能说明: 清除MIRACL系统,释放所有内部变量 函数原型: void multiply(big x, big y, big z); 功能说明: 两个大数相乘,z=x.y 函数原型: void negify(big x, big y); 功能说明: 大数取负号,y=-x. 函数原型: int numdig(big x); 功能说明: 返回大数x中数字的个数 函数原型: void premult(big x, int n, big z); 功能说明: 一个大数乘以一个整数,z=n.x 函数原型: int subdiv(big x, int n, big z); 功能说明: 一个大数除以一个整数,z=x/n. 返回值: 余数 函数原型: BOOL subdivisible(big x, int n) 功能说明: 测试n能否整除x 返回值: x除以n余数为0,返回TRUE,否则返回FALSE 函数原型: void bigdig(int n, int b, big x); 功能说明: 产生一个指定长度的进制的随机数,该函数使用内置的随机数发生器,初始化种子调用irand函数 Example: bigdig(100,10,x); //产生一个100位的10进制随机数 函数原型: void bigrand(big w, big x); 功能说明: 使用内置的随机数发生器,产生一个小于w的大数随机数,x 函数原型: int egcd(big x, big y, big z); 功能说明:计算两个大数的最大公约数,z=gcd(x,y) 函数原型: void expb2(int n, big x) 功能说明: 计算2的n次方的大数 Example: expb2(1398269,x); //2^1398269 decr(x,1,x); //x = x - 1 mip->IOBASE=10; //使用10进制 cotnum(x,stdout); //输出到屏幕 This calculates and prints out the largest known prime number (on a true 32-bit computer with lots of memory!) 函数原型: void expint(int b, int n, big x); 功能说明: 计算b的n次方的大数 函数原型: void fft_mult(big x, big y, big z); 功能说明: 使用Fast Fourier算法计算两个大数乘积,z=x.y