Skip to content

Commit de246ca

Browse files
authored
Merge pull request wolfSSL#443 from anhu/mldsa
Switching over to MLDSA for the X9.146 examples.
2 parents 3094473 + ce8179b commit de246ca

34 files changed

Lines changed: 443 additions & 426 deletions

X9.146/Makefile

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ CFLAGS+=$(DEBUG_FLAGS)
2727
#LIBS+=$(STATIC_LIB)
2828
LIBS+=$(DYN_LIB)
2929

30-
all: gen_dual_keysig_root_cert gen_dual_keysig_server_cert gen_rsa_dilithium_dual_keysig_root_cert gen_rsa_dilithium_dual_keysig_server_cert gen_rsa_falcon_dual_keysig_root_cert gen_rsa_falcon_dual_keysig_server_cert gen_ecdsa_dilithium_dual_keysig_root_cert gen_ecdsa_dilithium_dual_keysig_server_cert gen_ecdsa_falcon_dual_keysig_root_cert gen_ecdsa_falcon_dual_keysig_server_cert
30+
all: gen_dual_keysig_root_cert gen_dual_keysig_server_cert gen_rsa_mldsa_dual_keysig_root_cert gen_rsa_mldsa_dual_keysig_server_cert gen_rsa_falcon_dual_keysig_root_cert gen_rsa_falcon_dual_keysig_server_cert gen_ecdsa_mldsa_dual_keysig_root_cert gen_ecdsa_mldsa_dual_keysig_server_cert gen_ecdsa_falcon_dual_keysig_root_cert gen_ecdsa_falcon_dual_keysig_server_cert
3131

3232

3333
gen_dual_keysig_root_cert: gen_dual_keysig_cert.c
@@ -36,23 +36,23 @@ gen_dual_keysig_root_cert: gen_dual_keysig_cert.c
3636
gen_dual_keysig_server_cert: gen_dual_keysig_cert.c
3737
$(CC) -o $@ gen_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
3838

39-
gen_rsa_dilithium_dual_keysig_root_cert: gen_rsa_dilithium_dual_keysig_cert.c
40-
$(CC) -o $@ gen_rsa_dilithium_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT
39+
gen_rsa_mldsa_dual_keysig_root_cert: gen_rsa_mldsa_dual_keysig_cert.c
40+
$(CC) -o $@ gen_rsa_mldsa_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT
4141

42-
gen_rsa_dilithium_dual_keysig_server_cert: gen_rsa_dilithium_dual_keysig_cert.c
43-
$(CC) -o $@ gen_rsa_dilithium_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
42+
gen_rsa_mldsa_dual_keysig_server_cert: gen_rsa_mldsa_dual_keysig_cert.c
43+
$(CC) -o $@ gen_rsa_mldsa_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
4444

4545
gen_rsa_falcon_dual_keysig_root_cert: gen_rsa_falcon_dual_keysig_cert.c
4646
$(CC) -o $@ gen_rsa_falcon_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT
4747

4848
gen_rsa_falcon_dual_keysig_server_cert: gen_rsa_falcon_dual_keysig_cert.c
4949
$(CC) -o $@ gen_rsa_falcon_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
5050

51-
gen_ecdsa_dilithium_dual_keysig_root_cert: gen_ecdsa_dilithium_dual_keysig_cert.c
52-
$(CC) -o $@ gen_ecdsa_dilithium_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT
51+
gen_ecdsa_mldsa_dual_keysig_root_cert: gen_ecdsa_mldsa_dual_keysig_cert.c
52+
$(CC) -o $@ gen_ecdsa_mldsa_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT
5353

54-
gen_ecdsa_dilithium_dual_keysig_server_cert: gen_ecdsa_dilithium_dual_keysig_cert.c
55-
$(CC) -o $@ gen_ecdsa_dilithium_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
54+
gen_ecdsa_mldsa_dual_keysig_server_cert: gen_ecdsa_mldsa_dual_keysig_cert.c
55+
$(CC) -o $@ gen_ecdsa_mldsa_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_SERVER_CERT
5656

5757
gen_ecdsa_falcon_dual_keysig_root_cert: gen_ecdsa_falcon_dual_keysig_cert.c
5858
$(CC) -o $@ gen_ecdsa_falcon_dual_keysig_cert.c $(CFLAGS) $(CPPFLAGS) $(LIBS) -DGEN_ROOT_CERT

X9.146/README.md

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,18 @@ is going to specify what is sent in the CertificateVerify message. BOTH is simpl
2626

2727
## Post-Quantum
2828

