diff --git a/.travis-tests.sh b/.travis-tests.sh index 6d8763e50..a3d0ca748 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 b80721123..3940a76af 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/Makefile.am b/Makefile.am index 792a0c96a..47fe49fdd 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 \ @@ -197,6 +198,7 @@ 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 diff --git a/VisualStudio/oqs/oqs.vcxproj b/VisualStudio/oqs/oqs.vcxproj index 3cc302fd0..b59ba593b 100644 --- a/VisualStudio/oqs/oqs.vcxproj +++ b/VisualStudio/oqs/oqs.vcxproj @@ -35,6 +35,7 @@ + @@ -236,6 +237,7 @@ mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -276,6 +278,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -316,6 +319,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -361,6 +365,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -407,6 +412,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -451,6 +457,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -495,6 +502,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" @@ -544,6 +552,7 @@ msbuild /t:Rebuild /p:Configuration=Release "$(SolutionDir)..\src\sig_picnic\ex mkdir "$(SolutionDir)include\oqs" del /Q "$(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\" diff --git a/VisualStudio/oqs/oqs.vcxproj.filters b/VisualStudio/oqs/oqs.vcxproj.filters index 63d800ece..1b7b27c2d 100644 --- a/VisualStudio/oqs/oqs.vcxproj.filters +++ b/VisualStudio/oqs/oqs.vcxproj.filters @@ -185,6 +185,8 @@ Sig_Picnic + + Common diff --git a/VisualStudio/test_rand/test_rand.vcxproj b/VisualStudio/test_rand/test_rand.vcxproj index 25701fdc6..0027f86c4 100644 --- a/VisualStudio/test_rand/test_rand.vcxproj +++ b/VisualStudio/test_rand/test_rand.vcxproj @@ -164,7 +164,7 @@ Level3 Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);WINDOWS true $(SolutionDir)include MultiThreadedDebug @@ -183,7 +183,7 @@ Level3 Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);WINDOWS true $(SolutionDir)include MultiThreadedDebugDLL @@ -193,7 +193,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) @@ -202,7 +202,7 @@ Level3 Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions); WINDOWS true $(SolutionDir)include MultiThreadedDebug @@ -222,18 +222,18 @@ Level3 Disabled - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions); WINDOWS true $(SolutionDir)include MultiThreadedDebugDLL - true + true 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) @@ -244,7 +244,7 @@ MaxSpeed true true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);WINDOWS true $(SolutionDir)include MultiThreaded @@ -267,7 +267,7 @@ MaxSpeed true true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);WINDOWS true $(SolutionDir)include MultiThreadedDLL @@ -279,7 +279,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) @@ -290,7 +290,7 @@ MaxSpeed true true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions); WINDOWS true $(SolutionDir)include MultiThreaded @@ -314,11 +314,11 @@ MaxSpeed true true - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions); WINDOWS true $(SolutionDir)include MultiThreadedDLL - true + true Console @@ -327,7 +327,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/patches/kex_rlwe_newhope_avx2/patch0.patch b/patches/kex_rlwe_newhope_avx2/patch0.patch index d9ded3421..32c9e5fe3 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 420aae263..7b3219cfd 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -1,5 +1,7 @@ #include +#include +#include #include #if defined(WINDOWS) @@ -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, 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, 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 094d2002c..f2a1d7ebe 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -1,10 +1,18 @@ #ifndef __OQS_COMMON_H #define __OQS_COMMON_H +#include #include -#define OQS_SUCCESS 1 -#define OQS_ERROR 0 +typedef int OQS_STATUS; +#define OQS_SUCCESS 0 +#define OQS_ERROR -1 + +/* Displays hexadecimal strings */ +void OQS_print_hex_string(const char *label, uint8_t *str, size_t len); + +/* Partially displays hexadecimal strings */ +void OQS_print_part_hex_string(const char *label, 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); diff --git a/src/common/oqs.h b/src/common/oqs.h new file mode 100644 index 000000000..46933fcc3 --- /dev/null +++ b/src/common/oqs.h @@ -0,0 +1,15 @@ +#ifndef __OQS_H +#define __OQS_H + +#include +#include +#include +#include +#include +#include + +#if !defined(WINDOWS) +#include +#endif + +#endif diff --git a/src/crypto/aes/test_aes.c b/src/crypto/aes/test_aes.c index 62db255bf..642fad24e 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 4dfc188f1..ca058936c 100644 --- a/src/crypto/rand/rand.c +++ b/src/crypto/rand/rand.c @@ -10,6 +10,7 @@ #include #endif +#include #include #include #include @@ -143,8 +144,8 @@ 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) int fd = 0; @@ -170,7 +171,7 @@ int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n) { goto err; } #endif - result = 1; + result = OQS_SUCCESS; err: #if !defined(WINDOWS) diff --git a/src/crypto/rand/rand.h b/src/crypto/rand/rand.h index 710e44927..c5f5b4355 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 253a8e8ba..71814e037 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 a10c41baf..68d980ef2 100644 --- a/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c +++ b/src/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -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 6dbfcfaeb..0d1b4402f 100644 --- a/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c +++ b/src/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c @@ -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/kex/kex.c b/src/kex/kex.c index 46ac46618..54d3a90f5 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 6f11ae560..69d0a0e61 100644 --- a/src/kex/kex.h +++ b/src/kex/kex.h @@ -9,6 +9,7 @@ #include #include +#include #include #if !defined(WINDOWS) @@ -92,9 +93,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 +108,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 +122,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 +158,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 index 960cecd24..9959192ef 100644 --- a/src/kex/minimal_kex_oqs.c +++ b/src/kex/minimal_kex_oqs.c @@ -9,16 +9,7 @@ #include #include -#include -#include -#include - -/* Displays hexadecimal strings */ -void disp_hex_string(const char *label, uint8_t *str, size_t len); - -/* Partially displays hexadecimal strings */ -void disp_part_hex_string(const char *label, uint8_t *str, size_t len, - size_t sub_len); +#include /* Cleaning up memory etc */ void cleanup(uint8_t *alice_msg, size_t alice_msg_len, uint8_t *alice_key, @@ -83,7 +74,7 @@ int main(void) { return EXIT_FAILURE; } - disp_part_hex_string("Alice message", alice_msg, alice_msg_len, 20); + 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, @@ -96,8 +87,8 @@ int main(void) { return EXIT_FAILURE; } - disp_part_hex_string("Bob message", bob_msg, bob_msg_len, 20); - disp_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 */ success = OQS_KEX_alice_1(kex, alice_priv, bob_msg, bob_msg_len, &alice_key, @@ -110,7 +101,7 @@ int main(void) { return EXIT_FAILURE; } - disp_hex_string("Alice session key", alice_key, alice_key_len); + OQS_print_hex_string("Alice session key", alice_key, alice_key_len); /* Compare key lengths */ if (alice_key_len != bob_key_len) { @@ -128,8 +119,8 @@ int main(void) { if (success != 0) { eprintf("ERROR: Alice's session key and Bob's session " "key are not equal!\n"); - disp_hex_string("Alice session key", alice_key, alice_key_len); - disp_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); 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); @@ -144,27 +135,6 @@ int main(void) { return EXIT_SUCCESS; } -void disp_hex_string(const char *label, 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"); -} - -void disp_part_hex_string(const char *label, 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"); -} - 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, diff --git a/src/kex/test_kex.c b/src/kex/test_kex.c index 57c489045..b2aeab732 100644 --- a/src/kex/test_kex.c +++ b/src/kex/test_kex.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 2f0af1dd6..5dcb03517 100644 --- a/src/kex_code_mcbits/kex_code_mcbits.c +++ b/src/kex_code_mcbits/kex_code_mcbits.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 d748a03c1..17df644a9 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.h b/src/kex_lwe_frodo/kex_lwe_frodo.h index cb2742d0e..4667d83e3 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 5dcba1182..712c7bfc4 100644 --- a/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c +++ b/src/kex_lwe_frodo/kex_lwe_frodo_macrify.c @@ -85,9 +85,9 @@ err: 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 @@ err: *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 @@ cleanup: 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_ntru/kex_ntru.c b/src/kex_ntru/kex_ntru.c index b7ea2f0ae..04083ecc0 100644 --- a/src/kex_ntru/kex_ntru.c +++ b/src/kex_ntru/kex_ntru.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 517a2085b..2339d1381 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 b31350048..ed606ba18 100644 --- a/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c +++ b/src/kex_rlwe_bcns15/kex_rlwe_bcns15.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 c098da481..ba9e70c1b 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_msrln16/kex_rlwe_msrln16.c b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c index f3b26acec..325d26310 100644 --- a/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c +++ b/src/kex_rlwe_msrln16/kex_rlwe_msrln16.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 ad1ee4f52..a15bf5182 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/kex_rlwe_newhope.c b/src/kex_rlwe_newhope/kex_rlwe_newhope.c index 86dd5d175..41785878f 100644 --- a/src/kex_rlwe_newhope/kex_rlwe_newhope.c +++ b/src/kex_rlwe_newhope/kex_rlwe_newhope.c @@ -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 @@ cleanup: 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 @@ cleanup: 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 ba3d70aeb..9172772ca 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_sidh_iqc_ref/kex_sidh_iqc_ref.c b/src/kex_sidh_iqc_ref/kex_sidh_iqc_ref.c index bdda6a587..5a41c52bb 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 @@ err: 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 a14d28220..c597a99ba 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/kex_sidh_msr.c b/src/kex_sidh_msr/kex_sidh_msr.c index 6756e2d61..a2d5d971f 100644 --- a/src/kex_sidh_msr/kex_sidh_msr.c +++ b/src/kex_sidh_msr/kex_sidh_msr.c @@ -141,10 +141,10 @@ cleanup: 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 @@ cleanup: 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 @@ cleanup: 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 d162a3cba..bda602b87 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/sig/minimal_sig_oqs.c b/src/sig/minimal_sig_oqs.c index 317a553cb..e24281c66 100644 --- a/src/sig/minimal_sig_oqs.c +++ b/src/sig/minimal_sig_oqs.c @@ -7,16 +7,7 @@ #include #include -#include -#include -#include - -/* Displays hexadecimal strings */ -void disp_hex_string(const char *label, uint8_t *str, size_t len); - -/* Partially displays hexadecimal strings */ -void disp_part_hex_string(const char *label, uint8_t *str, size_t len, - size_t sub_len); +#include /* Cleaning up memory etc */ void cleanup(uint8_t *msg, size_t msg_len, uint8_t *sig, size_t sig_len, @@ -87,8 +78,8 @@ int main(void) { return EXIT_FAILURE; } - disp_hex_string("Private key", priv, s->priv_key_len); - disp_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); /* Allocates the memory for the message to sign */ msg_len = 64; // TODO: randomize based on scheme's max length @@ -102,7 +93,7 @@ int main(void) { /* Generates a random message to sign */ OQS_RAND_n(rnd, msg, msg_len); - disp_hex_string("Message", msg, msg_len); + OQS_print_hex_string("Message", msg, msg_len); /* Allocates memory for the signature */ sig_len = s->max_sig_len; @@ -125,7 +116,7 @@ int main(void) { if (sig_len > 40) { // only print the parts of the sig if too long - disp_part_hex_string("Signature", sig, sig_len, 20); + OQS_print_part_hex_string("Signature", sig, sig_len, 20); } /* Verification */ @@ -144,27 +135,6 @@ int main(void) { return EXIT_SUCCESS; } -void disp_hex_string(const char *label, 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"); -} - -void disp_part_hex_string(const char *label, 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"); -} - /* 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) { diff --git a/src/sig/sig.c b/src/sig/sig.c index bc6d49cb1..003d3e747 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 60d9199dc..cdba0c3e3 100644 --- a/src/sig/sig.h +++ b/src/sig/sig.h @@ -8,6 +8,8 @@ #include #include + +#include #include /** @@ -83,7 +85,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 +99,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 +111,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 +135,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 +147,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 +159,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 1ba9bf822..be918c08f 100644 --- a/src/sig/test_sig.c +++ b/src/sig/test_sig.c @@ -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"); \ - } +static OQS_STATUS sig_test_correctness(OQS_RAND *rand, enum OQS_SIG_algid algid, const int print) { -#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) { - - 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 @@ cleanup: 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 @@ cleanup: #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() { 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/sig_picnic.c b/src/sig_picnic/sig_picnic.c index 81ded01da..5fce87a45 100644 --- a/src/sig_picnic/sig_picnic.c +++ b/src/sig_picnic/sig_picnic.c @@ -42,7 +42,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; } @@ -108,7 +108,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 +116,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 +135,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 +151,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 8ffa5fd2c..9f68c7943 100644 --- a/src/sig_picnic/sig_picnic.h +++ b/src/sig_picnic/sig_picnic.h @@ -9,12 +9,13 @@ #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