diff options
author | Pauli <pauli@openssl.org> | 2022-01-24 17:02:29 +1100 |
---|---|---|
committer | Pauli <pauli@openssl.org> | 2022-02-01 16:17:24 +1100 |
commit | 4c1a841c3de645674ed2af92da25f7f5736fae1c (patch) | |
tree | 56a37d1d3e26ba1ed11b118213db09f809db1c06 /providers/implementations/kdfs/krb5kdf.c | |
parent | d54c52c28ebb780e2ffc5b7752d35359215cf0a6 (diff) | |
download | openssl-new-4c1a841c3de645674ed2af92da25f7f5736fae1c.tar.gz |
krb5kdf: implement ctx dup operation
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/17572)
Diffstat (limited to 'providers/implementations/kdfs/krb5kdf.c')
-rw-r--r-- | providers/implementations/kdfs/krb5kdf.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/providers/implementations/kdfs/krb5kdf.c b/providers/implementations/kdfs/krb5kdf.c index 2c887f0eb9..1e86f9a6d7 100644 --- a/providers/implementations/kdfs/krb5kdf.c +++ b/providers/implementations/kdfs/krb5kdf.c @@ -34,6 +34,7 @@ /* KRB5 KDF defined in RFC 3961, Section 5.1 */ static OSSL_FUNC_kdf_newctx_fn krb5kdf_new; +static OSSL_FUNC_kdf_dupctx_fn krb5kdf_dup; static OSSL_FUNC_kdf_freectx_fn krb5kdf_free; static OSSL_FUNC_kdf_reset_fn krb5kdf_reset; static OSSL_FUNC_kdf_derive_fn krb5kdf_derive; @@ -102,6 +103,27 @@ static int krb5kdf_set_membuf(unsigned char **dst, size_t *dst_len, return OSSL_PARAM_get_octet_string(p, (void **)dst, 0, dst_len); } +static void *krb5kdf_dup(void *vctx) +{ + const KRB5KDF_CTX *src = (const KRB5KDF_CTX *)vctx; + KRB5KDF_CTX *dest; + + dest = krb5kdf_new(src->provctx); + if (dest != NULL) { + if (!ossl_prov_memdup(src->key, src->key_len, + &dest->key, &dest->key_len) + || !ossl_prov_memdup(src->constant, src->constant_len, + &dest->constant , &dest->constant_len) + || !ossl_prov_cipher_copy(&dest->cipher, &src->cipher)) + goto err; + } + return dest; + + err: + krb5kdf_free(dest); + return NULL; +} + static int krb5kdf_derive(void *vctx, unsigned char *key, size_t keylen, const OSSL_PARAM params[]) { @@ -198,6 +220,7 @@ static const OSSL_PARAM *krb5kdf_gettable_ctx_params(ossl_unused void *ctx, const OSSL_DISPATCH ossl_kdf_krb5kdf_functions[] = { { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))krb5kdf_new }, + { OSSL_FUNC_KDF_DUPCTX, (void(*)(void))krb5kdf_dup }, { OSSL_FUNC_KDF_FREECTX, (void(*)(void))krb5kdf_free }, { OSSL_FUNC_KDF_RESET, (void(*)(void))krb5kdf_reset }, { OSSL_FUNC_KDF_DERIVE, (void(*)(void))krb5kdf_derive }, |