Linux平台下NTRUSign的安装

来源:互联网 发布:centos 安装选项 编辑:程序博客网 时间:2024/05/19 22:25


说明:最近需要使用NTRUSign算法,下载了securityinnovation公司的官方代码,在Linux平台下进行了安装配置,期间出现了一些奇怪的问题,在网上也没有找到相关的资料,后经过思考尝试最终解决,发现问题出在官方代码本身上面。现将整个过程记录下来并突出对官方代码的修改,希望对以后有需要的朋友有所帮助。

一、安装环境Kali Linux 2.0gcc 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.ffftw3.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的可执行文件。
































































0 0
原创粉丝点击