build hybrid-rev test functions on NetBSD
authorabner doubleday <adouble4242@gmail.com>
Mon, 24 Oct 2016 03:02:34 +0000 (23:02 -0400)
committerabner doubleday <adouble4242@gmail.com>
Mon, 24 Oct 2016 03:02:34 +0000 (23:02 -0400)
Core/libntru/Makefile
Core/libntru/Makefile.freebsd
Core/libntru/Makefile.netbsd [new file with mode: 0644]
Core/libntru/src/hybrid-rev.c

index a7d33cb..28d335a 100644 (file)
@@ -161,7 +161,7 @@ hybrid: static-lib
        $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid $(SRCDIR)/hybrid.c $(LDFLAGS) $(LIBS) -L. -lntru -lcrypto
 
 hybrid-rev: static-lib
-       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid-rev $(SRCDIR)/hybrid-rev.c $(LDFLAGS) $(LIBS) -L. -lntru -lcrypto
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid-rev $(SRCDIR)/hybrid-rev.c $(LDFLAGS) $(LIBS) -L. -lntru -lm -lcrypto
 
 
 $(SRCDIR)/%.o: $(SRCDIR)/%.c
index a7d33cb..28d335a 100644 (file)
@@ -161,7 +161,7 @@ hybrid: static-lib
        $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid $(SRCDIR)/hybrid.c $(LDFLAGS) $(LIBS) -L. -lntru -lcrypto
 
 hybrid-rev: static-lib
-       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid-rev $(SRCDIR)/hybrid-rev.c $(LDFLAGS) $(LIBS) -L. -lntru -lcrypto
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid-rev $(SRCDIR)/hybrid-rev.c $(LDFLAGS) $(LIBS) -L. -lntru -lm -lcrypto
 
 
 $(SRCDIR)/%.o: $(SRCDIR)/%.c
