Skip to content

Commit 933e58d

Browse files
committed
- adds META.yml files
- adds new api: crypto_sign_signature and crypto_sign_verify - adds namespacing - converts CRLF to LF - fixes for big-endian - changes types from 'unsigned long long' to size_t - fixes for strict compilers - ensures newlines at end of files
1 parent 3dc34ca commit 933e58d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1519
-1029
lines changed

.cmake/target.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ if (${MAYO_BUILD_TYPE} MATCHES "ref")
5454
option(ENABLE_AESNI "Use AESni" OFF)
5555
option(ENABLE_PARAMS_DYNAMIC "Use dynamic parameters" ON)
5656
add_definitions(-DMAYO_BUILD_TYPE_REF)
57-
elseif(${MAYO_BUILD_TYPE} MATCHES "ref")
57+
elseif(${MAYO_BUILD_TYPE} MATCHES "opt")
5858
add_definitions(-DMAYO_BUILD_TYPE_OPT)
5959
option(ENABLE_PARAMS_DYNAMIC "Use dynamic parameters" OFF)
6060
elseif(${MAYO_BUILD_TYPE} MATCHES "avx2")

.github/workflows/cmake.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ env:
1212

1313
jobs:
1414
build_test:
15-
runs-on: ubuntu-20.04
15+
runs-on: ubuntu-latest
1616
strategy:
1717
matrix:
1818
mayo_build_type: [ref, opt, avx2]

META/MAYO_1_META.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: MAYO_1
2+
type: signature
3+
claimed-nist-level: 1
4+
length-public-key: 1168
5+
length-secret-key: 24
6+
length-signature: 321
7+
nistkat-sha256: ba2473dedd92cf3b8a1fc14fc22f2ffdde972c8b64cfcd8cddb4f803e48df017
8+
principal-submitters:
9+
- Ward Beullens
10+
- Fabio Campos
11+
- Sofía Celi
12+
- Basil Hess
13+
- Matthias J. Kannwischer
14+
implementations:
15+
- name: opt
16+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
17+
folder_name: .
18+
compile_opts: -DMAYO_VARIANT=MAYO_1 -DMAYO_BUILD_TYPE_OPT -DHAVE_RANDOMBYTES_NORETVAL
19+
signature_keypair: pqmayo_MAYO_1_opt_crypto_sign_keypair
20+
signature_signature: pqmayo_MAYO_1_opt_crypto_sign_signature
21+
signature_verify: pqmayo_MAYO_1_opt_crypto_sign_verify
22+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_1/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_1/api.h ./src/simple_arithmetic.h ./src/generic/arithmetic_common.h ./src/generic/echelon_form.h ./src/generic/arithmetic_96.h ./src/generic/arithmetic_64.h ./src/generic/arithmetic_128.h ./src/arithmetic.h ./src/common/aes_ctr.h
23+
- name: avx2
24+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
25+
folder_name: .
26+
compile_opts: -DMAYO_VARIANT=MAYO_1 -DMAYO_BUILD_TYPE_AVX2 -DMAYO_AVX -DHAVE_RANDOMBYTES_NORETVAL
27+
signature_keypair: pqmayo_MAYO_1_avx2_crypto_sign_keypair
28+
signature_signature: pqmayo_MAYO_1_avx2_crypto_sign_signature
29+
signature_verify: pqmayo_MAYO_1_avx2_crypto_sign_verify
30+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_1/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_1/api.h ./src/simple_arithmetic.h ./src/arithmetic.h ./src/common/aes_ctr.h ./src/AVX2/arithmetic_128.h ./src/AVX2/arithmetic_96.h ./src/AVX2/echelon_form.h ./src/AVX2/shuffle_arithmetic_128.h ./src/AVX2/shuffle_arithmetic_96.h ./src/AVX2/arithmetic_64.h ./src/AVX2/arithmetic_common.h ./src/AVX2/echelon_form_loop.h ./src/AVX2/shuffle_arithmetic_64.h
31+
supported_platforms:
32+
- architecture: x86_64
33+
operating_systems:
34+
- Darwin
35+
- Linux
36+
required_flags:
37+
- avx2

