forked from wolfSSL/wolfssl
improves srp unit test to use random salt;
This commit is contained in:
@ -5398,6 +5398,23 @@ int dsa_test(void)
|
|||||||
|
|
||||||
#ifdef WOLFCRYPT_HAVE_SRP
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
|
static int generate_random_salt(byte *buf, word32 size)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
WC_RNG rng;
|
||||||
|
|
||||||
|
if(NULL == buf || !size)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (buf && size && wc_InitRng(&rng) == 0) {
|
||||||
|
ret = wc_RNG_GenerateBlock(&rng, (byte *)buf, size);
|
||||||
|
|
||||||
|
wc_FreeRng(&rng);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int srp_test(void)
|
int srp_test(void)
|
||||||
{
|
{
|
||||||
Srp cli, srv;
|
Srp cli, srv;
|
||||||
@ -5432,26 +5449,29 @@ int srp_test(void)
|
|||||||
0x02
|
0x02
|
||||||
};
|
};
|
||||||
|
|
||||||
byte salt[] = {
|
byte salt[10];
|
||||||
0xB2, 0xE5, 0x8E, 0xCC, 0xD0, 0xCF, 0x9D, 0x10, 0x3A, 0x56
|
|
||||||
};
|
|
||||||
|
|
||||||
byte verifier[] = {
|
byte verifier[80];
|
||||||
0x7C, 0xAB, 0x17, 0xFE, 0x54, 0x3E, 0x8C, 0x13, 0xF2, 0x3D, 0x21, 0xE7,
|
word32 v_size = sizeof(verifier);
|
||||||
0xD2, 0xAF, 0xAF, 0xDB, 0xA1, 0x52, 0x69, 0x9D, 0x49, 0x01, 0x79, 0x91,
|
|
||||||
0xCF, 0xD1, 0x3F, 0xE5, 0x28, 0x72, 0xCA, 0xBE, 0x13, 0xD1, 0xC2, 0xDA,
|
/* generating random salt */
|
||||||
0x65, 0x34, 0x55, 0x8F, 0x34, 0x0E, 0x05, 0xB8, 0xB4, 0x0F, 0x7F, 0x6B,
|
|
||||||
0xBB, 0xB0, 0x6B, 0x50, 0xD8, 0xB1, 0xCC, 0xB7, 0x81, 0xFE, 0xD4, 0x42,
|
r = generate_random_salt(salt, sizeof(salt));
|
||||||
0xF5, 0x11, 0xBC, 0x8A, 0x28, 0xEB, 0x50, 0xB3, 0x46, 0x08, 0xBA, 0x24,
|
|
||||||
0xA2, 0xFB, 0x7F, 0x2E, 0x0A, 0xA5, 0x33, 0xCC
|
|
||||||
};
|
|
||||||
|
|
||||||
/* client knows username and password. */
|
/* client knows username and password. */
|
||||||
/* server knows N, g, salt and verifier. */
|
/* server knows N, g, salt and verifier. */
|
||||||
|
|
||||||
r = wc_SrpInit(&cli, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
|
if (!r) r = wc_SrpInit(&cli, SRP_TYPE_SHA, SRP_CLIENT_SIDE);
|
||||||
if (!r) r = wc_SrpSetUsername(&cli, username, usernameSz);
|
if (!r) r = wc_SrpSetUsername(&cli, username, usernameSz);
|
||||||
|
|
||||||
|
/* loading N, g and salt in advance to generate the verifier. */
|
||||||
|
|
||||||
|
if (!r) r = wc_SrpSetParams(&cli, N, sizeof(N),
|
||||||
|
g, sizeof(g),
|
||||||
|
salt, sizeof(salt));
|
||||||
|
if (!r) r = wc_SrpSetPassword(&cli, password, passwordSz);
|
||||||
|
if (!r) r = wc_SrpGetVerifier(&cli, verifier, &v_size);
|
||||||
|
|
||||||
/* client sends username to server */
|
/* client sends username to server */
|
||||||
|
|
||||||
if (!r) r = wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE);
|
if (!r) r = wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE);
|
||||||
@ -5459,15 +5479,11 @@ int srp_test(void)
|
|||||||
if (!r) r = wc_SrpSetParams(&srv, N, sizeof(N),
|
if (!r) r = wc_SrpSetParams(&srv, N, sizeof(N),
|
||||||
g, sizeof(g),
|
g, sizeof(g),
|
||||||
salt, sizeof(salt));
|
salt, sizeof(salt));
|
||||||
if (!r) r = wc_SrpSetVerifier(&srv, verifier, sizeof(verifier));
|
if (!r) r = wc_SrpSetVerifier(&srv, verifier, v_size);
|
||||||
if (!r) r = wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz);
|
if (!r) r = wc_SrpGetPublic(&srv, serverPubKey, &serverPubKeySz);
|
||||||
|
|
||||||
/* server sends N, g, salt and B to client */
|
/* server sends N, g, salt and B to client */
|
||||||
|
|
||||||
if (!r) r = wc_SrpSetParams(&cli, N, sizeof(N),
|
|
||||||
g, sizeof(g),
|
|
||||||
salt, sizeof(salt));
|
|
||||||
if (!r) r = wc_SrpSetPassword(&cli, password, passwordSz);
|
|
||||||
if (!r) r = wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz);
|
if (!r) r = wc_SrpGetPublic(&cli, clientPubKey, &clientPubKeySz);
|
||||||
if (!r) r = wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
if (!r) r = wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz,
|
||||||
serverPubKey, serverPubKeySz);
|
serverPubKey, serverPubKeySz);
|
||||||
|
Reference in New Issue
Block a user