/src/liboqs/src/sig/falcon/sig_falcon_512.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: MIT |
2 | | |
3 | | #include <stdlib.h> |
4 | | |
5 | | #include <oqs/sig_falcon.h> |
6 | | |
7 | | #if defined(OQS_ENABLE_SIG_falcon_512) |
8 | 0 | OQS_SIG *OQS_SIG_falcon_512_new(void) { |
9 | |
|
10 | 0 | OQS_SIG *sig = OQS_MEM_malloc(sizeof(OQS_SIG)); |
11 | 0 | if (sig == NULL) { |
12 | 0 | return NULL; |
13 | 0 | } |
14 | 0 | sig->method_name = OQS_SIG_alg_falcon_512; |
15 | 0 | sig->alg_version = "20211101 with PQClean patches"; |
16 | |
|
17 | 0 | sig->claimed_nist_level = 1; |
18 | 0 | sig->euf_cma = true; |
19 | 0 | sig->suf_cma = false; |
20 | 0 | sig->sig_with_ctx_support = false; |
21 | |
|
22 | 0 | sig->length_public_key = OQS_SIG_falcon_512_length_public_key; |
23 | 0 | sig->length_secret_key = OQS_SIG_falcon_512_length_secret_key; |
24 | 0 | sig->length_signature = OQS_SIG_falcon_512_length_signature; |
25 | |
|
26 | 0 | sig->keypair = OQS_SIG_falcon_512_keypair; |
27 | 0 | sig->sign = OQS_SIG_falcon_512_sign; |
28 | 0 | sig->verify = OQS_SIG_falcon_512_verify; |
29 | 0 | sig->sign_with_ctx_str = OQS_SIG_falcon_512_sign_with_ctx_str; |
30 | 0 | sig->verify_with_ctx_str = OQS_SIG_falcon_512_verify_with_ctx_str; |
31 | |
|
32 | 0 | return sig; |
33 | 0 | } |
34 | | |
35 | | extern int PQCLEAN_FALCON512_CLEAN_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
36 | | extern int PQCLEAN_FALCON512_CLEAN_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
37 | | extern int PQCLEAN_FALCON512_CLEAN_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_falcon_512_avx2) |
40 | | extern int PQCLEAN_FALCON512_AVX2_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
41 | | extern int PQCLEAN_FALCON512_AVX2_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
42 | | extern int PQCLEAN_FALCON512_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_falcon_512_aarch64) |
46 | | extern int PQCLEAN_FALCON512_AARCH64_crypto_sign_keypair(uint8_t *pk, uint8_t *sk); |
47 | | extern int PQCLEAN_FALCON512_AARCH64_crypto_sign_signature(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen, const uint8_t *sk); |
48 | | extern int PQCLEAN_FALCON512_AARCH64_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 | 0 | OQS_API OQS_STATUS OQS_SIG_falcon_512_keypair(uint8_t *public_key, uint8_t *secret_key) { |
52 | 0 | #if defined(OQS_ENABLE_SIG_falcon_512_avx2) |
53 | 0 | #if defined(OQS_DIST_BUILD) |
54 | 0 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
55 | 0 | #endif /* OQS_DIST_BUILD */ |
56 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_AVX2_crypto_sign_keypair(public_key, secret_key); |
57 | 0 | #if defined(OQS_DIST_BUILD) |
58 | 0 | } else { |
59 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_keypair(public_key, secret_key); |
60 | 0 | } |
61 | 0 | #endif /* OQS_DIST_BUILD */ |
62 | | #elif defined(OQS_ENABLE_SIG_falcon_512_aarch64) |
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) PQCLEAN_FALCON512_AARCH64_crypto_sign_keypair(public_key, secret_key); |
67 | | #if defined(OQS_DIST_BUILD) |
68 | | } else { |
69 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_keypair(public_key, secret_key); |
70 | | } |
71 | | #endif /* OQS_DIST_BUILD */ |
72 | | #else |
73 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_keypair(public_key, secret_key); |
74 | | #endif |
75 | 0 | } |
76 | | |
77 | 0 | OQS_API OQS_STATUS OQS_SIG_falcon_512_sign(uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) { |
78 | 0 | #if defined(OQS_ENABLE_SIG_falcon_512_avx2) |
79 | 0 | #if defined(OQS_DIST_BUILD) |
80 | 0 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
81 | 0 | #endif /* OQS_DIST_BUILD */ |
82 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_AVX2_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
83 | 0 | #if defined(OQS_DIST_BUILD) |
84 | 0 | } else { |
85 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
86 | 0 | } |
87 | 0 | #endif /* OQS_DIST_BUILD */ |
88 | | #elif defined(OQS_ENABLE_SIG_falcon_512_aarch64) |
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) PQCLEAN_FALCON512_AARCH64_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
93 | | #if defined(OQS_DIST_BUILD) |
94 | | } else { |
95 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
96 | | } |
97 | | #endif /* OQS_DIST_BUILD */ |
98 | | #else |
99 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_signature(signature, signature_len, message, message_len, secret_key); |
100 | | #endif |
101 | 0 | } |
102 | | |
103 | 0 | OQS_API OQS_STATUS OQS_SIG_falcon_512_verify(const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) { |
104 | 0 | #if defined(OQS_ENABLE_SIG_falcon_512_avx2) |
105 | 0 | #if defined(OQS_DIST_BUILD) |
106 | 0 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2)) { |
107 | 0 | #endif /* OQS_DIST_BUILD */ |
108 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_AVX2_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
109 | 0 | #if defined(OQS_DIST_BUILD) |
110 | 0 | } else { |
111 | 0 | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
112 | 0 | } |
113 | 0 | #endif /* OQS_DIST_BUILD */ |
114 | | #elif defined(OQS_ENABLE_SIG_falcon_512_aarch64) |
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) PQCLEAN_FALCON512_AARCH64_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
119 | | #if defined(OQS_DIST_BUILD) |
120 | | } else { |
121 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
122 | | } |
123 | | #endif /* OQS_DIST_BUILD */ |
124 | | #else |
125 | | return (OQS_STATUS) PQCLEAN_FALCON512_CLEAN_crypto_sign_verify(signature, signature_len, message, message_len, public_key); |
126 | | #endif |
127 | 0 | } |
128 | | |
129 | 0 | OQS_API OQS_STATUS OQS_SIG_falcon_512_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_falcon_512_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_falcon_512_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_falcon_512_verify(message, message_len, signature, signature_len, public_key); |
140 | 0 | } else { |
141 | 0 | return OQS_ERROR; |
142 | 0 | } |
143 | 0 | } |
144 | | #endif |