diff options
author | Matt Caswell <matt@openssl.org> | 2020-08-11 16:17:00 +0100 |
---|---|---|
committer | Pauli <paul.dale@oracle.com> | 2020-08-29 17:40:11 +1000 |
commit | a540ef90f55c1e10feb709d09332dfa352d9f33e (patch) | |
tree | 83e75d2fae109f51af8c0583e94f4252e9198412 /crypto/evp/pmeth_lib.c | |
parent | 4db71d0175ed42586bcd4e6527caacbd18602adf (diff) |
Extend the provider MAC bridge for CMAC
The previous commits added support for HMAC, SIPHASH and Poly1305 into
the provider MAC bridge. We now extend that for CMAC too.
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/12637)
Diffstat (limited to 'crypto/evp/pmeth_lib.c')
-rw-r--r-- | crypto/evp/pmeth_lib.c | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/crypto/evp/pmeth_lib.c b/crypto/evp/pmeth_lib.c index dab1b15ab9..6a5a24288d 100644 --- a/crypto/evp/pmeth_lib.c +++ b/crypto/evp/pmeth_lib.c @@ -150,7 +150,6 @@ static int is_legacy_alg(int id, const char *keytype) * support */ case EVP_PKEY_SM2: - case EVP_PKEY_CMAC: return 1; default: return 0; @@ -1037,14 +1036,6 @@ int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, static int legacy_ctrl_to_param(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2) { - /* - * GOST CMS format is different for different cipher algorithms. - * Most of other algorithms don't have such a difference - * so this ctrl is just ignored. - */ - if (cmd == EVP_PKEY_CTRL_CIPHER) - return -2; - # ifndef OPENSSL_NO_DH if (keytype == EVP_PKEY_DHX) { switch (cmd) { @@ -1193,6 +1184,29 @@ static int legacy_ctrl_to_param(EVP_PKEY_CTX *ctx, int keytype, int optype, case EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES: return EVP_PKEY_CTX_set_scrypt_maxmem_bytes(ctx, p1); } + } else if (optype == EVP_PKEY_OP_KEYGEN) { + OSSL_PARAM params[2], *p = params; + + switch (cmd) { + case EVP_PKEY_CTRL_CIPHER: + { + char *ciphname = (char *)EVP_CIPHER_name(p2); + + *p++ = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_CIPHER, + ciphname, 0); + *p = OSSL_PARAM_construct_end(); + + return EVP_PKEY_CTX_set_params(ctx, params); + } + case EVP_PKEY_CTRL_SET_MAC_KEY: + { + *p++ = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_PRIV_KEY, + p2, p1); + *p = OSSL_PARAM_construct_end(); + + return EVP_PKEY_CTX_set_params(ctx, params); + } + } } switch (cmd) { case EVP_PKEY_CTRL_MD: @@ -1223,6 +1237,15 @@ static int legacy_ctrl_to_param(EVP_PKEY_CTX *ctx, int keytype, int optype, return -2; } } + + /* + * GOST CMS format is different for different cipher algorithms. + * Most of other algorithms don't have such a difference + * so this ctrl is just ignored. + */ + if (cmd == EVP_PKEY_CTRL_CIPHER) + return -2; + return 0; } |