[关闭]
@rg070836rg 2016-12-19T22:47:25.000000Z 字数 3456 阅读 3019

MIRACL

网络安全


一.MIRACL简介

MIRACL(Multiprecision Integer and RationalArithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了RSA 公开密码学、Diffie-Hellman密钥交换(Key Exchange)、AES、DSA数字签名,还包含了较新的椭圆曲线密码学(Elliptic CurveCryptography)等等。运算速度快,并提供源代码。

二、配置

2.1 从GitHub上面down下来

git 链接:https://github.com/miracl/MIRACL.git

  1. git clone https://github.com/miracl/MIRACL.git

image_1b4bfpauf1bv31ugi1sjf1dca152k9.png-23.4kB

2.2 按照指导,编译得到lib文件

编译我选用的是ms环境编译,然后从脚本中选择ms32doit.bat进行32位编译,得到下面的lib文件
image_1b4bminudkfi12b1d7d196j13169.png-1.3kB

2.3 新建项目

①新建项目:Win32控制台项目
②将大数运算静态库文件ms32.lib和头部文件miracl.h和mirdef.h拷贝到项目所在文件夹
③对项目打开“属性页”对话框,单击“C/C++”配置属性,选择“预编译头”选项,设置为“不使用编译头”
④为项目添加如下头文件的包含,此处使用extern"C"是表示用C的方式编译,因为ms32.lib是C的库,不是C++的库,如图1-7所示;

  1. extern "C"
  2. {
  3. #include"miracl.h"
  4. #include"mirdef.h"
  5. }

三 常用函数

来自项目中manual.doc,原文为英文,做了简单翻译。

  1. 函数原型: void absol(big x, big y);
  2. 功能说明: x的绝对值,y=|x|
  3. 函数原型: void add(big x, big y, big z);
  4. 功能说明: 两个大数相加,z=x+y
  5. Example: add(x,x,x); // This doubles the value of x.
  6. 函数原型: void bigbits(int n, big x);
  7. 功能说明: 产生一个n位的大整数,初始化随机种子由irand函数实现
  8. Example: bigbits(100,x); //This generates a 100 bitrandom number
  9. 函数原型: int cinstr(big x, char*s);
  10. 功能说明: 将大数字符串转换成大数
  11. 返回值: 输入字符数的个数
  12. Example: mip->IOBASE=16; // input large hex number into big x
  13. cinstr(x,”AF12398065BFE4C96DB723A”);
  14. 函数原型: int compare(big x, big y);
  15. 功能说明: 比较两个大数的大小
  16. 返回值: x>y时返回+1, x=y时返回0, x<y时返回-1
  17. 函数原型: void convert(int n, big x);
  18. 功能说明: 将一个整数n转换成一个大数x
  19. 函数原型: void copy(big x, big y);
  20. 功能说明: 将一个大数赋值给另一个大数,y=x
  21. 函数原型: int cotstr(big x, char *s);
  22. 功能说明: 将一个大数根据其进制转换成一个字符串
  23. 返回值: 字符串长度
  24. 函数原型: void decr(big x, int n, big z) ;
  25. 功能说明: 将一个大数减去一个整数, z=x-n.
  26. 函数原型: void divide(big x, big y, big z);
  27. 功能说明: 两个大数相除,z=x/y; x=x mod y,当变量yz相同时,x为余数,商不返回(即y的值不变);当xz相同时,x为商,余数不返回。
  28. Example: divide(x,y,y);//x为余数,y值不变
  29. 函数原型: BOOL divisible(big x, big y)
  30. 功能说明: 测试x能否整除y
  31. 返回值: yx余数为0,返回TRUE,否则返回FALSE
  32. 函数原型: intigcd(int x, int y) ;
  33. 功能说明: 返回两个整数的最大公约数
  34. 函数原型: void incr(big x, int n, big z);
  35. 功能说明: 将一个大数加上一个整数, z=x+n
  36. Example: incr(x,2,x); /* This increments x by 2. */
  37. 函数原型: void mirkill(big x);
  38. 功能说明: 释放内存大数所占的内存
  39. 函数原型: miracl *mirsys(int nd, int nb);
  40. 功能说明: 初始化MIRACL系统,该函数必须在调用MIRACL库函数之前先执行
  41. Example: miracl *mip=mirsys(500,10);//初始化500位的10进行制数
  42. 函数原型: void mirexit();
  43. 功能说明: 清除MIRACL系统,释放所有内部变量
  44. 函数原型: void multiply(big x, big y, big z);
  45. 功能说明: 两个大数相乘,z=x.y
  46. 函数原型: void negify(big x, big y);
  47. 功能说明: 大数取负号,y=-x.
  48. 函数原型: int numdig(big x);
  49. 功能说明: 返回大数x中数字的个数
  50. 函数原型: void premult(big x, int n, big z);
  51. 功能说明: 一个大数乘以一个整数,z=n.x
  52. 函数原型: int subdiv(big x, int n, big z);
  53. 功能说明: 一个大数除以一个整数,z=x/n.
  54. 返回值: 余数
  55. 函数原型: BOOL subdivisible(big x, int n)
  56. 功能说明: 测试n能否整除x
  57. 返回值: x除以n余数为0,返回TRUE,否则返回FALSE
  58. 函数原型: void bigdig(int n, int b, big x);
  59. 功能说明: 产生一个指定长度的进制的随机数,该函数使用内置的随机数发生器,初始化种子调用irand函数
  60. Example: bigdig(100,10,x); //产生一个100位的10进制随机数
  61. 函数原型: void bigrand(big w, big x);
  62. 功能说明: 使用内置的随机数发生器,产生一个小于w的大数随机数,x<w
  63. 函数原型: int egcd(bigx, big y, big z);
  64. 功能说明:计算两个大数的最大公约数,z=gcd(x,y)
  65. 函数原型: void expb2(int n, big x)
  66. 功能说明: 计算2n次方的大数
  67. Example: expb2(1398269,x); //2^1398269
  68. decr(x,1,x); //x = x - 1
  69. mip->IOBASE=10; //使用10进制
  70. cotnum(x,stdout); //输出到屏幕
  71. This calculates and prints out the largest known primenumber (on a true 32-bit computer with lots of memory!)
  72. 函数原型: void expint(intb, int n, big x);
  73. 功能说明: 计算bn次方的大数
  74. 函数原型: void fft_mult(big x, big y, big z);
  75. 功能说明: 使用Fast Fourier算法计算两个大数乘积,z=x.y
  76. 函数原型: unsigned int invers(unsigned int x, unsigned int y);
  77. 功能说明:计算两个无符号整数(要求互素)的模逆,返回x-1 mod y
  78. 函数原型: BOOL isprime(bigx);
  79. 功能说明:判断一个大数是否为素数,使用概率测试算法
  80. 返回值: x为素数返回TRUE,否则返回FALSE
  81. 函数原型: void powmod(big x, big y,big z, big w);
  82. 功能说明: 模幂运算,w=xy mod z
  83. 函数原型: void sftbit(big x, int n,big z);
  84. 功能说明:将一个大数左移或右移n位,n为正数时左移,负数时右移
  85. 函数原型: int xgcd(bigx, big y, big xd, big yd, big z);
  86. 功能说明: 计算两个大数的扩展最大公约数,也可以用来计算模逆,这个函数比mad 函数运算速度稍慢。z=gcd(x,y)=x.xd+y.yd
  87. Example: xgcd(x,p,x,x,x); //计算x^-1 mod p
  88. /* x = 1/x mod p (p is prime) */

四、架构理解

①miracl.h:所有的宏定义,外部定义的函数接口的结构①体定义。
②mirdef.h:根据不同环境和编译环境给出的定义。
③big.h:大整数文件的定义。
④大数文件中所有的函数依赖于其他的文件(比如:mraes.cmralloc.cmrarth0.c等等)
⑤znn.h:定义了运算功能。
⑥总之,功能很强大,有很多拓展,可以在项目中doc文档中看到。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注