fixes conflict with reserver names used as variable names;
adds NOT_COMPILED_IN error when trying to use SRP with a hash not compiled in.
This commit is contained in:
parent
c34082b7ba
commit
12bf9b4430
@ -166,9 +166,38 @@ int wc_SrpInit(Srp* srp, SrpType type, SrpSide side)
|
|||||||
if (side != SRP_CLIENT_SIDE && side != SRP_SERVER_SIDE)
|
if (side != SRP_CLIENT_SIDE && side != SRP_SERVER_SIDE)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
if (type != SRP_TYPE_SHA && type != SRP_TYPE_SHA256 &&
|
switch (type) {
|
||||||
type != SRP_TYPE_SHA384 && type != SRP_TYPE_SHA512)
|
case SRP_TYPE_SHA:
|
||||||
return BAD_FUNC_ARG;
|
#ifdef NO_SHA
|
||||||
|
return NOT_COMPILED_IN;
|
||||||
|
#else
|
||||||
|
break; /* OK */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case SRP_TYPE_SHA256:
|
||||||
|
#ifdef NO_SHA256
|
||||||
|
return NOT_COMPILED_IN;
|
||||||
|
#else
|
||||||
|
break; /* OK */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case SRP_TYPE_SHA384:
|
||||||
|
#ifndef WOLFSSL_SHA384
|
||||||
|
return NOT_COMPILED_IN;
|
||||||
|
#else
|
||||||
|
break; /* OK */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case SRP_TYPE_SHA512:
|
||||||
|
#ifndef WOLFSSL_SHA512
|
||||||
|
return NOT_COMPILED_IN;
|
||||||
|
#else
|
||||||
|
break; /* OK */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
/* initializing variables */
|
/* initializing variables */
|
||||||
|
|
||||||
@ -402,25 +431,25 @@ int wc_SrpSetPrivate(Srp* srp, const byte* private, word32 size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Generates random data using wolfcrypt RNG. */
|
/** Generates random data using wolfcrypt RNG. */
|
||||||
static int wc_SrpGenPrivate(Srp* srp, byte* private, word32 size)
|
static int wc_SrpGenPrivate(Srp* srp, byte* priv, word32 size)
|
||||||
{
|
{
|
||||||
WC_RNG rng;
|
WC_RNG rng;
|
||||||
int r = wc_InitRng(&rng);
|
int r = wc_InitRng(&rng);
|
||||||
|
|
||||||
if (!r) r = wc_RNG_GenerateBlock(&rng, private, size);
|
if (!r) r = wc_RNG_GenerateBlock(&rng, priv, size);
|
||||||
if (!r) r = wc_SrpSetPrivate(srp, private, size);
|
if (!r) r = wc_SrpSetPrivate(srp, priv, size);
|
||||||
if (!r) wc_FreeRng(&rng);
|
if (!r) wc_FreeRng(&rng);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wc_SrpGetPublic(Srp* srp, byte* public, word32* size)
|
int wc_SrpGetPublic(Srp* srp, byte* pub, word32* size)
|
||||||
{
|
{
|
||||||
mp_int pubkey;
|
mp_int pubkey;
|
||||||
word32 modulusSz;
|
word32 modulusSz;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!srp || !public || !size)
|
if (!srp || !pub || !size)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
|
|
||||||
if (mp_iszero(&srp->auth))
|
if (mp_iszero(&srp->auth))
|
||||||
@ -436,7 +465,7 @@ int wc_SrpGetPublic(Srp* srp, byte* public, word32* size)
|
|||||||
|
|
||||||
/* priv = random() */
|
/* priv = random() */
|
||||||
if (mp_iszero(&srp->priv))
|
if (mp_iszero(&srp->priv))
|
||||||
r = wc_SrpGenPrivate(srp, public, modulusSz);
|
r = wc_SrpGenPrivate(srp, pub, modulusSz);
|
||||||
|
|
||||||
/* client side: A = g ^ a % N */
|
/* client side: A = g ^ a % N */
|
||||||
if (srp->side == SRP_CLIENT_SIDE) {
|
if (srp->side == SRP_CLIENT_SIDE) {
|
||||||
@ -459,8 +488,8 @@ int wc_SrpGetPublic(Srp* srp, byte* public, word32* size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* extract public key to buffer */
|
/* extract public key to buffer */
|
||||||
XMEMSET(public, 0, modulusSz);
|
XMEMSET(pub, 0, modulusSz);
|
||||||
if (!r) r = mp_to_unsigned_bin(&pubkey, public);
|
if (!r) r = mp_to_unsigned_bin(&pubkey, pub);
|
||||||
if (!r) *size = mp_unsigned_bin_size(&pubkey);
|
if (!r) *size = mp_unsigned_bin_size(&pubkey);
|
||||||
mp_clear(&pubkey);
|
mp_clear(&pubkey);
|
||||||
|
|
||||||
|
@ -62,18 +62,10 @@ typedef enum {
|
|||||||
* SRP hash type, SHA[1|256|384|512].
|
* SRP hash type, SHA[1|256|384|512].
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#ifndef NO_SHA
|
|
||||||
SRP_TYPE_SHA = 1,
|
SRP_TYPE_SHA = 1,
|
||||||
#endif
|
|
||||||
#ifndef NO_SHA256
|
|
||||||
SRP_TYPE_SHA256 = 2,
|
SRP_TYPE_SHA256 = 2,
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA384
|
|
||||||
SRP_TYPE_SHA384 = 3,
|
SRP_TYPE_SHA384 = 3,
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA512
|
|
||||||
SRP_TYPE_SHA512 = 4,
|
SRP_TYPE_SHA512 = 4,
|
||||||
#endif
|
|
||||||
} SrpType;
|
} SrpType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -230,12 +222,12 @@ WOLFSSL_API int wc_SrpGetVerifier(Srp* srp, byte* verifier, word32* size);
|
|||||||
* This function MAY be called before wc_SrpGetPublic.
|
* This function MAY be called before wc_SrpGetPublic.
|
||||||
*
|
*
|
||||||
* @param[in,out] srp the Srp structure.
|
* @param[in,out] srp the Srp structure.
|
||||||
* @param[in] private the ephemeral value.
|
* @param[in] priv the ephemeral value.
|
||||||
* @param[in] size the private size in bytes.
|
* @param[in] size the private size in bytes.
|
||||||
*
|
*
|
||||||
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
*/
|
*/
|
||||||
WOLFSSL_API int wc_SrpSetPrivate(Srp* srp, const byte* private, word32 size);
|
WOLFSSL_API int wc_SrpSetPrivate(Srp* srp, const byte* priv, word32 size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the public ephemeral value.
|
* Gets the public ephemeral value.
|
||||||
@ -246,13 +238,13 @@ WOLFSSL_API int wc_SrpSetPrivate(Srp* srp, const byte* private, word32 size);
|
|||||||
* This function MUST be called after wc_SrpSetPassword or wc_SrpSetVerifier.
|
* This function MUST be called after wc_SrpSetPassword or wc_SrpSetVerifier.
|
||||||
*
|
*
|
||||||
* @param[in,out] srp the Srp structure.
|
* @param[in,out] srp the Srp structure.
|
||||||
* @param[out] public the buffer to write the public ephemeral value.
|
* @param[out] pub the buffer to write the public ephemeral value.
|
||||||
* @param[in,out] size the the buffer size in bytes. Will be updated with
|
* @param[in,out] size the the buffer size in bytes. Will be updated with
|
||||||
* the ephemeral value size.
|
* the ephemeral value size.
|
||||||
*
|
*
|
||||||
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
* @return 0 on success, {@literal <} 0 on error. @see error-crypt.h
|
||||||
*/
|
*/
|
||||||
WOLFSSL_API int wc_SrpGetPublic(Srp* srp, byte* public, word32* size);
|
WOLFSSL_API int wc_SrpGetPublic(Srp* srp, byte* pub, word32* size);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user