/src/liboqs/src/sig/mayo/sig_mayo_5.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: MIT |
2 | | |
3 | | #include <stdlib.h> |
4 | | |
5 | | #include <oqs/sig_mayo.h> |
6 | | |
7 | | #if defined(OQS_ENABLE_SIG_mayo_5) |
8 | 11 | OQS_SIG *OQS_SIG_mayo_5_new(void) { |
9 | | |
10 | 11 | OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG)); |
11 | 11 | if (sig == NULL) { |
12 | 0 | return NULL; |
13 | 0 | } |
14 | 11 | sig->method_name = OQS_SIG_alg_mayo_5; |
15 | 11 | sig->alg_version = "round2"; |
16 | | |
17 | 11 | sig->claimed_nist_level = 5; |
18 | 11 | sig->euf_cma = true; |
19 | 11 | sig->suf_cma = false; |
20 | 11 | sig->sig_with_ctx_support = false; |
21 | | |
22 | 11 | sig->length_public_key = OQS_SIG_mayo_5_length_public_key; |
23 | 11 | sig->length_secret_key = OQS_SIG_mayo_5_length_secret_key; |
24 | 11 | sig->length_signature = OQS_SIG_mayo_5_length_signature; |
25 | | |
26 | 11 | sig->keypair = OQS_SIG_mayo_5_keypair; |
27 | 11 | sig->sign = OQS_SIG_mayo_5_sign; |
28 | 11 | sig->verify = OQS_SIG_mayo_5_verify; |
29 | 11 | sig->sign_with_ctx_str = OQS_SIG_mayo_5_sign_with_ctx_str; |
30 | 11 | sig->verify_with_ctx_str = OQS_SIG_mayo_5_verify_with_ctx_str; |
31 | | |
32 | 11 | return sig; |
33 | 11 | } |
34 | | |
35 | | extern int pqmayo_MAYO_5_opt_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
36 | | extern int pqmayo_MAYO_5_opt_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
37 | | extern int pqmayo_MAYO_5_opt_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); |
38 | | |
39 | | #if defined(OQS_ENABLE_SIG_mayo_5_avx2) |
40 | | extern int pqmayo_MAYO_5_avx2_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
41 | | extern int pqmayo_MAYO_5_avx2_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
42 | | extern int pqmayo_MAYO_5_avx2_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); |
43 | | #endif |
44 | | |
45 | | #if defined(OQS_ENABLE_SIG_mayo_5_neon) |
46 | | extern int pqmayo_MAYO_5_neon_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
47 | | extern int pqmayo_MAYO_5_neon_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
48 | | extern int pqmayo_MAYO_5_neon_crypto_sign_verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen, const uint8_t *pk); |
49 | | #endif |
50 | | |
51 | 11 | OQS_API OQS_STATUS OQS_SIG_mayo_5_keypair(uint8_t *public_key, uint8_t *secret_key) { |
52 | 11 | #if defined(OQS_ENABLE_SIG_mayo_5_avx2) |
53 | 11 | #if defined(OQS_DIST_BUILD) |
54 | 11 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
55 | 11 | #endif /* OQS_DIST_BUILD */ |
56 | 11 | return (OQS_STATUS) pqmayo_MAYO_5_avx2_crypto_sign_keypair(public_key, secret_key); |
57 | 11 | #if defined(OQS_DIST_BUILD) |
58 | 11 | } else { |
59 | 0 | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_keypair(public_key, secret_key); |
60 | 0 | } |
61 | 11 | #endif /* OQS_DIST_BUILD */ |
62 | | #elif defined(OQS_ENABLE_SIG_mayo_5_neon) |
63 | | #if defined(OQS_DIST_BUILD) |
64 | | if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) { |
65 | | #endif /* OQS_DIST_BUILD */ |
66 | | return (OQS_STATUS) pqmayo_MAYO_5_neon_crypto_sign_keypair(public_key, secret_key); |
67 | | #if defined(OQS_DIST_BUILD) |
68 | | } else { |
69 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_keypair(public_key, secret_key); |
70 | | } |
71 | | #endif /* OQS_DIST_BUILD */ |
72 | | #else |
73 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_keypair(public_key, secret_key); |
74 | | #endif |
75 | 11 | } |
76 | | |
77 | 11 | OQS_API OQS_STATUS OQS_SIG_mayo_5_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { |
78 | 11 | #if defined(OQS_ENABLE_SIG_mayo_5_avx2) |
79 | 11 | #if defined(OQS_DIST_BUILD) |
80 | 11 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
81 | 11 | #endif /* OQS_DIST_BUILD */ |
82 | 11 | return (OQS_STATUS) pqmayo_MAYO_5_avx2_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
83 | 11 | #if defined(OQS_DIST_BUILD) |
84 | 11 | } else { |
85 | 0 | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
86 | 0 | } |
87 | 11 | #endif /* OQS_DIST_BUILD */ |
88 | | #elif defined(OQS_ENABLE_SIG_mayo_5_neon) |
89 | | #if defined(OQS_DIST_BUILD) |
90 | | if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) { |
91 | | #endif /* OQS_DIST_BUILD */ |
92 | | return (OQS_STATUS) pqmayo_MAYO_5_neon_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
93 | | #if defined(OQS_DIST_BUILD) |
94 | | } else { |
95 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
96 | | } |
97 | | #endif /* OQS_DIST_BUILD */ |
98 | | #else |
99 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
100 | | #endif |
101 | 11 | } |
102 | | |
103 | 11 | OQS_API OQS_STATUS OQS_SIG_mayo_5_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { |
104 | 11 | #if defined(OQS_ENABLE_SIG_mayo_5_avx2) |
105 | 11 | #if defined(OQS_DIST_BUILD) |
106 | 11 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
107 | 11 | #endif /* OQS_DIST_BUILD */ |
108 | 11 | return (OQS_STATUS) pqmayo_MAYO_5_avx2_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
109 | 11 | #if defined(OQS_DIST_BUILD) |
110 | 11 | } else { |
111 | 0 | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
112 | 0 | } |
113 | 11 | #endif /* OQS_DIST_BUILD */ |
114 | | #elif defined(OQS_ENABLE_SIG_mayo_5_neon) |
115 | | #if defined(OQS_DIST_BUILD) |
116 | | if (OQS_CPU_has_extension(OQS_CPU_EXT_ARM_NEON)) { |
117 | | #endif /* OQS_DIST_BUILD */ |
118 | | return (OQS_STATUS) pqmayo_MAYO_5_neon_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
119 | | #if defined(OQS_DIST_BUILD) |
120 | | } else { |
121 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
122 | | } |
123 | | #endif /* OQS_DIST_BUILD */ |
124 | | #else |
125 | | return (OQS_STATUS) pqmayo_MAYO_5_opt_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
126 | | #endif |
127 | 11 | } |
128 | | |
129 | 0 | OQS_API OQS_STATUS OQS_SIG_mayo_5_sign_with_ctx_str(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *secret_key) { |
130 | 0 | if (ctx_str == NULL && ctx_str_len == 0) { |
131 | 0 | return OQS_SIG_mayo_5_sign(signature, signature_len, message, message_len, secret_key); |
132 | 0 | } else { |
133 | 0 | return OQS_ERROR; |
134 | 0 | } |
135 | 0 | } |
136 | | |
137 | 0 | OQS_API OQS_STATUS OQS_SIG_mayo_5_verify_with_ctx_str(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *ctx_str, size_t ctx_str_len, const uint8_t *public_key) { |
138 | 0 | if (ctx_str == NULL && ctx_str_len == 0) { |
139 | 0 | return OQS_SIG_mayo_5_verify(message, message_len, signature, signature_len, public_key); |
140 | 0 | } else { |
141 | 0 | return OQS_ERROR; |
142 | 0 | } |
143 | 0 | } |
144 | | #endif |