Skip to content

Commit ea6825c

Browse files
Frauschianhu
andauthored
X9.146: Sign certificates with the right key (#426)
* X9.146: Sign certificates with the right key The hybrid certificate X9.146 examples used the wrong private key for creating the alternative signature of the server certificate. It has to be the issuer key (from the root certificate), not the private key from the server certificate. Also add -d for server to disable mutual authentication. --------- Signed-off-by: Tobias Frauenschläger <t.frauenschlaeger@me.com> Co-authored-by: Anthony Hu <anthony@wolfssl.com>
1 parent a70760e commit ea6825c

6 files changed

Lines changed: 16 additions & 37 deletions

X9.146/README.md

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Tested with these wolfSSL build options:
3030

3131
```sh
3232
./autogen.sh # If cloned from GitHub
33-
./configure --enable-dual-alg-certs --with-liboqs --enable-debug
33+
./configure --enable-experimental --enable-dual-alg-certs --with-liboqs --enable-debug
3434
make
3535
sudo make install
3636
sudo ldconfig # required on some targets
@@ -107,7 +107,7 @@ openssl pkey -in ../certs/dilithium_level2_server_key.der -inform der -out serv
107107
Then in wolfssl's source directory:
108108

109109
```
110-
examples/server/server -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
110+
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
111111
112112
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P256-dilithium2-cert.pem
113113
```
@@ -146,7 +146,7 @@ openssl pkey -in ../certs/dilithium_level3_server_key.der -inform der -out serv
146146
Then in wolfssl's source directory:
147147

148148
```
149-
examples/server/server -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
149+
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
150150
151151
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P384-dilithium3-cert.pem
152152
```
@@ -185,7 +185,7 @@ openssl pkey -in ../certs/dilithium_level5_server_key.der -inform der -out serv
185185
Then in wolfssl's source directory:
186186

187187
```
188-
examples/server/server -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
188+
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
189189
190190
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P521-dilithium5-cert.pem
191191
```
@@ -224,7 +224,7 @@ i
224224
Then in wolfssl's source directory:
225225

226226
```
227-
examples/server/server -v 4 -c ../wolfssl-examples/X9.146/server-P256-falcon1-cert.pem -k ../wolfssl-examples/X9.146/server-P256-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon1-key-pq.pem
227+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P256-falcon1-cert.pem -k ../wolfssl-examples/X9.146/server-P256-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon1-key-pq.pem
228228
229229
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P256-falcon1-cert.pem
230230
```
@@ -264,7 +264,7 @@ openssl pkey -in ../certs/falcon_level5_server_key.der -inform der -out server-
264264
Then in wolfssl's source directory:
265265

266266
```
267-
examples/server/server -v 4 -c ../wolfssl-examples/X9.146/server-P521-falcon5-cert.pem -k ../wolfssl-examples/X9.146/server-P521-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon5-key-pq.pem
267+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-P521-falcon5-cert.pem -k ../wolfssl-examples/X9.146/server-P521-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon5-key-pq.pem
268268
269269
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-P521-falcon5-cert.pem
270270
```
@@ -305,7 +305,7 @@ openssl pkey -in ../certs/dilithium_level2_server_key.der -inform der -out serv
305305
Then in wolfssl's source directory:
306306

307307
```
308-
examples/server/server -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
308+
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
309309
310310
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-rsa3072-dilithium2-cert.pem
311311
```
@@ -344,23 +344,13 @@ openssl pkey -in ../certs/falcon_level1_server_key.der -inform der -out server-
344344
Then in wolfssl's source directory:
345345

346346
```
347-
examples/server/server -v 4 -c ../wolfssl-examples/X9.146/server-rsa3072-falcon1-cert.pem -k ../wolfssl-examples/X9.146/server-rsa3072-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon1-key-pq.pem
347+
examples/server/server -d -v 4 -c ../wolfssl-examples/X9.146/server-rsa3072-falcon1-cert.pem -k ../wolfssl-examples/X9.146/server-rsa3072-key.pem --altPrivKey ../wolfssl-examples/X9.146/server-falcon1-key-pq.pem
348348
349349
examples/client/client -v 4 -A ../wolfssl-examples/X9.146/ca-rsa3072-falcon1-cert.pem
350350
```
351351

352352
## Generating a Certificate Chain and Adding Alternative keys and Signatures
353353

354-
Tested with these wolfSSL build options:
355-
356-
```sh
357-
./autogen.sh # If cloned from GitHub
358-
./configure --enable-dual-alg-certs --enable-debug
359-
make
360-
sudo make install
361-
sudo ldconfig # required on some targets
362-
```
363-
364354
In the directory where this README.md file is found, build the applications:
365355

366356
```sh

X9.146/gen_dual_keysig_cert.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,14 @@ static int do_certgen(int argc, char** argv)
5555
int ret = 0;
5656

5757
char caKeyFile[] = "./ca-key.der";
58+
char altPrivFile[] = "./alt-ca-key.der";
5859
#ifdef GEN_ROOT_CERT
5960
char newCertOutput[] = "./ca-cert.der";
6061
char sapkiFile[] = "./alt-ca-pub-key.der";
61-
char altPrivFile[] = "./alt-ca-key.der";
6262
#else
6363
char caCert[] = "./ca-cert.der";
6464
char newCertOutput[] = "./server-cert.der";
6565
char sapkiFile[] = "./alt-server-pub-key.der";
66-
char altPrivFile[] = "./alt-server-key.der";
6766
char serverKeyFile[] = "./server-key.der";
6867
#endif
6968
FILE* file;

X9.146/gen_ecdsa_dilithium_dual_keysig_cert.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +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";
8285
#ifdef GEN_ROOT_CERT
8386
char newCertOutput[] = "./ca-cert-pq.der";
8487
char sapkiFile2[] = "../certs/dilithium_level2_ca_pubkey.der";
85-
char altPrivFile2[] = "../certs/dilithium_level2_ca_key.der";
8688
char sapkiFile3[] = "../certs/dilithium_level3_ca_pubkey.der";
87-
char altPrivFile3[] = "../certs/dilithium_level3_ca_key.der";
8889
char sapkiFile5[] = "../certs/dilithium_level5_ca_pubkey.der";
89-
char altPrivFile5[] = "../certs/dilithium_level5_ca_key.der";
9090
#else
9191
char caCert[] = "./ca-cert-pq.der";
9292
char newCertOutput[] = "./server-cert-pq.der";
9393
char serverKeyFile[] = "./server-key.der";
94-
9594
char sapkiFile2[] = "../certs/dilithium_level2_server_pubkey.der";
96-
char altPrivFile2[] = "../certs/dilithium_level2_server_key.der";
9795
char sapkiFile3[] = "../certs/dilithium_level3_server_pubkey.der";
98-
char altPrivFile3[] = "../certs/dilithium_level3_server_key.der";
9996
char sapkiFile5[] = "../certs/dilithium_level5_server_pubkey.der";
100-
char altPrivFile5[] = "../certs/dilithium_level5_server_key.der";
10197
#endif
10298
FILE* file;
10399
Cert newCert;

X9.146/gen_ecdsa_falcon_dual_keysig_cert.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,18 @@ static int do_certgen(int argc, char** argv)
7979
int ret = 0;
8080

8181
char caKeyFile[] = "./ca-key.der";
82+
char altPrivFile1[] = "../certs/falcon_level1_ca_key.der";
83+
char altPrivFile5[] = "../certs/falcon_level5_ca_key.der";
8284
#ifdef GEN_ROOT_CERT
8385
char newCertOutput[] = "./ca-cert-pq.der";
84-
8586
char sapkiFile1[] = "../certs/falcon_level1_ca_pubkey.der";
86-
char altPrivFile1[] = "../certs/falcon_level1_ca_key.der";
8787
char sapkiFile5[] = "../certs/falcon_level5_ca_pubkey.der";
88-
char altPrivFile5[] = "../certs/falcon_level5_ca_key.der";
8988
#else
9089
char caCert[] = "./ca-cert-pq.der";
9190
char newCertOutput[] = "./server-cert-pq.der";
9291
char serverKeyFile[] = "./server-key.der";
93-
9492
char sapkiFile1[] = "../certs/falcon_level1_server_pubkey.der";
95-
char altPrivFile1[] = "../certs/falcon_level1_server_key.der";
9693
char sapkiFile5[] = "../certs/falcon_level5_server_pubkey.der";
97-
char altPrivFile5[] = "../certs/falcon_level5_server_key.der";
9894
#endif
9995
FILE* file;
10096
Cert newCert;

X9.146/gen_rsa_dilithium_dual_keysig_cert.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +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";
7576
#ifdef GEN_ROOT_CERT
7677
char newCertOutput[] = "./ca-cert-pq.der";
7778
char sapkiFile[] = "../certs/dilithium_level2_ca_pubkey.der";
78-
char altPrivFile[] = "../certs/dilithium_level2_ca_key.der";
7979
#else
8080
char caCert[] = "./ca-cert-pq.der";
8181
char newCertOutput[] = "./server-cert-pq.der";
8282
char serverKeyFile[] = "./server-key.der";
8383
char sapkiFile[] = "../certs/dilithium_level2_server_pubkey.der";
84-
char altPrivFile[] = "../certs/dilithium_level2_server_key.der";
8584
#endif
8685
FILE* file;
8786
Cert newCert;

X9.146/gen_rsa_falcon_dual_keysig_cert.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,14 @@ static int do_certgen(int argc, char** argv)
7272
int ret = 0;
7373

7474
char caKeyFile[] = "./ca-key.der";
75+
char altPrivFile[] = "../certs/falcon_level1_ca_key.der";
7576
#ifdef GEN_ROOT_CERT
7677
char newCertOutput[] = "./ca-cert-pq.der";
7778
char sapkiFile[] = "../certs/falcon_level1_ca_pubkey.der";
78-
char altPrivFile[] = "../certs/falcon_level1_ca_key.der";
7979
#else
8080
char caCert[] = "./ca-cert-pq.der";
8181
char newCertOutput[] = "./server-cert-pq.der";
8282
char sapkiFile[] = "../certs/falcon_level1_server_pubkey.der";
83-
char altPrivFile[] = "../certs/falcon_level1_server_key.der";
8483
char serverKeyFile[] = "./server-key.der";
8584
#endif
8685
FILE* file;

0 commit comments

Comments
 (0)