Skip to content

Commit 6502956

Browse files
author
royb
committed
Updated tls and fixed x9146 bugs. Updated codepoints
1 parent 326c037 commit 6502956

22 files changed

+674
-372
lines changed

mls/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ dependencies {
4343
implementation(files("../test/libs/grpc-protobuf-lite-1.58.0.jar"))
4444
implementation(files("../test/libs/failureaccess-1.0.1.jar"))
4545
implementation(files("../test/libs/grpc-protobuf-1.58.0.jar"))
46+
implementation project(':core')
4647

4748
//Compile
4849
compileOnly(files("../test/libs/grpc-services-1.58.0.jar"))

pkix/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ dependencies {
1818

1919
implementation project(':prov')
2020
implementation project(':util')
21+
implementation project(':core')
2122

2223
java9Implementation project(':prov')
2324
java9Implementation project(':util')

tls/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ dependencies {
4949
implementation project(':prov')
5050
implementation project(':util')
5151
implementation project(':pkix')
52+
implementation project(':core')
5253

5354
java9Implementation project(':prov')
5455
java9Implementation project(':util')

tls/src/main/java/org/bouncycastle/tls/SignatureAlgorithm.java

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -40,31 +40,6 @@ public class SignatureAlgorithm
4040
public static final short gostr34102012_256 = 64;
4141
public static final short gostr34102012_512 = 65;
4242

43-
/*
44-
* custom values to link mldsa
45-
*/
46-
public static final short falcon_512 = 12;
47-
public static final short falcon_1024 = 13;
48-
public static final short custom_mldsa44 = 0x94;
49-
public static final short custom_mldsa65 = 0x95;
50-
public static final short custom_mldsa87 = 0x96;
51-
52-
public static final short custom_mldsa44_ecdsa_secp256r1_sha256 = 0x97;
53-
public static final short custom_mldsa65_ecdsa_secp384r1_sha384 = 0x98;
54-
public static final short custom_mldsa87_ecdsa_secp521r1_sha51 = 0x99;
55-
public static final short custom_mldsa44_ed25519 = 0x9A;
56-
public static final short custom_mldsa65_ed25519 = 0x9B;
57-
public static final short custom_mldsa44_rsa2048_pkcs1_sha256 = 0x9C;
58-
public static final short custom_mldsa65_rsa3072_pkcs1_sha256 = 0x9D;
59-
public static final short custom_mldsa65_rsa4096_pkcs1_sha384 = 0x9E;
60-
public static final short custom_mldsa44_rsa2048_pss_pss_sha256 = 0x9F;
61-
public static final short custom_mldsa65_rsa3072_pss_pss_sha256 = 0xA0;
62-
public static final short custom_mldsa65_rsa4096_pss_pss_sha384 = 0xA1;
63-
public static final short custom_mldsa87_ed448 = 0xA2;
64-
65-
// public static final short id_ml_dsa_44 = 0xD0;
66-
// public static final short id_ml_dsa_65 = 0xD1;
67-
// public static final short id_ml_dsa_87 = 0xD2;
6843

6944
public static short getClientCertificateType(short signatureAlgorithm)
7045
{
@@ -93,80 +68,12 @@ public static short getClientCertificateType(short signatureAlgorithm)
9368
case SignatureAlgorithm.gostr34102012_512:
9469
return ClientCertificateType.gost_sign512;
9570

96-
// case SignatureAlgorithm.dilithiumr3_2:
97-
// case SignatureAlgorithm.dilithiumr3_3:
98-
// case SignatureAlgorithm.dilithiumr3_5:
99-
10071
default:
10172
return -1;
10273
}
10374
}
10475

10576

106-
107-
public static int getSignatureScheme(short signatureAlgorithm)
108-
{
109-
switch (signatureAlgorithm)
110-
{
111-
case custom_mldsa44:
112-
return SignatureScheme.DRAFT_mldsa44;
113-
case custom_mldsa44_ecdsa_secp256r1_sha256:
114-
return SignatureScheme.mldsa44_ecdsa_secp256r1_sha256;
115-
case custom_mldsa44_ed25519:
116-
return SignatureScheme.mldsa44_ed25519;
117-
case custom_mldsa44_rsa2048_pkcs1_sha256:
118-
return SignatureScheme.mldsa44_rsa2048_pkcs1_sha256;
119-
case custom_mldsa44_rsa2048_pss_pss_sha256:
120-
return SignatureScheme.mldsa44_rsa2048_pss_pss_sha256;
121-
case custom_mldsa65:
122-
return SignatureScheme.DRAFT_mldsa65;
123-
case custom_mldsa65_ecdsa_secp384r1_sha384:
124-
return SignatureScheme.mldsa65_ecdsa_secp384r1_sha384;
125-
case custom_mldsa65_ed25519:
126-
return SignatureScheme.mldsa65_ed25519;
127-
case custom_mldsa65_rsa3072_pkcs1_sha256:
128-
return SignatureScheme.mldsa65_rsa3072_pkcs1_sha256;
129-
case custom_mldsa65_rsa4096_pkcs1_sha384:
130-
return SignatureScheme.mldsa65_rsa4096_pkcs1_sha384;
131-
case custom_mldsa65_rsa3072_pss_pss_sha256:
132-
return SignatureScheme.mldsa65_rsa3072_pss_pss_sha256;
133-
case custom_mldsa65_rsa4096_pss_pss_sha384:
134-
return SignatureScheme.mldsa65_rsa4096_pss_pss_sha384;
135-
case custom_mldsa87:
136-
return SignatureScheme.DRAFT_mldsa87;
137-
case custom_mldsa87_ecdsa_secp521r1_sha51:
138-
return SignatureScheme.mldsa87_ecdsa_secp521r1_sha51;
139-
case custom_mldsa87_ed448:
140-
return SignatureScheme.mldsa87_ed448;
141-
default:
142-
return -1;
143-
}
144-
}
145-
public static boolean isMLDSA(short signatureAlgorithm)
146-
{
147-
switch (signatureAlgorithm)
148-
{
149-
case custom_mldsa44:
150-
case custom_mldsa65:
151-
case custom_mldsa87:
152-
case custom_mldsa44_ecdsa_secp256r1_sha256:
153-
case custom_mldsa65_ecdsa_secp384r1_sha384:
154-
case custom_mldsa87_ecdsa_secp521r1_sha51:
155-
case custom_mldsa44_ed25519:
156-
case custom_mldsa65_ed25519:
157-
case custom_mldsa44_rsa2048_pkcs1_sha256:
158-
case custom_mldsa65_rsa3072_pkcs1_sha256:
159-
case custom_mldsa65_rsa4096_pkcs1_sha384:
160-
case custom_mldsa44_rsa2048_pss_pss_sha256:
161-
case custom_mldsa65_rsa3072_pss_pss_sha256:
162-
case custom_mldsa65_rsa4096_pss_pss_sha384:
163-
case custom_mldsa87_ed448:
164-
return true;
165-
default:
166-
return false;
167-
}
168-
}
169-
17077
public static String getName(short signatureAlgorithm)
17178
{
17279
switch (signatureAlgorithm)
@@ -205,12 +112,6 @@ public static String getName(short signatureAlgorithm)
205112
return "gostr34102012_256";
206113
case gostr34102012_512:
207114
return "gostr34102012_512";
208-
case custom_mldsa44:
209-
return "DRAFT_mldsa44";
210-
case custom_mldsa65:
211-
return "DRAFT_mldsa65";
212-
case custom_mldsa87:
213-
return "DRAFT_mldsa87";
214115
default:
215116
return "UNKNOWN";
216117
}

tls/src/main/java/org/bouncycastle/tls/SignatureAndHashAlgorithm.java

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,24 @@ public class SignatureAndHashAlgorithm
2121
create(SignatureScheme.ed448);
2222

2323
//TODO[x9145]: add falcon
24+
public static final SignatureAndHashAlgorithm OQS_CODEPOINT_P256_MLDSA44 =
25+
create(SignatureScheme.OQS_CODEPOINT_P256_MLDSA44);
26+
public static final SignatureAndHashAlgorithm OQS_CODEPOINT_RSA3072_MLDSA44 =
27+
create(SignatureScheme.OQS_CODEPOINT_RSA3072_MLDSA44);
28+
public static final SignatureAndHashAlgorithm OQS_CODEPOINT_P384_MLDSA65 =
29+
create(SignatureScheme.OQS_CODEPOINT_P384_MLDSA65);
30+
public static final SignatureAndHashAlgorithm OQS_CODEPOINT_P521_MLDSA87 =
31+
create(SignatureScheme.OQS_CODEPOINT_P521_MLDSA87);
32+
public static final SignatureAndHashAlgorithm WOLFSSL_HYBRID_P256_MLDSA_LEVEL2 =
33+
create(SignatureScheme.WOLFSSL_HYBRID_P256_MLDSA_LEVEL2);
34+
public static final SignatureAndHashAlgorithm WOLFSSL_HYBRID_RSA3072_MLDSA_LEVEL2 =
35+
create(SignatureScheme.WOLFSSL_HYBRID_RSA3072_MLDSA_LEVEL2);
36+
public static final SignatureAndHashAlgorithm WOLFSSL_HYBRID_P384_MLDSA_LEVEL3 =
37+
create(SignatureScheme.WOLFSSL_HYBRID_P384_MLDSA_LEVEL3);
38+
public static final SignatureAndHashAlgorithm WOLFSSL_HYBRID_P521_MLDSA_LEVEL5 =
39+
create(SignatureScheme.WOLFSSL_HYBRID_P521_MLDSA_LEVEL5);
40+
41+
2442
public static final SignatureAndHashAlgorithm DRAFT_mldsa44 =
2543
create(SignatureScheme.DRAFT_mldsa44);
2644
public static final SignatureAndHashAlgorithm DRAFT_mldsa65 =
@@ -72,17 +90,17 @@ public class SignatureAndHashAlgorithm
7290
//TODO[x9145]: No hash algorithm, find another way
7391
public static SignatureAndHashAlgorithm getHybrid(SignatureAndHashAlgorithm nativeAlg, SignatureAndHashAlgorithm altAlg)
7492
{
75-
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp256r1_sha256)) && altAlg.equals(SignatureAndHashAlgorithm.getInstanceIntrinsic(SignatureAlgorithm.custom_mldsa44)))
93+
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp256r1_sha256)) && altAlg.equals(SignatureAndHashAlgorithm.DRAFT_mldsa44))
7694
{
77-
return SignatureAndHashAlgorithm.mldsa44_ecdsa_secp256r1_sha256;
95+
return SignatureAndHashAlgorithm.WOLFSSL_HYBRID_P256_MLDSA_LEVEL2;
7896
}
79-
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp384r1_sha384)) && altAlg.equals(SignatureAndHashAlgorithm.getInstanceIntrinsic(SignatureAlgorithm.custom_mldsa65)))
97+
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp384r1_sha384)) && altAlg.equals(SignatureAndHashAlgorithm.DRAFT_mldsa65))
8098
{
81-
return SignatureAndHashAlgorithm.mldsa65_ecdsa_secp384r1_sha384;
99+
return SignatureAndHashAlgorithm.WOLFSSL_HYBRID_P384_MLDSA_LEVEL3;
82100
}
83-
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp521r1_sha512)) && altAlg.equals(SignatureAndHashAlgorithm.getInstanceIntrinsic(SignatureAlgorithm.custom_mldsa87)))
101+
if (nativeAlg.equals(create(SignatureScheme.ecdsa_secp521r1_sha512)) && altAlg.equals(SignatureAndHashAlgorithm.DRAFT_mldsa87))
84102
{
85-
return SignatureAndHashAlgorithm.mldsa87_ecdsa_secp521r1_sha51;
103+
return SignatureAndHashAlgorithm.WOLFSSL_HYBRID_P521_MLDSA_LEVEL5;
86104
}
87105
return null;
88106
}
@@ -127,36 +145,6 @@ private static SignatureAndHashAlgorithm getInstanceIntrinsic(short signatureAlg
127145
return ecdsa_brainpoolP384r1tls13_sha384;
128146
case SignatureAlgorithm.ecdsa_brainpoolP512r1tls13_sha512:
129147
return ecdsa_brainpoolP512r1tls13_sha512;
130-
case SignatureAlgorithm.custom_mldsa44:
131-
return DRAFT_mldsa44;
132-
case SignatureAlgorithm.custom_mldsa65:
133-
return DRAFT_mldsa65;
134-
case SignatureAlgorithm.custom_mldsa87:
135-
return DRAFT_mldsa87;
136-
case SignatureAlgorithm.custom_mldsa44_ecdsa_secp256r1_sha256:
137-
return mldsa44_ecdsa_secp256r1_sha256;
138-
case SignatureAlgorithm.custom_mldsa65_ecdsa_secp384r1_sha384:
139-
return mldsa65_ecdsa_secp384r1_sha384;
140-
case SignatureAlgorithm.custom_mldsa87_ecdsa_secp521r1_sha51:
141-
return mldsa87_ecdsa_secp521r1_sha51;
142-
case SignatureAlgorithm.custom_mldsa44_ed25519:
143-
return mldsa44_ed25519;
144-
case SignatureAlgorithm.custom_mldsa65_ed25519:
145-
return mldsa65_ed25519;
146-
case SignatureAlgorithm.custom_mldsa44_rsa2048_pkcs1_sha256:
147-
return mldsa44_rsa2048_pkcs1_sha256;
148-
case SignatureAlgorithm.custom_mldsa65_rsa3072_pkcs1_sha256:
149-
return mldsa65_rsa3072_pkcs1_sha256;
150-
case SignatureAlgorithm.custom_mldsa65_rsa4096_pkcs1_sha384:
151-
return mldsa65_rsa4096_pkcs1_sha384;
152-
case SignatureAlgorithm.custom_mldsa44_rsa2048_pss_pss_sha256:
153-
return mldsa44_rsa2048_pss_pss_sha256;
154-
case SignatureAlgorithm.custom_mldsa65_rsa3072_pss_pss_sha256:
155-
return mldsa65_rsa3072_pss_pss_sha256;
156-
case SignatureAlgorithm.custom_mldsa65_rsa4096_pss_pss_sha384:
157-
return mldsa65_rsa4096_pss_pss_sha384;
158-
case SignatureAlgorithm.custom_mldsa87_ed448:
159-
return mldsa87_ed448;
160148
//TODO[x9146]: add falcon
161149
default:
162150
return create(HashAlgorithm.Intrinsic, signatureAlgorithm);

tls/src/main/java/org/bouncycastle/tls/SignatureScheme.java

Lines changed: 17 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,23 @@ public class SignatureScheme
5353
public static final int DRAFT_mldsa87 = 0x0906;
5454

5555

56+
/*
57+
* LIB OQS CODEPOINTS FOR WOLFSSL
58+
*/
59+
public static final int OQS_CODEPOINT_P256_MLDSA44 = 0xff06;
60+
public static final int OQS_CODEPOINT_RSA3072_MLDSA44 = 0xff07;
61+
public static final int OQS_CODEPOINT_P384_MLDSA65 = 0xff08;
62+
public static final int OQS_CODEPOINT_P521_MLDSA87 = 0xff09;
63+
64+
/*
65+
* wolf ssl hybrid codepoints
66+
*/
67+
68+
public static final int WOLFSSL_HYBRID_P256_MLDSA_LEVEL2 = 0xFEA1;
69+
public static final int WOLFSSL_HYBRID_RSA3072_MLDSA_LEVEL2 = 0xFEA2;
70+
public static final int WOLFSSL_HYBRID_P384_MLDSA_LEVEL3 = 0xFEA4;
71+
public static final int WOLFSSL_HYBRID_P521_MLDSA_LEVEL5 = 0xFEA6;
72+
5673
/*
5774
* draft-reddy-tls-composite-mldsa-01
5875
*/
@@ -106,11 +123,6 @@ public static int from(SignatureAndHashAlgorithm sigAndHashAlg)
106123
throw new NullPointerException();
107124
}
108125

