Skip to content

Commit 49c4a3d

Browse files
committed
Remove siglen from signing and verification APIs
ML-DSA signatures have a fixed size, so siglen was redundant: an always-MLDSA_BYTES output for signing and an input used only for a fixed-size check on verification. Drop it from all signing and verification functions (internal, randomized, extmu, and pre-hash variants) and the SUPERCOP-named aliases. Verification now takes the signature as a fixed-size array. Update the CBMC contracts and harnesses, tests, and examples to match. Adjust AWS-LC, Pavona, and OQS integrations and their tests accordingly. Signed-off-by: Matthias J. Kannwischer <[email protected]>
1 parent 4d1cd02 commit 49c4a3d

43 files changed

Lines changed: 1154 additions & 624 deletions

File tree

Some content is hidden

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

.github/workflows/integration-liboqs.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ jobs:
6161
yq e -i 'del(.kems[] | select(.name == "kyber"))' scripts/copy_from_upstream/copy_from_upstream.yml
6262
yq e -i 'del(.sigs[] | select(.name == "dilithium"))' scripts/copy_from_upstream/copy_from_upstream.yml
6363
git diff >> "$GITHUB_STEP_SUMMARY";
64+
- name: Apply integration patches
65+
run: |
66+
cd "$LIBOQS_DIR"
67+
for patch in "$GITHUB_WORKSPACE"/integration/liboqs/*.patch; do
68+
if [ -f "$patch" ]; then
69+
echo "Applying $patch"
70+
git apply "$patch"
71+
fi
72+
done
6473
- name: Configure
6574
run: |
6675
cd "$LIBOQS_DIR"

examples/basic/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,12 @@ static int example_keygen(void)
6767
static int example_sign(void)
6868
{
6969
uint8_t sig[MLDSA_SIG_BYTES];
70-
size_t siglen;
7170

7271
printf("Signing message... ");
73-
CHECK(mldsa_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
72+
CHECK(mldsa_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
7473
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
7574
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
76-
CHECK(siglen == sizeof(test_vector_sig));
77-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
75+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
7876
printf("DONE\n");
7977
return 0;
8078
}
@@ -90,10 +88,9 @@ static int example_sign(void)
9088
static int example_verify(void)
9189
{
9290
printf("Verifying signature... ");
93-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
94-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
95-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
96-
test_vector_pk) == 0);
91+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
92+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
93+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
9794
printf("DONE\n");
9895
return 0;
9996
}

examples/basic_deterministic/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ static int example_keygen(void)
7878
static int example_sign(void)
7979
{
8080
uint8_t sig[MLDSA_SIG_BYTES];
81-
size_t siglen;
8281
uint8_t pre[TEST_VECTOR_CTX_LEN + 2]; /* prefix string (0, ctxlen, ctx) */
8382

8483
printf("Signing message... ");
@@ -88,13 +87,12 @@ static int example_sign(void)
8887
pre[1] = TEST_VECTOR_CTX_LEN;
8988
memcpy(pre + 2, TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN);
9089

91-
CHECK(mldsa_signature_internal(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
90+
CHECK(mldsa_signature_internal(sig, (const uint8_t *)TEST_VECTOR_MSG,
9291
TEST_VECTOR_MSG_LEN, pre, sizeof(pre),
9392
test_vector_rnd, test_vector_sk, 0) == 0);
9493

9594
/* Deterministic signing with explicit randomness -- always compare */
96-
CHECK(siglen == sizeof(test_vector_sig));
97-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
95+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
9896
printf("DONE\n");
9997
return 0;
10098
}
@@ -110,10 +108,9 @@ static int example_sign(void)
110108
static int example_verify(void)
111109
{
112110
printf("Verifying signature... ");
113-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
114-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
115-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
116-
test_vector_pk) == 0);
111+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
112+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
113+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
117114
printf("DONE\n");
118115
return 0;
119116
}

examples/basic_lowram/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,12 @@ static int example_keygen(void)
6767
static int example_sign(void)
6868
{
6969
uint8_t sig[MLDSA_SIG_BYTES];
70-
size_t siglen;
7170

7271
printf("Signing message... ");
73-
CHECK(mldsa_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
72+
CHECK(mldsa_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
7473
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
7574
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
76-
CHECK(siglen == sizeof(test_vector_sig));
77-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
75+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
7876
printf("DONE\n");
7977
return 0;
8078
}
@@ -90,10 +88,9 @@ static int example_sign(void)
9088
static int example_verify(void)
9189
{
9290
printf("Verifying signature... ");
93-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
94-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
95-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
96-
test_vector_pk) == 0);
91+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
92+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
93+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
9794
printf("DONE\n");
9895
return 0;
9996
}

