From 72523f1cbd35882fcba330fc19021df0c2ad223c Mon Sep 17 00:00:00 2001 From: Christian Paquin Date: Mon, 5 Feb 2018 14:10:49 -0500 Subject: [PATCH 1/2] Squashed 'vendor/liboqs/' changes from 46a8976..5bfbc5d 5bfbc5d Merge pull request #225 from christianpaquin/cp-winconfig-refactor d409a5c Moved winconfig to oqs include dir, so it can be used by downstream projects. 4f6d9d5 Merge pull request #224 from christianpaquin/cp-add-32-bit-VS-projects 2a1e1ed Tweaked picnic-related build steps on windows. 10881f4 Removed picnic lib dependency from 32-bit projects, and specified platform in picnic build instructions. 5af6cb3 Fixed include of winconfig in sig related files. ed5909d make prettyprint d994cd1 added #ifdef to test KEX availibility eb46360 Added 32-bit projects to Visual Studio, and moved scheme defines to winconfig.h file. c087d2e Merge pull request #223 from christianpaquin/cp-add-minimal-projects-to-VS 8f5c701 Fixed typo in appveyor test script. 3158180 Added minimal kex and sig projects to visual studio and appveyor, and updated DLL exports with new OQS functions. b2fdec1 Merge pull request #222 from open-quantum-safe/vsoftco_const_correctness_OQS_print bb70d7f added const to uint8_t *str pointer in OQS_print 3916eb9 Merge pull request #221 from open-quantum-safe/vsoftco_refactor_ifdef_WINDOWS 16143ad commit fa4ab20 commit 95ff83b commit 9c549d7 commit 4cc8536 made OQS_STATUS an enum, more type-safe compared to #define d6f2ed0 changed int main() to int main(void) f4a37ea commit ab51852 refactored if defined WINDOWS to if defined _WIN32 c2e7d63 Merge pull request #217 from christianpaquin/cp-update-picnic f893a96 Added OQS print functions to DLL exports. cebaa10 Added defines to enable all supported KEX schemes. 590f4a4 Added closing tag for oqs.h filter item, fixing the filter file. 35688bf Merge branch 'master' into cp-update-picnic 298c983 Changed SIDH ref in Travis scripts to reflect new names. (#216) 20348ca Vsoftco refactor oqs success (#219) 07c4635 Added OQS sig functions to DLL exports and fixed DLL projects to include picnic. 076b753 Prettyprint. f9d8d95 Added picnic cmake's msbuild to gitignore. 38d4c6a Merge remote-tracking branch 'upstream/master' into cp-update-picnic db66396 Added Picnic sig to Visual Studio. 5aa9e62 Removed unused sike header. (#215) 65a8db3 Issue 187 and 207 (#214) fe29d8d Merge remote-tracking branch 'upstream/master' into cp-update-picnic a59979a Merge remote-tracking branch 'origin/cp-add-sike-visualstudio' into cp-update-picnic 3fe6afa (Re)Added SIDHv3/SIKE to Visual Studio. 4eee16d Removed the mention about recursive cloning in the readme. a132e49 Merge remote-tracking branch 'origin/master' into cp-update-picnic ee401c8 Added previously ignored config file, and added exception to gitignore. 0b285e0 Updated the picnic library, and removed it as a patched submodule and instead committed the code direclty. git-subtree-dir: vendor/liboqs git-subtree-split: 5bfbc5d84524c6e58959d76cc2055104958011f9 --- .gitignore | 3 + .travis-tests.sh | 2 +- .travis.yml | 2 +- .travis/global-namespace-check.sh | 22 +- Makefile.am | 62 +- README.md | 11 +- VisualStudio/liboqs.sln | 42 ++ .../minimal_kex_oqs/minimal_kex_oqs.vcxproj | 304 ++++++++ .../minimal_kex_oqs.vcxproj.filters | 27 + .../minimal_sig_oqs/minimal_sig_oqs.vcxproj | 314 ++++++++ .../minimal_sig_oqs.vcxproj.filters | 27 + VisualStudio/oqs/dll.def | 9 +- VisualStudio/oqs/oqs.vcxproj | 77 +- VisualStudio/oqs/oqs.vcxproj.filters | 7 + VisualStudio/test_kex/test_kex.vcxproj | 39 +- .../test_kex/test_kex.vcxproj.filters | 5 + VisualStudio/test_rand/test_rand.vcxproj | 19 +- .../test_rand/test_rand.vcxproj.filters | 5 + VisualStudio/test_sig/test_sig.vcxproj | 673 ++++++++++-------- .../test_sig/test_sig.vcxproj.filters | 47 +- VisualStudio/winconfig.h | 13 + appveyor.yml | 6 + patches/kex_rlwe_newhope_avx2/patch0.patch | 392 +++++----- src/common/common.c | 28 +- src/common/common.h | 15 +- src/common/oqs.h | 17 + src/crypto/aes/test_aes.c | 3 +- src/crypto/rand/rand.c | 17 +- src/crypto/rand/rand.h | 4 +- src/crypto/rand/test_rand.c | 52 +- .../rand_urandom_aesctr/rand_urandom_aesctr.c | 7 +- .../rand_urandom_chacha20.c | 8 +- src/crypto/sha3/sha3.c | 2 +- src/ds_benchmark.h | 6 +- src/kex/kex.c | 24 +- src/kex/kex.h | 26 +- src/kex/minimal_kex_oqs.c | 157 ++++ src/kex/test_kex.c | 86 +-- src/kex_code_mcbits/kex_code_mcbits.c | 28 +- src/kex_code_mcbits/kex_code_mcbits.h | 7 +- src/kex_lwe_frodo/kex_lwe_frodo.c | 2 +- src/kex_lwe_frodo/kex_lwe_frodo.h | 7 +- src/kex_lwe_frodo/kex_lwe_frodo_macrify.c | 26 +- src/kex_lwe_frodo/lwe_noise.c | 2 +- src/kex_ntru/kex_ntru.c | 34 +- src/kex_ntru/kex_ntru.h | 7 +- src/kex_rlwe_bcns15/kex_rlwe_bcns15.c | 28 +- src/kex_rlwe_bcns15/kex_rlwe_bcns15.h | 7 +- src/kex_rlwe_bcns15/rlwe.c | 2 +- src/kex_rlwe_msrln16/kex_rlwe_msrln16.c | 28 +- src/kex_rlwe_msrln16/kex_rlwe_msrln16.h | 7 +- src/kex_rlwe_newhope/avx2/test/speed.c | 2 +- src/kex_rlwe_newhope/avx2/test/test_newhope.c | 2 +- .../avx2/test/test_statistical.c | 2 +- src/kex_rlwe_newhope/kex_rlwe_newhope.c | 28 +- src/kex_rlwe_newhope/kex_rlwe_newhope.h | 7 +- src/kex_rlwe_newhope/params.h | 2 +- src/kex_rlwe_newhope/poly.c | 2 +- src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c | 26 +- src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h | 7 +- src/kex_sidh_msr/P503/P503_api.h | 2 +- src/kex_sidh_msr/P751/P751_api.h | 2 +- src/kex_sidh_msr/config.h | 2 +- src/kex_sidh_msr/kex_sidh_msr.c | 38 +- src/kex_sidh_msr/kex_sidh_msr.h | 7 +- src/kex_sidh_msr/kex_sike_msr.h | 24 - src/kex_sidh_msr/windows_undef.h | 2 +- src/sig/minimal_sig_oqs.c | 154 ++++ src/sig/sig.c | 7 +- src/sig/sig.h | 25 +- src/sig/test_sig.c | 83 +-- src/sig_picnic/external/cmake/check-simd.c | 2 +- src/sig_picnic/external/tests/api_test.c | 2 +- .../external/tests/bitstream_test.c | 2 +- .../external/tests/extended_picnic_test.c | 2 +- .../external/tests/hmac_sha256_test.c | 2 +- .../external/tests/hmac_sha384_test.c | 2 +- .../external/tests/hmac_sha512_test.c | 2 +- .../external/tests/kdf_shake256_test.c | 2 +- src/sig_picnic/external/tests/lowmc_test.c | 2 +- src/sig_picnic/external/tests/mpc_test.c | 2 +- src/sig_picnic/external/tests/mzd_test.c | 2 +- src/sig_picnic/external/tests/picnic_test.c | 2 +- src/sig_picnic/external/tools/example.c | 2 +- src/sig_picnic/sig_picnic.c | 21 +- src/sig_picnic/sig_picnic.h | 13 +- 86 files changed, 2233 insertions(+), 996 deletions(-) create mode 100644 VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj create mode 100644 VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj.filters create mode 100644 VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj create mode 100644 VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj.filters create mode 100644 VisualStudio/winconfig.h create mode 100644 src/common/oqs.h create mode 100644 src/kex/minimal_kex_oqs.c delete mode 100644 src/kex_sidh_msr/kex_sike_msr.h create mode 100644 src/sig/minimal_sig_oqs.c diff --git a/.gitignore b/.gitignore index 9e5f37e2033a6..ceccce515b235 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,8 @@ include /test_sig /test_rand /test_aes +/minimal_kex_oqs +/minimal_sig_oqs # Debug files *.dSYM/ @@ -60,6 +62,7 @@ VisualStudio/**/*.user external !src/sig_picnic/external src/sig_picnic/external/build/** +src/sig_picnic/external/msbuild/** /temp/ # Travis files diff --git a/.travis-tests.sh b/.travis-tests.sh index 6d8763e503ccb..a3d0ca748dffd 100755 --- a/.travis-tests.sh +++ b/.travis-tests.sh @@ -46,7 +46,7 @@ if [[ ${ENABLE_KEX_RLWE_NEWHOPE} == 0 ]];then enable_disable_str+=" --disable-kex-rlwe-newhope" fi -if [[ ${ENABLE_KEX_SIDH_CLN16} == 0 ]];then +if [[ ${ENABLE_KEX_SIDH_MSR} == 0 ]];then enable_disable_str+=" --disable-kex-sidh-cln16" fi diff --git a/.travis.yml b/.travis.yml index b807211238945..3940a76af779a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ matrix: env: - ENABLE_SIDH_IQC_REF=1 - ENABLE_KEX_LWE_FRODO=0 - - ENABLE_KEX_SIDH_CLN16=0 + - ENABLE_KEX_SIDH_MSR=0 - ENABLE_SIG_PICNIC=0 - USE_OPENSSL=1 - ENABLE_KEX_RLWE_NEWHOPE_AVX2=1 diff --git a/.travis/global-namespace-check.sh b/.travis/global-namespace-check.sh index aee73d46ca420..cfcbdb8683f3e 100755 --- a/.travis/global-namespace-check.sh +++ b/.travis/global-namespace-check.sh @@ -1,15 +1,17 @@ #!/bin/bash -if [[ $(nm -g liboqs.a | grep ' T ' | grep -E -v -i ' T [_]?[OQS|ntru|picnic|Keccak]') ]]; +REGEX=' T [_]?(OQS|ntru|picnic|Keccak|.*SIKEp503|.*SIDHp503|.*SIKEp751|.*SIDHp751|.*shake128|.*shake256|rand_bytes|cpu_supports|uint64_from_char_array|uint64_to_char_array|print_hex|ntt_double|rec|aligned_alloc|aligned_free)' + +if [[ $(nm -g liboqs.a | grep ' T ' | grep -E -v -i "$REGEX") ]]; then - tput setaf 1; - echo "Code contains the following non-namespaced global symbols; see https://github.com/open-quantum-safe/liboqs/wiki/Coding-conventions for function naming conventions."; - tput sgr 0 - nm -g liboqs.a | grep ' T ' | grep -E -v -i ' T [_]?[OQS|ntru|picnic|Keccak]' - exit 1; + tput setaf 1; + echo "Code contains the following non-namespaced global symbols; see https://github.com/open-quantum-safe/liboqs/wiki/Coding-conventions for function naming conventions."; + tput sgr 0 + nm -g liboqs.a | grep ' T ' | grep -E -v -i "$REGEX" + exit 1; else - tput setaf 2; - echo "Code adheres to the project standards (global namespace)."; - tput sgr 0 - exit 0; + tput setaf 2; + echo "Code adheres to the project standards (global namespace)."; + tput sgr 0 + exit 0; fi; diff --git a/Makefile.am b/Makefile.am index 14aee71375ed4..47fe49fddd4ef 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,7 @@ endif installheaderdir=$(includedir)/oqs installheader_HEADERS=config.h \ + src/common/oqs.h \ src/common/common.h \ src/crypto/aes/aes.h \ src/crypto/rand/rand.h \ @@ -92,9 +93,6 @@ if USE_SIDH_IQC cp src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h $(includedir)/oqs endif - -noinst_bin_PROGRAMS = test_rand test_kex test_aes - libmerge_external.la: if USE_SIG_PICNIC mkdir -p temp && cp liboqs.a temp/ && cp src/sig_picnic/external/build/libpicnic_static.a temp/ @@ -102,7 +100,13 @@ if USE_SIG_PICNIC cd .. && rm -rf temp endif -noinst_bin_PROGRAMS = test_rand test_kex test_aes test_sig +noinst_bin_PROGRAMS = test_kex test_aes test_rand +if USE_KEX_LWE_FRODO +noinst_bin_PROGRAMS += minimal_kex_oqs +endif +if USE_SIG_PICNIC +noinst_bin_PROGRAMS += test_sig minimal_sig_oqs +endif noinst_bindir=$(prefix)/tests test_kex_LDADD = liboqs.la -lm @@ -119,6 +123,7 @@ if USE_SIDH_IQC test_kex_LDADD += -L$(GMP_DIR)/lib -lgmp endif +if USE_SIG_PICNIC test_sig_LDADD = liboqs.la -lm test_sig_SOURCES = src/sig/test_sig.c test_sig_CPPFLAGS = -I./include @@ -127,6 +132,33 @@ if USE_OPENSSL test_sig_LDADD += -L$(OPENSSL_DIR)/lib -lcrypto endif +minimal_sig_oqs_LDADD = liboqs.la -lm +minimal_sig_oqs_SOURCES = src/sig/minimal_sig_oqs.c +minimal_sig_oqs_CPPFLAGS = -I./include +minimal_sig_oqs_CPPFLAGS += $(AM_CPPFLAGS) +if USE_OPENSSL +minimal_sig_oqs_LDADD += -L$(OPENSSL_DIR)/lib -lcrypto +endif + +endif # USE_SIG_PICNIC + +if USE_KEX_LWE_FRODO +minimal_kex_oqs_LDADD = liboqs.la -lm +minimal_kex_oqs_SOURCES = src/kex/minimal_kex_oqs.c +minimal_kex_oqs_CPPFLAGS = -I./include +minimal_kex_oqs_CPPFLAGS += $(AM_CPPFLAGS) +if USE_MCBITS +minimal_kex_oqs_LDADD += -L${SODIUM_DIR}/lib -lsodium +endif +if USE_OPENSSL +minimal_kex_oqs_LDADD += -L$(OPENSSL_DIR)/lib -lcrypto +endif +if USE_SIDH_IQC +minimal_kex_oqs_LDADD += -L$(GMP_DIR)/lib -lgmp +endif + +endif # USE_KEX_LWE_FRODO + test_aes_LDADD = liboqs.la -lm test_aes_SOURCES = src/crypto/aes/test_aes.c test_aes_CPPFLAGS = -I./include @@ -147,18 +179,26 @@ else if USE_AES_NI test_rand_CPPFLAGS += -maes -msse2 endif -endif +endif # USE_OPENSSL + test: clean-tests make ./test_kex --quiet ./test_rand --quiet ./test_aes +if USE_SIG_PICNIC ./test_sig - + ./minimal_sig_oqs +endif +if USE_KEX_LWE_FRODO + ./minimal_kex_oqs +endif + links: $(MKDIR_P) include/oqs cp -f config.h include/oqs + cp -f src/common/oqs.h include/oqs cp -f src/common/common.h include/oqs cp -f src/crypto/aes/aes.h include/oqs cp -f src/crypto/rand/rand.h include/oqs @@ -190,13 +230,19 @@ endif clean-local: rm -f liboqs.a rm -rf include +if USE_KEX_LWE_FRODO + rm -f minimal_kex_oqs +endif +if USE_SIG_PICNIC + rm -f test_sig + rm -f minimal_sig_oqs +endif if USE_SIDH_IQC rm -f sample_params endif - clean-tests: - rm -f test_kex test_rand test_aes test_sig + rm -f test_kex test_rand test_aes prettyprint: find src -name '*.c' -o -name '*.h' | grep -v sig_picnic/external* | grep -v "kex_rlwe_newhope/avx2" | grep -v "kex_sidh_msr" | xargs $(CLANGFORMAT) -style=file -i diff --git a/README.md b/README.md index 19b31c8627901..fd1d39a888ee7 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,8 @@ This will generate: - `test_aes`: A simple test harness for AES. This will test the correctness of the C implementation (and of the AES-NI implementation, if not disabled) of AES, and will compare the speed of these implementations against OpenSSL's AES implementation. - `test_kex`: A simple test harness for the default key exchange algorithm. This will output key exchange messages; indicate whether the parties agree on the session key or not over a large number of trials; and measure the distance of the sessions keys from uniform using statistical distance. - `test_sig`: A simple test harness for the signature algorithms. - +- `minimal_kex_oqs`: A minimal runnable example showing the usage of KEX API. +- `minimal_sig_oqs`: A minimal runnable example showing the usage of SIG API. ### Running To run the tests, simply type: @@ -170,7 +171,11 @@ Flags for all the configured algorithms are generated in config.h file. Building and running on Windows ------------------------------- -Windows binaries can be generated using the Visual Studio solution in the VisualStudio folder. Builds have been tested on Windows 10. +Windows binaries can be generated using the Visual Studio solution in the VisualStudio folder. Builds have been tested on Windows 10. + +CMake (https://cmake.org/download/) is required and must be installed before building the Visual Studio solution. + +The supported schemes are defined in the projects' winconfig.h file. McBits is disabled by default in the Visual Studio build; follow these steps to enable it: @@ -179,8 +184,6 @@ McBits is disabled by default in the Visual Studio build; follow these steps to - Add the sodium "src/include" location to the "Additional Include Directories" in the oqs project C properties. - Add the libsodium library to the "Additional Dependencies" in the `test_kex` project Linker properties. -Picnic is not currently supported in the Visual Studio build. - Building for Android -------------------- diff --git a/VisualStudio/liboqs.sln b/VisualStudio/liboqs.sln index 0ac986681ecc3..02c022ff30b3f 100644 --- a/VisualStudio/liboqs.sln +++ b/VisualStudio/liboqs.sln @@ -20,6 +20,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_sig", "test_sig\test_s {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} = {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minimal_kex_oqs", "minimal_kex_oqs\minimal_kex_oqs.vcxproj", "{52C06207-5AE8-460F-999F-1F4AF2E06B25}" + ProjectSection(ProjectDependencies) = postProject + {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} = {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minimal_sig_oqs", "minimal_sig_oqs\minimal_sig_oqs.vcxproj", "{0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}" + ProjectSection(ProjectDependencies) = postProject + {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} = {DCFEFB81-4696-45D2-9FCA-351CCFC13C74} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -96,6 +106,38 @@ Global {990D1E9C-75E0-4E17-8514-6DA0858BC17C}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 {990D1E9C-75E0-4E17-8514-6DA0858BC17C}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 {990D1E9C-75E0-4E17-8514-6DA0858BC17C}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Debug|x64.ActiveCfg = Debug|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Debug|x64.Build.0 = Debug|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Debug|x86.ActiveCfg = Debug|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Debug|x86.Build.0 = Debug|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.DebugDLL|x64.Build.0 = DebugDLL|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.DebugDLL|x86.ActiveCfg = Debug|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.DebugDLL|x86.Build.0 = Debug|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Release|x64.ActiveCfg = Release|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Release|x64.Build.0 = Release|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Release|x86.ActiveCfg = Release|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.Release|x86.Build.0 = Release|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.ReleaseDLL|x86.ActiveCfg = Release|Win32 + {52C06207-5AE8-460F-999F-1F4AF2E06B25}.ReleaseDLL|x86.Build.0 = Release|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Debug|x64.ActiveCfg = Debug|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Debug|x64.Build.0 = Debug|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Debug|x86.ActiveCfg = Debug|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Debug|x86.Build.0 = Debug|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.DebugDLL|x64.Build.0 = DebugDLL|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.DebugDLL|x86.ActiveCfg = Debug|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.DebugDLL|x86.Build.0 = Debug|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Release|x64.ActiveCfg = Release|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Release|x64.Build.0 = Release|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Release|x86.ActiveCfg = Release|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.Release|x86.Build.0 = Release|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.ReleaseDLL|x86.ActiveCfg = Release|Win32 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66}.ReleaseDLL|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj b/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj new file mode 100644 index 0000000000000..773bc67263649 --- /dev/null +++ b/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj @@ -0,0 +1,304 @@ + + + + + DebugDLL + Win32 + + + DebugDLL + x64 + + + Debug + Win32 + + + ReleaseDLL + Win32 + + + ReleaseDLL + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {52C06207-5AE8-460F-999F-1F4AF2E06B25} + Win32Proj + minimal_kex_oqs + 10.0.15063.0 + + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + true + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + + + true + + + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj.filters b/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj.filters new file mode 100644 index 0000000000000..dda88de2f30d7 --- /dev/null +++ b/VisualStudio/minimal_kex_oqs/minimal_kex_oqs.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj b/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj new file mode 100644 index 0000000000000..0cde481b6aa33 --- /dev/null +++ b/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj @@ -0,0 +1,314 @@ + + + + + DebugDLL + Win32 + + + DebugDLL + x64 + + + Debug + Win32 + + + ReleaseDLL + Win32 + + + ReleaseDLL + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {0B75FD61-D29F-43FE-9D6D-EDE3B5289C66} + Win32Proj + minimal_sig_oqs + 10.0.15063.0 + + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + + + true + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 + + + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic_static.lib;Bcrypt.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\*.dll" "$(OutDir)" + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic_static.lib;Bcrypt.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\*.dll" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + + + Console + true + true + $(SolutionDir)$(Platform)\$(Configuration)\ + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj.filters b/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj.filters new file mode 100644 index 0000000000000..3cc97e8aca233 --- /dev/null +++ b/VisualStudio/minimal_sig_oqs/minimal_sig_oqs.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/VisualStudio/oqs/dll.def b/VisualStudio/oqs/dll.def index 78108879da476..d32c919ef7af3 100644 --- a/VisualStudio/oqs/dll.def +++ b/VisualStudio/oqs/dll.def @@ -14,4 +14,11 @@ EXPORTS OQS_KEX_alice_1 OQS_KEX_alice_priv_free OQS_KEX_free - free + OQS_SIG_new + OQS_SIG_keygen + OQS_SIG_sign + OQS_SIG_verify + OQS_SIG_free + OQS_print_hex_string + OQS_print_part_hex_string + OQS_MEM_secure_free diff --git a/VisualStudio/oqs/oqs.vcxproj b/VisualStudio/oqs/oqs.vcxproj index 4b6fd782e50a3..a68b1ccc82379 100644 --- a/VisualStudio/oqs/oqs.vcxproj +++ b/VisualStudio/oqs/oqs.vcxproj @@ -35,6 +35,7 @@ + @@ -65,7 +66,9 @@ + + @@ -206,13 +209,25 @@ $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\; + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\; + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\; + + + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\; + Level3 Disabled - inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDebug @@ -223,6 +238,8 @@ mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -248,7 +265,7 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" Level3 Disabled - inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDebugDLL @@ -260,6 +277,8 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -285,11 +304,11 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" Level3 Disabled - inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;_DEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;PICNIC_STATIC;PICNIC_STATIC_DEFINE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;_DEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDebug - true + false Windows @@ -297,6 +316,8 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -313,7 +334,10 @@ copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\kex_sidh_msr\kex_sidh_msr.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" - +mkdir "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cd "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cmake -G "Visual Studio 15 2017 Win64" "$(SolutionDir)..\src\sig_picnic\external\" +msbuild /t:Rebuild /p:Configuration=Release;Platform=x64 "$(SolutionDir)..\src\sig_picnic\external\msbuild\picnic.sln" /ignore:4006 %(AdditionalOptions) @@ -325,19 +349,22 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" Level3 Disabled - inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;_DEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;_DEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDebugDLL - true + false Windows dll.def + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libpicnic.lib;%(AdditionalDependencies) mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -354,7 +381,10 @@ copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\kex_sidh_msr\kex_sidh_msr.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" - +mkdir "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cd "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cmake -G "Visual Studio 15 2017 Win64" "$(SolutionDir)..\src\sig_picnic\external\" +msbuild /t:Rebuild /p:Configuration=Release;Platform=x64 "$(SolutionDir)..\src\sig_picnic\external\msbuild\picnic.sln" /ignore:4006 %(AdditionalOptions) @@ -368,7 +398,7 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" MaxSpeed true true - inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreaded @@ -381,6 +411,8 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -408,7 +440,7 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" MaxSpeed true true - inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;AES_DISABLE_NI;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDLL @@ -422,6 +454,8 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -449,11 +483,11 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" MaxSpeed true true - inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;NDEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;PICNIC_STATIC;PICNIC_STATIC_DEFINE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;NDEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreaded - true + false Windows @@ -463,6 +497,8 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -479,7 +515,10 @@ copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\kex_sidh_msr\kex_sidh_msr.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" - +mkdir "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cd "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cmake -G "Visual Studio 15 2017 Win64" "$(SolutionDir)..\src\sig_picnic\external\" +msbuild /t:Rebuild /p:Configuration=Release;Platform=x64 "$(SolutionDir)..\src\sig_picnic\external\msbuild\picnic.sln" /ignore:4006 %(AdditionalOptions) @@ -493,21 +532,24 @@ copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" MaxSpeed true true - inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;WINDOWS;NDEBUG;_LIB;%(PreprocessorDefinitions) + inline=__inline;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;OQS_RAND_DEFAULT_URANDOM_CHACHA20;OQS_KEX_DEFAULT_BCNS15;CONSTANT_TIME;NDEBUG;_LIB;%(PreprocessorDefinitions) false $(SolutionDir)include MultiThreadedDLL - true + false Windows true true dll.def + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libpicnic.lib;%(AdditionalDependencies) mkdir "$(SolutionDir)include\oqs" del /Q "$(SolutionDir)include\oqs\*.*" +copy "$(SolutionDir)winconfig.h" "$(SolutionDir)include\oqs\" +copy "$(SolutionDir)..\src\common\oqs.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\common\common.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\aes\aes.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\crypto\rand\rand.h" "$(SolutionDir)include\oqs\" @@ -524,7 +566,10 @@ copy "$(SolutionDir)..\src\kex_ntru\kex_ntru.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\kex_sidh_msr\kex_sidh_msr.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig\sig.h" "$(SolutionDir)include\oqs\" copy "$(SolutionDir)..\src\sig_picnic\sig_picnic.h" "$(SolutionDir)include\oqs\" - +mkdir "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cd "$(SolutionDir)..\src\sig_picnic\external\msbuild" +cmake -G "Visual Studio 15 2017 Win64" "$(SolutionDir)..\src\sig_picnic\external\" +msbuild /t:Rebuild /p:Configuration=Release;Platform=x64 "$(SolutionDir)..\src\sig_picnic\external\msbuild\picnic.sln" /ignore:4006 %(AdditionalOptions) diff --git a/VisualStudio/oqs/oqs.vcxproj.filters b/VisualStudio/oqs/oqs.vcxproj.filters index a29bf32c9950d..72d65a46052b9 100644 --- a/VisualStudio/oqs/oqs.vcxproj.filters +++ b/VisualStudio/oqs/oqs.vcxproj.filters @@ -183,6 +183,13 @@ KEX_SIDH_MSR + + Sig_Picnic + + + Common + + diff --git a/VisualStudio/test_kex/test_kex.vcxproj b/VisualStudio/test_kex/test_kex.vcxproj index 250ad13253ac2..5af9ea1b691d7 100644 --- a/VisualStudio/test_kex/test_kex.vcxproj +++ b/VisualStudio/test_kex/test_kex.vcxproj @@ -1,4 +1,4 @@ - + @@ -161,7 +161,7 @@ Level3 Disabled - _CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDebug @@ -180,7 +180,7 @@ Level3 Disabled - _CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDebugDLL @@ -190,7 +190,7 @@ true $(SolutionDir)$(Platform)\$(Configuration)\ kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -199,11 +199,11 @@ Level3 Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDebug - true + false Console @@ -219,18 +219,18 @@ Level3 Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDebugDLL - true + false Console true $(SolutionDir)$(Platform)\$(Configuration)\ kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -241,7 +241,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreaded @@ -264,7 +264,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDLL @@ -276,7 +276,7 @@ true $(SolutionDir)$(Platform)\$(Configuration)\ kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -287,11 +287,11 @@ MaxSpeed true true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreaded - true + false Console @@ -311,11 +311,11 @@ MaxSpeed true true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true $(SolutionDir)include MultiThreadedDLL - true + false Console @@ -324,13 +324,16 @@ true $(SolutionDir)$(Platform)\$(Configuration)\ kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) + + + - \ No newline at end of file + diff --git a/VisualStudio/test_kex/test_kex.vcxproj.filters b/VisualStudio/test_kex/test_kex.vcxproj.filters index fd3a49787c6c3..9cc6d9eb6c495 100644 --- a/VisualStudio/test_kex/test_kex.vcxproj.filters +++ b/VisualStudio/test_kex/test_kex.vcxproj.filters @@ -19,4 +19,9 @@ Source Files + + + Header Files + + \ No newline at end of file diff --git a/VisualStudio/test_rand/test_rand.vcxproj b/VisualStudio/test_rand/test_rand.vcxproj index 25701fdc60a7e..4c5a8770e0cf2 100644 --- a/VisualStudio/test_rand/test_rand.vcxproj +++ b/VisualStudio/test_rand/test_rand.vcxproj @@ -37,6 +37,9 @@ + + + {6BB96591-0BCD-42E6-8863-4B9BFE75530C} Win32Proj @@ -193,7 +196,7 @@ true kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -206,7 +209,7 @@ true $(SolutionDir)include MultiThreadedDebug - true + false Console @@ -226,14 +229,14 @@ true $(SolutionDir)include MultiThreadedDebugDLL - true + false Console true kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -279,7 +282,7 @@ true kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) @@ -294,7 +297,7 @@ true $(SolutionDir)include MultiThreaded - true + false Console @@ -318,7 +321,7 @@ true $(SolutionDir)include MultiThreadedDLL - true + false Console @@ -327,7 +330,7 @@ true kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories) - /ignore:4006 %(AdditionalOptions) + /ignore:4006 %(AdditionalOptions) diff --git a/VisualStudio/test_rand/test_rand.vcxproj.filters b/VisualStudio/test_rand/test_rand.vcxproj.filters index 4d356d8d1431c..732f4872101ae 100644 --- a/VisualStudio/test_rand/test_rand.vcxproj.filters +++ b/VisualStudio/test_rand/test_rand.vcxproj.filters @@ -19,4 +19,9 @@ Source Files + + + Header Files + + \ No newline at end of file diff --git a/VisualStudio/test_sig/test_sig.vcxproj b/VisualStudio/test_sig/test_sig.vcxproj index 7bf1db5052910..972e3e560f0dc 100644 --- a/VisualStudio/test_sig/test_sig.vcxproj +++ b/VisualStudio/test_sig/test_sig.vcxproj @@ -1,313 +1,362 @@ - - - - - DebugDLL - Win32 - - - DebugDLL - x64 - - - Debug - Win32 - - - ReleaseDLL - Win32 - - - ReleaseDLL - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {990D1E9C-75E0-4E17-8514-6DA0858BC17C} - Win32Proj - test_sig - 10.0.15063.0 - - - - Application - true - v141 - Unicode - - - Application - true - v141 - Unicode - - - Application - false - v141 - true - Unicode - - - Application - false - v141 - true - Unicode - - - Application - true - v141 - Unicode - - - Application - true - v141 - Unicode - - - Application - false - v141 - true - Unicode - - - Application - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - false - - - true - - - true - - - true - - - true - - - false - - - false - - - - Level3 - - - MaxSpeed - true - true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - true - - - Console - true - true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - Level3 - - - MaxSpeed - true - true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - true - - - Console - true - true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - - - Level3 - Disabled - _CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - - - Console - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - - - Level3 - Disabled - _CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - - - Console - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - - - Level3 - Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - true - - - Console - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - - - Level3 - Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINDOWS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - true - - - Console - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - - - Console - true - true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;WINDOWS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)include - true - - - Console - true - true - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) - $(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\openssl\lib\;$(SolutionDir)..\src\sig_picnic\external\Picnic-master\VisualStudio\$(Platform)\$(Configuration)\;$(SolutionDir)$(Platform)\$(Configuration)\ - /ignore:4006 %(AdditionalOptions) - - - - - - - - + + + + + DebugDLL + Win32 + + + DebugDLL + x64 + + + Debug + Win32 + + + ReleaseDLL + Win32 + + + ReleaseDLL + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {990D1E9C-75E0-4E17-8514-6DA0858BC17C} + Win32Proj + test_sig + 10.0.15063.0 + + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + + + true + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)..\src\sig_picnic\external\msbuild\Release\;$(LibraryPath) + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + + + + Level3 + + + MaxSpeed + true + true + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + false + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic_static.lib;Bcrypt.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + Level3 + + + MaxSpeed + true + true + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + false + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + xcopy /y /d "$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\*.dll" "$(OutDir)" + + + + + + + Level3 + Disabled + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + + + Level3 + Disabled + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + + + Level3 + Disabled + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + false + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic_static.lib;Bcrypt.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + + + Level3 + Disabled + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + false + + + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;libpicnic.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + xcopy /y /d "$(SolutionDir)..\src\sig_picnic\external\msbuild\Release\*.dll" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + $(SolutionDir)include + true + + + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;oqs.lib;%(AdditionalDependencies) + $(SolutionDir)$(Platform)\$(Configuration)\ + /ignore:4006 %(AdditionalOptions) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualStudio/test_sig/test_sig.vcxproj.filters b/VisualStudio/test_sig/test_sig.vcxproj.filters index 1bc79a82901d3..9cc16a1f78c88 100644 --- a/VisualStudio/test_sig/test_sig.vcxproj.filters +++ b/VisualStudio/test_sig/test_sig.vcxproj.filters @@ -1,22 +1,27 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + \ No newline at end of file diff --git a/VisualStudio/winconfig.h b/VisualStudio/winconfig.h new file mode 100644 index 0000000000000..1fb6c2ac31082 --- /dev/null +++ b/VisualStudio/winconfig.h @@ -0,0 +1,13 @@ +#ifndef __WINCONFIG_H +#define __WINCONFIG_H + +/* Enable schemes supported on Windows */ +#define ENABLE_KEX_LWE_FRODO +#define ENABLE_KEX_NTRU +#define ENABLE_KEX_RLWE_MSRLN16 +#define ENABLE_KEX_RLWE_NEWHOPE +#define ENABLE_KEX_SIDH_MSR +#if defined(_WIN64) +#define ENABLE_SIG_PICNIC +#endif +#endif diff --git a/appveyor.yml b/appveyor.yml index 146d2b6b46a7f..8767b17aecd0c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,3 +13,9 @@ test_script: %APPVEYOR_BUILD_FOLDER%\VisualStudio\x64\%CONFIGURATION%\test_rand.exe %APPVEYOR_BUILD_FOLDER%\VisualStudio\x64\%CONFIGURATION%\test_kex.exe + + %APPVEYOR_BUILD_FOLDER%\VisualStudio\x64\%CONFIGURATION%\test_sig.exe + + %APPVEYOR_BUILD_FOLDER%\VisualStudio\x64\%CONFIGURATION%\minimal_kex_oqs.exe + + %APPVEYOR_BUILD_FOLDER%\VisualStudio\x64\%CONFIGURATION%\minimal_sig_oqs.exe \ No newline at end of file diff --git a/patches/kex_rlwe_newhope_avx2/patch0.patch b/patches/kex_rlwe_newhope_avx2/patch0.patch index d9ded3421637d..32c9e5fe3e4c6 100644 --- a/patches/kex_rlwe_newhope_avx2/patch0.patch +++ b/patches/kex_rlwe_newhope_avx2/patch0.patch @@ -1,198 +1,3 @@ -diff --git a/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c -new file mode 100644 -index 0000000..5e750c3 ---- /dev/null -+++ b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c -@@ -0,0 +1,159 @@ -+#if defined(WINDOWS) -+#define UNUSED -+// __attribute__ not supported in VS, is there something else I should define? -+#else -+#define UNUSED __attribute__((unused)) -+#endif -+ -+#include -+#include -+#if !defined(WINDOWS) -+#include -+#include -+#endif -+ -+#include -+#include -+ -+#include "kex_rlwe_newhope_avx2.h" -+#include "newhope.c" -+#include "params.h" -+ -+OQS_KEX *OQS_KEX_rlwe_newhope_avx2_new(OQS_RAND *rand) { -+ OQS_KEX *k = malloc(sizeof(OQS_KEX)); -+ if (k == NULL) { -+ return NULL; -+ } -+ k->method_name = strdup("RLWE NewHope AVX2"); -+ k->estimated_classical_security = 229; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known classical -+ k->estimated_quantum_security = 206; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known quantum -+ k->seed = NULL; -+ k->seed_len = 0; -+ k->named_parameters = 0; -+ k->rand = rand; -+ k->params = NULL; -+ k->alice_0 = &OQS_KEX_rlwe_newhope_avx2_alice_0; -+ k->bob = &OQS_KEX_rlwe_newhope_avx2_bob; -+ k->alice_1 = &OQS_KEX_rlwe_newhope_avx2_alice_1; -+ k->alice_priv_free = &OQS_KEX_rlwe_newhope_avx2_alice_priv_free; -+ k->free = &OQS_KEX_rlwe_newhope_avx2_free; -+ return k; -+} -+ -+int OQS_KEX_rlwe_newhope_avx2_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { -+ -+ int ret; -+ -+ /* allocate public/private key pair */ -+ *alice_msg = malloc(NEWHOPE_SENDABYTES); -+ if (*alice_msg == NULL) { -+ goto err; -+ } -+ *alice_priv = malloc(sizeof(poly)); -+ if (*alice_priv == NULL) { -+ goto err; -+ } -+ -+ /* generate public/private key pair */ -+ newhope_keygen(*alice_msg, (poly *) (*alice_priv)); -+ *alice_msg_len = NEWHOPE_SENDABYTES; -+ -+ ret = 1; -+ goto cleanup; -+ -+err: -+ ret = 0; -+ free(*alice_msg); -+ *alice_msg = NULL; -+ free(*alice_priv); -+ *alice_priv = NULL; -+ -+cleanup: -+ -+ return ret; -+} -+ -+int OQS_KEX_rlwe_newhope_avx2_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { -+ -+ int ret; -+ -+ if (alice_msg_len != NEWHOPE_SENDABYTES) { -+ goto err; -+ } -+ -+ /* allocate message and session key */ -+ *bob_msg = malloc(NEWHOPE_SENDBBYTES); -+ if (*bob_msg == NULL) { -+ goto err; -+ } -+ *key = malloc(32); -+ if (*key == NULL) { -+ goto err; -+ } -+ -+ /* generate Bob's response */ -+ newhope_sharedb(*key, *bob_msg, alice_msg); -+ *bob_msg_len = NEWHOPE_SENDBBYTES; -+ *key_len = 32; -+ -+ ret = 1; -+ goto cleanup; -+ -+err: -+ ret = 0; -+ free(*bob_msg); -+ *bob_msg = NULL; -+ free(*key); -+ *key = NULL; -+ -+cleanup: -+ -+ return ret; -+} -+ -+int OQS_KEX_rlwe_newhope_avx2_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { -+ -+ int ret; -+ -+ if (bob_msg_len != NEWHOPE_SENDBBYTES) { -+ goto err; -+ } -+ -+ /* allocate session key */ -+ *key = malloc(32); -+ if (*key == NULL) { -+ goto err; -+ } -+ -+ /* generate Alice's session key */ -+ newhope_shareda(*key, (poly *) alice_priv, bob_msg); -+ *key_len = 32; -+ -+ ret = 1; -+ goto cleanup; -+ -+err: -+ ret = 0; -+ free(*key); -+ *key = NULL; -+ -+cleanup: -+ -+ return ret; -+} -+ -+void OQS_KEX_rlwe_newhope_avx2_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) { -+ if (alice_priv) { -+ free(alice_priv); -+ } -+} -+ -+void OQS_KEX_rlwe_newhope_avx2_free(OQS_KEX *k) { -+ if (k) { -+ free(k->named_parameters); -+ k->named_parameters = NULL; -+ free(k->method_name); -+ k->method_name = NULL; -+ } -+ free(k); -+} -diff --git a/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h -new file mode 100644 -index 0000000..6ab8921 ---- /dev/null -+++ b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h -@@ -0,0 +1,24 @@ -+/** -+ * \file kex_rlwe_newhope.h -+ * \brief Header for ring-LWE key exchange protocol NewHope -+ */ -+ -+#ifndef __OQS_KEX_RLWE_NEWHOPE_AVX2_H -+#define __OQS_KEX_RLWE_NEWHOPE_AVX2_H -+ -+#include -+#include -+ -+#include -+#include -+ -+OQS_KEX *OQS_KEX_rlwe_newhope_avx2_new(OQS_RAND *rand); -+ -+int OQS_KEX_rlwe_newhope_avx2_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -+int OQS_KEX_rlwe_newhope_avx2_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -+int OQS_KEX_rlwe_newhope_avx2_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); -+ -+void OQS_KEX_rlwe_newhope_avx2_alice_priv_free(OQS_KEX *k, void *alice_priv); -+void OQS_KEX_rlwe_newhope_avx2_free(OQS_KEX *k); -+ -+#endif diff --git a/src/kex_rlwe_newhope/avx2/bitrev.s b/src/kex_rlwe_newhope/avx2/bitrev.s index 002a1ee..faff35f 100644 --- a/src/kex_rlwe_newhope/avx2/bitrev.s @@ -777,6 +582,203 @@ index beb93fe..7eac399 100644 mov %rsp,%r11 and $31,%r11 add $0,%r11 +diff --git a/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c +new file mode 100644 +index 0000000..c30a95e +--- /dev/null ++++ b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.c +@@ -0,0 +1,160 @@ ++#if defined(WINDOWS) ++#define UNUSED ++// __attribute__ not supported in VS, is there something else I should define? ++#else ++#define UNUSED __attribute__((unused)) ++#endif ++ ++#include ++#include ++#if !defined(WINDOWS) ++#include ++#include ++#endif ++ ++#include ++#include ++#include ++ ++#include "kex_rlwe_newhope_avx2.h" ++#include "newhope.c" ++#include "params.h" ++ ++OQS_KEX *OQS_KEX_rlwe_newhope_avx2_new(OQS_RAND *rand) { ++ OQS_KEX *k = malloc(sizeof(OQS_KEX)); ++ if (k == NULL) { ++ return NULL; ++ } ++ k->method_name = strdup("RLWE NewHope AVX2"); ++ k->estimated_classical_security = 229; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known classical ++ k->estimated_quantum_security = 206; // http://eprint.iacr.org/2015/1092.pdf Table 1 NewHope dual known quantum ++ k->seed = NULL; ++ k->seed_len = 0; ++ k->named_parameters = 0; ++ k->rand = rand; ++ k->params = NULL; ++ k->alice_0 = &OQS_KEX_rlwe_newhope_avx2_alice_0; ++ k->bob = &OQS_KEX_rlwe_newhope_avx2_bob; ++ k->alice_1 = &OQS_KEX_rlwe_newhope_avx2_alice_1; ++ k->alice_priv_free = &OQS_KEX_rlwe_newhope_avx2_alice_priv_free; ++ k->free = &OQS_KEX_rlwe_newhope_avx2_free; ++ return k; ++} ++ ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { ++ ++ OQS_STATUS ret; ++ ++ /* allocate public/private key pair */ ++ *alice_msg = malloc(NEWHOPE_SENDABYTES); ++ if (*alice_msg == NULL) { ++ goto err; ++ } ++ *alice_priv = malloc(sizeof(poly)); ++ if (*alice_priv == NULL) { ++ goto err; ++ } ++ ++ /* generate public/private key pair */ ++ newhope_keygen(*alice_msg, (poly *) (*alice_priv)); ++ *alice_msg_len = NEWHOPE_SENDABYTES; ++ ++ ret = OQS_SUCCESS; ++ goto cleanup; ++ ++err: ++ ret = OQS_ERROR; ++ free(*alice_msg); ++ *alice_msg = NULL; ++ free(*alice_priv); ++ *alice_priv = NULL; ++ ++cleanup: ++ ++ return ret; ++} ++ ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { ++ ++ OQS_STATUS ret; ++ ++ if (alice_msg_len != NEWHOPE_SENDABYTES) { ++ goto err; ++ } ++ ++ /* allocate message and session key */ ++ *bob_msg = malloc(NEWHOPE_SENDBBYTES); ++ if (*bob_msg == NULL) { ++ goto err; ++ } ++ *key = malloc(32); ++ if (*key == NULL) { ++ goto err; ++ } ++ ++ /* generate Bob's response */ ++ newhope_sharedb(*key, *bob_msg, alice_msg); ++ *bob_msg_len = NEWHOPE_SENDBBYTES; ++ *key_len = 32; ++ ++ ret = OQS_SUCCESS; ++ goto cleanup; ++ ++err: ++ ret = OQS_ERROR; ++ free(*bob_msg); ++ *bob_msg = NULL; ++ free(*key); ++ *key = NULL; ++ ++cleanup: ++ ++ return ret; ++} ++ ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { ++ ++ OQS_STATUS ret; ++ ++ if (bob_msg_len != NEWHOPE_SENDBBYTES) { ++ goto err; ++ } ++ ++ /* allocate session key */ ++ *key = malloc(32); ++ if (*key == NULL) { ++ goto err; ++ } ++ ++ /* generate Alice's session key */ ++ newhope_shareda(*key, (poly *) alice_priv, bob_msg); ++ *key_len = 32; ++ ++ ret = OQS_SUCCESS; ++ goto cleanup; ++ ++err: ++ ret = OQS_ERROR; ++ free(*key); ++ *key = NULL; ++ ++cleanup: ++ ++ return ret; ++} ++ ++void OQS_KEX_rlwe_newhope_avx2_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) { ++ if (alice_priv) { ++ free(alice_priv); ++ } ++} ++ ++void OQS_KEX_rlwe_newhope_avx2_free(OQS_KEX *k) { ++ if (k) { ++ free(k->named_parameters); ++ k->named_parameters = NULL; ++ free(k->method_name); ++ k->method_name = NULL; ++ } ++ free(k); ++} +diff --git a/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h +new file mode 100644 +index 0000000..5f40fc2 +--- /dev/null ++++ b/src/kex_rlwe_newhope/avx2/kex_rlwe_newhope_avx2.h +@@ -0,0 +1,25 @@ ++/** ++ * \file kex_rlwe_newhope.h ++ * \brief Header for ring-LWE key exchange protocol NewHope ++ */ ++ ++#ifndef __OQS_KEX_RLWE_NEWHOPE_AVX2_H ++#define __OQS_KEX_RLWE_NEWHOPE_AVX2_H ++ ++#include ++#include ++ ++#include ++#include ++#include ++ ++OQS_KEX *OQS_KEX_rlwe_newhope_avx2_new(OQS_RAND *rand); ++ ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); ++OQS_STATUS OQS_KEX_rlwe_newhope_avx2_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); ++ ++void OQS_KEX_rlwe_newhope_avx2_alice_priv_free(OQS_KEX *k, void *alice_priv); ++void OQS_KEX_rlwe_newhope_avx2_free(OQS_KEX *k); ++ ++#endif diff --git a/src/kex_rlwe_newhope/avx2/newhope.c b/src/kex_rlwe_newhope/avx2/newhope.c index b9f7a6c..f0c5ad9 100644 --- a/src/kex_rlwe_newhope/avx2/newhope.c diff --git a/src/common/common.c b/src/common/common.c index 420aae263f282..c11c1c2abf276 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -1,13 +1,15 @@ #include +#include +#include #include -#if defined(WINDOWS) +#if defined(_WIN32) #include #endif void OQS_MEM_cleanse(void *ptr, size_t len) { -#if defined(WINDOWS) +#if defined(_WIN32) SecureZeroMemory(ptr, len); #elif defined(HAVE_MEMSET_S) if (0U < len && memset_s(ptr, (rsize_t) len, 0, (rsize_t) len) != 0) { @@ -26,3 +28,25 @@ void OQS_MEM_secure_free(void *ptr, size_t len) { free(ptr); } } + +/* Displays hexadecimal strings */ +void OQS_print_hex_string(const char *label, const uint8_t *str, size_t len) { + printf("%-20s (%4zu bytes): ", label, len); + for (size_t i = 0; i < (len); i++) { + printf("%02X", ((unsigned char *) (str))[i]); + } + printf("\n"); +} + +/* Partially displays hexadecimal strings */ +void OQS_print_part_hex_string(const char *label, const uint8_t *str, size_t len, size_t sub_len) { + printf("%-20s (%4zu bytes): ", label, len); + for (size_t i = 0; i < (sub_len); i++) { + printf("%02X", ((unsigned char *) (str))[i]); + } + printf("..."); + for (size_t i = 0; i < (sub_len); i++) { + printf("%02X", ((unsigned char *) (str))[len - sub_len + i]); + } + printf("\n"); +} diff --git a/src/common/common.h b/src/common/common.h index 094d2002cef9a..6b7710018a0ca 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -1,10 +1,19 @@ #ifndef __OQS_COMMON_H #define __OQS_COMMON_H +#include #include -#define OQS_SUCCESS 1 -#define OQS_ERROR 0 +typedef enum { + OQS_ERROR = -1, + OQS_SUCCESS = 0 +} OQS_STATUS; + +/* Displays hexadecimal strings */ +void OQS_print_hex_string(const char *label, const uint8_t *str, size_t len); + +/* Partially displays hexadecimal strings */ +void OQS_print_part_hex_string(const char *label, const uint8_t *str, size_t len, size_t sub_len); void OQS_MEM_cleanse(void *ptr, size_t len); void OQS_MEM_secure_free(void *ptr, size_t len); @@ -16,7 +25,7 @@ void OQS_MEM_secure_free(void *ptr, size_t len); #define eprintf(...) fprintf(stderr, __VA_ARGS__); #endif -#if defined(WINDOWS) +#if defined(_WIN32) #define UNUSED // __attribute__ not supported in VS #else diff --git a/src/common/oqs.h b/src/common/oqs.h new file mode 100644 index 0000000000000..3ed337fba0e6c --- /dev/null +++ b/src/common/oqs.h @@ -0,0 +1,17 @@ +#ifndef __OQS_H +#define __OQS_H + +#include +#include +#include +#include +#include +#include + +#if defined(_WIN32) +#include +#else +#include +#endif + +#endif diff --git a/src/crypto/aes/test_aes.c b/src/crypto/aes/test_aes.c index 62db255bfee1c..642fad24e5418 100644 --- a/src/crypto/aes/test_aes.c +++ b/src/crypto/aes/test_aes.c @@ -3,10 +3,9 @@ #include #include -#include +#include #include "../../ds_benchmark.h" -#include "../../common/common.h" #include "aes.h" #include "aes_local.h" diff --git a/src/crypto/rand/rand.c b/src/crypto/rand/rand.c index 4dfc188f165c7..5e0bd6e7effa3 100644 --- a/src/crypto/rand/rand.c +++ b/src/crypto/rand/rand.c @@ -1,7 +1,7 @@ #include #include #include -#if defined(WINDOWS) +#if defined(_WIN32) #include #include #else @@ -10,6 +10,7 @@ #include #endif +#include #include #include #include @@ -49,7 +50,7 @@ void OQS_RAND_free(OQS_RAND *r) { } } -#if !defined(WINDOWS) +#if !defined(_WIN32) /* For some reason specifying inline results in a build error */ inline #endif @@ -143,10 +144,10 @@ void OQS_RAND_report_statistics(const unsigned long occurrences[256], const char return; } -int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) { - int result = 0; +OQS_STATUS OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) { + OQS_STATUS result = OQS_ERROR; -#if !defined(WINDOWS) +#if !defined(_WIN32) int fd = 0; #endif @@ -154,7 +155,7 @@ int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) { goto err; } -#if defined(WINDOWS) +#if defined(_WIN32) HCRYPTPROV hCryptProv; if (!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) || !CryptGenRandom(hCryptProv, (DWORD) n, buf)) { @@ -170,10 +171,10 @@ int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) { goto err; } #endif - result = 1; + result = OQS_SUCCESS; err: -#if !defined(WINDOWS) +#if !defined(_WIN32) if (fd > 0) { close(fd); } diff --git a/src/crypto/rand/rand.h b/src/crypto/rand/rand.h index 710e449273cee..c5f5b435588f8 100644 --- a/src/crypto/rand/rand.h +++ b/src/crypto/rand/rand.h @@ -9,6 +9,8 @@ #include #include +#include + enum OQS_RAND_alg_name { OQS_RAND_alg_default, OQS_RAND_alg_urandom_chacha20, @@ -94,5 +96,5 @@ double OQS_RAND_test_statistical_distance_from_uniform(const unsigned long occur double OQS_RAND_zscore_deviation_from_uniform(const unsigned long occurrences[256]); void OQS_RAND_report_statistics(const unsigned long occurrences[256], const char *indent); -int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n); +OQS_STATUS OQS_RAND_get_system_entropy(uint8_t *buf, size_t n); #endif diff --git a/src/crypto/rand/test_rand.c b/src/crypto/rand/test_rand.c index 253a8e8ba17d3..71814e037229d 100644 --- a/src/crypto/rand/test_rand.c +++ b/src/crypto/rand/test_rand.c @@ -5,9 +5,7 @@ #include #include -#include - -#include "../../common/common.h" +#include struct rand_testcase { enum OQS_RAND_alg_name alg_name; @@ -53,34 +51,24 @@ static void rand_test_distribution_64(OQS_RAND *rand, unsigned long occurrences[ } } -static int rand_test_distribution_n(OQS_RAND *rand, unsigned long occurrences[256], int len) { +static OQS_STATUS rand_test_distribution_n(OQS_RAND *rand, unsigned long occurrences[256], int len) { uint8_t *x = malloc(len); if (x == NULL) { - return 0; + return OQS_ERROR; } OQS_RAND_n(rand, x, len); for (int i = 0; i < len; i++) { OQS_RAND_test_record_occurrence(x[i], occurrences); } free(x); - return 1; + return OQS_SUCCESS; } - -#define PRINT_HEX_STRING(label, str, len) \ - { \ - printf("%-20s (%4zu bytes): ", (label), (size_t)(len)); \ - for (size_t i = 0; i < (len); i++) { \ - printf("%02X", ((unsigned char *) (str))[i]); \ - } \ - printf("\n"); \ - } - -static int rand_test_distribution_wrapper(enum OQS_RAND_alg_name alg_name, int iterations, bool quiet) { +static OQS_STATUS rand_test_distribution_wrapper(enum OQS_RAND_alg_name alg_name, int iterations, bool quiet) { OQS_RAND *rand = OQS_RAND_new(alg_name); if (rand == NULL) { eprintf("rand is NULL\n"); - return 0; + return OQS_ERROR; } if (!quiet) { @@ -90,25 +78,25 @@ static int rand_test_distribution_wrapper(enum OQS_RAND_alg_name alg_name, int i uint8_t x[256]; OQS_RAND_n(rand, x, 256); - PRINT_HEX_STRING("OQS_RAND_n, n = 256", x, 256) + OQS_print_hex_string("OQS_RAND_n, n = 256", x, 256); uint8_t y8 = OQS_RAND_8(rand); - PRINT_HEX_STRING("OQS_RAND_8", (uint8_t *) &y8, sizeof(y8)); + OQS_print_hex_string("OQS_RAND_8", (uint8_t *) &y8, sizeof(y8)); y8 = OQS_RAND_8(rand); - PRINT_HEX_STRING("OQS_RAND_8", (uint8_t *) &y8, sizeof(y8)); + OQS_print_hex_string("OQS_RAND_8", (uint8_t *) &y8, sizeof(y8)); uint32_t y32 = OQS_RAND_32(rand); - PRINT_HEX_STRING("OQS_RAND_32", (uint8_t *) &y32, sizeof(y32)); + OQS_print_hex_string("OQS_RAND_32", (uint8_t *) &y32, sizeof(y32)); y32 = OQS_RAND_32(rand); - PRINT_HEX_STRING("OQS_RAND_32", (uint8_t *) &y32, sizeof(y32)); + OQS_print_hex_string("OQS_RAND_32", (uint8_t *) &y32, sizeof(y32)); uint64_t y64 = OQS_RAND_64(rand); - PRINT_HEX_STRING("OQS_RAND_64", (uint8_t *) &y64, sizeof(y64)); + OQS_print_hex_string("OQS_RAND_64", (uint8_t *) &y64, sizeof(y64)); y64 = OQS_RAND_64(rand); - PRINT_HEX_STRING("OQS_RAND_64", (uint8_t *) &y64, sizeof(y64)); + OQS_print_hex_string("OQS_RAND_64", (uint8_t *) &y64, sizeof(y64)); OQS_RAND_n(rand, x, 256); - PRINT_HEX_STRING("OQS_RAND_n, n = 256", x, 256) + OQS_print_hex_string("OQS_RAND_n, n = 256", x, 256); } printf("================================================================================\n"); @@ -150,12 +138,12 @@ static int rand_test_distribution_wrapper(enum OQS_RAND_alg_name alg_name, int i OQS_RAND_free(rand); - return 1; + return OQS_SUCCESS; } int main(int argc, char **argv) { - int success; + OQS_STATUS success; bool quiet = false; for (int i = 1; i < argc; i++) { @@ -179,19 +167,19 @@ int main(int argc, char **argv) { size_t rand_testcases_len = sizeof(rand_testcases) / sizeof(struct rand_testcase); for (size_t i = 0; i < rand_testcases_len; i++) { success = rand_test_distribution_wrapper(rand_testcases[i].alg_name, RAND_TEST_ITERATIONS, quiet); - if (success != 1) { + if (success != OQS_SUCCESS) { goto err; } } - success = 1; + success = OQS_SUCCESS; goto cleanup; err: - success = 0; + success = OQS_ERROR; eprintf("ERROR!\n"); cleanup: - return (success == 1) ? EXIT_SUCCESS : EXIT_FAILURE; + return (success == OQS_SUCCESS) ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c b/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c index a10c41baf2253..7e0bee675411c 100644 --- a/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c +++ b/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c @@ -1,5 +1,5 @@ #include -#if defined(WINDOWS) +#if defined(_WIN32) #include #include #else @@ -14,10 +14,11 @@ #include #include +#include #include #include -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -35,7 +36,7 @@ static oqs_rand_urandom_aesctr_ctx *oqs_rand_urandom_aesctr_ctx_new() { goto err; } uint8_t key[16]; - if (!OQS_RAND_get_system_entropy(key, 16)) { + if (OQS_RAND_get_system_entropy(key, 16) != OQS_SUCCESS) { goto err; } OQS_AES128_load_schedule(key, &rand_ctx->schedule, 1); diff --git a/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c b/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c index 6dbfcfaebe640..9867f5aa4e0f9 100644 --- a/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c +++ b/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c @@ -1,9 +1,9 @@ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4267) #endif #include -#if defined(WINDOWS) +#if defined(_WIN32) #include #include #else @@ -21,7 +21,7 @@ #include "external/chacha20.c" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -64,7 +64,7 @@ static OQS_RAND_urandom_chacha20_ctx *OQS_RAND_urandom_chacha20_ctx_new() { if (rand_ctx == NULL) { goto err; } - if (!OQS_RAND_get_system_entropy(rand_ctx->key, 32)) { + if (OQS_RAND_get_system_entropy(rand_ctx->key, 32) != OQS_SUCCESS) { goto err; } memset(rand_ctx->nonce, 0, 8); diff --git a/src/crypto/sha3/sha3.c b/src/crypto/sha3/sha3.c index 1c229e6bcb523..beb5790a91af4 100644 --- a/src/crypto/sha3/sha3.c +++ b/src/crypto/sha3/sha3.c @@ -5,7 +5,7 @@ * from https://twitter.com/tweetfips202 * by Gilles Van Assche, Daniel J. Bernstein, and Peter Schwabe */ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4244) #endif diff --git a/src/ds_benchmark.h b/src/ds_benchmark.h index fc9efb02bddf8..ad26b2ed8864c 100644 --- a/src/ds_benchmark.h +++ b/src/ds_benchmark.h @@ -86,13 +86,13 @@ PRINT_TIMER_FOOTER #include #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #endif #include #include -#if defined(WINDOWS) +#if defined(_WIN32) #include int gettimeofday(struct timeval *tp, struct timezone *tzp) { @@ -114,7 +114,7 @@ int gettimeofday(struct timeval *tp, struct timezone *tzp) { #endif static uint64_t rdtsc(void) { -#if defined(WINDOWS) +#if defined(_WIN32) return __rdtsc(); #elif defined(__aarch64__) uint64_t x; diff --git a/src/kex/kex.c b/src/kex/kex.c index 46ac466189319..54d3a90f5a711 100644 --- a/src/kex/kex.c +++ b/src/kex/kex.c @@ -20,18 +20,18 @@ #include #endif -#define UNUSED(expr) \ - do { \ - (void) (expr); \ +#define UNUSED_KEX(expr) \ + do { \ + (void) (expr); \ } while (0) OQS_KEX *OQS_KEX_new(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters) { //To disable warnings when the function arguments are not being used depending //on which algorithm has been disabled - UNUSED(seed); - UNUSED(seed_len); - UNUSED(named_parameters); + UNUSED_KEX(seed); + UNUSED_KEX(seed_len); + UNUSED_KEX(named_parameters); switch (alg_name) { case OQS_KEX_alg_default: @@ -101,25 +101,25 @@ OQS_KEX *OQS_KEX_new(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8 } } -int OQS_KEX_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { if (k == NULL) { - return 0; + return OQS_ERROR; } else { return k->alice_0(k, alice_priv, alice_msg, alice_msg_len); } } -int OQS_KEX_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { if (k == NULL) { - return 0; + return OQS_ERROR; } else { return k->bob(k, alice_msg, alice_msg_len, bob_msg, bob_msg_len, key, key_len); } } -int OQS_KEX_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { if (k == NULL) { - return 0; + return OQS_ERROR; } else { return k->alice_1(k, alice_priv, bob_msg, bob_msg_len, key, key_len); } diff --git a/src/kex/kex.h b/src/kex/kex.h index 6f11ae5604268..a6168618742bc 100644 --- a/src/kex/kex.h +++ b/src/kex/kex.h @@ -9,9 +9,12 @@ #include #include +#include #include -#if !defined(WINDOWS) +#if defined(_WIN32) +#include +#else #include #endif @@ -92,9 +95,10 @@ typedef struct OQS_KEX { * @param alice_priv Alice's private key * @param alice_msg Alice's message (public key + optional additional data) * @param alice_msg_len Alice's message length - * @return 1 on success, or 0 on failure + * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ - int (*alice_0)(OQS_KEX *k, void **alive_priv, uint8_t **alice_msg, size_t *alice_msg_len); + OQS_STATUS(*alice_0) + (OQS_KEX *k, void **alive_priv, uint8_t **alice_msg, size_t *alice_msg_len); /** * Pointer to a function for shared key generation by Bob. @@ -106,9 +110,10 @@ typedef struct OQS_KEX { * @param bob_msg_len Bob's message length * @param key Shared key * @param key_len Shared key length - * @return 1 on success, or 0 on failure + * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ - int (*bob)(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); + OQS_STATUS(*bob) + (OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); /** * Pointer to a function for shared key generation by Alice. @@ -119,9 +124,10 @@ typedef struct OQS_KEX { * @param bob_msg_len Bob's message length * @param key Shared key * @param key_len Shared key length - * @return 1 on success, or 0 on failure + * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ - int (*alice_1)(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); + OQS_STATUS(*alice_1) + (OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); /** * Pointer to a function for freeing Alice's private key @@ -154,9 +160,9 @@ typedef struct OQS_KEX { */ OQS_KEX *OQS_KEX_new(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters); -int OQS_KEX_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_free(OQS_KEX *k); diff --git a/src/kex/minimal_kex_oqs.c b/src/kex/minimal_kex_oqs.c new file mode 100644 index 0000000000000..7142071d01654 --- /dev/null +++ b/src/kex/minimal_kex_oqs.c @@ -0,0 +1,157 @@ +/* + * minimal_kex_oqs.c + * + * Minimal example of a Diffie-Hellman post-quantum key exchange method + * implemented in liboqs. + * +*/ +#include +#include +#include + +#include + +/* Cleaning up memory etc */ +void cleanup(uint8_t *alice_msg, size_t alice_msg_len, uint8_t *alice_key, + size_t alice_key_len, uint8_t *bob_msg, size_t bob_msg_len, + uint8_t *bob_key, size_t bob_key_len, void *alice_priv, + OQS_KEX *kex, OQS_RAND *rnd); + +#ifdef ENABLE_KEX_LWE_FRODO +int main(void) { + /* Key exchange parameters */ + void *alice_priv = NULL; // Alice's private key + uint8_t *alice_msg = NULL; // Alice's message + size_t alice_msg_len = 0; // Alice's message length + uint8_t *alice_key = NULL; // Alice's final key + size_t alice_key_len = 0; // Alice's final key length + + uint8_t *bob_msg = NULL; // Bob's message + size_t bob_msg_len = 0; // Bob's message length + uint8_t *bob_key = NULL; // Bob's final key + size_t bob_key_len = 0; // Bob's final key length + + /* Setup the key exchange protocol */ + enum OQS_KEX_alg_name alg_name = OQS_KEX_alg_lwe_frodo; // Alg. name + const uint8_t *seed = (unsigned char *) "01234567890123456"; // Rand. seed + const size_t seed_len = 16; // Seed length + const char *named_parameters = "recommended"; // Named params. + OQS_RAND *rnd = NULL; // Source of randomness + OQS_KEX *kex = NULL; // OQS_KEX structure + + /* Setup the source of randomness */ + rnd = OQS_RAND_new(OQS_RAND_alg_urandom_chacha20); + if (rnd == NULL) { + eprintf("ERROR: Setting up the randomness source!\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + /* Populate the OQS_KEX structure, here's where liboqs sets up + * the specific details of the selected KEX implementation */ + kex = OQS_KEX_new(rnd, alg_name, seed, seed_len, named_parameters); + if (kex == NULL) { + eprintf("ERROR: OQS_KEX_new failed!\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + /* Proceed with the Diffie-Hellman key exchange mechanism */ + printf("===============================================================\n"); + printf("Diffie-Hellman post-quantum key exchange: %s\n", kex->method_name); + printf("===============================================================\n"); + + /* Alice's initial message */ + int success = OQS_KEX_alice_0(kex, &alice_priv, &alice_msg, &alice_msg_len); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_KEX_alice_0 failed!\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + OQS_print_part_hex_string("Alice message", alice_msg, alice_msg_len, 20); + + /* Bob's response */ + success = OQS_KEX_bob(kex, alice_msg, alice_msg_len, &bob_msg, &bob_msg_len, + &bob_key, &bob_key_len); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_KEX_bob failed!\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + OQS_print_part_hex_string("Bob message", bob_msg, bob_msg_len, 20); + OQS_print_hex_string("Bob session key", bob_key, bob_key_len); + + /* Alice processes Bob's response */ + success = OQS_KEX_alice_1(kex, alice_priv, bob_msg, bob_msg_len, &alice_key, + &alice_key_len); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_KEX_alice_1 failed!\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + OQS_print_hex_string("Alice session key", alice_key, alice_key_len); + + /* Compare key lengths */ + if (alice_key_len != bob_key_len) { + eprintf("ERROR: Alice's session key and Bob's session keys " + "have different lengths (%zu vs %zu)!\n", + alice_key_len, bob_key_len); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + /* Compare key values */ + success = memcmp(alice_key, bob_key, alice_key_len); + if (success != 0) { + eprintf("ERROR: Alice's session key and Bob's session " + "key are not equal!\n"); + OQS_print_hex_string("Alice session key", alice_key, alice_key_len); + OQS_print_hex_string("Bob session key", bob_key, bob_key_len); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_FAILURE; + } + + /* Success and clean-up */ + printf("Alice and Bob's session keys match.\n"); + cleanup(alice_msg, alice_msg_len, alice_key, alice_key_len, bob_msg, + bob_msg_len, bob_key, bob_key_len, alice_priv, kex, rnd); + + return EXIT_SUCCESS; +} +#else // !ENABLE_KEX_LWE_FRODO +int main(void) { + printf("KEX algorithm not available. Make sure configure was run properly; see Readme.md.\n"); + return EXIT_FAILURE; +} +#endif + +void cleanup(uint8_t *alice_msg, size_t alice_msg_len, uint8_t *alice_key, + size_t alice_key_len, uint8_t *bob_msg, size_t bob_msg_len, + uint8_t *bob_key, size_t bob_key_len, void *alice_priv, + OQS_KEX *kex, OQS_RAND *rnd) { + /* Secure cleaning */ + OQS_MEM_secure_free(alice_msg, alice_msg_len); + OQS_MEM_secure_free(alice_key, alice_key_len); + OQS_MEM_secure_free(bob_msg, bob_msg_len); + OQS_MEM_secure_free(bob_key, bob_key_len); + OQS_KEX_alice_priv_free(kex, alice_priv); + OQS_KEX_free(kex); + OQS_RAND_free(rnd); +} diff --git a/src/kex/test_kex.c b/src/kex/test_kex.c index 57c489045d518..456e181afadde 100644 --- a/src/kex/test_kex.c +++ b/src/kex/test_kex.c @@ -1,4 +1,4 @@ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4244 4293) #endif @@ -7,11 +7,9 @@ #include #include -#include -#include +#include #include "../ds_benchmark.h" -#include "../common/common.h" struct kex_testcase { enum OQS_KEX_alg_name alg_name; @@ -61,19 +59,10 @@ struct kex_testcase kex_testcases[] = { #define KEX_TEST_ITERATIONS 100 #define KEX_BENCH_SECONDS_DEFAULT 1 -#define PRINT_HEX_STRING(label, str, len) \ - { \ - printf("%-20s (%4zu bytes): ", (label), (size_t)(len)); \ - for (size_t i = 0; i < (len); i++) { \ - printf("%02X", ((unsigned char *) (str))[i]); \ - } \ - printf("\n"); \ - } - -static int kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const int print, unsigned long occurrences[256]) { +static OQS_STATUS kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const int print, unsigned long occurrences[256]) { OQS_KEX *kex = NULL; - int rc; + OQS_STATUS rc; void *alice_priv = NULL; uint8_t *alice_msg = NULL; @@ -101,36 +90,36 @@ static int kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, /* Alice's initial message */ rc = OQS_KEX_alice_0(kex, &alice_priv, &alice_msg, &alice_msg_len); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("OQS_KEX_alice_0 failed\n"); goto err; } if (print) { - PRINT_HEX_STRING("Alice message", alice_msg, alice_msg_len) + OQS_print_part_hex_string("Alice message", alice_msg, alice_msg_len, 20); } /* Bob's response */ rc = OQS_KEX_bob(kex, alice_msg, alice_msg_len, &bob_msg, &bob_msg_len, &bob_key, &bob_key_len); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("OQS_KEX_bob failed\n"); goto err; } if (print) { - PRINT_HEX_STRING("Bob message", bob_msg, bob_msg_len) - PRINT_HEX_STRING("Bob session key", bob_key, bob_key_len) + OQS_print_part_hex_string("Bob message", bob_msg, bob_msg_len, 20); + OQS_print_hex_string("Bob session key", bob_key, bob_key_len); } /* Alice processes Bob's response */ rc = OQS_KEX_alice_1(kex, alice_priv, bob_msg, bob_msg_len, &alice_key, &alice_key_len); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("OQS_KEX_alice_1 failed\n"); goto err; } if (print) { - PRINT_HEX_STRING("Alice session key", alice_key, alice_key_len) + OQS_print_hex_string("Alice session key", alice_key, alice_key_len); } /* compare session key lengths and values */ @@ -138,11 +127,10 @@ static int kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, eprintf("ERROR: Alice's session key and Bob's session key are different lengths (%zu vs %zu)\n", alice_key_len, bob_key_len); goto err; } - rc = memcmp(alice_key, bob_key, alice_key_len); - if (rc != 0) { + if (memcmp(alice_key, bob_key, alice_key_len) != 0) { eprintf("ERROR: Alice's session key and Bob's session key are not equal\n"); - PRINT_HEX_STRING("Alice session key", alice_key, alice_key_len) - PRINT_HEX_STRING("Bob session key", bob_key, bob_key_len) + OQS_print_hex_string("Alice session key", alice_key, alice_key_len); + OQS_print_hex_string("Bob session key", bob_key, bob_key_len); goto err; } if (print) { @@ -155,11 +143,11 @@ static int kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, OQS_RAND_test_record_occurrence(alice_key[i], occurrences); } - rc = 1; + rc = OQS_SUCCESS; goto cleanup; err: - rc = 0; + rc = OQS_ERROR; cleanup: free(alice_msg); @@ -172,9 +160,9 @@ static int kex_test_correctness(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, return rc; } -static int kex_test_correctness_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, int iterations, bool quiet) { +static OQS_STATUS kex_test_correctness_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, int iterations, bool quiet) { OQS_KEX *kex = NULL; - int ret; + OQS_STATUS ret; unsigned long occurrences[256]; for (int i = 0; i < 256; i++) { @@ -183,7 +171,7 @@ static int kex_test_correctness_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name al ret = kex_test_correctness(rand, alg_name, seed, seed_len, named_parameters, quiet ? 0 : 1, occurrences); - if (ret != 1) { + if (ret != OQS_SUCCESS) { goto err; } @@ -199,7 +187,7 @@ static int kex_test_correctness_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name al printf("================================================================================\n"); for (int i = 0; i < iterations; i++) { ret = kex_test_correctness(rand, alg_name, seed, seed_len, named_parameters, 0, occurrences); - if (ret != 1) { + if (ret != OQS_SUCCESS) { goto err; } } @@ -207,11 +195,11 @@ static int kex_test_correctness_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name al OQS_RAND_report_statistics(occurrences, ""); printf("\n\n"); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; cleanup: OQS_KEX_free(kex); @@ -229,10 +217,10 @@ static void cleanup_bob(uint8_t *bob_msg, uint8_t *bob_key) { free(bob_key); } -static int kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const size_t seconds) { +static OQS_STATUS kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters, const size_t seconds) { OQS_KEX *kex = NULL; - int rc; + OQS_STATUS rc; void *alice_priv = NULL; uint8_t *alice_msg = NULL; @@ -264,11 +252,11 @@ static int kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, con printf("Communication (bytes): A->B: %zu, B->A: %zu, total: %zu; classical/quantum security bits [%u:%u] \n", alice_msg_len, bob_msg_len, alice_msg_len + bob_msg_len, kex->estimated_classical_security, kex->estimated_quantum_security); - rc = 1; + rc = OQS_SUCCESS; goto cleanup; err: - rc = 0; + rc = OQS_ERROR; cleanup: free(alice_msg); @@ -281,10 +269,10 @@ static int kex_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, con return rc; } -static int kex_mem_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters) { +static OQS_STATUS kex_mem_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, const uint8_t *seed, const size_t seed_len, const char *named_parameters) { OQS_KEX *kex = NULL; - int rc; + OQS_STATUS rc; void *alice_priv = NULL; uint8_t *alice_msg = NULL; @@ -309,11 +297,11 @@ static int kex_mem_bench_wrapper(OQS_RAND *rand, enum OQS_KEX_alg_name alg_name, OQS_KEX_bob(kex, alice_msg, alice_msg_len, &bob_msg, &bob_msg_len, &bob_key, &bob_key_len); OQS_KEX_alice_1(kex, alice_priv, bob_msg, bob_msg_len, &alice_key, &alice_key_len); - rc = 1; + rc = OQS_SUCCESS; goto cleanup; err: - rc = 0; + rc = OQS_ERROR; cleanup: free(alice_msg); @@ -346,7 +334,7 @@ void print_help() { int main(int argc, char **argv) { - int success = 1; + OQS_STATUS success = OQS_SUCCESS; bool run_all = true; bool quiet = false; bool bench = false; @@ -398,12 +386,12 @@ int main(int argc, char **argv) { if (run_all || kex_testcases[i].run == 1) { success = kex_mem_bench_wrapper(rand, kex_testcases[i].alg_name, kex_testcases[i].seed, kex_testcases[i].seed_len, kex_testcases[i].named_parameters); } - if (success != 1) { + if (success != OQS_SUCCESS) { goto err; } } printf("memory benchmarks done, exiting..\n"); - success = 1; + success = OQS_SUCCESS; goto cleanup; } @@ -412,7 +400,7 @@ int main(int argc, char **argv) { int num_iter = kex_testcases[i].iter; success = kex_test_correctness_wrapper(rand, kex_testcases[i].alg_name, kex_testcases[i].seed, kex_testcases[i].seed_len, kex_testcases[i].named_parameters, num_iter, quiet); } - if (success != 1) { + if (success != OQS_SUCCESS) { goto err; } } @@ -427,15 +415,15 @@ int main(int argc, char **argv) { PRINT_TIMER_FOOTER } - success = 1; + success = OQS_SUCCESS; goto cleanup; err: - success = 0; + success = OQS_ERROR; eprintf("ERROR!\n"); cleanup: OQS_RAND_free(rand); - return (success == 1) ? EXIT_SUCCESS : EXIT_FAILURE; + return (success == OQS_SUCCESS) ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/src/kex_code_mcbits/kex_code_mcbits.c b/src/kex_code_mcbits/kex_code_mcbits.c index 2f0af1dd65ff4..8743d8d6954fd 100644 --- a/src/kex_code_mcbits/kex_code_mcbits.c +++ b/src/kex_code_mcbits/kex_code_mcbits.c @@ -2,7 +2,7 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif @@ -14,7 +14,7 @@ #include "kex_code_mcbits.h" #include "mcbits.h" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -39,9 +39,9 @@ OQS_KEX *OQS_KEX_code_mcbits_new(OQS_RAND *rand) { return k; } -int OQS_KEX_code_mcbits_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_code_mcbits_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret; + OQS_STATUS ret; *alice_priv = NULL; *alice_msg = NULL; @@ -61,11 +61,11 @@ int OQS_KEX_code_mcbits_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t ** oqs_kex_mcbits_gen_keypair(*alice_msg, *alice_priv, k->rand); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*alice_msg); *alice_msg = NULL; free(*alice_priv); @@ -76,9 +76,9 @@ int OQS_KEX_code_mcbits_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t ** return ret; } -int OQS_KEX_code_mcbits_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_code_mcbits_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *bob_msg = NULL; *key = NULL; @@ -100,10 +100,10 @@ int OQS_KEX_code_mcbits_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const s oqs_kex_mcbits_encrypt(*bob_msg, bob_msg_len, *key, 32, alice_msg, k->rand); *key_len = 32; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; free(*key); @@ -113,9 +113,9 @@ int OQS_KEX_code_mcbits_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const s return ret; } -int OQS_KEX_code_mcbits_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_code_mcbits_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *key = NULL; @@ -130,11 +130,11 @@ int OQS_KEX_code_mcbits_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const } oqs_kex_mcbits_decrypt(*key, key_len, bob_msg, CRYPTO_BYTES + 32, alice_priv); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*key); *key = NULL; diff --git a/src/kex_code_mcbits/kex_code_mcbits.h b/src/kex_code_mcbits/kex_code_mcbits.h index d748a03c197ad..17df644a9a93a 100644 --- a/src/kex_code_mcbits/kex_code_mcbits.h +++ b/src/kex_code_mcbits/kex_code_mcbits.h @@ -9,14 +9,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_code_mcbits_new(OQS_RAND *rand); -int OQS_KEX_code_mcbits_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_code_mcbits_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_code_mcbits_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_code_mcbits_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_code_mcbits_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_code_mcbits_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_code_mcbits_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_code_mcbits_free(OQS_KEX *k); diff --git a/src/kex_lwe_frodo/kex_lwe_frodo.c b/src/kex_lwe_frodo/kex_lwe_frodo.c index bfcf24920cfd1..d06ea4761ec44 100644 --- a/src/kex_lwe_frodo/kex_lwe_frodo.c +++ b/src/kex_lwe_frodo/kex_lwe_frodo.c @@ -1,6 +1,6 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif diff --git a/src/kex_lwe_frodo/kex_lwe_frodo.h b/src/kex_lwe_frodo/kex_lwe_frodo.h index cb2742d0edd21..4667d83e35091 100644 --- a/src/kex_lwe_frodo/kex_lwe_frodo.h +++ b/src/kex_lwe_frodo/kex_lwe_frodo.h @@ -9,14 +9,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_lwe_frodo_new_recommended(OQS_RAND *rand, const uint8_t *seed, const size_t seed_len, const char *named_parameters); -int OQS_KEX_lwe_frodo_alice_0_recommended(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_lwe_frodo_bob_recommended(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_lwe_frodo_alice_1_recommended(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_lwe_frodo_alice_0_recommended(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_lwe_frodo_bob_recommended(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_lwe_frodo_alice_1_recommended(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_lwe_frodo_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_lwe_frodo_free(OQS_KEX *k); diff --git a/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c b/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c index 5dcba11820244..3f683c1072860 100644 --- a/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c +++ b/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c @@ -1,4 +1,4 @@ -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -85,9 +85,9 @@ OQS_KEX *MACRIFY(OQS_KEX_lwe_frodo_new)(OQS_RAND *rand, const uint8_t *seed, con return NULL; } -int MACRIFY(OQS_KEX_lwe_frodo_alice_0)(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS MACRIFY(OQS_KEX_lwe_frodo_alice_0)(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret; + OQS_STATUS ret; struct oqs_kex_lwe_frodo_params *params = (struct oqs_kex_lwe_frodo_params *) k->params; @@ -118,7 +118,7 @@ int MACRIFY(OQS_KEX_lwe_frodo_alice_0)(OQS_KEX *k, void **alice_priv, uint8_t ** oqs_kex_lwe_frodo_pack(*alice_msg, PARAMS_REC_PUB_LENGTH, b, PARAMS_N * PARAMS_NBAR, PARAMS_LOG2Q); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: @@ -127,15 +127,15 @@ int MACRIFY(OQS_KEX_lwe_frodo_alice_0)(OQS_KEX *k, void **alice_priv, uint8_t ** *alice_msg = NULL; free(*alice_priv); *alice_priv = NULL; - ret = 0; + ret = OQS_ERROR; cleanup: return ret; } -int MACRIFY(OQS_KEX_lwe_frodo_bob)(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS MACRIFY(OQS_KEX_lwe_frodo_bob)(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; struct oqs_kex_lwe_frodo_params *params = (struct oqs_kex_lwe_frodo_params *) k->params; @@ -196,11 +196,11 @@ int MACRIFY(OQS_KEX_lwe_frodo_bob)(OQS_KEX *k, const uint8_t *alice_msg, const s *bob_msg_len = PARAMS_REC_PUB_LENGTH + PARAMS_REC_HINT_LENGTH; *key_len = PARAMS_KEY_BYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; OQS_MEM_secure_free(*key, PARAMS_KEY_BYTES); @@ -214,9 +214,9 @@ int MACRIFY(OQS_KEX_lwe_frodo_bob)(OQS_KEX *k, const uint8_t *alice_msg, const s return ret; } -int MACRIFY(OQS_KEX_lwe_frodo_alice_1)(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS MACRIFY(OQS_KEX_lwe_frodo_alice_1)(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *key = NULL; /* check length of other party's public key */ @@ -247,11 +247,11 @@ int MACRIFY(OQS_KEX_lwe_frodo_alice_1)(UNUSED OQS_KEX *k, const void *alice_priv *key_len = PARAMS_KEY_BYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; OQS_MEM_secure_free(*key, PARAMS_KEY_BYTES); *key = NULL; diff --git a/src/kex_lwe_frodo/lwe_noise.c b/src/kex_lwe_frodo/lwe_noise.c index 4dc4dc4ce2c28..e2f82eb7f7f28 100644 --- a/src/kex_lwe_frodo/lwe_noise.c +++ b/src/kex_lwe_frodo/lwe_noise.c @@ -11,7 +11,7 @@ #define RECOMMENDED_N_ARRAY_SIZE (752 * 8) #define RECOMMENDED_CDF_TABLE_LEN 6 -#if defined(WINDOWS) +#if defined(_WIN32) // VS complains about arrays initialized with const param. On Windows, // we use directly the recommended value passed down from calling functions. // Currently there is only one set of params, so that works. Need to fix this diff --git a/src/kex_ntru/kex_ntru.c b/src/kex_ntru/kex_ntru.c index b7ea2f0ae1d63..9f741abea8490 100644 --- a/src/kex_ntru/kex_ntru.c +++ b/src/kex_ntru/kex_ntru.c @@ -1,7 +1,7 @@ #ifndef DISABLE_NTRU_ON_WINDOWS_BY_DEFAULT #include -#if defined(WINDOWS) +#if defined(_WIN32) #include #include #else @@ -15,7 +15,7 @@ #include -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -52,7 +52,7 @@ static uint8_t get_entropy_from_dev_urandom(ENTROPY_CMD cmd, uint8_t *out) { } if (cmd == GET_BYTE_OF_ENTROPY) { // TODO: why is this called to get entropy bytes one by one? - if (!OQS_RAND_get_system_entropy(out, 1)) { + if (OQS_RAND_get_system_entropy(out, 1) != OQS_SUCCESS) { return 0; } return 1; @@ -65,9 +65,9 @@ typedef struct OQS_KEX_ntru_alice_priv { uint8_t *priv_key; } OQS_KEX_ntru_alice_priv; -int OQS_KEX_ntru_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_ntru_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret = 0; + OQS_STATUS ret = OQS_ERROR; uint32_t rc; DRBG_HANDLE drbg; OQS_KEX_ntru_alice_priv *ntru_alice_priv = NULL; @@ -78,7 +78,7 @@ int OQS_KEX_ntru_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_m /* initialize NTRU DRBG */ rc = ntru_crypto_drbg_instantiate(256, (uint8_t *) "OQS Alice", strlen("OQS Alice"), (ENTROPY_FN) &get_entropy_from_dev_urandom, &drbg); if (rc != DRBG_OK) - return 0; + return OQS_ERROR; /* allocate private key */ ntru_alice_priv = malloc(sizeof(OQS_KEX_ntru_alice_priv)); @@ -109,11 +109,11 @@ int OQS_KEX_ntru_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_m goto err; *alice_msg_len = (size_t) ntru_alice_msg_len; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; if (ntru_alice_priv != NULL) free(ntru_alice_priv->priv_key); free(ntru_alice_priv); @@ -126,9 +126,9 @@ int OQS_KEX_ntru_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_m return ret; } -int OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; uint32_t rc; DRBG_HANDLE drbg; @@ -138,7 +138,7 @@ int OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_ms /* initialize NTRU DRBG */ rc = ntru_crypto_drbg_instantiate(256, (uint8_t *) "OQS Bob", strlen("OQS Bob"), (ENTROPY_FN) &get_entropy_from_dev_urandom, &drbg); if (rc != DRBG_OK) - return 0; + return OQS_ERROR; /* generate random session key */ *key_len = 256 / 8; @@ -165,11 +165,11 @@ int OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_ms goto err; *bob_msg_len = (size_t) ntru_bob_msg_len; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; free(*key); @@ -180,9 +180,9 @@ int OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_ms return ret; } -int OQS_KEX_ntru_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_ntru_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; uint32_t rc; *key = NULL; @@ -207,11 +207,11 @@ int OQS_KEX_ntru_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_ goto err; *key_len = (size_t) ntru_key_len; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*key); *key = NULL; cleanup: diff --git a/src/kex_ntru/kex_ntru.h b/src/kex_ntru/kex_ntru.h index 517a2085b7d4c..2339d13815bba 100755 --- a/src/kex_ntru/kex_ntru.h +++ b/src/kex_ntru/kex_ntru.h @@ -11,14 +11,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_ntru_new(OQS_RAND *rand); -int OQS_KEX_ntru_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_ntru_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_ntru_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_ntru_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_ntru_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_ntru_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_ntru_free(OQS_KEX *k); diff --git a/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c b/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c index b313500484dd8..18b8288016359 100644 --- a/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c +++ b/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c @@ -1,6 +1,6 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif @@ -14,7 +14,7 @@ #include "rlwe_a.h" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -48,9 +48,9 @@ OQS_KEX *OQS_KEX_rlwe_bcns15_new(OQS_RAND *rand) { return k; } -int OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret; + OQS_STATUS ret; uint32_t *alice_msg_32 = NULL; *alice_priv = NULL; @@ -71,11 +71,11 @@ int OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_m *alice_msg = (uint8_t *) alice_msg_32; *alice_msg_len = 1024 * sizeof(uint32_t); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(alice_msg_32); OQS_MEM_secure_free(*alice_priv, 1024 * sizeof(uint32_t)); *alice_priv = NULL; @@ -84,9 +84,9 @@ int OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_m return ret; } -int OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; uint32_t *bob_priv = NULL; uint64_t *key_64 = NULL; @@ -122,11 +122,11 @@ int OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t a *key = (uint8_t *) key_64; *key_len = 16 * sizeof(uint64_t); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; OQS_MEM_secure_free(key_64, 16 * sizeof(uint64_t)); @@ -137,9 +137,9 @@ int OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t a return ret; } -int OQS_KEX_rlwe_bcns15_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_bcns15_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; uint64_t *key_64 = NULL; @@ -161,11 +161,11 @@ int OQS_KEX_rlwe_bcns15_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_ *key = (uint8_t *) key_64; *key_len = 16 * sizeof(uint64_t); - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; OQS_MEM_secure_free(key_64, 16 * sizeof(uint64_t)); cleanup: diff --git a/src/kex_rlwe_bcns15/kex_rlwe_bcns15.h b/src/kex_rlwe_bcns15/kex_rlwe_bcns15.h index c098da4812bb4..ba9e70c1be041 100644 --- a/src/kex_rlwe_bcns15/kex_rlwe_bcns15.h +++ b/src/kex_rlwe_bcns15/kex_rlwe_bcns15.h @@ -9,14 +9,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_rlwe_bcns15_new(OQS_RAND *rand); -int OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_rlwe_bcns15_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_bcns15_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_rlwe_bcns15_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_bcns15_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_rlwe_bcns15_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_rlwe_bcns15_free(OQS_KEX *k); diff --git a/src/kex_rlwe_bcns15/rlwe.c b/src/kex_rlwe_bcns15/rlwe.c index f6fc5ac4c89ea..51970207c6aef 100644 --- a/src/kex_rlwe_bcns15/rlwe.c +++ b/src/kex_rlwe_bcns15/rlwe.c @@ -8,7 +8,7 @@ * See LICENSE for complete information. */ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4146 4244 4267) #endif diff --git a/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c index f3b26acec00fb..28de31c7bab92 100644 --- a/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c +++ b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c @@ -1,6 +1,6 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif @@ -13,7 +13,7 @@ #include "LatticeCrypto_priv.h" #include "kex_rlwe_msrln16.h" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -42,9 +42,9 @@ OQS_KEX *OQS_KEX_rlwe_msrln16_new(OQS_RAND *rand) { return k; } -int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret; + OQS_STATUS ret; *alice_priv = NULL; /* alice_msg is alice's public key */ @@ -64,11 +64,11 @@ int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_ } *alice_msg_len = OQS_RLWE_MSRLN16_PKA_BYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*alice_msg); *alice_msg = NULL; free(*alice_priv); @@ -78,9 +78,9 @@ int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_ return ret; } -int OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *bob_msg = NULL; *key = NULL; @@ -104,11 +104,11 @@ int OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t *key_len = OQS_RLWE_MSRLN16_SHAREDKEY_BYTES; *bob_msg_len = OQS_RLWE_MSRLN16_PKB_BYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; free(*key); @@ -119,9 +119,9 @@ int OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t return ret; } -int OQS_KEX_rlwe_msrln16_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_msrln16_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *key = NULL; @@ -140,11 +140,11 @@ int OQS_KEX_rlwe_msrln16_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, cons *key_len = OQS_RLWE_MSRLN16_SHAREDKEY_BYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*key); *key = NULL; diff --git a/src/kex_rlwe_msrln16/kex_rlwe_msrln16.h b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.h index ad1ee4f520299..a15bf5182abad 100644 --- a/src/kex_rlwe_msrln16/kex_rlwe_msrln16.h +++ b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.h @@ -9,14 +9,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_rlwe_msrln16_new(OQS_RAND *rand); -int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_rlwe_msrln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_rlwe_msrln16_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_msrln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_rlwe_msrln16_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_rlwe_msrln16_free(OQS_KEX *k); diff --git a/src/kex_rlwe_newhope/avx2/test/speed.c b/src/kex_rlwe_newhope/avx2/test/speed.c index 3b71b3aa3cc87..458e3dd38b60b 100644 --- a/src/kex_rlwe_newhope/avx2/test/speed.c +++ b/src/kex_rlwe_newhope/avx2/test/speed.c @@ -49,7 +49,7 @@ static void print_results(const char *s, unsigned long long *t, size_t tlen) unsigned long long t[NTESTS]; -int main() +int main(void) { poly sk_a; unsigned char key_a[32], key_b[32]; diff --git a/src/kex_rlwe_newhope/avx2/test/test_newhope.c b/src/kex_rlwe_newhope/avx2/test/test_newhope.c index 8660357ceb6ea..5f252e13f395e 100644 --- a/src/kex_rlwe_newhope/avx2/test/test_newhope.c +++ b/src/kex_rlwe_newhope/avx2/test/test_newhope.c @@ -112,7 +112,7 @@ int test_invalid_ciphertext() } -int main(){ +int main(void){ test_keys(); test_invalid_sk_a(); diff --git a/src/kex_rlwe_newhope/avx2/test/test_statistical.c b/src/kex_rlwe_newhope/avx2/test/test_statistical.c index 3bc5a9d970712..e7ed87a5b9c1c 100644 --- a/src/kex_rlwe_newhope/avx2/test/test_statistical.c +++ b/src/kex_rlwe_newhope/avx2/test/test_statistical.c @@ -38,7 +38,7 @@ static int hamming32(const unsigned char *k) return r; } -int main() +int main(void) { poly sk_a; unsigned char key_b[32]; diff --git a/src/kex_rlwe_newhope/kex_rlwe_newhope.c b/src/kex_rlwe_newhope/kex_rlwe_newhope.c index 86dd5d17501ff..02df03585d5d5 100644 --- a/src/kex_rlwe_newhope/kex_rlwe_newhope.c +++ b/src/kex_rlwe_newhope/kex_rlwe_newhope.c @@ -1,6 +1,6 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif @@ -13,7 +13,7 @@ #include "newhope.c" #include "params.h" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -38,9 +38,9 @@ OQS_KEX *OQS_KEX_rlwe_newhope_new(OQS_RAND *rand) { return k; } -int OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret; + OQS_STATUS ret; *alice_priv = NULL; *alice_msg = NULL; @@ -59,11 +59,11 @@ int OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t * keygen(*alice_msg, (poly *) (*alice_priv), k->rand); *alice_msg_len = NEWHOPE_SENDABYTES; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*alice_msg); *alice_msg = NULL; free(*alice_priv); @@ -74,9 +74,9 @@ int OQS_KEX_rlwe_newhope_alice_0(UNUSED OQS_KEX *k, void **alice_priv, uint8_t * return ret; } -int OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *bob_msg = NULL; *key = NULL; @@ -100,11 +100,11 @@ int OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const *bob_msg_len = NEWHOPE_SENDBBYTES; *key_len = 32; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; free(*key); @@ -115,9 +115,9 @@ int OQS_KEX_rlwe_newhope_bob(UNUSED OQS_KEX *k, const uint8_t *alice_msg, const return ret; } -int OQS_KEX_rlwe_newhope_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_rlwe_newhope_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; *key = NULL; @@ -135,11 +135,11 @@ int OQS_KEX_rlwe_newhope_alice_1(UNUSED OQS_KEX *k, const void *alice_priv, cons shareda(*key, (poly *) alice_priv, bob_msg); *key_len = 32; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*key); *key = NULL; diff --git a/src/kex_rlwe_newhope/kex_rlwe_newhope.h b/src/kex_rlwe_newhope/kex_rlwe_newhope.h index ba3d70aebfc5f..9172772caeb09 100644 --- a/src/kex_rlwe_newhope/kex_rlwe_newhope.h +++ b/src/kex_rlwe_newhope/kex_rlwe_newhope.h @@ -9,14 +9,15 @@ #include #include +#include #include #include OQS_KEX *OQS_KEX_rlwe_newhope_new(OQS_RAND *rand); -int OQS_KEX_rlwe_newhope_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_rlwe_newhope_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_rlwe_newhope_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_newhope_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_rlwe_newhope_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_rlwe_newhope_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_rlwe_newhope_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_rlwe_newhope_free(OQS_KEX *k); diff --git a/src/kex_rlwe_newhope/params.h b/src/kex_rlwe_newhope/params.h index 932770e4d093f..47023ccbd60d2 100644 --- a/src/kex_rlwe_newhope/params.h +++ b/src/kex_rlwe_newhope/params.h @@ -21,7 +21,7 @@ extern uint16_t omegas_inv_montgomery[]; extern uint16_t psis_inv_montgomery[]; extern uint16_t psis_bitrev_montgomery[]; -#if defined(WINDOWS) +#if defined(_WIN32) typedef unsigned __int16 uint16_t; #endif diff --git a/src/kex_rlwe_newhope/poly.c b/src/kex_rlwe_newhope/poly.c index ca5014e9618d1..761ccd8d2c646 100644 --- a/src/kex_rlwe_newhope/poly.c +++ b/src/kex_rlwe_newhope/poly.c @@ -4,7 +4,7 @@ typedef struct { uint16_t coeffs[PARAM_N]; -#if defined(WINDOWS) +#if defined(_WIN32) } poly; #else } poly __attribute__((aligned(32))); diff --git a/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c b/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c index bdda6a5875d4a..5a41c52bb9023 100644 --- a/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c +++ b/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c @@ -69,8 +69,8 @@ OQS_KEX *OQS_KEX_sidh_iqc_ref_new(OQS_RAND *rand, const char *named_parameters) return NULL; } -int OQS_KEX_sidh_iqc_ref_alice_0(OQS_KEX *k, void **alice_priv, - uint8_t **alice_msg, size_t *alice_msg_len) { +OQS_STATUS OQS_KEX_sidh_iqc_ref_alice_0(OQS_KEX *k, void **alice_priv, + uint8_t **alice_msg, size_t *alice_msg_len) { public_params_t *params = (public_params_t *) k->params; private_key_t Alice_private_key; @@ -107,13 +107,13 @@ int OQS_KEX_sidh_iqc_ref_alice_0(OQS_KEX *k, void **alice_priv, oqs_sidh_iqc_ref_public_key_clear(Alice_public_key); oqs_sidh_iqc_ref_point_clear(kernel_gen); - return 1; + return OQS_SUCCESS; } -int OQS_KEX_sidh_iqc_ref_bob(OQS_KEX *k, const uint8_t *alice_msg, - UNUSED const size_t alice_msg_len, - uint8_t **bob_msg, size_t *bob_msg_len, - uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_sidh_iqc_ref_bob(OQS_KEX *k, const uint8_t *alice_msg, + UNUSED const size_t alice_msg_len, + uint8_t **bob_msg, size_t *bob_msg_len, + uint8_t **key, size_t *key_len) { public_params_t *params = (public_params_t *) k->params; @@ -163,13 +163,13 @@ int OQS_KEX_sidh_iqc_ref_bob(OQS_KEX *k, const uint8_t *alice_msg, oqs_sidh_iqc_ref_point_clear(kernel_gen); oqs_sidh_iqc_ref_fp2_clear(Bob_shared_key); - return 1; + return OQS_SUCCESS; } -int OQS_KEX_sidh_iqc_ref_alice_1(OQS_KEX *k, const void *alice_priv, - const uint8_t *bob_msg, - UNUSED const size_t bob_msg_len, uint8_t **key, - size_t *key_len) { +OQS_STATUS OQS_KEX_sidh_iqc_ref_alice_1(OQS_KEX *k, const void *alice_priv, + const uint8_t *bob_msg, + UNUSED const size_t bob_msg_len, uint8_t **key, + size_t *key_len) { public_params_t *params = (public_params_t *) k->params; @@ -201,7 +201,7 @@ int OQS_KEX_sidh_iqc_ref_alice_1(OQS_KEX *k, const void *alice_priv, oqs_sidh_iqc_ref_public_key_clear(Bob_public_key); oqs_sidh_iqc_ref_fp2_clear(Alice_shared_key); - return 1; + return OQS_SUCCESS; } void OQS_KEX_sidh_iqc_ref_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) { diff --git a/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h b/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h index a14d2822088f3..c597a99badcd7 100644 --- a/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h +++ b/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.h @@ -9,14 +9,15 @@ extern "C" { #include #include +#include #include #include OQS_KEX *OQS_KEX_sidh_iqc_ref_new(OQS_RAND *rand, const char *named_parameters); -int OQS_KEX_sidh_iqc_ref_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_sidh_iqc_ref_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_sidh_iqc_ref_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_sidh_iqc_ref_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_sidh_iqc_ref_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_sidh_iqc_ref_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_sidh_iqc_ref_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_sidh_iqc_ref_free(OQS_KEX *k); diff --git a/src/kex_sidh_msr/P503/P503_api.h b/src/kex_sidh_msr/P503/P503_api.h index 21162e4ac6ae6..a7caa193e441a 100644 --- a/src/kex_sidh_msr/P503/P503_api.h +++ b/src/kex_sidh_msr/P503/P503_api.h @@ -9,7 +9,7 @@ #include -#if defined(WINDOWS) +#if defined(_WIN32) #include "../windows_undef.h" #endif diff --git a/src/kex_sidh_msr/P751/P751_api.h b/src/kex_sidh_msr/P751/P751_api.h index a56463d1baf2d..65b6c397e660f 100644 --- a/src/kex_sidh_msr/P751/P751_api.h +++ b/src/kex_sidh_msr/P751/P751_api.h @@ -9,7 +9,7 @@ #include -#if defined(WINDOWS) +#if defined(_WIN32) #include "../windows_undef.h" #endif diff --git a/src/kex_sidh_msr/config.h b/src/kex_sidh_msr/config.h index a0c86d13b3bad..8098611da4102 100644 --- a/src/kex_sidh_msr/config.h +++ b/src/kex_sidh_msr/config.h @@ -22,7 +22,7 @@ #define OS_WIN 1 #define OS_LINUX 2 /* -#if defined(__WINDOWS__) // Microsoft Windows OS +#if defined(_WIN32) // Microsoft Windows OS #define OS_TARGET OS_WIN #elif defined(__LINUX__) // Linux OS #define OS_TARGET OS_LINUX diff --git a/src/kex_sidh_msr/kex_sidh_msr.c b/src/kex_sidh_msr/kex_sidh_msr.c index 6756e2d61af42..cd287fcb6039f 100644 --- a/src/kex_sidh_msr/kex_sidh_msr.c +++ b/src/kex_sidh_msr/kex_sidh_msr.c @@ -1,8 +1,8 @@ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4047 4090) #endif -#if defined(WINDOWS) +#if defined(_WIN32) #define UNUSED #else #define UNUSED __attribute__((unused)) @@ -10,7 +10,7 @@ #include #include -#if !defined(WINDOWS) +#if !defined(_WIN32) #include #include #endif @@ -22,7 +22,7 @@ #include "P751/P751_api.h" #include "kex_sidh_msr.h" -#if defined(WINDOWS) +#if defined(_WIN32) #define strdup _strdup // for strdup deprecation warning #endif @@ -141,10 +141,10 @@ OQS_KEX *OQS_KEX_sidh_msr_new(OQS_RAND *rand, const char *named_parameters) { return k; } -int OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { - int ret = 0; +OQS_STATUS OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len) { + OQS_STATUS ret = OQS_ERROR; if (!k || !alice_priv || !alice_msg || !alice_msg_len) { - return 0; + return OQS_ERROR; } *alice_priv = NULL; @@ -172,11 +172,11 @@ int OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, } *alice_msg_len = sidh_ctx->pub_key_len; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*alice_msg); *alice_msg = NULL; free(*alice_priv); @@ -186,13 +186,13 @@ int OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, return ret; } -int OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; uint8_t *bob_priv = NULL; if (!k || !alice_msg || !bob_msg || !bob_msg_len || !key || !key_len) { - return 0; + return OQS_ERROR; } *bob_msg = NULL; @@ -237,11 +237,11 @@ int OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alic } *key_len = sidh_ctx->shared_secret_len; - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*bob_msg); *bob_msg = NULL; free(*key); @@ -253,12 +253,12 @@ int OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alic return ret; } -int OQS_KEX_sidh_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { +OQS_STATUS OQS_KEX_sidh_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) { - int ret; + OQS_STATUS ret; if (!k || !alice_priv || !bob_msg || !key || !key_len) { - return 0; + return OQS_ERROR; } SIDH_CTX *sidh_ctx = (SIDH_CTX *) k->ctx; @@ -287,11 +287,11 @@ int OQS_KEX_sidh_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t * } } - ret = 1; + ret = OQS_SUCCESS; goto cleanup; err: - ret = 0; + ret = OQS_ERROR; free(*key); *key = NULL; diff --git a/src/kex_sidh_msr/kex_sidh_msr.h b/src/kex_sidh_msr/kex_sidh_msr.h index d162a3cbab251..bda602b8736c9 100644 --- a/src/kex_sidh_msr/kex_sidh_msr.h +++ b/src/kex_sidh_msr/kex_sidh_msr.h @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -19,9 +20,9 @@ OQS_KEX *OQS_KEX_sidh_msr_new(OQS_RAND *rand, const char *named_parameters); -int OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_sidh_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_sidh_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); +OQS_STATUS OQS_KEX_sidh_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); +OQS_STATUS OQS_KEX_sidh_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); void OQS_KEX_sidh_msr_alice_priv_free(OQS_KEX *k, void *alice_priv); void OQS_KEX_sidh_msr_free(OQS_KEX *k); diff --git a/src/kex_sidh_msr/kex_sike_msr.h b/src/kex_sidh_msr/kex_sike_msr.h deleted file mode 100644 index d6f57b32ed2ec..0000000000000 --- a/src/kex_sidh_msr/kex_sike_msr.h +++ /dev/null @@ -1,24 +0,0 @@ -/** - * \file kex_sike_msr.h - * \brief Header for SIKE key exchange protocol from the Microsoft SIDH library - */ - -#ifndef __OQS_KEX_SIKE_MSR_H -#define __OQS_KEX_SIKE_MSR_H - -#include -#include - -#include -#include - -OQS_KEX *OQS_KEX_sike_msr_new(OQS_RAND *rand, const char *named_parameters); - -int OQS_KEX_sike_msr_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len); -int OQS_KEX_sike_msr_bob(OQS_KEX *k, const uint8_t *alice_msg, const size_t alice_msg_len, uint8_t **bob_msg, size_t *bob_msg_len, uint8_t **key, size_t *key_len); -int OQS_KEX_sike_msr_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len); - -void OQS_KEX_sike_msr_alice_priv_free(OQS_KEX *k, void *alice_priv); -void OQS_KEX_sike_msr_free(OQS_KEX *k); - -#endif diff --git a/src/kex_sidh_msr/windows_undef.h b/src/kex_sidh_msr/windows_undef.h index ac69b315b43c2..b5ec6825df3c2 100644 --- a/src/kex_sidh_msr/windows_undef.h +++ b/src/kex_sidh_msr/windows_undef.h @@ -3,7 +3,7 @@ * to avoid Visual Studio errors */ -#if defined(WINDOWS) +#if defined(_WIN32) #undef OQS_SIDH_MSR_CRYPTO_SECRETKEYBYTES #undef OQS_SIDH_MSR_CRYPTO_PUBLICKEYBYTES #undef OQS_SIDH_MSR_CRYPTO_BYTES diff --git a/src/sig/minimal_sig_oqs.c b/src/sig/minimal_sig_oqs.c new file mode 100644 index 0000000000000..68d44b83d3a68 --- /dev/null +++ b/src/sig/minimal_sig_oqs.c @@ -0,0 +1,154 @@ +/* + * minimal_sig_oqs.c + * + * Minimal example of a post-quantum signature method implemented in liboqs. + * +*/ +#include +#include + +#include + +/* Cleaning up memory etc */ +void cleanup(uint8_t *msg, size_t msg_len, uint8_t *sig, size_t sig_len, + uint8_t *pub, uint8_t *priv, OQS_SIG *s, OQS_RAND *rnd); + +#ifdef ENABLE_SIG_PICNIC +int main(void) { + uint8_t *priv = NULL; // Private key + uint8_t *pub = NULL; // Public key + uint8_t *msg = NULL; // Message + size_t msg_len = 0; // Message's length + uint8_t *sig = NULL; // Signature + size_t sig_len = 0; // Signature's length + + enum OQS_SIG_algid alg_name = OQS_SIG_picnic_default; // Algorithm name + // Equivalent to OQS_SIG_picnic_L1_FS + + OQS_RAND *rnd = NULL; // Source of randomness + OQS_SIG *s = NULL; // OQS_SIG structure + + /* Setup the source of randomness */ + rnd = OQS_RAND_new(OQS_RAND_alg_urandom_chacha20); + if (rnd == NULL) { + eprintf("ERROR: Setting up the randomness source!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Populate the OQS_SIG structure, here's where liboqs sets up + * the specific details of the selected SIG implementation */ + s = OQS_SIG_new(rnd, alg_name); + if (s == NULL) { + eprintf("ERROR: OQS_SIG_new failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Proceed with the signature generation */ + printf("====================================\n"); + printf("Post-quantum signature: %s\n", s->method_name); + printf("====================================\n"); + + /* Private key memory allocation */ + priv = malloc(s->priv_key_len); + if (priv == NULL) { + eprintf("ERROR: priv malloc failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Public key memory generation */ + pub = malloc(s->pub_key_len); + if (pub == NULL) { + eprintf("ERROR: pub malloc failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Generates the signature key pair */ + int success = OQS_SIG_keygen(s, priv, pub); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_SIG_keygen failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + OQS_print_hex_string("Private key", priv, s->priv_key_len); + OQS_print_hex_string("Public key", pub, s->pub_key_len); + + /* Allocates the memory for the message to sign */ + msg_len = 64; // TODO: randomize based on scheme's max length + msg = malloc(msg_len); + if (msg == NULL) { + eprintf("ERROR: msg malloc failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Generates a random message to sign */ + OQS_RAND_n(rnd, msg, msg_len); + OQS_print_hex_string("Message", msg, msg_len); + + /* Allocates memory for the signature */ + sig_len = s->max_sig_len; + sig = malloc(sig_len); + if (sig == NULL) { + eprintf("ERROR: sig malloc failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Signs the message */ + success = OQS_SIG_sign(s, priv, msg, msg_len, sig, &sig_len); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_SIG_sign failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + if (sig_len > 40) { + // only print the parts of the sig if too long + OQS_print_part_hex_string("Signature", sig, sig_len, 20); + } + + /* Verification */ + success = OQS_SIG_verify(s, pub, msg, msg_len, sig, sig_len); + if (success != OQS_SUCCESS) { + eprintf("ERROR: OQS_SIG_verify failed!\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_FAILURE; + } + + /* Success and clean-up */ + printf("Signature is valid.\n"); + cleanup(msg, msg_len, sig, sig_len, pub, priv, s, rnd); + + return EXIT_SUCCESS; +} +#else // !ENABLE_SIG_PICNIC +int main(void) { + printf("No signature algorithm available. Make sure configure was run properly; see Readme.md.\n"); + return EXIT_FAILURE; +} +#endif + +/* Cleaning up memory etc */ +void cleanup(uint8_t *msg, size_t msg_len, uint8_t *sig, size_t sig_len, + uint8_t *pub, uint8_t *priv, OQS_SIG *s, OQS_RAND *rnd) { + OQS_MEM_secure_free(msg, msg_len); + OQS_MEM_secure_free(sig, sig_len); + OQS_MEM_secure_free(pub, s->pub_key_len); + OQS_MEM_secure_free(priv, s->priv_key_len); + OQS_SIG_free(s); + OQS_RAND_free(rnd); +} diff --git a/src/sig/sig.c b/src/sig/sig.c index bc6d49cb10911..003d3e747d009 100644 --- a/src/sig/sig.c +++ b/src/sig/sig.c @@ -1,4 +1,5 @@ #include + #include #include #ifdef ENABLE_SIG_PICNIC @@ -39,7 +40,7 @@ OQS_SIG *OQS_SIG_new(OQS_RAND *rand, enum OQS_SIG_algid algid) { return s; } -int OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { +OQS_STATUS OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { if (s == NULL) { return OQS_ERROR; } else { @@ -47,7 +48,7 @@ int OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { } } -int OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) { +OQS_STATUS OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) { if (s == NULL) { return OQS_ERROR; } else { @@ -55,7 +56,7 @@ int OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, cons } } -int OQS_SIG_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) { +OQS_STATUS OQS_SIG_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) { if (s == NULL) { return OQS_ERROR; } else { diff --git a/src/sig/sig.h b/src/sig/sig.h index 60d9199dc3e9f..ebff472073ecc 100644 --- a/src/sig/sig.h +++ b/src/sig/sig.h @@ -8,8 +8,16 @@ #include #include + +#include #include +#if defined(_WIN32) +#include +#else +#include +#endif + /** * Supported signature algorithms. * Note: the Picnic algs are not wrapped with a ENABLE_SIG_PICNIC @@ -83,7 +91,8 @@ struct OQS_SIG { * @param pub The signer's public key. * @return OQS_SUCCESS on success, or OQS_ERROR on failure. */ - int (*keygen)(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); + OQS_STATUS(*keygen) + (const OQS_SIG *s, uint8_t *priv, uint8_t *pub); /** * Pointer to a function for signature generation. @@ -96,7 +105,8 @@ struct OQS_SIG { * @param sig_len In: length of sig, out: length of the generated signature. * @return OQS_SUCCESS on success, or OQS_ERROR on failure. */ - int (*sign)(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); + OQS_STATUS(*sign) + (const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); /** * Pointer to a function for signature verification. @@ -107,9 +117,10 @@ struct OQS_SIG { * @param msg_len Length of the signed message. * @param sig The signature to verify. * @param sig_len Length of the signature to verify. - @return OQS_SUCCESS on success, or OQS_ERROR on failure. + * @return OQS_SUCCESS on success, or OQS_ERROR on failure. */ - int (*verify)(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); + OQS_STATUS(*verify) + (const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); }; /** @@ -130,7 +141,7 @@ OQS_SIG *OQS_SIG_new(OQS_RAND *rand, enum OQS_SIG_algid algid); * must have allocated s->pub_key_len bytes. * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ -int OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); +OQS_STATUS OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); /** * Generates a new signature. @@ -142,7 +153,7 @@ int OQS_SIG_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); * @param sig_len Pointer to the length of the generated signature. * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ -int OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); +OQS_STATUS OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); /** * Verifies a signature. @@ -154,7 +165,7 @@ int OQS_SIG_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, cons * @param sig_len Length of the signature. * @return OQS_SUCCESS on success, or OQS_ERROR on failure */ -int OQS_SIG_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); +OQS_STATUS OQS_SIG_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); /** * Frees the signature object, de-initializing the underlying library code. diff --git a/src/sig/test_sig.c b/src/sig/test_sig.c index 1ba9bf822f770..c552ffd39de4f 100644 --- a/src/sig/test_sig.c +++ b/src/sig/test_sig.c @@ -1,4 +1,4 @@ -#if defined(WINDOWS) +#if defined(_WIN32) #pragma warning(disable : 4244 4293) #endif @@ -7,12 +7,9 @@ #include #include -#include -#include -#include +#include #include "../ds_benchmark.h" -#include "../common/common.h" // TODO: add signature size to benchmark @@ -38,31 +35,9 @@ struct sig_testcase sig_testcases[] = { #define SIG_TEST_ITERATIONS 100 #define SIG_BENCH_SECONDS 1 -#define PRINT_HEX_STRING(label, str, len) \ - { \ - printf("%-20s (%4zu bytes): ", (label), (size_t)(len)); \ - for (size_t i = 0; i < (len); i++) { \ - printf("%02X", ((unsigned char *) (str))[i]); \ - } \ - printf("\n"); \ - } - -#define PRINT_PARTIAL_HEX_STRING(label, str, len, sublen) \ - { \ - printf("%-20s (%4zu bytes): ", (label), (size_t)(len)); \ - for (size_t i = 0; i < (sublen); i++) { \ - printf("%02X", ((unsigned char *) (str))[i]); \ - } \ - printf("..."); \ - for (size_t i = 0; i < (sublen); i++) { \ - printf("%02X", ((unsigned char *) (str))[len - sublen + i]); \ - } \ - printf("\n"); \ - } - -static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const int print) { +static OQS_STATUS sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const int print) { - int rc; + OQS_STATUS rc; uint8_t *priv = NULL; uint8_t *pub = NULL; @@ -97,14 +72,14 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const } rc = OQS_SIG_keygen(s, priv, pub); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("OQS_SIG_keygen failed\n"); goto err; } if (print) { - PRINT_HEX_STRING("Private key", priv, s->priv_key_len) - PRINT_HEX_STRING("Public key", pub, s->pub_key_len) + OQS_print_hex_string("Private key", priv, s->priv_key_len); + OQS_print_hex_string("Public key", pub, s->pub_key_len); } /* Generate message to sign */ @@ -116,7 +91,7 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const } OQS_RAND_n(rand, msg, msg_len); if (print) { - PRINT_HEX_STRING("Message", msg, msg_len) + OQS_print_hex_string("Message", msg, msg_len); } /* Signature */ @@ -128,7 +103,7 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const } rc = OQS_SIG_sign(s, priv, msg, msg_len, sig, &sig_len); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("OQS_SIG_sign failed\n"); goto err; } @@ -136,13 +111,13 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const if (print) { if (sig_len > 40) { // only print the parts of the sig if too long - PRINT_PARTIAL_HEX_STRING("Signature", sig, sig_len, 20); + OQS_print_part_hex_string("Signature", sig, sig_len, 20); } } /* Verification */ rc = OQS_SIG_verify(s, pub, msg, msg_len, sig, sig_len); - if (rc != 1) { + if (rc != OQS_SUCCESS) { eprintf("ERROR: OQS_SIG_verify failed\n"); goto err; } @@ -152,11 +127,11 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const printf("\n\n"); } - rc = 1; + rc = OQS_SUCCESS; goto cleanup; err: - rc = 0; + rc = OQS_ERROR; cleanup: if (msg != NULL) { @@ -178,29 +153,29 @@ static int sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const return rc; } -UNUSED static int sig_test_correctness_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, int iterations, bool quiet) { - int ret; +UNUSED static OQS_STATUS sig_test_correctness_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, int iterations, bool quiet) { + OQS_STATUS ret; ret = sig_test_correctness(rand, algid, !quiet); - if (ret != 1) { + if (ret != OQS_SUCCESS) { goto err; } printf("Testing correctness and randomness of signature for %d iterations\n", iterations); for (int i = 0; i < iterations; i++) { ret = sig_test_correctness(rand, algid, 0); - if (ret != 1) { + if (ret != OQS_SUCCESS) { goto err; } } printf("All signatures were valid.\n"); printf("\n\n"); - return 1; + return OQS_SUCCESS; err: return ret; } -UNUSED static int sig_bench_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, const int seconds) { - int rc; +UNUSED static OQS_STATUS sig_bench_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, const int seconds) { + OQS_STATUS rc; uint8_t *priv = NULL; uint8_t *pub = NULL; @@ -252,11 +227,11 @@ UNUSED static int sig_bench_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, co OQS_SIG_sign(s, priv, msg, msg_len, sig, &sig_len); TIME_OPERATION_SECONDS({ OQS_SIG_verify(s, pub, msg, msg_len, sig, sig_len); }, "verify", seconds); - rc = 1; + rc = OQS_SUCCESS; goto cleanup; err: - rc = 0; + rc = OQS_ERROR; cleanup: free(priv); @@ -270,7 +245,7 @@ UNUSED static int sig_bench_wrapper(OQS_RAND *rand, enum OQS_SIG_algid algid, co #ifdef ENABLE_SIG_PICNIC int main(int argc, char **argv) { - int success = 1; + OQS_STATUS success = OQS_SUCCESS; bool run_all = true; bool quiet = false; bool bench = false; @@ -317,7 +292,7 @@ int main(int argc, char **argv) { int num_iter = sig_testcases[i].iter; success = sig_test_correctness_wrapper(rand, sig_testcases[i].algid, num_iter, quiet); } - if (success != 1) { + if (success != OQS_SUCCESS) { goto err; } } @@ -332,22 +307,22 @@ int main(int argc, char **argv) { PRINT_TIMER_FOOTER } - success = 1; + success = OQS_SUCCESS; goto cleanup; err: - success = 0; + success = OQS_ERROR; eprintf("ERROR!\n"); cleanup: if (rand) { OQS_RAND_free(rand); } - return (success == 1) ? EXIT_SUCCESS : EXIT_FAILURE; + return (success == OQS_SUCCESS) ? EXIT_SUCCESS : EXIT_FAILURE; } #else // !ENABLE_SIG_PICNIC -int main() { +int main(void) { printf("No signature algorithm available. Make sure configure was run properly; see Readme.md.\n"); - return 0; + return EXIT_FAILURE; } #endif diff --git a/src/sig_picnic/external/cmake/check-simd.c b/src/sig_picnic/external/cmake/check-simd.c index bfca04470687c..0a97d43f05016 100644 --- a/src/sig_picnic/external/cmake/check-simd.c +++ b/src/sig_picnic/external/cmake/check-simd.c @@ -39,6 +39,6 @@ void test(void) { } #endif -int main() { +int main(void) { test(); } diff --git a/src/sig_picnic/external/tests/api_test.c b/src/sig_picnic/external/tests/api_test.c index 5de58d9abe371..a0502f0a4a1d9 100644 --- a/src/sig_picnic/external/tests/api_test.c +++ b/src/sig_picnic/external/tests/api_test.c @@ -3,7 +3,7 @@ #include #include -int main() { +int main(void) { unsigned char pk[CRYPTO_PUBLICKEYBYTES] = {0}; unsigned char sk[CRYPTO_SECRETKEYBYTES] = {0}; const unsigned char message[50] = {0}; diff --git a/src/sig_picnic/external/tests/bitstream_test.c b/src/sig_picnic/external/tests/bitstream_test.c index 7bc11e4823f9b..dd890eef66991 100644 --- a/src/sig_picnic/external/tests/bitstream_test.c +++ b/src/sig_picnic/external/tests/bitstream_test.c @@ -131,7 +131,7 @@ static int test_multiple_30(void) { return ret; } -int main() { +int main(void) { int ret = 0; int tmp = simple_test(); diff --git a/src/sig_picnic/external/tests/extended_picnic_test.c b/src/sig_picnic/external/tests/extended_picnic_test.c index a7e614e7f4529..e952d1e2c1e40 100644 --- a/src/sig_picnic/external/tests/extended_picnic_test.c +++ b/src/sig_picnic/external/tests/extended_picnic_test.c @@ -76,7 +76,7 @@ static int picnic_test_with_read_write(picnic_params_t parameters) { return 0; } -int main() { +int main(void) { int ret = 0; for (picnic_params_t params = 1; params < PARAMETER_SET_MAX_INDEX; params++) { if (picnic_test_with_read_write(params)) { diff --git a/src/sig_picnic/external/tests/hmac_sha256_test.c b/src/sig_picnic/external/tests/hmac_sha256_test.c index cdb9f174ee88d..9af667c2bae22 100644 --- a/src/sig_picnic/external/tests/hmac_sha256_test.c +++ b/src/sig_picnic/external/tests/hmac_sha256_test.c @@ -1,6 +1,6 @@ #include "../randomness.h" -int main() { +int main(void) { unsigned int ret_val = 0; unsigned char dst[32]; diff --git a/src/sig_picnic/external/tests/hmac_sha384_test.c b/src/sig_picnic/external/tests/hmac_sha384_test.c index 093fd54827ac0..667557f052947 100644 --- a/src/sig_picnic/external/tests/hmac_sha384_test.c +++ b/src/sig_picnic/external/tests/hmac_sha384_test.c @@ -1,6 +1,6 @@ #include "../randomness.h" -int main() { +int main(void) { unsigned int ret_val = 0; unsigned char dst[48]; diff --git a/src/sig_picnic/external/tests/hmac_sha512_test.c b/src/sig_picnic/external/tests/hmac_sha512_test.c index 57ad3caf85076..4290ae595aab3 100644 --- a/src/sig_picnic/external/tests/hmac_sha512_test.c +++ b/src/sig_picnic/external/tests/hmac_sha512_test.c @@ -1,6 +1,6 @@ #include "../randomness.h" -int main() { +int main(void) { unsigned int ret_val = 0; unsigned char dst[64]; diff --git a/src/sig_picnic/external/tests/kdf_shake256_test.c b/src/sig_picnic/external/tests/kdf_shake256_test.c index 0e1077194b051..c5494cbc9b80a 100644 --- a/src/sig_picnic/external/tests/kdf_shake256_test.c +++ b/src/sig_picnic/external/tests/kdf_shake256_test.c @@ -1,6 +1,6 @@ #include "../kdf_shake.h" -int main() { +int main(void) { const uint8_t key[] = {0xab, 0xcd}; kdf_shake_t ctx; diff --git a/src/sig_picnic/external/tests/lowmc_test.c b/src/sig_picnic/external/tests/lowmc_test.c index 0288c5dbd85d3..3fed6db2f6955 100644 --- a/src/sig_picnic/external/tests/lowmc_test.c +++ b/src/sig_picnic/external/tests/lowmc_test.c @@ -148,7 +148,7 @@ static const struct { static const size_t num_tests = sizeof(tests) / sizeof(tests[0]); -int main() { +int main(void) { int ret = 0; for (size_t s = 0; s < num_str_tests; ++s) { const int t = lowmc_enc_str(str_tests[s].param, str_tests[s].key, str_tests[s].plaintext, diff --git a/src/sig_picnic/external/tests/mpc_test.c b/src/sig_picnic/external/tests/mpc_test.c index de06da3ca78d6..4a8e660f43798 100644 --- a/src/sig_picnic/external/tests/mpc_test.c +++ b/src/sig_picnic/external/tests/mpc_test.c @@ -86,7 +86,7 @@ void run_tests(void) { test_mpc_add(); } -int main() { +int main(void) { run_tests(); return 0; diff --git a/src/sig_picnic/external/tests/mzd_test.c b/src/sig_picnic/external/tests/mzd_test.c index 264edde9e05cf..7f51ac47db738 100644 --- a/src/sig_picnic/external/tests/mzd_test.c +++ b/src/sig_picnic/external/tests/mzd_test.c @@ -429,7 +429,7 @@ static void test_mzd_shift(void) { #endif } -int main() { +int main(void) { test_mzd_local_equal(); test_mzd_mul(); test_mzd_mul_avx(); diff --git a/src/sig_picnic/external/tests/picnic_test.c b/src/sig_picnic/external/tests/picnic_test.c index 7c8a099f024a1..b86a899998255 100644 --- a/src/sig_picnic/external/tests/picnic_test.c +++ b/src/sig_picnic/external/tests/picnic_test.c @@ -58,7 +58,7 @@ static int picnic_sign_verify(const picnic_params_t param) { return ret; } -int main() { +int main(void) { int ret = 0; for (unsigned int param = Picnic_L1_FS; param < PARAMETER_SET_MAX_INDEX; ++param) { printf("testing: %d ... ", param); diff --git a/src/sig_picnic/external/tools/example.c b/src/sig_picnic/external/tools/example.c index 089be8e477263..cbb3019b1c8ff 100644 --- a/src/sig_picnic/external/tools/example.c +++ b/src/sig_picnic/external/tools/example.c @@ -127,7 +127,7 @@ int picnicExample(picnic_params_t parameters) { return 0; } -int main() { +int main(void) { for (picnic_params_t params = 1; params < PARAMETER_SET_MAX_INDEX; params++) { picnicExample(params); } diff --git a/src/sig_picnic/sig_picnic.c b/src/sig_picnic/sig_picnic.c index 89f8421e4a33b..79a58d7c5e769 100644 --- a/src/sig_picnic/sig_picnic.c +++ b/src/sig_picnic/sig_picnic.c @@ -1,11 +1,12 @@ +#include + #ifdef ENABLE_SIG_PICNIC #include #include -#include #include #include "sig_picnic.h" -#include "picnic.h" +#include "external/picnic.h" static char *Picnic_L1_FS_name = "Picnic_L1_FS"; static char *Picnic_L1_UR_name = "Picnic_L1_UR"; @@ -42,7 +43,7 @@ typedef struct PICNIC_CTX { picnic_params_t params; } PICNIC_CTX; -int OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) { +OQS_STATUS OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) { if (s == NULL) { return OQS_ERROR; } @@ -98,9 +99,9 @@ int OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) { } // set the ctx, sizes, and API functions s->ctx = pctx; - s->priv_key_len = PRIV_KEY_LEN[pctx->params] + PUB_KEY_LEN[pctx->params]; // priv key also contains pub key - s->pub_key_len = PUB_KEY_LEN[pctx->params]; - s->max_sig_len = SIG_LEN[pctx->params]; + s->priv_key_len = (uint16_t)(PRIV_KEY_LEN[pctx->params] + PUB_KEY_LEN[pctx->params]); // priv key also contains pub key + s->pub_key_len = (uint16_t) PUB_KEY_LEN[pctx->params]; + s->max_sig_len = (uint32_t) SIG_LEN[pctx->params]; s->keygen = &OQS_SIG_picnic_keygen; s->sign = &OQS_SIG_picnic_sign; s->verify = &OQS_SIG_picnic_verify; @@ -108,7 +109,7 @@ int OQS_SIG_picnic_get(OQS_SIG *s, enum OQS_SIG_algid algid) { return OQS_SUCCESS; } -int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { +OQS_STATUS OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { if (s == NULL || priv == NULL || pub == NULL) { return OQS_ERROR; } @@ -116,7 +117,7 @@ int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { picnic_privatekey_t sk; picnic_params_t parameters = ((PICNIC_CTX *) s->ctx)->params; int ret = picnic_keygen(parameters, &pk, &sk); - if (ret != 0) { + if (ret != 0) { // DO NOT modify this return code to OQS_SUCCESS/OQS_ERROR return OQS_ERROR; } // serialize the public key @@ -135,7 +136,7 @@ int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub) { return OQS_SUCCESS; } -int OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) { +OQS_STATUS OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len) { if (s == NULL || priv == NULL || msg == NULL || sig == NULL || sig_len == NULL) { return OQS_ERROR; } @@ -151,7 +152,7 @@ int OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *ms return OQS_SUCCESS; } -int OQS_SIG_picnic_verify(UNUSED const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) { +OQS_STATUS OQS_SIG_picnic_verify(UNUSED const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len) { if (pub == NULL || msg == NULL || sig == NULL) { return OQS_ERROR; } diff --git a/src/sig_picnic/sig_picnic.h b/src/sig_picnic/sig_picnic.h index 8ffa5fd2c0113..a1701aee9e16e 100644 --- a/src/sig_picnic/sig_picnic.h +++ b/src/sig_picnic/sig_picnic.h @@ -5,16 +5,17 @@ #ifndef __OQS_SIG_PICNIC_H #define __OQS_SIG_PICNIC_H +#include + #ifdef ENABLE_SIG_PICNIC #include #include - -#include +#include #include -int OQS_SIG_picnic_get(OQS_SIG *sig, enum OQS_SIG_algid algid); -int OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); -int OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); -int OQS_SIG_picnic_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); +OQS_STATUS OQS_SIG_picnic_get(OQS_SIG *sig, enum OQS_SIG_algid algid); +OQS_STATUS OQS_SIG_picnic_keygen(const OQS_SIG *s, uint8_t *priv, uint8_t *pub); +OQS_STATUS OQS_SIG_picnic_sign(const OQS_SIG *s, const uint8_t *priv, const uint8_t *msg, const size_t msg_len, uint8_t *sig, size_t *sig_len); +OQS_STATUS OQS_SIG_picnic_verify(const OQS_SIG *s, const uint8_t *pub, const uint8_t *msg, const size_t msg_len, const uint8_t *sig, const size_t sig_len); #endif #endif From 32c4b1f27fc6947ae8ed1da2851089b09619e1f2 Mon Sep 17 00:00:00 2001 From: Christian Paquin Date: Mon, 5 Feb 2018 16:27:50 -0500 Subject: [PATCH 2/2] Updated OQS functions to use return value OQS_SUCCESS. --- crypto/oqs/oqs_sig.c | 6 +++--- ssl/s3_clnt.c | 4 ++-- ssl/s3_srvr.c | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crypto/oqs/oqs_sig.c b/crypto/oqs/oqs_sig.c index 6020bddf71645..25d33ecadb77d 100644 --- a/crypto/oqs/oqs_sig.c +++ b/crypto/oqs/oqs_sig.c @@ -124,7 +124,7 @@ int pkey_oqs_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, return 0; } - if (OQS_SIG_sign(oqs_ctx->s, oqs_ctx->sk, tbs, tbslen, sig, siglen) != 1) { + if (OQS_SIG_sign(oqs_ctx->s, oqs_ctx->sk, tbs, tbslen, sig, siglen) != OQS_SUCCESS) { OQSerr(0, ERR_R_FATAL); return 0; } @@ -142,7 +142,7 @@ int pkey_oqs_verify(EVP_PKEY_CTX *ctx, return 0; } - if (OQS_SIG_verify(oqs_ctx->s, oqs_ctx->pk, tbs, tbslen, sig, siglen) != 1) { + if (OQS_SIG_verify(oqs_ctx->s, oqs_ctx->pk, tbs, tbslen, sig, siglen) != OQS_SUCCESS) { OQSerr(0, ERR_R_FATAL); return 0; } @@ -219,7 +219,7 @@ int pkey_oqs_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) if (!oqs_ctx || !oqs_ctx->s || !oqs_ctx->sk || !oqs_ctx->pk ) { goto err; } - if (OQS_SIG_keygen(oqs_ctx->s, oqs_ctx->sk, oqs_ctx->pk) != 1) { + if (OQS_SIG_keygen(oqs_ctx->s, oqs_ctx->sk, oqs_ctx->pk) != OQS_SUCCESS) { goto err; } diff --git a/ssl/s3_clnt.c b/ssl/s3_clnt.c index 1d5b9b905098b..68c8358bc4fe3 100644 --- a/ssl/s3_clnt.c +++ b/ssl/s3_clnt.c @@ -3145,7 +3145,7 @@ int ssl3_send_client_key_exchange(SSL *s) */ } - if (OQS_KEX_bob(oqskex_kex, srvr_oqskex_msg, srvr_oqskex_msg_len, &clnt_oqskex_msg, &clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != 1) { + if (OQS_KEX_bob(oqskex_kex, srvr_oqskex_msg, srvr_oqskex_msg_len, &clnt_oqskex_msg, &clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } @@ -3307,7 +3307,7 @@ int ssl3_send_client_key_exchange(SSL *s) */ } - if (OQS_KEX_bob(oqskex_kex, srvr_oqskex_msg, srvr_oqskex_msg_len, &clnt_oqskex_msg, &clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != 1) { + if (OQS_KEX_bob(oqskex_kex, srvr_oqskex_msg, srvr_oqskex_msg_len, &clnt_oqskex_msg, &clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } diff --git a/ssl/s3_srvr.c b/ssl/s3_srvr.c index ae795fab8d786..7838600b4d427 100644 --- a/ssl/s3_srvr.c +++ b/ssl/s3_srvr.c @@ -1922,7 +1922,7 @@ int ssl3_send_server_key_exchange(SSL *s) - if (OQS_KEX_alice_0(s->s3->tmp.oqskex_kex, &(s->s3->tmp.oqskex_priv), &oqskex_srvr_msg, &oqskex_srvr_msg_len) != 1) { + if (OQS_KEX_alice_0(s->s3->tmp.oqskex_kex, &(s->s3->tmp.oqskex_priv), &oqskex_srvr_msg, &oqskex_srvr_msg_len) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR); goto err; } @@ -2003,7 +2003,7 @@ int ssl3_send_server_key_exchange(SSL *s) - if (OQS_KEX_alice_0(s->s3->tmp.oqskex_kex, &(s->s3->tmp.oqskex_priv), &oqskex_srvr_msg, &oqskex_srvr_msg_len) != 1) { + if (OQS_KEX_alice_0(s->s3->tmp.oqskex_kex, &(s->s3->tmp.oqskex_priv), &oqskex_srvr_msg, &oqskex_srvr_msg_len) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR); goto err; } @@ -3027,7 +3027,7 @@ int ssl3_get_client_key_exchange(SSL *s) #ifndef OPENSSL_NO_HYBRID_OQSKEX_ECDHE if ((alg_k & SSL_kOQSKEX_GENERIC) || (alg_k & SSL_kOQSKEX_RLWE_BCNS15) || (alg_k & SSL_kOQSKEX_RLWE_NEWHOPE) || (alg_k & SSL_kOQSKEX_RLWE_MSRLN16) || (alg_k & SSL_kOQSKEX_LWE_FRODO_RECOMMENDED) || (alg_k & SSL_kOQSKEX_SIDH_MSR) || (alg_k & SSL_kOQSKEX_SIDH_IQC_REF) || (alg_k & SSL_kOQSKEX_CODE_MCBITS) || (alg_k & SSL_kOQSKEX_NTRU) /*|| (alg_k & SSL_kOQSKEX_MLWE_KYBER)*/) { - if (OQS_KEX_alice_1(s->s3->tmp.oqskex_kex, s->s3->tmp.oqskex_priv, clnt_oqskex_msg, clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != 1) { + if (OQS_KEX_alice_1(s->s3->tmp.oqskex_kex, s->s3->tmp.oqskex_priv, clnt_oqskex_msg, clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; } @@ -3080,7 +3080,7 @@ int ssl3_get_client_key_exchange(SSL *s) memcpy(clnt_oqskex_msg, p, clnt_oqskex_msg_len); p += clnt_oqskex_msg_len; - if (OQS_KEX_alice_1(s->s3->tmp.oqskex_kex, s->s3->tmp.oqskex_priv, clnt_oqskex_msg, clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != 1) { + if (OQS_KEX_alice_1(s->s3->tmp.oqskex_kex, s->s3->tmp.oqskex_priv, clnt_oqskex_msg, clnt_oqskex_msg_len, &pprime_oqskex, &nprime_oqskex) != OQS_SUCCESS) { SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); goto err; }