Skip to content

Commit b5754e7

Browse files
feat(sig): add derandomized keypair generation for ML-DSA
Add OQS_SIG_keypair_derand, mirroring the existing OQS_KEM derand API: a keypair_derand function pointer and length_keypair_seed field on OQS_SIG, a top-level OQS_SIG_keypair_derand wrapper, and per-scheme OQS_SIG_ml_dsa_{44,65,87}_keypair_derand backed by FIPS-204 ML-DSA.KeyGen_internal over a 32-byte seed. - copy_from_upstream: propagate the family-level derandomized_keypair flag into SIG scheme scope and derive the per-impl derand symbol as <signature_keypair>_internal (upstream mldsa-native META exposes no separate derand symbol); guard the whole keypair_derand definition on derandomized_keypair so non-derand schemes emit neither decl nor def. - docs: add "Keypair seed size (bytes)" to the SIG parameter-set tables. - tests: sig_test_derand verifies determinism (same seed -> identical pk/sk), seed-dependence (different seed -> different keypair), a sign/verify round-trip on the derived key, and the NULL/unsupported contract for schemes without derandomized keygen. Implements #2475 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent aa294f5 commit b5754e7

21 files changed

Lines changed: 584 additions & 240 deletions

docs/algorithms/sig/cross.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@
2222

2323
## Parameter set summary
2424

25-
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) |
26-
|:------------------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|
27-
| cross-rsdp-128-balanced | NA | EUF-CMA | 1 | 77 | 32 | 13152 |
28-
| cross-rsdp-128-fast | NA | EUF-CMA | 1 | 77 | 32 | 18432 |
29-
| cross-rsdp-128-small | NA | EUF-CMA | 1 | 77 | 32 | 12432 |
30-
| cross-rsdp-192-balanced | NA | EUF-CMA | 3 | 115 | 48 | 29853 |
31-
| cross-rsdp-192-fast | NA | EUF-CMA | 3 | 115 | 48 | 41406 |
32-
| cross-rsdp-192-small | NA | EUF-CMA | 3 | 115 | 48 | 28391 |
33-
| cross-rsdp-256-balanced | NA | EUF-CMA | 5 | 153 | 64 | 53527 |
34-
| cross-rsdp-256-fast | NA | EUF-CMA | 5 | 153 | 64 | 74590 |
35-
| cross-rsdp-256-small | NA | EUF-CMA | 5 | 153 | 64 | 50818 |
36-
| cross-rsdpg-128-balanced | NA | EUF-CMA | 1 | 54 | 32 | 9120 |
37-
| cross-rsdpg-128-fast | NA | EUF-CMA | 1 | 54 | 32 | 11980 |
38-
| cross-rsdpg-128-small | NA | EUF-CMA | 1 | 54 | 32 | 8960 |
39-
| cross-rsdpg-192-balanced | NA | EUF-CMA | 3 | 83 | 48 | 22464 |
40-
| cross-rsdpg-192-fast | NA | EUF-CMA | 3 | 83 | 48 | 26772 |
41-
| cross-rsdpg-192-small | NA | EUF-CMA | 3 | 83 | 48 | 20452 |
42-
| cross-rsdpg-256-balanced | NA | EUF-CMA | 5 | 106 | 64 | 40100 |
43-
| cross-rsdpg-256-fast | NA | EUF-CMA | 5 | 106 | 64 | 48102 |
44-
| cross-rsdpg-256-small | NA | EUF-CMA | 5 | 106 | 64 | 36454 |
25+
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) | Keypair seed size (bytes) |
26+
|:------------------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|:----------------------------|
27+
| cross-rsdp-128-balanced | NA | EUF-CMA | 1 | 77 | 32 | 13152 | NA |
28+
| cross-rsdp-128-fast | NA | EUF-CMA | 1 | 77 | 32 | 18432 | NA |
29+
| cross-rsdp-128-small | NA | EUF-CMA | 1 | 77 | 32 | 12432 | NA |
30+
| cross-rsdp-192-balanced | NA | EUF-CMA | 3 | 115 | 48 | 29853 | NA |
31+
| cross-rsdp-192-fast | NA | EUF-CMA | 3 | 115 | 48 | 41406 | NA |
32+
| cross-rsdp-192-small | NA | EUF-CMA | 3 | 115 | 48 | 28391 | NA |
33+
| cross-rsdp-256-balanced | NA | EUF-CMA | 5 | 153 | 64 | 53527 | NA |
34+
| cross-rsdp-256-fast | NA | EUF-CMA | 5 | 153 | 64 | 74590 | NA |
35+
| cross-rsdp-256-small | NA | EUF-CMA | 5 | 153 | 64 | 50818 | NA |
36+
| cross-rsdpg-128-balanced | NA | EUF-CMA | 1 | 54 | 32 | 9120 | NA |
37+
| cross-rsdpg-128-fast | NA | EUF-CMA | 1 | 54 | 32 | 11980 | NA |
38+
| cross-rsdpg-128-small | NA | EUF-CMA | 1 | 54 | 32 | 8960 | NA |
39+
| cross-rsdpg-192-balanced | NA | EUF-CMA | 3 | 83 | 48 | 22464 | NA |
40+
| cross-rsdpg-192-fast | NA | EUF-CMA | 3 | 83 | 48 | 26772 | NA |
41+
| cross-rsdpg-192-small | NA | EUF-CMA | 3 | 83 | 48 | 20452 | NA |
42+
| cross-rsdpg-256-balanced | NA | EUF-CMA | 5 | 106 | 64 | 40100 | NA |
43+
| cross-rsdpg-256-fast | NA | EUF-CMA | 5 | 106 | 64 | 48102 | NA |
44+
| cross-rsdpg-256-small | NA | EUF-CMA | 5 | 106 | 64 | 36454 | NA |
4545

