Merge pull request #868 from sipa/fix_650
Fix #650: CKey::SetSecret BIGNUM leak
This commit is contained in:
commit
49355d9993
1 changed files with 4 additions and 1 deletions
|
@ -141,10 +141,13 @@ public:
|
||||||
if (vchSecret.size() != 32)
|
if (vchSecret.size() != 32)
|
||||||
throw key_error("CKey::SetSecret() : secret must be 32 bytes");
|
throw key_error("CKey::SetSecret() : secret must be 32 bytes");
|
||||||
BIGNUM *bn = BN_bin2bn(&vchSecret[0],32,BN_new());
|
BIGNUM *bn = BN_bin2bn(&vchSecret[0],32,BN_new());
|
||||||
if (bn == NULL)
|
if (bn == NULL)
|
||||||
throw key_error("CKey::SetSecret() : BN_bin2bn failed");
|
throw key_error("CKey::SetSecret() : BN_bin2bn failed");
|
||||||
if (!EC_KEY_regenerate_key(pkey,bn))
|
if (!EC_KEY_regenerate_key(pkey,bn))
|
||||||
|
{
|
||||||
|
BN_clear_free(bn);
|
||||||
throw key_error("CKey::SetSecret() : EC_KEY_regenerate_key failed");
|
throw key_error("CKey::SetSecret() : EC_KEY_regenerate_key failed");
|
||||||
|
}
|
||||||
BN_clear_free(bn);
|
BN_clear_free(bn);
|
||||||
fSet = true;
|
fSet = true;
|
||||||
if (fCompressed || fCompressedPubKey)
|
if (fCompressed || fCompressedPubKey)
|
||||||
|
|
Loading…
Reference in a new issue