109-
if (SignatureAlgorithm.isMLDSA(sigAndHashAlg.getSignature()))
110-
{
111-
return SignatureAlgorithm.getSignatureScheme(sigAndHashAlg.getSignature());
112-
}
113-
114126
return from(sigAndHashAlg.getHash(), sigAndHashAlg.getSignature());
115127
}
116128

@@ -263,23 +275,13 @@ public static int getRSAPSSCryptoHashAlgorithm(int signatureScheme)
263275

264276
public static short getHashAlgorithm(int signatureScheme)
265277
{
266-
if(isMLDSA(signatureScheme))
267-
{
268-
return HashAlgorithm.Intrinsic;
269-
}
270-
271278
return (short)((signatureScheme >>> 8) & 0xFF);
272279
}
273280

274281
public static short getSignatureAlgorithm(int signatureScheme)
275282
{
276283
// TODO[RFC 8998] sm2sig_sm3
277284

278-
if(isMLDSA(signatureScheme))
279-
{
280-
signatureScheme = getMLDSASignatureAlgorithm(signatureScheme);
281-
}
282-
283285
return (short)(signatureScheme & 0xFF);
284286
}
285287

@@ -313,46 +315,6 @@ public static boolean isECDSA(int signatureScheme)
313315
}
314316
}
315317

