|
@@ -177,6 +177,7 @@ BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
|
|
|
const BIGNUM *x, const BIGNUM *a, const BIGNUM *u)
|
|
|
{
|
|
|
BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL, *k = NULL, *K = NULL;
|
|
|
+ BIGNUM *xtmp = NULL;
|
|
|
BN_CTX *bn_ctx;
|
|
|
|
|
|
if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL
|
|
@@ -185,10 +186,13 @@ BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
|
|
|
|
|
|
if ((tmp = BN_new()) == NULL ||
|
|
|
(tmp2 = BN_new()) == NULL ||
|
|
|
- (tmp3 = BN_new()) == NULL)
|
|
|
+ (tmp3 = BN_new()) == NULL ||
|
|
|
+ (xtmp = BN_new()) == NULL)
|
|
|
goto err;
|
|
|
|
|
|
- if (!BN_mod_exp(tmp, g, x, N, bn_ctx))
|
|
|
+ BN_with_flags(xtmp, x, BN_FLG_CONSTTIME);
|
|
|
+ BN_set_flags(tmp, BN_FLG_CONSTTIME);
|
|
|
+ if (!BN_mod_exp(tmp, g, xtmp, N, bn_ctx))
|
|
|
goto err;
|
|
|
if ((k = srp_Calc_k(N, g)) == NULL)
|
|
|
goto err;
|
|
@@ -196,7 +200,7 @@ BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
|
|
|
goto err;
|
|
|
if (!BN_mod_sub(tmp, B, tmp2, N, bn_ctx))
|
|
|
goto err;
|
|
|
- if (!BN_mul(tmp3, u, x, bn_ctx))
|
|
|
+ if (!BN_mul(tmp3, u, xtmp, bn_ctx))
|
|
|
goto err;
|
|
|
if (!BN_add(tmp2, a, tmp3))
|
|
|
goto err;
|
|
@@ -208,6 +212,7 @@ BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g,
|
|
|
|
|
|
err:
|
|
|
BN_CTX_free(bn_ctx);
|
|
|
+ BN_free(xtmp);
|
|
|
BN_clear_free(tmp);
|
|
|
BN_clear_free(tmp2);
|
|
|
BN_clear_free(tmp3);
|