Skip to content

Commit

Permalink
Merge pull request wolfSSL#7552 from dgarske/ecies_own_salt
Browse files Browse the repository at this point in the history
Add option for using a custom salt for ourselves
  • Loading branch information
SparkiDev authored May 20, 2024
2 parents 095906f + 5a0594d commit 43b2c80
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
4 changes: 2 additions & 2 deletions doc/dox_comments/header_files/ecc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1722,7 +1722,7 @@ int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
\param ctx pointer to the ecEncCtx for which to set the salt
\param salt pointer to salt buffer
\param len length salt in bytes
\param sz length salt in bytes
_Example_
\code
Expand All @@ -1742,7 +1742,7 @@ int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
\sa wc_ecc_ctx_get_peer_salt
*/

int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 len);
int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 sz);

/*!
\ingroup ECC
Expand Down
39 changes: 33 additions & 6 deletions wolfcrypt/src/ecc.c
Original file line number Diff line number Diff line change
Expand Up @@ -13830,17 +13830,17 @@ 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.
*/
int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 len)
int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 sz)
{
if (ctx == NULL || (salt == NULL && len != 0))
if (ctx == NULL || (salt == NULL && sz != 0))
return BAD_FUNC_ARG;

ctx->kdfSalt = salt;
ctx->kdfSaltSz = len;
ctx->kdfSaltSz = sz;

if (ctx->protocol == REQ_RESP_CLIENT) {
ctx->cliSt = ecCLI_SALT_SET;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions wolfssl/wolfcrypt/ecc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 43b2c80

Please sign in to comment.