Skip to content

Commit c7c676a

Browse files
committed
(D)TLS: ML-DSA prep: guards against usage pre-1.3
1 parent 328360c commit c7c676a

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ protected DTLSTransport clientHandshake(ClientHandshakeState state)
272272
securityParameters.getNegotiatedVersion(), clientAuthSigner);
273273
clientAuthStreamSigner = clientAuthSigner.getStreamSigner();
274274

275+
TlsUtils.verify12SignatureAlgorithm(clientAuthAlgorithm, AlertDescription.internal_error);
276+
275277
if (ProtocolVersion.DTLSv12.equals(securityParameters.getNegotiatedVersion()))
276278
{
277279
TlsUtils.verifySupportedSignatureAlgorithm(securityParameters.getServerSigAlgs(),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,8 @@ protected void handleHandshakeMessage(short type, HandshakeMessageInput buf)
582582
securityParameters.getNegotiatedVersion(), clientAuthSigner);
583583
clientAuthStreamSigner = clientAuthSigner.getStreamSigner();
584584

585+
TlsUtils.verify12SignatureAlgorithm(clientAuthAlgorithm, AlertDescription.internal_error);
586+
585587
if (ProtocolVersion.TLSv12.equals(securityParameters.getNegotiatedVersion()))
586588
{
587589
TlsUtils.verifySupportedSignatureAlgorithm(securityParameters.getServerSigAlgs(),

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,6 +1535,24 @@ public static Vector parseSupportedSignatureAlgorithms(InputStream input)
15351535
return supportedSignatureAlgorithms;
15361536
}
15371537

1538+
static void verify12SignatureAlgorithm(SignatureAndHashAlgorithm signatureAlgorithm, short alertDescription)
1539+
throws IOException
1540+
{
1541+
if (signatureAlgorithm != null)
1542+
{
1543+
int signatureScheme = SignatureScheme.from(signatureAlgorithm);
1544+
1545+
// TODO In future there might be more cases, so we'd need a more general method.
1546+
if (SignatureScheme.isMLDSA(signatureScheme))
1547+
{
1548+
throw new TlsFatalAlert(alertDescription);
1549+
}
1550+
}
1551+
}
1552+
1553+
/**
1554+
* @deprecated Will be removed.
1555+
*/
15381556
public static void verifySupportedSignatureAlgorithm(Vector supportedSignatureAlgorithms,
15391557
SignatureAndHashAlgorithm signatureAlgorithm) throws IOException
15401558
{
@@ -2453,7 +2471,10 @@ static void verifyCertificateVerifyClient(TlsServerContext serverContext, Certif
24532471
}
24542472
else
24552473
{
2456-
verifySupportedSignatureAlgorithm(securityParameters.getServerSigAlgs(), sigAndHashAlg);
2474+
verify12SignatureAlgorithm(sigAndHashAlg, AlertDescription.illegal_parameter);
2475+
2476+
verifySupportedSignatureAlgorithm(securityParameters.getServerSigAlgs(), sigAndHashAlg,
2477+
AlertDescription.illegal_parameter);
24572478

24582479
signatureAlgorithm = sigAndHashAlg.getSignature();
24592480

@@ -2538,7 +2559,7 @@ private static void verify13CertificateVerify(Vector supportedAlgorithms, String
25382559
int signatureScheme = certificateVerify.getAlgorithm();
25392560

25402561
SignatureAndHashAlgorithm algorithm = SignatureScheme.getSignatureAndHashAlgorithm(signatureScheme);
2541-
verifySupportedSignatureAlgorithm(supportedAlgorithms, algorithm);
2562+
verifySupportedSignatureAlgorithm(supportedAlgorithms, algorithm, AlertDescription.illegal_parameter);
25422563

25432564
Tls13Verifier verifier = certificate.createVerifier(signatureScheme);
25442565

@@ -2633,7 +2654,10 @@ static void verifyServerKeyExchangeSignature(TlsContext context, InputStream sig
26332654
throw new TlsFatalAlert(AlertDescription.illegal_parameter);
26342655
}
26352656

2636-
verifySupportedSignatureAlgorithm(securityParameters.getClientSigAlgs(), sigAndHashAlg);
2657+
verify12SignatureAlgorithm(sigAndHashAlg, AlertDescription.illegal_parameter);
2658+
2659+
verifySupportedSignatureAlgorithm(securityParameters.getClientSigAlgs(), sigAndHashAlg,
2660+
AlertDescription.illegal_parameter);
26372661
}
26382662

26392663
TlsVerifier verifier = serverCertificate.createVerifier(signatureAlgorithm);

0 commit comments

Comments
 (0)