4646
## cross-rsdp-128-balanced implementation characteristics
4747

docs/algorithms/sig/falcon.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525

2626
## Parameter set summary
2727

28-
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) |
29-
|:------------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|
30-
| Falcon-512 | NA | EUF-CMA | 1 | 897 | 1281 | 752 |
31-
| Falcon-1024 | NA | EUF-CMA | 5 | 1793 | 2305 | 1462 |
32-
| Falcon-padded-512 | NA | EUF-CMA | 1 | 897 | 1281 | 666 |
33-
| Falcon-padded-1024 | NA | EUF-CMA | 5 | 1793 | 2305 | 1280 |
28+
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) | Keypair seed size (bytes) |
29+
|:------------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|:----------------------------|
30+
| Falcon-512 | NA | EUF-CMA | 1 | 897 | 1281 | 752 | NA |
31+
| Falcon-1024 | NA | EUF-CMA | 5 | 1793 | 2305 | 1462 | NA |
32+
| Falcon-padded-512 | NA | EUF-CMA | 1 | 897 | 1281 | 666 | NA |
33+
| Falcon-padded-1024 | NA | EUF-CMA | 5 | 1793 | 2305 | 1280 | NA |
3434

3535
## Falcon-512 implementation characteristics
3636

docs/algorithms/sig/mayo.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424

2525
## Parameter set summary
2626

27-
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) |
28-
|:---------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|
29-
| MAYO-1 | NA | EUF-CMA | 1 | 1420 | 24 | 454 |
30-
| MAYO-2 | NA | EUF-CMA | 1 | 4912 | 24 | 186 |
31-
| MAYO-3 | NA | EUF-CMA | 3 | 2986 | 32 | 681 |
32-
| MAYO-5 | NA | EUF-CMA | 5 | 5554 | 40 | 964 |
27+
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) | Keypair seed size (bytes) |
28+
|:---------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|:----------------------------|
29+
| MAYO-1 | NA | EUF-CMA | 1 | 1420 | 24 | 454 | NA |
30+
| MAYO-2 | NA | EUF-CMA | 1 | 4912 | 24 | 186 | NA |
31+
| MAYO-3 | NA | EUF-CMA | 3 | 2986 | 32 | 681 | NA |
32+
| MAYO-5 | NA | EUF-CMA | 5 | 5554 | 40 | 964 | NA |
3333

3434
## MAYO-1 implementation characteristics
3535

docs/algorithms/sig/ml_dsa.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525

2626
## Parameter set summary
2727

28-
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) |
29-
|:---------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|
30-
| ML-DSA-44 | NA | SUF-CMA | 2 | 1312 | 2560 | 2420 |
31-
| ML-DSA-65 | NA | SUF-CMA | 3 | 1952 | 4032 | 3309 |
32-
| ML-DSA-87 | NA | SUF-CMA | 5 | 2592 | 4896 | 4627 |
28+
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Signature size (bytes) | Keypair seed size (bytes) |
29+
|:---------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|-------------------------:|----------------------------:|
30+
| ML-DSA-44 | NA | SUF-CMA | 2 | 1312 | 2560 | 2420 | 32 |
31+
| ML-DSA-65 | NA | SUF-CMA | 3 | 1952 | 4032 | 3309 | 32 |
32+
| ML-DSA-87 | NA | SUF-CMA | 5 | 2592 | 4896 | 4627 | 32 |
3333

3434
## ML-DSA-44 implementation characteristics
3535

docs/algorithms/sig/ml_dsa.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ parameter-sets:
2828
length-public-key: 1312
2929
length-secret-key: 2560
3030
length-signature: 2420
31+
length-keypair-seed: 32
3132
implementations-switch-on-runtime-cpu-features: true
3233
implementations:
3334
- upstream: primary-upstream
@@ -73,6 +74,7 @@ parameter-sets:
7374
length-public-key: 1952
7475
length-secret-key: 4032
7576
length-signature: 3309
77+
length-keypair-seed: 32
7678
implementations-switch-on-runtime-cpu-features: true
7779
implementations:
7880
- upstream: primary-upstream
@@ -118,6 +120,7 @@ parameter-sets:
118120
length-public-key: 2592
119121
length-secret-key: 4896
120122
length-signature: 4627
123+
length-keypair-seed: 32
121124
implementations-switch-on-runtime-cpu-features: true
122125
implementations:
123126
- upstream: primary-upstream

0 commit comments

Comments
 (0)