Add basic EVP_KEYMGMT API and libcrypto <-> provider interface
authorRichard Levitte <levitte@openssl.org>
Thu, 4 Jul 2019 22:31:42 +0000 (00:31 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 22 Jul 2019 04:17:38 +0000 (06:17 +0200)
commita94a3e0d91378b5c478f687a0dbc51914d4ed497
treea649885fc1d6560a2928c610d9adaaf4ec6dbfcc
parent7312ef3fc4a7d391272f3ba8075eabf81a229ad2
Add basic EVP_KEYMGMT API and libcrypto <-> provider interface

The idea with the key management "operation" is to support the
following set of functionality:

- Key domain parameter generation
- Key domain parameter import
- Key domain parameter export

- Key generation
- Key import
- Key export
- Key loading (HSM / hidden key support)

With that set of function, we can support handling domain parameters
on one provider, key handling on another, and key usage on a third,
with transparent export / import of applicable data.  Of course, if a
provider doesn't offer export / import functionality, then all
operations surrounding a key must be performed with the same
provider.

This method also avoids having to do anything special with legacy
assignment of libcrypto key structures, i.e. EVP_PKEY_assign_RSA().
They will simply be used as keys to be exported from whenever they are
used with provider based operations.

This change only adds the EVP_KEYMGMT API and the libcrypto <->
provider interface.  Further changes will integrate them into existing
libcrypto functionality.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9312)
crypto/evp/build.info
crypto/evp/evp_locl.h
crypto/evp/keymgmt_meth.c [new file with mode: 0644]
crypto/include/internal/evp_int.h
doc/man3/EVP_KEYMGMT.pod [new file with mode: 0644]
include/openssl/core_numbers.h
include/openssl/evp.h
include/openssl/ossl_typ.h
util/libcrypto.num
util/private.num