Skip to content

Commit 56bd98e

Browse files
committed
JCE: throw InvalidAlgorithmParameterException for non-X509CertSelector target
1 parent 3bfa591 commit 56bd98e

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

src/main/java/com/wolfssl/provider/jce/WolfCryptPKIXCertPathBuilder.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ private void sanitizeCertPathParameters(CertPathParameters params)
115115
throw new InvalidAlgorithmParameterException(
116116
"params not of type PKIXBuilderParameters");
117117
}
118+
119+
/* Target constraints must be X509CertSelector if set */
120+
PKIXBuilderParameters pkixParams = (PKIXBuilderParameters)params;
121+
CertSelector selector = pkixParams.getTargetCertConstraints();
122+
if ((selector != null) && !(selector instanceof X509CertSelector)) {
123+
throw new InvalidAlgorithmParameterException(
124+
"Target certificate constraints must be X509CertSelector");
125+
}
118126
}
119127

120128
/**
@@ -317,7 +325,8 @@ private X509Certificate findTargetCertificate(PKIXBuilderParameters params)
317325

318326
if (!(selector instanceof X509CertSelector)) {
319327
throw new CertPathBuilderException(
320-
"Target certificate constraints must be X509CertSelector");
328+
"Target certificate constraints must be " +
329+
"X509CertSelector");
321330
}
322331

323332
x509Selector = (X509CertSelector)selector;

src/test/java/com/wolfssl/provider/jce/test/WolfCryptPKIXCertPathBuilderTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.security.cert.CertificateException;
6363
import java.security.cert.TrustAnchor;
6464
import java.security.cert.X509CertSelector;
65+
import java.security.cert.CertSelector;
6566
import java.security.cert.CertStore;
6667
import java.security.cert.CollectionCertStoreParameters;
6768
import java.lang.IllegalArgumentException;
@@ -4478,5 +4479,47 @@ public void testBuildWithNoCertStoresFindsAnchor()
44784479
assertNotNull("CertPathBuilderResult should not be null", result);
44794480
checkPKIXCertPathBuilderResult(result, caCert, caCert.getPublicKey());
44804481
}
4482+
4483+
/**
4484+
* Test that building with a non-X509CertSelector target constraint
4485+
* throws InvalidAlgorithmParameterException.
4486+
*/
4487+
@Test
4488+
public void testNonX509CertSelectorThrowsInvalidAlgParam()
4489+
throws Exception {
4490+
4491+
X509Certificate caCert = loadCertFromFile(caCertDer);
4492+
TrustAnchor anchor = new TrustAnchor(caCert, null);
4493+
4494+
/* Custom CertSelector that is not X509CertSelector */
4495+
CertSelector oddSelector = new CertSelector() {
4496+
public boolean match(Certificate cert) {
4497+
return false;
4498+
}
4499+
public Object clone() {
4500+
try {
4501+
return super.clone();
4502+
} catch (CloneNotSupportedException e) {
4503+
throw new RuntimeException(e);
4504+
}
4505+
}
4506+
};
4507+
4508+
PKIXBuilderParameters params = new PKIXBuilderParameters(
4509+
Collections.singleton(anchor), oddSelector);
4510+
params.setRevocationEnabled(false);
4511+
4512+
CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX", provider);
4513+
4514+
try {
4515+
cpb.build(params);
4516+
fail("Expected InvalidAlgorithmParameterException for " +
4517+
"non-X509CertSelector");
4518+
} catch (InvalidAlgorithmParameterException e) {
4519+
/* Expected */
4520+
assertNotNull("Exception message should not be null",
4521+
e.getMessage());
4522+
}
4523+
}
44814524
}
44824525

0 commit comments

Comments
 (0)