29-
Tested with these wolfSSL build options:
29+
Tested with these wolfSSL build options for MLDSA certificates:
30+
31+
```sh
32+
./autogen.sh # If cloned from GitHub
33+
./configure --enable-experimental --enable-dual-alg-certs --enable-dilithium --enable-debug
34+
make
35+
sudo make install
36+
sudo ldconfig # required on some targets
37+
```
38+
NOTE: This DOES NOT require installation of liboqs.
39+
40+
Tested with these wolfSSL build options for Falcon certificates:
3041

3142
```sh
3243
./autogen.sh # If cloned from GitHub
@@ -35,6 +46,9 @@ make
3546
sudo make install
3647
sudo ldconfig # required on some targets
3748
```
49+
NOTE: This REQUIRES installation of liboqs for its Falcon implementation.
50+
51+
3852

3953
In the directory where this README.md file is found, clean up previous build
4054
products and certificates and then build the applications.
@@ -74,7 +88,7 @@ wolfSSL Leaving DoTls13CertificateVerify, return 0
7488

7589
### ECDSA Demos
7690

77-
#### P-256 and Dilithium Level 2 Demo
91+
#### P-256 and MLDSA44 Demo
7892
Generate the various conventional keys; the post-quantum key are pre-generated:
7993

8094
```sh
@@ -86,31 +100,31 @@ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out server-key.d
86100
Generate the certificate chain:
87101

88102
```
89-
./gen_ecdsa_dilithium_dual_keysig_root_cert 2
103+
./gen_ecdsa_mldsa_dual_keysig_root_cert 2
90104
91-
./gen_ecdsa_dilithium_dual_keysig_server_cert 2
105+
./gen_ecdsa_mldsa_dual_keysig_server_cert 2
92106
```
93107

94108
Convert the DER encoded resulting certificates and keys into PEM:
95109

96110
```
97-
openssl x509 -in ca-cert-pq.der -inform der -out ca-P256-dilithium2-cert.pem -outform pem
111+
openssl x509 -in ca-cert-pq.der -inform der -out ca-P256-mldsa44-cert.pem -outform pem
98112
99-
openssl x509 -in server-cert-pq.der -inform der -out server-P256-dilithium2-cert.pem -outform pem
113+
openssl x509 -in server-cert-pq.der -inform der -out server-P256-mldsa44-cert.pem -outform pem
100114
101115
openssl pkey -in server-key.der -inform der -out server-P256-key.pem -outform pem
102116
103-
cp ../certs/dilithium_level2_server_key.pem server-dilithium2-key-pq.pem
117+
cp ../certs/mldsa44_server_key.pem server-mldsa44-key-pq.pem
104118
```
105119
Then in wolfssl's source directory:
106120

107121
```
108-
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P256-dilithium2-cert.pem -k ../wolfssl-examples/X9.146/server-P256-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-dilithium2-key-pq.pem
122+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P256-mldsa44-cert.pem -k ../wolfssl-examples/X9.146/server-P256-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-mldsa44-key-pq.pem
109123
110-
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P256-dilithium2-cert.pem
124+
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P256-mldsa44-cert.pem
111125
```
112126

113-
#### P-384 and Dilithium Level 3 Demo
127+
#### P-384 and MLDSA65 Demo
114128
Generate the various conventional keys; the post-quantum key are pre-generated:
115129

116130
```sh
@@ -122,32 +136,32 @@ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 -out server-key.d
122136
Generate the certificate chain:
123137

124138
```
125-
./gen_ecdsa_dilithium_dual_keysig_root_cert 3
139+
./gen_ecdsa_mldsa_dual_keysig_root_cert 3
126140
127-
./gen_ecdsa_dilithium_dual_keysig_server_cert 3
141+
./gen_ecdsa_mldsa_dual_keysig_server_cert 3
128142
```
129143

130144
Convert the DER encoded resulting certificates and keys into PEM:
131145

132146
```
133-
openssl x509 -in ca-cert-pq.der -inform der -out ca-P384-dilithium3-cert.pem -outform pem
147+
openssl x509 -in ca-cert-pq.der -inform der -out ca-P384-mldsa65-cert.pem -outform pem
134148
135-
openssl x509 -in server-cert-pq.der -inform der -out server-P384-dilithium3-cert.pem -outform pem
149+
openssl x509 -in server-cert-pq.der -inform der -out server-P384-mldsa65-cert.pem -outform pem
136150
137151
openssl pkey -in server-key.der -inform der -out server-P384-key.pem -outform pem
138152
139-
cp ../certs/dilithium_level3_server_key.pem server-dilithium3-key-pq.pem
153+
cp ../certs/mldsa65_server_key.pem server-mldsa65-key-pq.pem
140154
```
141155

142156
Then in wolfssl's source directory:
143157

144158
```
145-
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P384-dilithium3-cert.pem -k ../wolfssl-examples/X9.146/server-P384-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-dilithium3-key-pq.pem
159+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P384-mldsa65-cert.pem -k ../wolfssl-examples/X9.146/server-P384-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-mldsa65-key-pq.pem
146160
147-
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P384-dilithium3-cert.pem
161+
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P384-mldsa65-cert.pem
148162
```
149163

