Adapt EVP_CIPHER_{param_to_asn1,asn1_to_param} for use with provider.
authorRichard Levitte <levitte@openssl.org>
Wed, 25 Sep 2019 06:56:14 +0000 (08:56 +0200)
committerRichard Levitte <levitte@openssl.org>
Tue, 1 Oct 2019 20:51:00 +0000 (22:51 +0200)
commitc96399e296d9c280115d2ed9c129399c61b8edfc
treeee16bbca01f961d999a8555bba334b36ab85fd9e
parentbbecf04e7861b6ab9ca1bd5ee5100bd49a347b4a
Adapt EVP_CIPHER_{param_to_asn1,asn1_to_param} for use with provider.

So far, these two funtions have depended on legacy EVP_CIPHER
implementations to be able to do their work.  This change adapts them
to work with provided implementations as well, in one of two possible
ways:

1.  If the implementation's set_asn1_parameters or get_asn1_parameters
    function pointers are non-NULL, this is a legacy implementation,
    and that function is called.
2.  Otherwise, if the cipher doesn't have EVP_CIPH_FLAG_CUSTOM_ASN1
    set, the default AlgorithmIdentifier parameter code in libcrypto
    is executed.
3.  Otherwise, if the cipher is a provided implementation, the ASN1
    type structure is converted to a DER blob which is then passed to
    the implementation as a parameter (param_to_asn1) or the DER blob
    is retrieved from the implementation as a parameter and converted
    locally to a ASN1_TYPE (asn1_to_param).

With this, the old flag EVP_CIPH_FLAG_DEFAULT_ASN1 has become
irrelevant and is simply ignored.

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10008)
crypto/evp/evp_lib.c
doc/man7/provider-cipher.pod
include/openssl/core_names.h
include/openssl/evp.h