Add option for using a custom salt for ourselves. ZD 17988

This commit is contained in:
David Garske
2024-05-17 08:16:04 -07:00
parent 7782f8eed2
commit 95095f5bc4
2 changed files with 32 additions and 3 deletions

View File

@ -13830,7 +13830,7 @@ int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt)
*
* @param [in, out] ctx ECIES context object.
* @param [in] salt Salt to use with KDF.
* @param [in] len Length of salt in bytes.
* @param [in] sz Length of salt in bytes.
* @return 0 on success.
* @return BAD_FUNC_ARG when ctx is NULL or salt is NULL and len is not 0.
*/
@ -13852,9 +13852,37 @@ int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 len)
return 0;
}
/* Set your own salt. By default we generate a random salt for ourselves.
* This allows overriding that after init or reset.
*
* @param [in, out] ctx ECIES context object.
* @param [in] salt Salt to use for ourselves
* @param [in] sz Length of salt in bytes.
* @return 0 on success.
* @return BAD_FUNC_ARG when ctx is NULL or salt is NULL and len is not 0.
*/
int wc_ecc_ctx_set_own_salt(ecEncCtx* ctx, const byte* salt, word32 sz)
{
byte* saltBuffer;
if (ctx == NULL || ctx->protocol == 0 || salt == NULL)
return BAD_FUNC_ARG;
if (sz > EXCHANGE_SALT_SZ)
sz = EXCHANGE_SALT_SZ;
saltBuffer = (ctx->protocol == REQ_RESP_CLIENT) ?
ctx->clientSalt :
ctx->serverSalt;
XMEMSET(saltBuffer, 0, EXCHANGE_SALT_SZ);
XMEMCPY(saltBuffer, salt, sz);
return 0;
}
static int ecc_ctx_set_salt(ecEncCtx* ctx, int flags)
{
byte* saltBuffer = NULL;
byte* saltBuffer;
if (ctx == NULL || flags == 0)
return BAD_FUNC_ARG;
@ -13864,7 +13892,6 @@ static int ecc_ctx_set_salt(ecEncCtx* ctx, int flags)
return wc_RNG_GenerateBlock(ctx->rng, saltBuffer, EXCHANGE_SALT_SZ);
}
static void ecc_ctx_init(ecEncCtx* ctx, int flags, WC_RNG* rng)
{
if (ctx) {

View File

@ -978,6 +978,8 @@ const byte* wc_ecc_ctx_get_own_salt(ecEncCtx* ctx);
WOLFSSL_API
int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
WOLFSSL_API
int wc_ecc_ctx_set_own_salt(ecEncCtx* ctx, const byte* salt, word32 sz);
WOLFSSL_API
int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 sz);
WOLFSSL_API
int wc_ecc_ctx_set_info(ecEncCtx* ctx, const byte* info, int sz);