META/MAYO_2_META.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: MAYO_2
2+
type: signature
3+
claimed-nist-level: 1
4+
length-public-key: 5488
5+
length-secret-key: 24
6+
length-signature: 180
7+
nistkat-sha256: 72cb237642b2c0c4e7f8c824d9c8601ac7189784649d28dbb2cccfb94732c9a3
8+
principal-submitters:
9+
- Ward Beullens
10+
- Fabio Campos
11+
- Sofía Celi
12+
- Basil Hess
13+
- Matthias J. Kannwischer
14+
implementations:
15+
- name: opt
16+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
17+
folder_name: .
18+
compile_opts: -DMAYO_VARIANT=MAYO_2 -DMAYO_BUILD_TYPE_OPT -DHAVE_RANDOMBYTES_NORETVAL
19+
signature_keypair: pqmayo_MAYO_2_opt_crypto_sign_keypair
20+
signature_signature: pqmayo_MAYO_2_opt_crypto_sign_signature
21+
signature_verify: pqmayo_MAYO_2_opt_crypto_sign_verify
22+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_2/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_2/api.h ./src/simple_arithmetic.h ./src/generic/arithmetic_common.h ./src/generic/echelon_form.h ./src/generic/arithmetic_96.h ./src/generic/arithmetic_64.h ./src/generic/arithmetic_128.h ./src/arithmetic.h ./src/common/aes_ctr.h
23+
- name: avx2
24+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
25+
folder_name: .
26+
compile_opts: -DMAYO_VARIANT=MAYO_2 -DMAYO_BUILD_TYPE_AVX2 -DMAYO_AVX -DHAVE_RANDOMBYTES_NORETVAL
27+
signature_keypair: pqmayo_MAYO_2_avx2_crypto_sign_keypair
28+
signature_signature: pqmayo_MAYO_2_avx2_crypto_sign_signature
29+
signature_verify: pqmayo_MAYO_2_avx2_crypto_sign_verify
30+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_2/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_2/api.h ./src/simple_arithmetic.h ./src/arithmetic.h ./src/common/aes_ctr.h ./src/AVX2/arithmetic_128.h ./src/AVX2/arithmetic_96.h ./src/AVX2/echelon_form.h ./src/AVX2/shuffle_arithmetic_128.h ./src/AVX2/shuffle_arithmetic_96.h ./src/AVX2/arithmetic_64.h ./src/AVX2/arithmetic_common.h ./src/AVX2/echelon_form_loop.h ./src/AVX2/shuffle_arithmetic_64.h
31+
supported_platforms:
32+
- architecture: x86_64
33+
operating_systems:
34+
- Darwin
35+
- Linux
36+
required_flags:
37+
- avx2

META/MAYO_3_META.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: MAYO_3
2+
type: signature
3+
claimed-nist-level: 3
4+
length-public-key: 2656
5+
length-secret-key: 32
6+
length-signature: 577
7+
nistkat-sha256: dbc49f4fdfa0de69d416051215cb53c042c4a329d325452d079f3734b7467a6b
8+
principal-submitters:
9+
- Ward Beullens
10+
- Fabio Campos
11+
- Sofía Celi
12+
- Basil Hess
13+
- Matthias J. Kannwischer
14+
implementations:
15+
- name: opt
16+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
17+
folder_name: .
18+
compile_opts: -DMAYO_VARIANT=MAYO_3 -DMAYO_BUILD_TYPE_OPT -DHAVE_RANDOMBYTES_NORETVAL -DHAVE_STACKEFFICIENT
19+
signature_keypair: pqmayo_MAYO_3_opt_crypto_sign_keypair
20+
signature_signature: pqmayo_MAYO_3_opt_crypto_sign_signature
21+
signature_verify: pqmayo_MAYO_3_opt_crypto_sign_verify
22+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_3/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_3/api.h ./src/simple_arithmetic.h ./src/generic/arithmetic_common.h ./src/generic/echelon_form.h ./src/generic/arithmetic_96.h ./src/generic/arithmetic_64.h ./src/generic/arithmetic_128.h ./src/arithmetic.h ./src/common/aes_ctr.h
23+
- name: avx2
24+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
25+
folder_name: .
26+
compile_opts: -DMAYO_VARIANT=MAYO_3 -DMAYO_BUILD_TYPE_AVX2 -DMAYO_AVX -DHAVE_RANDOMBYTES_NORETVAL -DHAVE_STACKEFFICIENT
27+
signature_keypair: pqmayo_MAYO_3_avx2_crypto_sign_keypair
28+
signature_signature: pqmayo_MAYO_3_avx2_crypto_sign_signature
29+
signature_verify: pqmayo_MAYO_3_avx2_crypto_sign_verify
30+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_3/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_3/api.h ./src/simple_arithmetic.h ./src/arithmetic.h ./src/common/aes_ctr.h ./src/AVX2/arithmetic_128.h ./src/AVX2/arithmetic_96.h ./src/AVX2/echelon_form.h ./src/AVX2/shuffle_arithmetic_128.h ./src/AVX2/shuffle_arithmetic_96.h ./src/AVX2/arithmetic_64.h ./src/AVX2/arithmetic_common.h ./src/AVX2/echelon_form_loop.h ./src/AVX2/shuffle_arithmetic_64.h
31+
supported_platforms:
32+
- architecture: x86_64
33+
operating_systems:
34+
- Darwin
35+
- Linux
36+
required_flags:
37+
- avx2

