Giter VIP home page Giter VIP logo

ntru's People

Contributors

cryptojedi avatar joostrijneveld avatar jschanck avatar oussamadanba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ntru's Issues

Current master (AVX2 and REF) broken on Linux and Mac

Fails to compile on Mac and Linux (CentOS 8 and Ubuntu 18.04.02):

$ cd ref-hrss701
$ make
gcc -O3 -fomit-frame-pointer -march=native -fPIC -fPIE -pie -Wall -Wextra -Wpedantic -DCRYPTO_NAMESPACE\(s\)=##s -o test/test_polymul cmov.c fips202.c kem.c owcpa.c pack3.c packq.c poly.c poly_lift.c poly_mod.c poly_r2_inv.c poly_rq_mul.c poly_s3_inv.c sample.c sample_iid.c randombytes.c test/test_polymul.c
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
In file included from kem.c:1:
api.h:11:28: error: ‘CRYPTO_NAMESPACE’ declared as function returning a function
 #define crypto_kem_keypair CRYPTO_NAMESPACE(keypair)
                            ^~~~~~~~~~~~~~~~
api.h:12:5: note: in expansion of macro ‘crypto_kem_keypair’
 int crypto_kem_keypair(unsigned char *pk, unsigned char *sk);
     ^~~~~~~~~~~~~~~~~~
api.h:12:1: warning: parameter names (without types) in function declaration
 int crypto_kem_keypair(unsigned char *pk, unsigned char *sk);
 ^~~
api.h:14:24: error: ‘CRYPTO_NAMESPACE’ declared as function returning a function
 #define crypto_kem_enc CRYPTO_NAMESPACE(enc)
                        ^~~~~~~~~~~~~~~~
api.h:15:5: note: in expansion of macro ‘crypto_kem_enc’
 int crypto_kem_enc(unsigned char *c, unsigned char *k, const unsigned char *pk);
     ^~~~~~~~~~~~~~
api.h:15:1: warning: parameter names (without types) in function declaration
 int crypto_kem_enc(unsigned char *c, unsigned char *k, const unsigned char *pk);
 ^~~
api.h:17:24: error: ‘CRYPTO_NAMESPACE’ declared as function returning a function
 #define crypto_kem_dec CRYPTO_NAMESPACE(dec)
                        ^~~~~~~~~~~~~~~~
api.h:18:5: note: in expansion of macro ‘crypto_kem_dec’
 int crypto_kem_dec(unsigned char *k, const unsigned char *c, const unsigned char *sk);
     ^~~~~~~~~~~~~~
api.h:18:1: warning: parameter names (without types) in function declaration
 int crypto_kem_dec(unsigned char *k, const unsigned char *c, const unsigned char *sk);
 ^~~
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
<command-line>: error: '##' cannot appear at either end of a macro expansion
make: *** [Makefile:45: test/test_polymul] Error 1

The above happens with all the compilers I have - current Apple Clang, Clang-10, GCC-10, and on both Mac and Linux platforms.

With avx2-hrss701 it's even merrier - missing source file verify.c:

$ cd avx2-hrss701/
$ make
make: *** No rule to make target `verify.c', needed by `test/test_polymul'.  Stop.

More issues with 'package_pqclean.sh'