diff --git a/Core/libntru/Makefile.netbsd b/Core/libntru/Makefile.netbsd
new file mode 100644 (file)
index 0000000..3caf6dc
--- /dev/null
@@ -0,0 +1,186 @@
+CC?=cc
+AS=$(CC) -c
+AR?=ar
+
+CFLAGS?=-g
+CFLAGS+=-Wall -Wextra -Wno-unused-parameter -g
+SSSE3_FLAG = $(shell /usr/bin/grep -o SSSE3 /var/run/dmesg.boot | /usr/bin/head -1)
+ifneq ($(SSE), no)
+    ifeq ($(SSSE3_FLAG), SSSE3)
+        SSE=yes
+    endif
+endif
+AVX2_FLAG = $(shell /usr/bin/grep -o AVX2 /var/run/dmesg.boot | /usr/bin/head -1)
+ifneq ($(AVX2), no)
+    ifeq ($(AVX2_FLAG), AVX2)
+        AVX2=yes
+    endif
+endif
+ifeq ($(AVX2), yes)
+    SSE=yes
+endif
+ifeq ($(SSE), no)
+    AVX2=no
+endif
+ifeq ($(SSE), yes)
+    CFLAGS+=-mssse3
+endif
+ifeq ($(AVX2), yes)
+    CFLAGS+=-mavx2
+endif
+
+# use -march=native if we're compiling for x86
+BENCH_ARCH_OPTION=
+MACHINE=$(shell uname -m | sed 's/i.86/i386/g')
+ifeq ($(SSE), yes)
+    ifeq ($(MACHINE), i386)
+        BENCH_ARCH_OPTION=-march=native
+    endif
+    ifeq ($(MACHINE), amd64)
+        BENCH_ARCH_OPTION=-march=native
+    endif
+endif
+OPTFLAGS=-O2
+bench: OPTFLAGS=-O3 $(BENCH_ARCH_OPTION)
+CFLAGS+=$(OPTFLAGS)
+
+ifneq ($(shell uname), OpenBSD)
+    LIBS+=-lrt
+endif
+SRCDIR=src
+TESTDIR=tests
+LIB_OBJS=bitstring.o encparams.o hash.o idxgen.o key.o mgf.o ntru.o poly.o rand.o arith.o sha1.o sha2.o nist_ctr_drbg.o rijndael.o
+ifeq ($(SSE), yes)
+    ifeq ($(MACHINE), amd64)
+        LIB_OBJS+=sha1-mb-x86_64.o sha256-mb-x86_64.o
+    endif
+endif
+TEST_OBJS=test_bitstring.o test_hash.o test_idxgen.o test_key.o test_ntru.o test.o test_poly.o test_util.o
+VERSION=0.5
+INST_PFX=/usr
+INST_LIBDIR=$(INST_PFX)/lib
+INST_INCLUDE=$(INST_PFX)/include/libntru
+INST_DOCDIR=$(INST_PFX)/share/doc/libntru-$(VERSION)
+INST_HEADERS=ntru.h types.h key.h encparams.h hash.h rand.h err.h
+PERL=/usr/local/bin/perl
+PERLASM_SCHEME=elf
+
+LIB_OBJS_PATHS=$(patsubst %,$(SRCDIR)/%,$(LIB_OBJS))
+TEST_OBJS_PATHS=$(patsubst %,$(TESTDIR)/%,$(TEST_OBJS))
+DIST_NAME=libntru-$(VERSION)
+MAKEFILENAME=$(lastword $(MAKEFILE_LIST))
+
+.PHONY: all lib install uninstall dist test clean distclean
+
+all: lib
+
+lib: libntru.so
+
+static-lib: libntru.a
+
+libntru.so: $(LIB_OBJS_PATHS)
+       $(CC) $(CFLAGS) $(CPPFLAGS) -shared -Wl,-soname,libntru.so -o libntru.so $(LIB_OBJS_PATHS) $(LDFLAGS) $(LIBS)
+
+libntru.a: $(LIB_OBJS_PATHS)
+       $(AR) cru libntru.a $(LIB_OBJS_PATHS)
+
+install: install-lib install-doc install-headers
+
+install-lib: lib
+       test -d "$(DESTDIR)$(INST_LIBDIR)" || mkdir -p "$(DESTDIR)$(INST_LIBDIR)"
+       install -m 0755 libntru.so "$(DESTDIR)$(INST_LIBDIR)/libntru.so"
+
+install-static-lib: static-lib
+       test -d "$(DESTDIR)$(INST_LIBDIR)" || mkdir -p "$(DESTDIR)$(INST_LIBDIR)"
+       install -m 0755 libntru.a "$(DESTDIR)$(INST_LIBDIR)/libntru.a"
+
+install-doc:
+       test -d "$(DESTDIR)$(INST_DOCDIR)" || mkdir -p "$(DESTDIR)$(INST_DOCDIR)"
+       install -m 0644 README.md "$(DESTDIR)$(INST_DOCDIR)/README.md"
+
+install-headers:
+       test -d "$(DESTDIR)$(INST_INCLUDE)" || mkdir -p "$(DESTDIR)$(INST_INCLUDE)"
+       for header in $(INST_HEADERS) ; do \
+               install -m 0644 "$(SRCDIR)/$$header" "$(DESTDIR)$(INST_INCLUDE)/" ; \
+       done
+
+uninstall: uninstall-lib uninstall-doc uninstall-headers
+
+uninstall-lib:
+       rm -f "$(DESTDIR)$(INST_LIBDIR)/libntru.so"
+
+uninstall-static-lib:
+       rm -f "$(DESTDIR)$(INST_LIBDIR)/libntru.a"
+
+uninstall-doc:
+       rm -f "$(DESTDIR)$(INST_DOCDIR)/README.md"
+       rmdir "$(DESTDIR)$(INST_DOCDIR)/"
+
+uninstall-headers:
+       for header in $(INST_HEADERS) ; do \
+               rm "$(DESTDIR)$(INST_INCLUDE)/$$header" ; \
+       done
+       rmdir "$(DESTDIR)$(INST_INCLUDE)/"
+
+dist:
+       rm -rf $(DIST_NAME)
+       mkdir $(DIST_NAME)
+       mkdir $(DIST_NAME)/$(SRCDIR)
+       mkdir $(DIST_NAME)/$(TESTDIR)
+       cp Makefile Makefile.win Makefile.osx README.md LICENSE PATENTS $(DIST_NAME)
+       cp $(SRCDIR)/*.c $(DIST_NAME)/$(SRCDIR)
+       cp $(SRCDIR)/*.h $(DIST_NAME)/$(SRCDIR)
+       cp $(TESTDIR)/*.c $(DIST_NAME)/$(TESTDIR)
+       cp $(TESTDIR)/*.h $(DIST_NAME)/$(TESTDIR)
+       tar cf $(DIST_NAME).tar.xz $(DIST_NAME) --lzma
+       rm -rf $(DIST_NAME)
+
+test:
+       $(MAKE) -f $(MAKEFILENAME) testnoham
+       @echo
+       @echo Testing patent-reduced build
+       LD_LIBRARY_PATH=. ./testnoham
+       $(MAKE) -f $(MAKEFILENAME) testham
+       @echo
+       @echo Testing full build
+       LD_LIBRARY_PATH=. ./testham
+
+testham: clean lib $(TEST_OBJS_PATHS)
+       @echo CFLAGS=$(CFLAGS)
+       $(CC) $(CFLAGS) -o testham $(TEST_OBJS_PATHS) -L. -lntru -lm
+
+testnoham: CFLAGS += -DNTRU_AVOID_HAMMING_WT_PATENT
+testnoham: clean lib $(TEST_OBJS_PATHS)
+       @echo CFLAGS=$(CFLAGS)
+       $(CC) $(CFLAGS) -o testnoham $(TEST_OBJS_PATHS) -L. -lntru -lm
+
+bench: static-lib
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o bench $(SRCDIR)/bench.c $(LDFLAGS) $(LIBS) -L. -lntru
+
+hybrid: static-lib
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid $(SRCDIR)/hybrid.c $(LDFLAGS) $(LIBS) -L. -lntru -lcrypto
+
+hybrid-rev: static-lib
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o hybrid-rev $(SRCDIR)/hybrid-rev.c $(LDFLAGS) $(LIBS) -L. -lntru -lm -lcrypto
+
+
+$(SRCDIR)/%.o: $(SRCDIR)/%.c
+       $(CC) $(CFLAGS) $(CPPFLAGS) -c -fPIC $< -o $@
+
+$(SRCDIR)/sha1-mb-x86_64.s: $(SRCDIR)/sha1-mb-x86_64.pl; CC=$(CC) ASM="$(AS)" $(PERL) $(SRCDIR)/sha1-mb-x86_64.pl $(PERLASM_SCHEME) > $@
+$(SRCDIR)/sha1-mb-x86_64.o: $(SRCDIR)/sha1-mb-x86_64.s
+       $(AS) $(SRCDIR)/sha1-mb-x86_64.s -o $@
+$(SRCDIR)/sha256-mb-x86_64.s: $(SRCDIR)/sha256-mb-x86_64.pl; CC=$(CC) ASM="$(AS)" $(PERL) $(SRCDIR)/sha256-mb-x86_64.pl $(PERLASM_SCHEME) > $@
+$(SRCDIR)/sha256-mb-x86_64.o: $(SRCDIR)/sha256-mb-x86_64.s
+       $(AS) $(SRCDIR)/sha256-mb-x86_64.s -o $@
+
+tests/%.o: tests/%.c
+       $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -I$(SRCDIR) -c $< -o $@
+
+clean:
+       @# also clean files generated on other OSes
+       rm -f $(SRCDIR)/*.o $(SRCDIR)/*.s $(TESTDIR)/*.o libntru.so libntru.a libntru.dylib libntru.dll testham testnoham testham.exe testnoham.exe bench bench.exe hybrid hybrid.exe
+
+distclean: clean
+       rm -rf $(DIST_NAME)
+       rm -f $(DIST_NAME).tar.xz $(DIST_NAME).zip
index f0939c6..642fb0c 100644 (file)
@@ -1,5 +1,8 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
 #include <string.h>
 #include <math.h>
 #include "ntru.h"
@@ -480,7 +483,7 @@ int main(int argc, char *argv[]) {
     char *stripchars = "\r\n";
     
     uint8_t pub_arr_imp[ntru_pub_len(&EES1087EP2)];
-    uint8_t priv_arr_imp[ntru_priv_len(&EES1087EP2)];
+    uint8_t priv_arr_imp[ntru_priv_len(&EES1087EP2)]; 
 
     if (decMode == 1) { // don't load it unless we need it
             printf("enter coconut password to retrieve lime: ");
@@ -503,6 +506,7 @@ int main(int argc, char *argv[]) {
       fseek(Handle,sizeof(header_privline),SEEK_SET);
       fread(priv_buf,(sizeof(char)),(ntru_priv_len(&EES1087EP2)*2)+30,Handle);
       zStrrmv(priv_buf, priv_buf2,stripchars, (ntru_priv_len(&EES1087EP2)*2));
+
       hexStringToBytes(priv_buf, &priv_arr_imp, ntru_priv_len(&EES1087EP2));
 
       int xl;
@@ -510,10 +514,12 @@ int main(int argc, char *argv[]) {
        shake_outp[xl] = priv_arr_imp[xl] ^ shake_finalp[xl];
       }
 
-      free(priv_buf2);
       fclose(Handle);
     }
-    ntru_import_priv(shake_outp, &kr.priv);
+    NtruEncPrivKey krpriv;
+    printf("importing\n");
+    ntru_import_priv(shake_outp, &krpriv);
+    kr.priv = krpriv;
     printf("private key loaded\n");
     }
     printf("importing NTRU public key from file %s\n",pkname);
@@ -522,14 +528,16 @@ int main(int argc, char *argv[]) {
     {
       char pub_buf[(sizeof(pub_arr_imp)*2)+60];
       char pub_buf2[(sizeof(pub_arr_imp)*2)+60];
+
       fseek(Handle,sizeof(header_publine), SEEK_SET);
       fread(pub_buf,(sizeof(char)), (ntru_pub_len(&EES1087EP2)*2)+60,Handle);
       zStrrmv(pub_buf, pub_buf2,stripchars, (ntru_pub_len(&EES1087EP2)*2));
       hexStringToBytes(pub_buf, &pub_arr_imp, ntru_pub_len(&EES1087EP2));
-      free(pub_buf2);
       fclose(Handle);
     }
-    ntru_import_pub(pub_arr_imp, &kr.pub);
+    NtruEncPubKey krpub;
+    ntru_import_pub(pub_arr_imp, &krpub);
+    kr.pub=krpub;
     printf("keys imported.\n");
 
     struct fileHeader {
@@ -548,18 +556,17 @@ if (encMode == 1) {
     struct fileHeader myInfo;
     int remainder, xx;
     float blocks;
-    
+
+    struct stat in_info;
+    stat(sfname, &in_info);
     input = fopen(sfname, "rb");
     output = fopen(ofname, "wb");
-    fseek(input, 0, SEEK_END);
-    myInfo.fileSize=ftell(input);
-    rewind(input);
-
+    myInfo.fileSize=in_info.st_size;
+    lseek(input,0, SEEK_SET);
     blocks = floor((myInfo.fileSize / 170));
-    remainder = myInfo.fileSize - (170 * blocks);
-    myInfo.fileSize=(int) blocks;
+    remainder = (myInfo.fileSize - (170 * blocks));
+    myInfo.fileSize=blocks;
     fwrite(&myInfo, sizeof(struct fileHeader), 1, output);
-
     if (ntru_rand_init(&rand_sk_ctx, &rng_sk) != NTRU_SUCCESS)
         printf("rng_sk fail\n");
     if (ntru_rand_generate(shake_key, 170, &rand_sk_ctx) != NTRU_SUCCESS) {
@@ -572,7 +579,7 @@ if (encMode == 1) {
     if (ntru_encrypt(shake_key, 170, &kr.pub, &EES1087EP2, &rand_sk_ctx, enc) == NTRU_SUCCESS)
        fwrite(enc, sizeof(enc),1, output);
     FIPS202_SHAKE256(shake_key, 170, (unsigned char *) &stream_block, 170);
-    while ((nt=fread(fptr,sizeof(char),170, input)) == 170) {
+    while ((nt=fread(fptr,sizeof(char), 170, input)) == 170) {
       fbuf[nt] = '\0';
       for (xx=0;xx<nt;xx++) {
        stream_final[xx] = fbuf[xx] ^ stream_block[xx];
@@ -613,7 +620,6 @@ if (decMode == 1) {
         printf("rng_sk fail\n");
     input = fopen(sfname, "rb");
     output = fopen(ofname, "wb");
-
     fread(&myInfo,sizeof(struct fileHeader),1,input);
     fread(decptr,sizeof(char),1495,input);
     ntru_decrypt(decptr, &kr, &EES1087EP2,&shake_key, (uint16_t *) &dec_len);
This page took 0.041764 seconds and 4 git commands to generate. Download a nemesis OSX (sierra+high sierra, tested/working) binary, with fuse-ext3 via e2fsprogs, at this link. application and installer are signed by screwjack, llc. must install fuse with macFUSE layer first.