--- crypto/srp/srp_lib.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/crypto/srp/srp_lib.c b/crypto/srp/srp_lib.c index 18d1bb9..a95fb0e 100644 --- a/crypto/srp/srp_lib.c +++ b/crypto/srp/srp_lib.c @@ -82,6 +82,7 @@ static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g) { /* k = SHA1(N | PAD(g)) -- tls-srp draft 8 */ + BIGNUM *ret = NULL; unsigned char digest[SHA_DIGEST_LENGTH]; unsigned char *tmp; @@ -94,19 +95,26 @@ static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g) BN_bn2bin(N,tmp) ; EVP_MD_CTX_init(&ctxt); - EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL); - EVP_DigestUpdate(&ctxt, tmp, longN); + if (!EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL)) + goto err; + if (!EVP_DigestUpdate(&ctxt, tmp, longN)) + goto err; memset(tmp, 0, longN); longg = BN_bn2bin(g,tmp) ; /* use the zeros behind to pad on left */ - EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg); - EVP_DigestUpdate(&ctxt, tmp, longg); - OPENSSL_free(tmp); + if (!EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg)) + goto err; + if (!EVP_DigestUpdate(&ctxt, tmp, longg)) + goto err; - EVP_DigestFinal_ex(&ctxt, digest, NULL); + if (!EVP_DigestFinal_ex(&ctxt, digest, NULL)) + goto err; EVP_MD_CTX_cleanup(&ctxt); - return BN_bin2bn(digest, sizeof(digest), NULL); + ret = BN_bin2bn(digest, sizeof(digest), NULL); +err: + OPENSSL_free(tmp); + return ret; } BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N) @@ -287,7 +295,12 @@ BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM * if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx)) goto err; + if (0) + { err : + BN_clear_free(K); + K = NULL; + } BN_CTX_free(bn_ctx); BN_clear_free(tmp); BN_clear_free(tmp2); -- 1.7.2.5 ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org