The version of cp command on Mac does not take -l flag. My way of remedying this was installing coreutils package from Macports, and changing the script to use gcp instead of cp, like

   ( cd ${WORKDIR}/ref-${PARAM}/
-    cp -l api.h cmov.h owcpa.h params.h poly.h sample.h ${DIRNAME}/ntru${PARAM}/clean/
-    cp -l cmov.c kem.c owcpa.c pack3.c packq.c poly.c poly_lift.c poly_mod.c poly_r2_inv.c poly_rq_mul.c poly_s3_inv.c sample.c sample_iid.c ${DIRNAME}/ntru${PARAM}/clean/ )
+    gcp -l api.h cmov.h owcpa.h params.h poly.h sample.h ${DIRNAME}/ntru${PARAM}/clean/
+    gcp -l cmov.c kem.c owcpa.c pack3.c packq.c poly.c poly_lift.c poly_mod.c poly_r2_inv.c poly_rq_mul.c poly_s3_inv.c sample.c sample_iid.c ${DIRNAME}/ntru${PARAM}/clean/ )
 
   ( cd ${WORKDIR}/avx2-${PARAM}/

While I'm not suggesting that the script is changed - perhaps it would make sense to add a platform README, or mention these things in the main README?

On CentOS-8 there's no unifdef (and no astyle, but the last one can be installed via sudo yum install astyle easily enough):

. . . . .
NTRU_NAMESPACE=PQCLEAN_NTRUHPS4096821_AVX2_ python3 asmgen/poly_s3_inv.py 820 | sed 's/4294967295/-1/g' > poly_s3_inv.c
./package_pqclean.sh: line 199: unifdef: command not found
./package_pqclean.sh: line 200: unifdef: command not found
./package_pqclean.sh: line 201: unifdef: command not found
./package_pqclean.sh: line 202: unifdef: command not found
./package_pqclean.sh: line 203: unifdef: command not found
./package_pqclean.sh: line 234: astyle: command not found

Interestingly, macOS does come with unifdef.

Also, if the directory already exists - there's an error message:

$ ./package_pqclean.sh 
/Users/ur20980/src/ntru
Error; directory already exists; delete first.

IMHO, it would be far better if the error message would tell the user what directory it means:

diff --git a/package_pqclean.sh b/package_pqclean.sh
index 87064b7..31d210e 100755
--- a/package_pqclean.sh
+++ b/package_pqclean.sh
@@ -8,7 +8,7 @@ echo $WORKDIR
 DIRNAME=${WORKDIR}/crypto_kem
 
 if [ -e "$DIRNAME" ]; then
-  echo "Error; directory already exists; delete first."
+  echo "Error; directory \"${DIRNAME}\" already exists; delete first."
   exit -1
 fi
 

Comparison between signed and unsigned

The current code contains comparison of unsigned long to int (signed aaginst unsigned). Compilers don't like it, and issue warnings. Here's a proposed fix (since buffer_pos is unlikely to be negative):

diff --git a/ref-common/rng.h b/ref-common/rng.h
index 577e263..1ae2154 100644
--- a/ref-common/rng.h
+++ b/ref-common/rng.h
@@ -17,7 +17,7 @@
 
 typedef struct {
     unsigned char   buffer[16];
-    int             buffer_pos;
+    unsigned long   buffer_pos;
     unsigned long   length_remaining;
     unsigned char   key[32];
     unsigned char   ctr[16];

Perhaps there are other places in the code where indices are defined as int? If so, could I suggest changing them to unsigned long or size_t?

clang -O3 branches on the "done" flag in ref-common/poly_r2_inv

Output of "clang -O3" branches on the "done" flag in ref-common/poly_r2_inv.c.

Affects these calls:

POLY_R2_ADD(i, f, g, sign*(!done));

POLY_R2_ADD(i, b, (*c), sign*(!done));

poly_divx(&f, !done);

poly_mulx(c, !done);

This was caught using Moritz Neikes' TIMECOP (as incorporated into SUPERCOP 20200820).

Not clear that there is a security issue here, but it is easily fixed by re-implementing poly_r2_inv.c along the lines of b1185f2 (i.e. supercop/crypto_core/invhrss701/simpler).

avx2 fails to compile on a 64-bit-only system

3.5 GHz Dual-Core Intel Core i7, macOS Catalina 10.15.6, Xcode-11.6, GCC-10, current master

Fails to compile on a 64-bit-only OS:

. . . . .
poly_rq_mul.s:3:8: error: invalid alignment value
.align 32
       ^
poly_rq_mul.s:225:1: error: unknown directive
.hidden poly_Rq_mul
^
poly_r2_mul.s:2:17: error: unexpected token in '.section' directive
.section .rodata
                ^
poly_r2_mul.s:3:8: error: invalid alignment value
.align 32
       ^
poly_r2_mul.s:107:1: error: unknown directive
.hidden poly_R2_mul
^
poly_rq_to_s3.s:2:17: error: unexpected token in '.section' directive
.section .rodata
. . . . .

Complete build log: avx2-build.txt

NEON ARMv8 Implementation

Hi,

So I have NEON implementation of NTRU, the work mostly spent on polynomial multiplication. Here are the benchmark results:

NTRU M1 REF ref HPS509 ref HPS677 ref HRSS701 ref HPS821
crypto_kem_keypair 3,501,828 6,219,493 6,578,665 9,056,209
crypto_kem_enc 103,059 182,986 152,390 244,308
crypto_kem_dec 231,254 429,798 439,859 583,865
poly_Rq_mul 70,576 134,764 133,792 185,126
poly_S3_mul 72,711 137,327 136,482 188,243
sample_fixed_type 27,808 42,299 3,422 53,976
poly_lift 115 176 12,193 165
poly_Rq_to_S3 2,209 2,836 2,936 3,504
poly_Rq_sum_zero_tobytes 449 600 620 159
poly_Rq_sum_zero_frombytes 1,189 1,567 1,797 1,119
poly_S3_tobytes 328 433 447 523
poly_S3_frombytes 2,299 2,978 3,086 3,653
NTRU M1 NEON neon HPS509 neon HPS677 neon HRSS701 neon HPS821
crypto_kem_keypair 2,684,977 4,715,457 5,032,358 6,993,689
crypto_kem_enc 39,158 60,198 23,145 75,630
crypto_kem_dec 33,024 53,708 60,644 69,213
poly_Rq_mul 7,347 11,595 15,689 17,241
poly_S3_mul 7,509 11,876 15,660 17,432
sample_fixed_type 27,853 42,254 3,425 54,036
poly_lift 65 89 1,074 105
poly_Rq_to_S3 279 383 383 452
poly_Rq_sum_zero_tobytes 449 600 620 159
poly_Rq_sum_zero_frombytes 1,189 1,566 1,797 1,119
poly_S3_tobytes 329 435 447 523
poly_S3_frombytes 360 501 509 597

Edit: The unit is clock cycles.

I think the number speaks for itself.
Do you want me to pull this implementation to NTRU code base ?
If so, please let me know what to do.

(question) what is the maximum length of encapsulate key (plain text) ?

Hi!
What is the maximum length of encapsulate key (plain text) ?

Motive: I need use the kem with a aes ctr mode. Beyond the key itself (256bits),
the decryption part need the IV(nonce) used to encryption to be sended with the key. the IV has
length of 128bits. I'm targeting ref-hps4096821.

Thanks!
Best whishes,
Dani.

avx2-hps2048509 fails on CentOS

Something about _pext_u64():

cc -O3 -fomit-frame-pointer -march=native -fPIC -fPIE -pie -Wall -Wextra -Wpedantic -DCRYPTO_NAMESPACE\(s\)=ntru_##s -mssse3 -msse4 -mavx2 -o test/test_polymul cmov.c crypto_sort_int32.c fips202.c kem.c owcpa.c pack3.c packq.c poly.c poly_lift.c poly_r2_inv.c poly_s3_inv.c sample.c sample_iid.c randombytes.c square_1_509_patience.s square_3_509_patience.s square_6_509_patience.s square_15_509_shufbytes.s square_30_509_shufbytes.s square_63_509_shufbytes.s square_126_509_shufbytes.s square_252_509_shufbytes.s poly_rq_mul.s poly_r2_mul.s poly_rq_to_s3.s vec32_sample_iid.s poly_mod_3_Phi_n.s poly_mod_q_Phi_n.s test/test_polymul.c cpucycles.c
In file included from /usr/lib/gcc/x86_64-redhat-linux/8/include/immintrin.h:95,
                 from poly_r2_inv.c:1:
poly_r2_inv.c: In function ‘ntru_poly_R2_tobytes’:
/usr/lib/gcc/x86_64-redhat-linux/8/include/bmi2intrin.h:76:1: error: inlining failed in call to always_inline ‘_pext_u64’: target specific option mismatch
 _pext_u64 (unsigned long long __X, unsigned long long __Y)
 ^~~~~~~~~
poly_r2_inv.c:23:15: note: called from here
     out[i] |= _pext_u64(coeff_pointer[2*i+1], 0x1000100010001) << 4;
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/gcc/x86_64-redhat-linux/8/include/immintrin.h:95,
                 from poly_r2_inv.c:1:
/usr/lib/gcc/x86_64-redhat-linux/8/include/bmi2intrin.h:76:1: error: inlining failed in call to always_inline ‘_pext_u64’: target specific option mismatch
 _pext_u64 (unsigned long long __X, unsigned long long __Y)
 ^~~~~~~~~
poly_r2_inv.c:22:14: note: called from here
     out[i] = _pext_u64(coeff_pointer[2*i], 0x1000100010001);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/gcc/x86_64-redhat-linux/8/include/immintrin.h:95,
                 from poly_r2_inv.c:1:
/usr/lib/gcc/x86_64-redhat-linux/8/include/bmi2intrin.h:76:1: error: inlining failed in call to always_inline ‘_pext_u64’: target specific option mismatch
 _pext_u64 (unsigned long long __X, unsigned long long __Y)
 ^~~~~~~~~
poly_r2_inv.c:26:13: note: called from here
   out[i] |= _pext_u64(coeff_pointer[2*63+1], 0x1) << 4;
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/gcc/x86_64-redhat-linux/8/include/immintrin.h:95,
                 from poly_r2_inv.c:1:
/usr/lib/gcc/x86_64-redhat-linux/8/include/bmi2intrin.h:76:1: error: inlining failed in call to always_inline ‘_pext_u64’: target specific option mismatch
 _pext_u64 (unsigned long long __X, unsigned long long __Y)
 ^~~~~~~~~
poly_r2_inv.c:25:12: note: called from here
   out[i] = _pext_u64(coeff_pointer[2*63], 0x1000100010001);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:88: test/test_polymul] Error 1
make: Leaving directory '/home/ur20980/src/ntru/avx2-hps2048509'

Also, currently the only way to pass extra CFLAGS is manually editing the Makefiles. It would be nice if there was a clean mechanism to pass them, e.g., through an env var.

Update

A bit of digging shows that pext_u64 requires bmi2 CPU support - I'm not sure it's a part of AVX2. Are you certain you want to depend on bmi2 support? If you are, perhaps it's worth documenting somewhere?
Screen Shot 2020-09-02 at 10 07 00

`package_pqclean.sh' produces bad output

This is what it does on Mac to all the sed-edited files (e.g., file api.h):

#ifndef PQCLEAN_NTRU]]]]701_[]]2_API_H
#define PQCLEAN_NTRU]]]]701_[]]2_API_H

#include <stdint.h>

#define PQCLEAN_NTRU]]]]701_[]]2_CRYPTO_SECRETKEYBYTES 1450
#define PQCLEAN_NTRU]]]]701_[]]2_CRYPTO_PUBLICKEYBYTES 1138
#define PQCLEAN_NTRU]]]]701_[]]2_CRYPTO_CIPHERTEXTBYTES 1138
#define PQCLEAN_NTRU]]]]701_[]]2_CRYPTO_BYTES 32

This is what fixes the problem:

diff --git a/package_pqclean.sh b/package_pqclean.sh
index 2967141..c35c4b1 100755
--- a/package_pqclean.sh
+++ b/package_pqclean.sh
@@ -16,7 +16,7 @@ for PARAM in hrss701 hps2048509 hps2048677 hps4096821; do
   mkdir -p ${DIRNAME}/ntru${PARAM}/avx2
   mkdir -p ${DIRNAME}/ntru${PARAM}/clean
 
-  export NTRU_NAMESPACE=$(echo PQCLEAN_NTRU${PARAM}_AVX2_ | tr [:lower:] [:upper:])
+  export NTRU_NAMESPACE=$(echo "PQCLEAN_NTRU${PARAM}_AVX2_" | tr [:lower:] [:upper:])
   ( cd ${WORKDIR}/avx2-${PARAM} && make -B asm )
 
   ( cd ${WORKDIR}/ref-${PARAM}/
@@ -218,5 +218,5 # Manual namespacing
 # Manual namespacing
 for PARAM in hrss701 hps2048509 hps2048677 hps4096821; do
   for IMPL in clean avx2; do
     ( cd ${DIRNAME}/ntru${PARAM}/${IMPL}
-    NTRU_NAMESPACE=$(echo PQCLEAN_NTRU${PARAM}_${IMPL}_ | tr [:lower:] [:upper])
+    NTRU_NAMESPACE=$(echo "PQCLEAN_NTRU${PARAM}_${IMPL}_" | tr [:lower:] [:upper:])
     for X in $(grep CRYPTO_NAMESPACE *.{c,h} | cut -f2 -d' ' | sort -u); do

Could you please apply this fix?

File 'package_pqclean.sh' contains bad characters

Fix below (tested):

diff --git a/package_pqclean.sh b/package_pqclean.sh
index 2aa1300..6d46a55 100755
--- a/package_pqclean.sh
+++ b/package_pqclean.sh
@@ -16,7 +16,7 @@ for PARAM in hrss701 hps2048509 hps2048677 hps4096821; do
   mkdir -p ${DIRNAME}/ntru${PARAM}/avx2
   mkdir -p ${DIRNAME}/ntru${PARAM}/clean
 
-  export NTRU_NAMESPACE=PQCLEAN_NTRU${PARAM^^}_AVX2_
+  export NTRU_NAMESPACE=PQCLEAN_NTRU${PARAM}_AVX2_
   ( cd ${WORKDIR}/avx2-${PARAM} && make -B asm )
 
   ( cd ${WORKDIR}/ref-${PARAM}/

KATs no longer correct after commit 951a12a

In commit 951a12a NTRU_SAMPLE_IID_BYTES changes from NTRU-1 to PAD32(NTRU_N-1). This has the result that NTRU_SAMPLE_FG_BYTES and NTRU_SAMPLE_RM_BYTES become longer which in turn leads to randombytes retrieving more random bytes. As a result the polynomials are different which means the generated KATs no longer correspond to the KATs in the NIST submission.

Reverting this change makes it produce correct KATs again although the vectorized sample_iid is likely to be incorrect then (I haven't tested this).

"make test" fails because dependency is missing

In all the Makefiles, there's a missing dependency test: all that would force building the executables the test target would run. Here's a fix for one, but I think all the makefiles need such treatment:

diff --git a/avx2-hrss701/Makefile b/avx2-hrss701/Makefile
index 70edbe8..9aa831c 100644
--- a/avx2-hrss701/Makefile
+++ b/avx2-hrss701/Makefile
@@ -113,7 +113,7 @@ PQCgenKAT_kem: $(SRC_KAT) $(HDR_KAT) $(OBJS)
 # Useful for the .s files;
 .DELETE_ON_ERROR:
 
-test:
+test:  all
        ./test/test_polymul
        ./test/test_ntru
        ./test/test_pack

Mismatched array sizes in poly.h / pack3.c

Compiling liboqs with gcc-11 complains about mismatched array sizes in the declaration of poly_S3_tobytes and poly_S3_frombytes in poly.h versus the instantiation in pack3.c:

The declaration in poly.h uses:

void poly_S3_tobytes(unsigned char msg[NTRU_PACK_TRINARY_BYTES], const poly *a);
void poly_S3_frombytes(poly *r, const unsigned char msg[NTRU_PACK_TRINARY_BYTES]);

but the instantiation in pack3.c uses:

void poly_S3_tobytes(unsigned char msg[NTRU_OWCPA_MSGBYTES], const poly *a) {...}
void poly_S3_frombytes(poly *r, const unsigned char msg[NTRU_OWCPA_MSGBYTES]) {...}

I think the solution is just to change pack3.c to use NTRU_PACK_TRINARY_BYTES. At least that seems to fix the compilation error.

See open-quantum-safe/liboqs#1035 and PQClean/PQClean#411.

Current master avx2-hrss701 can't compile on Mac

$ make test -C avx2-hrss701
clang -O3 -fomit-frame-pointer -march=native -fPIC -fPIE -pie -Wall -Wextra -Wpedantic -DCRYPTO_NAMESPACE\(s\)=ntru##s -o test/test_polymul fips202.c kem.c owcpa.c pack3.c packq.c poly.c poly_r2_inv.c sample.c sample_iid.c cmov.c randombytes.c square_1_701_patience.s square_3_701_patience.s square_6_701_patience.s square_12_701_shufbytes.s square_15_701_shufbytes.s square_27_701_shufbytes.s square_42_701_shufbytes.s square_84_701_shufbytes.s square_168_701_shufbytes.s square_336_701_shufbytes.s poly_rq_mul.s poly_r2_mul.s poly_rq_to_s3.s vec32_sample_iid.s poly_mod_3_Phi_n.s poly_mod_q_Phi_n.s poly_s3_to_rq.s poly_s3_inv.s poly_rq_mul_x_minus_1.s test/test_polymul.c cpucycles.c
clang: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
poly_s3_to_rq.s:3116:1: error: unsupported symbol modifier in branch relocation
call ntrupoly_Rq_mul_x_minus_1@plt
^
cpucycles.c:6:3: warning: extension used [-Wlanguage-extension-token]
  asm volatile(".byte 15;.byte 49;shlq $32,%%rdx;orq %%rdx,%%rax"
  ^
1 warning generated.

Making the files get this error

cc -O3 -fomit-frame-pointer -march=native -fPIC -fPIE -pie -Wall -Wextra -Wpedantic -DCRYPTO_NAMESPACE\(s\)=ntru_##s -o test/decap cmov.c crypto_sort_int32.c fips202.c kem.c owcpa.c pack3.c packq.c poly.c poly_lift.c poly_mod.c poly_r2_inv.c poly_rq_mul.c poly_s3_inv.c sample.c sample_iid.c randombytes.c test/decap.c cmov.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/cmov.c | ^ crypto_sort_int32.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/crypto_sort_int32.c | ^ fips202.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/fips202.c | ^ kem.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/kem.c | ^ owcpa.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/owcpa.c | ^ pack3.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/pack3.c | ^ packq.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/pack2048.c | ^ poly.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly.c | ^ poly_lift.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly_lift.c | ^ poly_mod.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly_mod.c | ^ poly_r2_inv.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly_r2_inv.c | ^ poly_rq_mul.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly_rq_mul_toom4_k2x2.c | ^ poly_s3_inv.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/poly_s3_inv.c | ^ sample.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/sample.c | ^ sample_iid.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/sample_iid.c | ^ randombytes.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../ref-common/randombytes.c | ^ test/decap.c:1:1: error: expected identifier or ‘(’ before ‘.’ token 1 | ../../test/decap.c | ^ make: *** [Makefile:67: test/decap] Error 1

I get this error each time I run "make" command
any help please

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.