150-
#### P-521 and Dilithium Level 5 Demo
164+
#### P-521 and MLDSA87 Demo
151165
Generate the various conventional keys; the post-quantum key are pre-generated:
152166

153167
```sh
@@ -160,29 +174,29 @@ Generate the certificate chain:
160174

161175
```
162176
163-
./gen_ecdsa_dilithium_dual_keysig_root_cert 5
177+
./gen_ecdsa_mldsa_dual_keysig_root_cert 5
164178
165-
./gen_ecdsa_dilithium_dual_keysig_server_cert 5
179+
./gen_ecdsa_mldsa_dual_keysig_server_cert 5
166180
```
167181

168182
Convert the DER encoded resulting certificates and keys into PEM:
169183

170184
```
171-
openssl x509 -in ca-cert-pq.der -inform der -out ca-P521-dilithium5-cert.pem -outform pem
185+
openssl x509 -in ca-cert-pq.der -inform der -out ca-P521-mldsa87-cert.pem -outform pem
172186
173-
openssl x509 -in server-cert-pq.der -inform der -out server-P521-dilithium5-cert.pem -outform pem
187+
openssl x509 -in server-cert-pq.der -inform der -out server-P521-mldsa87-cert.pem -outform pem
174188
175189
openssl pkey -in server-key.der -inform der -out server-P521-key.pem -outform pem
176190
177-
cp ../certs/dilithium_level5_server_key.pem server-dilithium5-key-pq.pem
191+
cp ../certs/mldsa87_server_key.pem server-mldsa87-key-pq.pem
178192
```
179193

180194
Then in wolfssl's source directory:
181195

182196
```
183-
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P521-dilithium5-cert.pem -k ../wolfssl-examples/X9.146/server-P521-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-dilithium5-key-pq.pem
197+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P521-mldsa87-cert.pem -k ../wolfssl-examples/X9.146/server-P521-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-mldsa87-key-pq.pem
184198
185-
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P521-dilithium5-cert.pem
199+
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P521-mldsa87-cert.pem
186200
```
187201

188202
#### P-256 and Falcon Level 1 Demo
@@ -262,7 +276,7 @@ examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P521-falcon5-cert.p
262276

263277
### RSA Demos
264278

265-
#### RSA-3072 and Dilithium Level 2 Demo
279+
#### RSA-3072 and MLDSA44 Demo
266280
Generate the various conventional keys; the post-quantum key are pre-generated:
267281

268282
```sh
@@ -275,28 +289,28 @@ Generate the certificate chain:
275289

276290
```
277291
278-
./gen_rsa_dilithium_dual_keysig_root_cert
292+
./gen_rsa_mldsa_dual_keysig_root_cert
279293
280-
./gen_rsa_dilithium_dual_keysig_server_cert
294+
./gen_rsa_mldsa_dual_keysig_server_cert
281295
```
282296

283297
Convert the DER encoded resulting certificates and keys into PEM:
284298

285299
```
286-
openssl x509 -in ca-cert-pq.der -inform der -out ca-rsa3072-dilithium2-cert.pem -outform pem
300+
openssl x509 -in ca-cert-pq.der -inform der -out ca-rsa3072-mldsa44-cert.pem -outform pem
287301
288-
openssl x509 -in server-cert-pq.der -inform der -out server-rsa3072-dilithium2-cert.pem -outform pem
302+
openssl x509 -in server-cert-pq.der -inform der -out server-rsa3072-mldsa44-cert.pem -outform pem
289303
290304
openssl pkey -in server-key.der -inform der -out server-rsa3072-key.pem -outform pem
291305
292-
cp ../certs/dilithium_level2_server_key.pem server-dilithium2-key-pq.pem
306+
cp ../certs/mldsa44_server_key.pem server-mldsa44-key-pq.pem
293307
```
294308
Then in wolfssl's source directory:
295309

296310
```
297-
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-rsa3072-dilithium2-cert.pem -k ../wolfssl-examples/X9.146/server-rsa3072-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-dilithium2-key-pq.pem
311+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-rsa3072-mldsa44-cert.pem -k ../wolfssl-examples/X9.146/server-rsa3072-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-mldsa44-key-pq.pem
298312
299-
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-rsa3072-dilithium2-cert.pem
313+
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-rsa3072-mldsa44-cert.pem
300314
```
301315

302316
#### RSA-3072 and Falcon Level 1 Demo

