Share common SAE and EAP-pwd functionality: random qr/qnr creation
Use a shared helper function to create random qr/qnr values. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
2b84ca4dd9
commit
6c9543fcb7
4 changed files with 41 additions and 55 deletions
|
@ -10,6 +10,7 @@
|
|||
#include "utils/includes.h"
|
||||
|
||||
#include "utils/common.h"
|
||||
#include "crypto/crypto.h"
|
||||
#include "dragonfly.h"
|
||||
|
||||
|
||||
|
@ -25,3 +26,35 @@ int dragonfly_suitable_group(int group, int ecc_only)
|
|||
(!ecc_only &&
|
||||
(group == 15 || group == 16 || group == 17 || group == 18));
|
||||
}
|
||||
|
||||
|
||||
int dragonfly_get_random_qr_qnr(const struct crypto_bignum *prime,
|
||||
struct crypto_bignum **qr,
|
||||
struct crypto_bignum **qnr)
|
||||
{
|
||||
*qr = *qnr = NULL;
|
||||
|
||||
while (!(*qr) || !(*qnr)) {
|
||||
struct crypto_bignum *tmp;
|
||||
int res;
|
||||
|
||||
tmp = crypto_bignum_init();
|
||||
if (!tmp || crypto_bignum_rand(tmp, prime) < 0)
|
||||
break;
|
||||
|
||||
res = crypto_bignum_legendre(tmp, prime);
|
||||
if (res == 1 && !(*qr))
|
||||
*qr = tmp;
|
||||
else if (res == -1 && !(*qnr))
|
||||
*qnr = tmp;
|
||||
else
|
||||
crypto_bignum_deinit(tmp, 0);
|
||||
}
|
||||
|
||||
if (*qr && *qnr)
|
||||
return 0;
|
||||
crypto_bignum_deinit(*qr, 0);
|
||||
crypto_bignum_deinit(*qnr, 0);
|
||||
*qr = *qnr = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue