mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Merge pull request #7552 from dgarske/ecies_own_salt
Add option for using a custom salt for ourselves
This commit is contained in:
@ -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 ctx pointer to the ecEncCtx for which to set the salt
|
||||||
\param salt pointer to salt buffer
|
\param salt pointer to salt buffer
|
||||||
\param len length salt in bytes
|
\param sz length salt in bytes
|
||||||
|
|
||||||
_Example_
|
_Example_
|
||||||
\code
|
\code
|
||||||
@ -1742,7 +1742,7 @@ int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
|
|||||||
\sa wc_ecc_ctx_get_peer_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
|
\ingroup ECC
|
||||||
|
@ -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, out] ctx ECIES context object.
|
||||||
* @param [in] salt Salt to use with KDF.
|
* @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 0 on success.
|
||||||
* @return BAD_FUNC_ARG when ctx is NULL or salt is NULL and len is not 0.
|
* @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;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
ctx->kdfSalt = salt;
|
ctx->kdfSalt = salt;
|
||||||
ctx->kdfSaltSz = len;
|
ctx->kdfSaltSz = sz;
|
||||||
|
|
||||||
if (ctx->protocol == REQ_RESP_CLIENT) {
|
if (ctx->protocol == REQ_RESP_CLIENT) {
|
||||||
ctx->cliSt = ecCLI_SALT_SET;
|
ctx->cliSt = ecCLI_SALT_SET;
|
||||||
@ -13852,9 +13852,37 @@ int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 len)
|
|||||||
return 0;
|
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)
|
static int ecc_ctx_set_salt(ecEncCtx* ctx, int flags)
|
||||||
{
|
{
|
||||||
byte* saltBuffer = NULL;
|
byte* saltBuffer;
|
||||||
|
|
||||||
if (ctx == NULL || flags == 0)
|
if (ctx == NULL || flags == 0)
|
||||||
return BAD_FUNC_ARG;
|
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);
|
return wc_RNG_GenerateBlock(ctx->rng, saltBuffer, EXCHANGE_SALT_SZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void ecc_ctx_init(ecEncCtx* ctx, int flags, WC_RNG* rng)
|
static void ecc_ctx_init(ecEncCtx* ctx, int flags, WC_RNG* rng)
|
||||||
{
|
{
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
|
@ -978,6 +978,8 @@ const byte* wc_ecc_ctx_get_own_salt(ecEncCtx* ctx);
|
|||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
|
int wc_ecc_ctx_set_peer_salt(ecEncCtx* ctx, const byte* salt);
|
||||||
WOLFSSL_API
|
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);
|
int wc_ecc_ctx_set_kdf_salt(ecEncCtx* ctx, const byte* salt, word32 sz);
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
int wc_ecc_ctx_set_info(ecEncCtx* ctx, const byte* info, int sz);
|
int wc_ecc_ctx_set_info(ecEncCtx* ctx, const byte* info, int sz);
|
||||||
|
Reference in New Issue
Block a user