316-
public static short getMLDSASignatureAlgorithm(int signatureScheme)
317-
{
318-
switch (signatureScheme)
319-
{
320-
case SignatureScheme.DRAFT_mldsa44:
321-
return SignatureAlgorithm.custom_mldsa44;
322-
case mldsa44_ecdsa_secp256r1_sha256:
323-
return SignatureAlgorithm.custom_mldsa44_ecdsa_secp256r1_sha256;
324-
case mldsa44_ed25519:
325-
return SignatureAlgorithm.custom_mldsa44_ed25519;
326-
case mldsa44_rsa2048_pkcs1_sha256:
327-
return SignatureAlgorithm.custom_mldsa44_rsa2048_pkcs1_sha256;
328-
case mldsa44_rsa2048_pss_pss_sha256:
329-
return SignatureAlgorithm.custom_mldsa44_rsa2048_pss_pss_sha256;
330-
331-
case SignatureScheme.DRAFT_mldsa65:
332-
return SignatureAlgorithm.custom_mldsa65;
333-
case mldsa65_ecdsa_secp384r1_sha384:
334-
return SignatureAlgorithm.custom_mldsa65_ecdsa_secp384r1_sha384;
335-
case mldsa65_ed25519:
336-
return SignatureAlgorithm.custom_mldsa65_ed25519;
337-
case mldsa65_rsa3072_pkcs1_sha256:
338-
return SignatureAlgorithm.custom_mldsa65_rsa3072_pkcs1_sha256;
339-
case mldsa65_rsa4096_pkcs1_sha384:
340-
return SignatureAlgorithm.custom_mldsa65_rsa4096_pkcs1_sha384;
341-
case mldsa65_rsa3072_pss_pss_sha256:
342-
return SignatureAlgorithm.custom_mldsa65_rsa3072_pss_pss_sha256;
343-
case mldsa65_rsa4096_pss_pss_sha384:
344-
return SignatureAlgorithm.custom_mldsa65_rsa4096_pss_pss_sha384;
345-
case SignatureScheme.DRAFT_mldsa87:
346-
return SignatureAlgorithm.custom_mldsa87;
347-
case mldsa87_ecdsa_secp521r1_sha51:
348-
return SignatureAlgorithm.custom_mldsa87_ecdsa_secp521r1_sha51;
349-
case mldsa87_ed448:
350-
return SignatureAlgorithm.custom_mldsa87_ed448;
351-
default:
352-
return -1;
353-
}
354-
}
355-
356318
public static boolean isMLDSA(int signatureScheme)
357319
{
358320
switch (signatureScheme)

tls/src/main/java/org/bouncycastle/tls/TlsExtensionsUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,12 @@ public static int[] getHybridSchemeList(Hashtable extensions) throws IOException
562562
byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_hybrid_scheme_list);
563563
return extensionData == null ? null : readHybridSchemeList(extensionData);
564564
}
565+
566+
public static boolean hasCertificationKeySelections(Hashtable extensions) throws IOException
567+
{
568+
byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_certificate_key_selection);
569+
return extensionData != null;
570+
}
565571
public static boolean hasClientCertificateURLExtension(Hashtable extensions) throws IOException
566572
{
567573
byte[] extensionData = TlsUtils.getExtensionData(extensions, EXT_client_certificate_url);

tls/src/main/java/org/bouncycastle/tls/TlsServerProtocol.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -426,12 +426,14 @@ else if (NamedGroup.refersToASpecificKem(namedGroup))
426426

427427
TlsUtils.establish13PhaseSecrets(tlsServerContext, pskEarlySecret, sharedSecret);
428428

429-
// X9.146 Add CKS extension
429+
// X9.146 Add CKS extension to serverHelloExt
430430
short cksCode = TlsExtensionsUtils.getCertificationKeySelection(clientHelloExtensions);
431-
if (cksCode != 0)
432-
{
433-
TlsExtensionsUtils.addCertificationKeySelection(serverHelloExtensions, cksCode);
434-
}
431+
//TODO[x9147]: This throws an error for wolfssl client!
432+
// if (cksCode != 0)
433+
// {
434+
// TlsExtensionsUtils.addCertificationKeySelection(serverHelloExtensions, cksCode);
435+
// TlsExtensionsUtils.addCertificationKeySelections(serverHelloExtensions, new byte[] {3, 2, 1});
436+
// }
435437

436438
this.serverExtensions = serverEncryptedExtensions;
437439

tls/src/main/java/org/bouncycastle/tls/TlsUtils.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,10 @@ private static Hashtable createCertSigAlgOIDs()
133133
addCertSigAlgOID(h, EdECObjectIdentifiers.id_Ed25519, SignatureAndHashAlgorithm.ed25519);
134134
addCertSigAlgOID(h, EdECObjectIdentifiers.id_Ed448, SignatureAndHashAlgorithm.ed448);
135135

136-
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_44, HashAlgorithm.Intrinsic, SignatureAlgorithm.custom_mldsa44);
137-
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_65, HashAlgorithm.Intrinsic, SignatureAlgorithm.custom_mldsa65);
138-
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_87, HashAlgorithm.Intrinsic, SignatureAlgorithm.custom_mldsa87);
136+
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_44, SignatureAndHashAlgorithm.DRAFT_mldsa44);
137+
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_65, SignatureAndHashAlgorithm.DRAFT_mldsa65);
138+
addCertSigAlgOID(h, NISTObjectIdentifiers.id_ml_dsa_87, SignatureAndHashAlgorithm.DRAFT_mldsa87);
139+
139140
// addCertSigAlgOID(h, BCObjectIdentifiers.dilithium3, SignatureAndHashAlgorithm.dilithiumr3_3);
140141
// addCertSigAlgOID(h, BCObjectIdentifiers.dilithium5, SignatureAndHashAlgorithm.dilithiumr3_5);
141142
//

0 commit comments

Comments
 (0)