PROV: Make the DER to KEY deserializer decode parameters too
authorRichard Levitte <levitte@openssl.org>
Sun, 2 Aug 2020 11:12:54 +0000 (13:12 +0200)
committerPauli <paul.dale@oracle.com>
Tue, 4 Aug 2020 04:35:12 +0000 (14:35 +1000)
It should be noted that this may be dodgy if we ever encounter
parameter objects that look like something else.  However, experience
with the OSSL_STORE 'file:' loader, which does exactly this kind of
thing, has worked fine so far.

A possibility could be that to decode parameters specifically, we
demand that there's an incoming data type specifying this, which
demands by extension that parameters can only come from a file format
that has the parameter type encoded, such as PEM.  This would be a
future effort.

Fixes #12568

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/12569)

providers/implementations/serializers/deserialize_der2key.c

index a544d8522c3b8014e89cc4e6de12c2b95854185d..87ac7b5e122d5bd14c1a929bd0fb376c1ed3e068 100644 (file)
@@ -130,6 +130,11 @@ static int der2key_deserialize(void *vctx, OSSL_CORE_BIO *cin,
         pkey = d2i_PUBKEY(NULL, &derp, der_len);
     }
 
+    if (pkey == NULL) {
+        derp = der;
+        pkey = d2i_KeyParams(ctx->desc->type, NULL, &derp, der_len);
+    }
+
     if (pkey != NULL) {
         /*
          * Tear out the low-level key pointer from the pkey,