examples/bring_your_own_fips202/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,12 @@ static int example_keygen(void)
6767
static int example_sign(void)
6868
{
6969
uint8_t sig[MLDSA_SIG_BYTES];
70-
size_t siglen;
7170

7271
printf("Signing message... ");
73-
CHECK(mldsa_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
72+
CHECK(mldsa_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
7473
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
7574
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
76-
CHECK(siglen == sizeof(test_vector_sig));
77-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
75+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
7876
printf("DONE\n");
7977
return 0;
8078
}
@@ -90,10 +88,9 @@ static int example_sign(void)
9088
static int example_verify(void)
9189
{
9290
printf("Verifying signature... ");
93-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
94-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
95-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
96-
test_vector_pk) == 0);
91+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
92+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
93+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
9794
printf("DONE\n");
9895
return 0;
9996
}

examples/bring_your_own_fips202_static/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,12 @@ static int example_keygen(void)
7676
static int example_sign(void)
7777
{
7878
uint8_t sig[MLDSA_SIG_BYTES];
79-
size_t siglen;
8079

8180
printf("Signing message... ");
82-
CHECK(mldsa_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
81+
CHECK(mldsa_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
8382
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
8483
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
85-
CHECK(siglen == sizeof(test_vector_sig));
86-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
84+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
8785
printf("DONE\n");
8886
return 0;
8987
}
@@ -99,10 +97,9 @@ static int example_sign(void)
9997
static int example_verify(void)
10098
{
10199
printf("Verifying signature... ");
102-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
103-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
104-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
105-
test_vector_pk) == 0);
100+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
101+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
102+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
106103
printf("DONE\n");
107104
return 0;
108105
}