META/MAYO_5_META.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: MAYO_5
2+
type: signature
3+
claimed-nist-level: 5
4+
length-public-key: 5008
5+
length-secret-key: 40
6+
length-signature: 838
7+
nistkat-sha256: f2c1c69045c7d15e714a04119965e8a7007ef54f9293158587560227c97b237d
8+
principal-submitters:
9+
- Ward Beullens
10+
- Fabio Campos
11+
- Sofía Celi
12+
- Basil Hess
13+
- Matthias J. Kannwischer
14+
implementations:
15+
- name: opt
16+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
17+
folder_name: .
18+
compile_opts: -DMAYO_VARIANT=MAYO_5 -DMAYO_BUILD_TYPE_OPT -DHAVE_RANDOMBYTES_NORETVAL -DHAVE_STACKEFFICIENT
19+
signature_keypair: pqmayo_MAYO_5_opt_crypto_sign_keypair
20+
signature_signature: pqmayo_MAYO_5_opt_crypto_sign_signature
21+
signature_verify: pqmayo_MAYO_5_opt_crypto_sign_verify
22+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_5/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_5/api.h ./src/simple_arithmetic.h ./src/generic/arithmetic_common.h ./src/generic/echelon_form.h ./src/generic/arithmetic_96.h ./src/generic/arithmetic_64.h ./src/generic/arithmetic_128.h ./src/arithmetic.h ./src/common/aes_ctr.h
23+
- name: avx2
24+
version: https://github.com/PQCMayo/MAYO-C/tree/nibbling-mayo
25+
folder_name: .
26+
compile_opts: -DMAYO_VARIANT=MAYO_5 -DMAYO_BUILD_TYPE_AVX2 -DMAYO_AVX -DHAVE_RANDOMBYTES_NORETVAL -DHAVE_STACKEFFICIENT
27+
signature_keypair: pqmayo_MAYO_5_avx2_crypto_sign_keypair
28+
signature_signature: pqmayo_MAYO_5_avx2_crypto_sign_signature
29+
signature_verify: pqmayo_MAYO_5_avx2_crypto_sign_verify
30+
sources: LICENSE NOTICE ./src/arithmetic.c ./src/mayo_5/api.c ./src/params.c ./src/mayo.c ./include/mayo.h ./include/mem.h ./src/mayo_5/api.h ./src/simple_arithmetic.h ./src/arithmetic.h ./src/common/aes_ctr.h ./src/AVX2/arithmetic_128.h ./src/AVX2/arithmetic_96.h ./src/AVX2/echelon_form.h ./src/AVX2/shuffle_arithmetic_128.h ./src/AVX2/shuffle_arithmetic_96.h ./src/AVX2/arithmetic_64.h ./src/AVX2/arithmetic_common.h ./src/AVX2/echelon_form_loop.h ./src/AVX2/shuffle_arithmetic_64.h
31+
supported_platforms:
32+
- architecture: x86_64
33+
operating_systems:
34+
- Darwin
35+
- Linux
36+
required_flags:
37+
- avx2

