Linux平台下NTRUSign的安装



说明:最近需要使用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 1

int 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 memory
	in = 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 plan
		p = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
		//Initialze the input data
		for(i = 0; i < N;i++)
		{
			//All sampling points
			in[i][REAL] = constants[0];
			in[i][IMAG] = 0;
			for(j = 1;j < N;j++)
			{
                                //All frequencies
				in[i][REAL] += constants[j] * cos(j * i * 2 * PI / (double)N);
				in[i][IMAG] += constants[j] * sin(j * i * 2 * PI / (double)N);

			}
		}
                //Execute plan
		fftw_execute(p);
		//Destory plan
		fftw_destroy_plan(p);
		//Display results
		printf("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 output
		f = 1.0/sqrt((double)N);
		for(i = 0;i < N;i++)
			out[i][REAL] *= f;

		//Display final results
		printf("Scaled[][REAL] = {");
		for(i = 0;i< N;i++)
			printf("%lf%s",out[i][REAL],(i == N-1) ? "}\n":",");
	}
    
	//Free allocated memory
	if(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,NTRU)