Linux平台下NTRUSign的安装
来源:互联网 发布:centos 安装选项 编辑:程序博客网 时间:2024/05/19 22:25
说明:最近需要使用NTRUSign算法,下载了securityinnovation公司的官方代码,在Linux平台下进行了安装配置,期间出现了一些奇怪的问题,在网上也没有找到相关的资料,后经过思考尝试最终解决,发现问题出在官方代码本身上面。现将整个过程记录下来并突出对官方代码的修改,希望对以后有需要的朋友有所帮助。
一、安装环境:Kali Linux 2.0,gcc 4.9.2
二、安装FFTW库
1.说明:FFTW用于一个计算任意长度的多维离散傅立叶变换,NTRUSign代码编译时需要这个库作为支持,所以先安装这个库。
2.下载:去官网http://www.fftw.org下载fftw的最新版本(当前最新为3.3.4)的Linux版本。
3.安装:用默认的安装顺序与选项即可,即./configure——make——makeinstall,亦可自己指定安装位置及选项,详情可百度相关帖子。另外,要注意安装时的root权限。
4.完成:默认头文件fftw3.h等文件会在/usr/local/include目录下,libfftw3.a文件会在/usr/local/lib下。另外在/usr/local/include下还会有fftw3.f、fftw3.f03文件,/usr/local/lib下还会有libfftw3.la文件,如果修改安装选项则会有更多的其它文件。
5.测试:使用测试代码测试程序是否安装成功,按照以下代码测试,如能够正确编译并运行出结果即表明fftw库安装成功。
#include <stdio.h>#include <stdlib.h>#include <math.h>#include <fftw3.h>#define N 4#define REAL 0#define PI 3.1415926535898#define IMAG 1int main(int argc,char *argv[]){fftw_complex *in,*out;fftw_plan p;double constants[N] = {10,2.1,4.7,1.3};double f;int i,j;//alloc memoryin = fftw_malloc(sizeof(fftw_complex) * N);out = fftw_malloc(sizeof(fftw_complex) * N);if((NULL == in) || (NULL == out)){printf("Error:insufficient avaliable memory!\n"); exit(-1);} else{ //Create the FFTW execution planp = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);//Initialze the input datafor(i = 0; i < N;i++){//All sampling pointsin[i][REAL] = constants[0];in[i][IMAG] = 0;for(j = 1;j < N;j++){ //All frequenciesin[i][REAL] += constants[j] * cos(j * i * 2 * PI / (double)N);in[i][IMAG] += constants[j] * sin(j * i * 2 * PI / (double)N);}} //Execute planfftw_execute(p);//Destory planfftw_destroy_plan(p);//Display resultsprintf("Constants[] = {");for(i = 0;i < N;i ++)printf("%lf%s",constants[i],(i == N-1)?"}\n":","); printf("Input[][REAL] = {");for(i = 0;i < N;i++)printf("%lf%s",in[i][REAL],(i == N-1) ? "}\n":",");printf("Output[][REAL] = {");for(i = 0;i < N;i++)printf("%lf%s",out[i][REAL],(i == N-1) ? "}\n":",");//Scale outputf = 1.0/sqrt((double)N);for(i = 0;i < N;i++)out[i][REAL] *= f;//Display final resultsprintf("Scaled[][REAL] = {");for(i = 0;i< N;i++)printf("%lf%s",out[i][REAL],(i == N-1) ? "}\n":",");} //Free allocated memoryif(in != NULL)fftw_free(in);if(out != NULL)fftw_free(out);return 0;}
说明:以上代码摘自网上。
三、安装 NTRUSign
1.下载:去官网https://www.securityinnovation.com/ 下载最新版本的ntru-crypto-master.zip(在Github上托管),解压之后的\reference_code\C\Sign\PASS目录是NTRUSign的C语言实现
2.修改:官方的Makefile文件和constants.h有点问题,会导致编译和运行均出现错误,现对其进行修改
(1)修改Makefile文件:修改src子目录下的Makefile文件,将第39行的$(LDFLAGS)移到末尾,也就是$@的后面。gcc中的-l链接库选项必须在源文件后面,否则编译会报错。
(2)修改src目录下的constants.h文件,第39行、51行、64行、76行的wisdom.dat文件路径有误,少了一个点,将“./data/*_wisdom.dat”改为“../data/*_wisdom.dat”,即找上一级目录而不是当前目录。这个错误会导致程序执行报错,显示初始化失败,提示wisdom有问题,就是因为找不到这个文件。
3.编译并执行:以上错误修改之后,经过make就会在/bin/目录下面生成名为bench的可执行文件。
- Linux平台下NTRUSign的安装
- Linux平台下NS2的安装
- Linux平台下Eclipse的安装
- linux平台下jpcap的安装
- linux平台下的Notepadqq安装
- Linux平台下安装SSH
- Linux平台下安装Mongodb
- Linux平台下Subversion的安装与配置(一)
- Linux平台下Subversion的安装与配置(二)
- PowerPC 平台 下 Linux rpm 包的一个安装问题
- 归档Redis在Windows,linux平台下的安装配置
- 归档Redis在Windows,linux平台下的安装配置
- FFmpeg在windows/Linux/android平台下的安装
- XP/Linux平台下adb的安装与使用
- Linux平台下Subversion的安装与配置
- 归档Redis在Windows,linux平台下的安装配置
- linux平台下的软件安装于升级
- Redis在Windows,linux平台下的安装配置
- 深度剖析adaboost
- C#计算器编程教学课程前言
- Java注释
- 大数据概念
- <iframe>标签自适应高度和宽度
- Linux平台下NTRUSign的安装
- Harris及Shi-Tomasi原理及源码解析
- 根据流程定义名称获得流程定义ID出错
- 实现在文章后面添加目录分类和时间
- ORB
- android 客户端生成随机验证码的实现
- ACM-括号配对问题 ASCII码的运用|std::vector/std::list的区别与使用
- mysql乐观锁总结和实践
- camera issues