Coverage Report

Created: 2025-12-14 07:34

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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