mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-24 13:05:53 +00:00
Fix null pointer in ec wrapper
This commit is contained in:
@@ -71,7 +71,7 @@ static bool ECDSAVerify (uint256 const& hash, std::uint8_t const* sig, size_t si
|
||||
|
||||
static bool ECDSAVerify (uint256 const& hash, Blob const& sig, const openssl::ec_key& key)
|
||||
{
|
||||
return ECDSAVerify (hash, sig.data(), sig.size(), (EC_KEY*) key.get());
|
||||
return key.valid() && ECDSAVerify (hash, sig.data(), sig.size(), (EC_KEY*) key.get());
|
||||
}
|
||||
|
||||
bool ECDSAVerify (uint256 const& hash,
|
||||
|
||||
@@ -55,33 +55,34 @@ ec_key ECDSAPrivateKey (uint256 const& serialized)
|
||||
}
|
||||
|
||||
EC_KEY* key = new_initialized_EC_KEY();
|
||||
ec_key::pointer_t ptr = nullptr;
|
||||
|
||||
const bool ok = EC_KEY_set_private_key (key, bn);
|
||||
|
||||
BN_clear_free (bn);
|
||||
|
||||
if (! ok)
|
||||
{
|
||||
if (ok)
|
||||
ptr = (ec_key::pointer_t) key;
|
||||
else
|
||||
EC_KEY_free (key);
|
||||
}
|
||||
|
||||
return ec_key::acquire ((ec_key::pointer_t) key);
|
||||
return ec_key(ptr);
|
||||
}
|
||||
|
||||
ec_key ECDSAPublicKey (std::uint8_t const* data, std::size_t size)
|
||||
{
|
||||
EC_KEY* key = new_initialized_EC_KEY();
|
||||
ec_key::pointer_t ptr = nullptr;
|
||||
|
||||
if (o2i_ECPublicKey (&key, &data, size) != nullptr)
|
||||
{
|
||||
EC_KEY_set_conv_form (key, POINT_CONVERSION_COMPRESSED);
|
||||
ptr = (ec_key::pointer_t) key;
|
||||
}
|
||||
else
|
||||
{
|
||||
EC_KEY_free (key);
|
||||
}
|
||||
|
||||
return ec_key::acquire ((ec_key::pointer_t) key);
|
||||
return ec_key(ptr);
|
||||
}
|
||||
|
||||
ec_key ECDSAPublicKey (Blob const& serialized)
|
||||
|
||||
@@ -34,8 +34,6 @@ static inline EC_KEY* get_EC_KEY (const ec_key& that)
|
||||
return (EC_KEY*) that.get();
|
||||
}
|
||||
|
||||
const ec_key ec_key::invalid = ec_key::acquire (nullptr);
|
||||
|
||||
ec_key::ec_key (const ec_key& that)
|
||||
{
|
||||
if (that.ptr == nullptr)
|
||||
|
||||
@@ -31,32 +31,28 @@ class ec_key
|
||||
public:
|
||||
using pointer_t = struct opaque_EC_KEY*;
|
||||
|
||||
private:
|
||||
pointer_t ptr;
|
||||
|
||||
void destroy();
|
||||
ec_key () : ptr(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
ec_key (pointer_t raw) : ptr(raw)
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
static const ec_key invalid;
|
||||
|
||||
static ec_key acquire (pointer_t raw) { return ec_key (raw); }
|
||||
|
||||
//ec_key() : ptr() {}
|
||||
|
||||
ec_key (const ec_key&);
|
||||
ec_key& operator= (const ec_key&) = delete;
|
||||
|
||||
~ec_key()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
|
||||
bool valid() const
|
||||
{
|
||||
return ptr != nullptr;
|
||||
}
|
||||
|
||||
pointer_t get() const { return ptr; }
|
||||
|
||||
ec_key (const ec_key&);
|
||||
|
||||
pointer_t release()
|
||||
{
|
||||
pointer_t released = ptr;
|
||||
@@ -66,7 +62,12 @@ public:
|
||||
return released;
|
||||
}
|
||||
|
||||
bool valid() const { return ptr != nullptr; }
|
||||
private:
|
||||
pointer_t ptr;
|
||||
|
||||
void destroy();
|
||||
|
||||
ec_key& operator= (const ec_key&) = delete;
|
||||
};
|
||||
|
||||
} // openssl
|
||||
|
||||
@@ -133,7 +133,7 @@ static ec_key ec_key_new_secp256k1_compressed()
|
||||
|
||||
EC_KEY_set_conv_form (key, POINT_CONVERSION_COMPRESSED);
|
||||
|
||||
return ec_key::acquire ((ec_key::pointer_t) key);
|
||||
return ec_key((ec_key::pointer_t) key);
|
||||
}
|
||||
|
||||
void serialize_ec_point (ec_point const& point, std::uint8_t* ptr)
|
||||
|
||||
Reference in New Issue
Block a user