examples/custom_backend/main.c

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,13 @@ static int example_keygen(void)
6767
static int example_sign(void)
6868
{
6969
uint8_t sig[MLDSA_SIG_BYTES];
70-
size_t siglen;
7170

7271
printf("Signing message... ");
73-
CHECK(CUSTOM_TINY_SHA3_signature(
74-
sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
75-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
76-
test_vector_sk) == 0);
77-
CHECK(siglen == sizeof(test_vector_sig));
78-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
72+
CHECK(CUSTOM_TINY_SHA3_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
73+
TEST_VECTOR_MSG_LEN,
74+
(const uint8_t *)TEST_VECTOR_CTX,
75+
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
76+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
7977
printf("DONE\n");
8078
return 0;
8179
}
@@ -91,11 +89,10 @@ static int example_sign(void)
9189
static int example_verify(void)
9290
{
9391
printf("Verifying signature... ");
94-
CHECK(CUSTOM_TINY_SHA3_verify(test_vector_sig, sizeof(test_vector_sig),
95-
(const uint8_t *)TEST_VECTOR_MSG,
96-
TEST_VECTOR_MSG_LEN,
97-
(const uint8_t *)TEST_VECTOR_CTX,
98-
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
92+
CHECK(CUSTOM_TINY_SHA3_verify(
93+
test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
94+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
95+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
9996
printf("DONE\n");
10097
return 0;
10198
}

examples/monolithic_build/main.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,12 @@ static int example_keygen(void)
7070
static int example_sign(void)
7171
{
7272
uint8_t sig[MLDSA_SIG_BYTES];
73-
size_t siglen;
7473

7574
printf("Signing message... ");
76-
CHECK(mldsa_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
75+
CHECK(mldsa_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
7776
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
7877
TEST_VECTOR_CTX_LEN, test_vector_sk) == 0);
79-
CHECK(siglen == sizeof(test_vector_sig));
80-
CHECK(memcmp(sig, test_vector_sig, siglen) == 0);
78+
CHECK(memcmp(sig, test_vector_sig, sizeof(test_vector_sig)) == 0);
8179
printf("DONE\n");
8280
return 0;
8381
}
@@ -93,10 +91,9 @@ static int example_sign(void)
9391
static int example_verify(void)
9492
{
9593
printf("Verifying signature... ");
96-
CHECK(mldsa_verify(test_vector_sig, sizeof(test_vector_sig),
97-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
98-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
99-
test_vector_pk) == 0);
94+
CHECK(mldsa_verify(test_vector_sig, (const uint8_t *)TEST_VECTOR_MSG,
95+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
96+
TEST_VECTOR_CTX_LEN, test_vector_pk) == 0);
10097
printf("DONE\n");
10198
return 0;
10299
}

examples/monolithic_build_multilevel/main.c

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -89,44 +89,38 @@ static int example_mldsa87_keygen(void)
8989
static int example_mldsa44_sign(void)
9090
{
9191
uint8_t sig[MLDSA44_BYTES];
92-
size_t siglen;
9392

9493
printf(" Signing message... ");
95-
CHECK(mldsa44_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
94+
CHECK(mldsa44_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
9695
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
9796
TEST_VECTOR_CTX_LEN, test_vector_sk_44) == 0);
98-
CHECK(siglen == sizeof(test_vector_sig_44));
99-
CHECK(memcmp(sig, test_vector_sig_44, siglen) == 0);
97+
CHECK(memcmp(sig, test_vector_sig_44, sizeof(test_vector_sig_44)) == 0);
10098
printf("DONE\n");
10199
return 0;
102100
}
103101

104102
static int example_mldsa65_sign(void)
105103
{
106104
uint8_t sig[MLDSA65_BYTES];
107-
size_t siglen;
108105

109106
printf(" Signing message... ");
110-
CHECK(mldsa65_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
107+
CHECK(mldsa65_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
111108
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
112109
TEST_VECTOR_CTX_LEN, test_vector_sk_65) == 0);
113-
CHECK(siglen == sizeof(test_vector_sig_65));
114-
CHECK(memcmp(sig, test_vector_sig_65, siglen) == 0);
110+
CHECK(memcmp(sig, test_vector_sig_65, sizeof(test_vector_sig_65)) == 0);
115111
printf("DONE\n");
116112
return 0;
117113
}
118114

119115
static int example_mldsa87_sign(void)
120116
{
121117
uint8_t sig[MLDSA87_BYTES];
122-
size_t siglen;
123118

124119
printf(" Signing message... ");
125-
CHECK(mldsa87_signature(sig, &siglen, (const uint8_t *)TEST_VECTOR_MSG,
120+
CHECK(mldsa87_signature(sig, (const uint8_t *)TEST_VECTOR_MSG,
126121
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
127122
TEST_VECTOR_CTX_LEN, test_vector_sk_87) == 0);
128-
CHECK(siglen == sizeof(test_vector_sig_87));
129-
CHECK(memcmp(sig, test_vector_sig_87, siglen) == 0);
123+
CHECK(memcmp(sig, test_vector_sig_87, sizeof(test_vector_sig_87)) == 0);
130124
printf("DONE\n");
131125
return 0;
132126
}
@@ -154,32 +148,29 @@ static int example_mldsa87_sign(void)
154148
static int example_mldsa44_verify(void)
155149
{
156150
printf(" Verifying signature... ");
157-
CHECK(mldsa44_verify(test_vector_sig_44, sizeof(test_vector_sig_44),
158-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
159-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
160-
test_vector_pk_44) == 0);
151+
CHECK(mldsa44_verify(test_vector_sig_44, (const uint8_t *)TEST_VECTOR_MSG,
152+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
153+
TEST_VECTOR_CTX_LEN, test_vector_pk_44) == 0);
161154
printf("DONE\n");
162155
return 0;
163156
}
164157

165158
static int example_mldsa65_verify(void)
166159
{
167160
printf(" Verifying signature... ");
168-
CHECK(mldsa65_verify(test_vector_sig_65, sizeof(test_vector_sig_65),
169-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
170-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
171-
test_vector_pk_65) == 0);
161+
CHECK(mldsa65_verify(test_vector_sig_65, (const uint8_t *)TEST_VECTOR_MSG,
162+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
163+
TEST_VECTOR_CTX_LEN, test_vector_pk_65) == 0);
172164
printf("DONE\n");
173165
return 0;
174166
}
175167

176168
static int example_mldsa87_verify(void)
177169
{
178170
printf(" Verifying signature... ");
179-
CHECK(mldsa87_verify(test_vector_sig_87, sizeof(test_vector_sig_87),
180-
(const uint8_t *)TEST_VECTOR_MSG, TEST_VECTOR_MSG_LEN,
181-
(const uint8_t *)TEST_VECTOR_CTX, TEST_VECTOR_CTX_LEN,
182-
test_vector_pk_87) == 0);
171+
CHECK(mldsa87_verify(test_vector_sig_87, (const uint8_t *)TEST_VECTOR_MSG,
172+
TEST_VECTOR_MSG_LEN, (const uint8_t *)TEST_VECTOR_CTX,
173+
TEST_VECTOR_CTX_LEN, test_vector_pk_87) == 0);
183174
printf("DONE\n");
184175
return 0;
185176
}

0 commit comments

Comments
 (0)