apps/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ foreach(MVARIANT ${MVARIANT_S})
2828
target_link_libraries(example_nistapi_${MVARIANT_LOWER} PRIVATE ${MVARIANT_LOWER}_nistapi)
2929
target_include_directories(example_nistapi_${MVARIANT_LOWER} PRIVATE ../include ../src/${MVARIANT_LOWER})
3030
endforeach()
31+

apps/PQCgenKAT_sign.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ protection within the United States.
3131
*/
3232

3333
#include "api.h"
34-
#include "rng.h"
34+
#include "randombytes.h"
3535
#include <ctype.h>
3636
#include <stdio.h>
3737
#include <stdlib.h>
@@ -46,7 +46,7 @@ protection within the United States.
4646

4747
int FindMarker(FILE *infile, const char *marker);
4848
int ReadHex(FILE *infile, unsigned char *A, int Length, char *str);
49-
void fprintBstr(FILE *fp, char *S, unsigned char *A, unsigned long long L);
49+
void fprintBstr(FILE *fp, char *S, unsigned char *A, size_t L);
5050

5151
int main(void) {
5252
char fn_req[32], fn_rsp[32];
@@ -55,7 +55,7 @@ int main(void) {
5555
unsigned char msg[3300];
5656
unsigned char entropy_input[48];
5757
unsigned char *m, *sm, *m1;
58-
unsigned long long mlen, smlen, mlen1;
58+
size_t mlen, smlen, mlen1;
5959
int count;
6060
int done;
6161
unsigned char pk[CRYPTO_PUBLICKEYBYTES], sk[CRYPTO_SECRETKEYBYTES];
@@ -84,7 +84,7 @@ int main(void) {
8484
randombytes(seed, 48);
8585
fprintBstr(fp_req, "seed = ", seed, 48);
8686
mlen = 33 * (i + 1);
87-
fprintf(fp_req, "mlen = %llu\n", mlen);
87+
fprintf(fp_req, "mlen = %zu\n", mlen);
8888
randombytes(msg, mlen);
8989
fprintBstr(fp_req, "msg = ", msg, mlen);
9090
fprintf(fp_req, "pk =\n");
@@ -121,13 +121,13 @@ int main(void) {
121121
randombytes_init(seed, NULL, 256);
122122

123123
if (FindMarker(fp_req, "mlen = ")) {
124-
if (fscanf(fp_req, "%llu", &mlen) != 1)
124+
if (fscanf(fp_req, "%zu", &mlen) != 1)
125125
return KAT_DATA_ERROR;
126126
} else {
127127
printf("ERROR: unable to read 'mlen' from <%s>\n", fn_req);
128128
return KAT_DATA_ERROR;
129129
}
130-
fprintf(fp_rsp, "mlen = %llu\n", mlen);
130+
fprintf(fp_rsp, "mlen = %zu\n", mlen);
131131

132132
m = (unsigned char *)calloc(mlen, sizeof(unsigned char));
133133
m1 = (unsigned char *)calloc(mlen + CRYPTO_BYTES, sizeof(unsigned char));
@@ -151,7 +151,7 @@ int main(void) {
151151
printf("crypto_sign returned <%d>\n", ret_val);
152152
return KAT_CRYPTO_FAILURE;
153153
}
154-
fprintf(fp_rsp, "smlen = %llu\n", smlen);
154+
fprintf(fp_rsp, "smlen = %zu\n", smlen);
155155
fprintBstr(fp_rsp, "sm = ", sm, smlen);
156156
fprintf(fp_rsp, "\n");
157157

@@ -162,7 +162,7 @@ int main(void) {
162162

163163
if (mlen != mlen1) {
164164
printf(
165-
"crypto_sign_open returned bad 'mlen': Got <%llu>, expected <%llu>\n",
165+
"crypto_sign_open returned bad 'mlen': Got <%zu>, expected <%zu>\n",
166166
mlen1, mlen);
167167
return KAT_CRYPTO_FAILURE;
168168
}
@@ -265,8 +265,8 @@ int ReadHex(FILE *infile, unsigned char *A, int Length, char *str) {
265265
return 1;
266266
}
267267

268-
void fprintBstr(FILE *fp, char *S, unsigned char *A, unsigned long long L) {
269-
unsigned long long i;
268+
void fprintBstr(FILE *fp, char *S, unsigned char *A, size_t L) {
269+
size_t i;
270270

271271
fprintf(fp, "%s", S);
272272

@@ -278,3 +278,4 @@ void fprintBstr(FILE *fp, char *S, unsigned char *A, unsigned long long L) {
278278

279279
fprintf(fp, "\n");
280280
}
281+

apps/example.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@
2424
*/
2525
static int example_mayo(const mayo_params_t* p) {
2626

27-
unsigned long long msglen = 32;
28-
unsigned long long smlen = p->sig_bytes + msglen;
27+
size_t msglen = 32;
28+
size_t smlen = PARAM_sig_bytes(p) + msglen;
2929

30-
unsigned char *pk = calloc(p->cpk_bytes, 1);
31-
unsigned char *sk = calloc(p->csk_bytes, 1);
30+
unsigned char *pk = calloc(PARAM_cpk_bytes(p), 1);
31+
unsigned char *sk = calloc(PARAM_csk_bytes(p), 1);
3232

33-
unsigned char *epk = calloc(p->epk_bytes, 1);
33+
unsigned char *epk = calloc(PARAM_epk_bytes(p), 1);
3434
sk_t *esk = calloc(sizeof(sk_t), 1);
3535

36-
unsigned char *sig = calloc(p->sig_bytes + msglen, 1);
36+
unsigned char *sig = calloc(PARAM_sig_bytes(p) + msglen, 1);
3737

3838
unsigned char msg[32] = { 0xe };
3939
unsigned char msg2[32] = { 0 };
4040

41-
printf("Example with %s\n", p->name);
41+
printf("Example with %s\n", PARAM_name(p));
4242

4343
printf("mayo_keypair -> ");
4444
int res = mayo_keypair(p, pk, sk);
@@ -129,7 +129,7 @@ static int example_mayo(const mayo_params_t* p) {
129129
err:
130130
free(pk);
131131
free(epk);
132-
mayo_secure_free(sk, p->csk_bytes);
132+
mayo_secure_free(sk, PARAM_csk_bytes(p));
133133
mayo_secure_free(esk, sizeof(sk_t));
134134
free(sig);
135135
return res;
@@ -145,6 +145,7 @@ int main(void) {
145145
}
146146
}
147147
#else
148-
return example_mayo(&MAYO_VARIANT);
148+
return example_mayo(0);
149149
#endif
150150
}
151+

apps/example_nistapi.c

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
*/
2121
static int example_mayo(void) {
2222

23-
unsigned long long msglen = 32;
24-
unsigned long long smlen = CRYPTO_BYTES + msglen;
23+
size_t msglen = 32;
24+
size_t smlen = CRYPTO_BYTES + msglen;
25+
size_t siglen = CRYPTO_BYTES;
2526

2627
unsigned char *pk = calloc(CRYPTO_PUBLICKEYBYTES, 1);
2728
unsigned char *sk = calloc(CRYPTO_SECRETKEYBYTES, 1);
@@ -76,6 +77,39 @@ static int example_mayo(void) {
7677
res = 0;
7778
printf("OK\n");
7879
}
80+
81+
printf("crypto_sign_signature -> ");
82+
res = crypto_sign_signature(sig, &siglen, msg, msglen, sk);
83+
if (res) {
84+
printf("FAIL\n");
85+
res = -1;
86+
goto err;
87+
} else {
88+
printf("OK\n");
89+
}
90+
91+
printf("crypto_sign_verify (with correct signature) -> ");
92+
res = crypto_sign_verify(sig, siglen, msg, msglen, pk);
93+
if (res) {
94+
printf("FAIL\n");
95+
res = -1;
96+
goto err;
97+
} else {
98+
res = 0;
99+
printf("OK\n");
100+
}
101+
102+
printf("crypto_sign_verify (with altered signature) -> ");
103+
sig[0] = ~sig[0];
104+
res = crypto_sign_verify(sig, siglen, msg, msglen, pk);
105+
if (!res) {
106+
printf("FAIL\n");
107+
res = -1;
108+
goto err;
109+
} else {
110+
res = 0;
111+
printf("OK\n");
112+
}
79113

80114
err:
81115
free(pk);
@@ -87,3 +121,4 @@ static int example_mayo(void) {
87121
int main(void) {
88122
return example_mayo();
89123
}
124+

0 commit comments

Comments
 (0)