@@ -4,7 +4,10 @@ import net.corda.core.CordaOID
44import net.corda.core.crypto.Crypto
55import net.corda.core.crypto.SignatureScheme
66import net.corda.core.crypto.random63BitValue
7- import net.corda.core.internal.*
7+ import net.corda.core.internal.CertRole
8+ import net.corda.core.internal.reader
9+ import net.corda.core.internal.uncheckedCast
10+ import net.corda.core.internal.writer
811import net.corda.core.utilities.days
912import net.corda.core.utilities.millis
1013import org.bouncycastle.asn1.*
@@ -26,6 +29,7 @@ import java.math.BigInteger
2629import java.nio.file.Path
2730import java.security.KeyPair
2831import java.security.PublicKey
32+ import java.security.SignatureException
2933import java.security.cert.*
3034import java.security.cert.Certificate
3135import java.time.Duration
@@ -265,7 +269,11 @@ object X509Utilities {
265269 return JcaPKCS10CertificationRequestBuilder (subject, keyPair.public)
266270 .addAttribute(BCStyle .E , DERUTF8String (email))
267271 .addAttribute(ASN1ObjectIdentifier (CordaOID .X509_EXTENSION_CORDA_ROLE ), certRole)
268- .build(signer)
272+ .build(signer).apply {
273+ if (! isSignatureValid()) {
274+ throw SignatureException (" The certificate signing request signature validation failed." )
275+ }
276+ }
269277 }
270278
271279 fun createCertificateSigningRequest (subject : X500Principal , email : String , keyPair : KeyPair , certRole : CertRole = CertRole .NODE_CA ): PKCS10CertificationRequest {
@@ -311,6 +319,13 @@ val Certificate.x509: X509Certificate get() = requireNotNull(this as? X509Certif
311319
312320val Array <Certificate >.x509: List <X509Certificate > get() = map { it.x509 }
313321
322+ /* *
323+ * Validates the signature of the CSR
324+ */
325+ fun PKCS10CertificationRequest.isSignatureValid (): Boolean {
326+ return this .isSignatureValid(JcaContentVerifierProviderBuilder ().build(this .subjectPublicKeyInfo))
327+ }
328+
314329/* *
315330 * Wraps a [CertificateFactory] to remove boilerplate. It's unclear whether [CertificateFactory] is threadsafe so best
316331 * so assume this class is not.
0 commit comments