diff options
Diffstat (limited to 'src/lib/libcrypto/srp/srp_lib.c')
| -rw-r--r-- | src/lib/libcrypto/srp/srp_lib.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/lib/libcrypto/srp/srp_lib.c b/src/lib/libcrypto/srp/srp_lib.c index 81fc11d2a3..a57ee3640f 100644 --- a/src/lib/libcrypto/srp/srp_lib.c +++ b/src/lib/libcrypto/srp/srp_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: srp_lib.c,v 1.5 2014/06/12 15:49:30 deraadt Exp $ */ | 1 | /* $OpenBSD: srp_lib.c,v 1.6 2014/07/10 20:18:51 miod Exp $ */ |
| 2 | /* Written by Christophe Renou (christophe.renou@edelweb.fr) with | 2 | /* Written by Christophe Renou (christophe.renou@edelweb.fr) with |
| 3 | * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr) | 3 | * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr) |
| 4 | * for the EdelKey project and contributed to the OpenSSL project 2004. | 4 | * for the EdelKey project and contributed to the OpenSSL project 2004. |
| @@ -89,14 +89,14 @@ static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g) | |||
| 89 | 89 | ||
| 90 | if ((tmp = malloc(longN)) == NULL) | 90 | if ((tmp = malloc(longN)) == NULL) |
| 91 | return NULL; | 91 | return NULL; |
| 92 | BN_bn2bin(N,tmp) ; | 92 | BN_bn2bin(N,tmp); |
| 93 | 93 | ||
| 94 | EVP_MD_CTX_init(&ctxt); | 94 | EVP_MD_CTX_init(&ctxt); |
| 95 | EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL); | 95 | EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL); |
| 96 | EVP_DigestUpdate(&ctxt, tmp, longN); | 96 | EVP_DigestUpdate(&ctxt, tmp, longN); |
| 97 | 97 | ||
| 98 | memset(tmp, 0, longN); | 98 | memset(tmp, 0, longN); |
| 99 | longg = BN_bn2bin(g,tmp) ; | 99 | longg = BN_bn2bin(g,tmp); |
| 100 | /* use the zeros behind to pad on left */ | 100 | /* use the zeros behind to pad on left */ |
| 101 | EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg); | 101 | EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg); |
| 102 | EVP_DigestUpdate(&ctxt, tmp, longg); | 102 | EVP_DigestUpdate(&ctxt, tmp, longg); |
| @@ -257,6 +257,7 @@ BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g) | |||
| 257 | BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u) | 257 | BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u) |
| 258 | { | 258 | { |
| 259 | BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL , *k = NULL, *K = NULL; | 259 | BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL , *k = NULL, *K = NULL; |
| 260 | BIGNUM *ret = NULL; | ||
| 260 | BN_CTX *bn_ctx; | 261 | BN_CTX *bn_ctx; |
| 261 | 262 | ||
| 262 | if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL || a == NULL || | 263 | if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL || a == NULL || |
| @@ -285,13 +286,17 @@ BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM * | |||
| 285 | if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx)) | 286 | if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx)) |
| 286 | goto err; | 287 | goto err; |
| 287 | 288 | ||
| 289 | ret = K; | ||
| 290 | K = NULL; | ||
| 291 | |||
| 288 | err : | 292 | err : |
| 289 | BN_CTX_free(bn_ctx); | 293 | BN_CTX_free(bn_ctx); |
| 290 | BN_clear_free(tmp); | 294 | BN_clear_free(tmp); |
| 291 | BN_clear_free(tmp2); | 295 | BN_clear_free(tmp2); |
| 292 | BN_clear_free(tmp3); | 296 | BN_clear_free(tmp3); |
| 293 | BN_free(k); | 297 | BN_free(k); |
| 294 | return K; | 298 | BN_clear_free(K); |
| 299 | return ret; | ||
| 295 | } | 300 | } |
| 296 | 301 | ||
| 297 | int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N) | 302 | int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N) |