X9.146/gen_ecdsa_dilithium_dual_keysig_cert.c renamed to X9.146/gen_ecdsa_mldsa_dual_keysig_cert.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* gen_ecdsa_dilithium_dual_keysig_cert.c
1+
/* gen_ecdsa_mldsa_dual_keysig_cert.c
22
*
33
* Copyright (C) 2006-2024 wolfSSL Inc.
44
*
@@ -29,7 +29,7 @@
2929
#include <wolfssl/wolfcrypt/error-crypt.h>
3030
#include <wolfssl/wolfcrypt/logging.h>
3131

32-
#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(HAVE_LIBOQS)
32+
#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(HAVE_DILITHIUM)
3333

3434
#define LARGE_TEMP_SZ 9216
3535

@@ -79,21 +79,21 @@ static int do_certgen(int argc, char** argv)
7979
int ret = 0;
8080

8181
char caKeyFile[] = "./ca-key.der";
82-
char altPrivFile2[] = "../certs/dilithium_level2_ca_key.der";
83-
char altPrivFile3[] = "../certs/dilithium_level3_ca_key.der";
84-
char altPrivFile5[] = "../certs/dilithium_level5_ca_key.der";
82+
char altPrivFile2[] = "../certs/mldsa44_ca_key.der";
83+
char altPrivFile3[] = "../certs/mldsa65_ca_key.der";
84+
char altPrivFile5[] = "../certs/mldsa87_ca_key.der";
8585
#ifdef GEN_ROOT_CERT
8686
char newCertOutput[] = "./ca-cert-pq.der";
87-
char sapkiFile2[] = "../certs/dilithium_level2_ca_pubkey.der";
88-
char sapkiFile3[] = "../certs/dilithium_level3_ca_pubkey.der";
89-
char sapkiFile5[] = "../certs/dilithium_level5_ca_pubkey.der";
87+
char sapkiFile2[] = "../certs/mldsa44_ca_pubkey.der";
88+
char sapkiFile3[] = "../certs/mldsa65_ca_pubkey.der";
89+
char sapkiFile5[] = "../certs/mldsa87_ca_pubkey.der";
9090
#else
9191
char caCert[] = "./ca-cert-pq.der";
9292
char newCertOutput[] = "./server-cert-pq.der";
9393
char serverKeyFile[] = "./server-key.der";
94-
char sapkiFile2[] = "../certs/dilithium_level2_server_pubkey.der";
95-
char sapkiFile3[] = "../certs/dilithium_level3_server_pubkey.der";
96-
char sapkiFile5[] = "../certs/dilithium_level5_server_pubkey.der";
94+
char sapkiFile2[] = "../certs/mldsa44_server_pubkey.der";
95+
char sapkiFile3[] = "../certs/mldsa65_server_pubkey.der";
96+
char sapkiFile5[] = "../certs/mldsa87_server_pubkey.der";
9797
#endif
9898
FILE* file;
9999
Cert newCert;

X9.146/gen_rsa_dilithium_dual_keysig_cert.c renamed to X9.146/gen_rsa_mldsa_dual_keysig_cert.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* gen_rsa_dilithium_dual_keysig_cert.c
1+
/* gen_rsa_mldsa_dual_keysig_cert.c
22
*
33
* Copyright (C) 2006-2024 wolfSSL Inc.
44
*
@@ -29,7 +29,7 @@
2929
#include <wolfssl/wolfcrypt/error-crypt.h>
3030
#include <wolfssl/wolfcrypt/logging.h>
3131

32-
#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(HAVE_LIBOQS)
32+
#if defined(WOLFSSL_DUAL_ALG_CERTS) && defined(HAVE_DILITHIUM)
3333

3434
#define LARGE_TEMP_SZ 9216
3535

@@ -72,15 +72,15 @@ static int do_certgen(int argc, char** argv)
7272
int ret = 0;
7373

7474
char caKeyFile[] = "./ca-key.der";
75-
char altPrivFile[] = "../certs/dilithium_level2_ca_key.der";
75+
char altPrivFile[] = "../certs/mldsa44_ca_key.der";
7676
#ifdef GEN_ROOT_CERT
7777
char newCertOutput[] = "./ca-cert-pq.der";
78-
char sapkiFile[] = "../certs/dilithium_level2_ca_pubkey.der";
78+
char sapkiFile[] = "../certs/mldsa44_ca_pubkey.der";
7979
#else
8080
char caCert[] = "./ca-cert-pq.der";
8181
char newCertOutput[] = "./server-cert-pq.der";
8282
char serverKeyFile[] = "./server-key.der";
83-
char sapkiFile[] = "../certs/dilithium_level2_server_pubkey.der";
83+
char sapkiFile[] = "../certs/mldsa44_server_pubkey.der";
8484
#endif
8585
FILE* file;
8686
Cert newCert;

certs/dilithium_level2_ca_key.der

-3.78 KB
Binary file not shown.
-1.3 KB
Binary file not shown.
-3.78 KB
Binary file not shown.

0 commit comments

Comments
 (0)