Skip to content

Commit

Permalink
scrypt: implement ctx dup operation
Browse files Browse the repository at this point in the history
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from #17572)

(cherry picked from commit cdcdcf5)
Reviewed-by: Hugo Landau <hlandau@openssl.org>
  • Loading branch information
paulidale authored and t8m committed Nov 11, 2022
1 parent cb94904 commit e85d09d
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions providers/implementations/kdfs/scrypt.c
Expand Up @@ -21,10 +21,12 @@
#include "prov/provider_ctx.h"
#include "prov/providercommon.h"
#include "prov/implementations.h"
#include "prov/provider_util.h"

#ifndef OPENSSL_NO_SCRYPT

static OSSL_FUNC_kdf_newctx_fn kdf_scrypt_new;
static OSSL_FUNC_kdf_dupctx_fn kdf_scrypt_dup;
static OSSL_FUNC_kdf_freectx_fn kdf_scrypt_free;
static OSSL_FUNC_kdf_reset_fn kdf_scrypt_reset;
static OSSL_FUNC_kdf_derive_fn kdf_scrypt_derive;
Expand Down Expand Up @@ -92,6 +94,38 @@ static void kdf_scrypt_reset(void *vctx)
kdf_scrypt_init(ctx);
}

static void *kdf_scrypt_dup(void *vctx)
{
const KDF_SCRYPT *src = (const KDF_SCRYPT *)vctx;
KDF_SCRYPT *dest;

dest = kdf_scrypt_new(src->libctx);
if (dest != NULL) {
if (src->sha256 != NULL && !EVP_MD_up_ref(src->sha256))
goto err;
if (src->propq != NULL) {
dest->propq = OPENSSL_strdup(src->propq);
if (dest->propq == NULL)
goto err;
}
if (!ossl_prov_memdup(src->salt, src->salt_len,
&dest->salt, &dest->salt_len)
|| !ossl_prov_memdup(src->pass, src->pass_len,
&dest->pass , &dest->pass_len))
goto err;
dest->N = src->N;
dest->r = src->r;
dest->p = src->p;
dest->maxmem_bytes = src->maxmem_bytes;
dest->sha256 = src->sha256;
}
return dest;

err:
kdf_scrypt_free(dest);
return NULL;
}

static void kdf_scrypt_init(KDF_SCRYPT *ctx)
{
/* Default values are the most conservative recommendation given in the
Expand Down Expand Up @@ -275,6 +309,7 @@ static const OSSL_PARAM *kdf_scrypt_gettable_ctx_params(ossl_unused void *ctx,

const OSSL_DISPATCH ossl_kdf_scrypt_functions[] = {
{ OSSL_FUNC_KDF_NEWCTX, (void(*)(void))kdf_scrypt_new },
{ OSSL_FUNC_KDF_DUPCTX, (void(*)(void))kdf_scrypt_dup },
{ OSSL_FUNC_KDF_FREECTX, (void(*)(void))kdf_scrypt_free },
{ OSSL_FUNC_KDF_RESET, (void(*)(void))kdf_scrypt_reset },
{ OSSL_FUNC_KDF_DERIVE, (void(*)(void))kdf_scrypt_derive },
Expand Down

0 comments on commit e85d09d

Please sign in to comment.