]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
ossl_cmp_certreq_new(): Fix POPO key mismatch in case newPkey is just public key
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Fri, 13 Nov 2020 20:45:46 +0000 (21:45 +0100)
committerDr. David von Oheimb <David.von.Oheimb@siemens.com>
Fri, 20 Nov 2020 12:36:30 +0000 (13:36 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13409)

crypto/cmp/cmp_msg.c

index 1a4a8731687693223334909aeec851e77ced5970..45cda58879b66489f3c64e5459198e5957c4d5ce 100644 (file)
@@ -334,7 +334,12 @@ OSSL_CMP_MSG *ossl_cmp_certreq_new(OSSL_CMP_CTX *ctx, int type,
     if (type != OSSL_CMP_PKIBODY_P10CR) {
         EVP_PKEY *privkey = OSSL_CMP_CTX_get0_newPkey(ctx, 1);
 
-        if (privkey == NULL)
+        /*
+         * privkey is NULL in case ctx->newPkey does not include a private key.
+         * We then may try to use ctx->pkey as fallback/default, but only
+         * if ctx-> newPkey does not include a (non-matching) public key:
+         */
+        if (privkey == NULL && OSSL_CMP_CTX_get0_newPkey(ctx, 0) == NULL)
             privkey = ctx->pkey; /* default is independent of ctx->oldCert */
         if (ctx->popoMethod == OSSL_CRMF_POPO_SIGNATURE && privkey == NULL) {
             ERR_raise(ERR_LIB_CMP, CMP_R_MISSING_PRIVATE_KEY);