mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
refactor: Allow std::span construction from CKey
This commit is contained in:
parent
999962d68d
commit
fa96d93711
4 changed files with 17 additions and 17 deletions
18
src/key.cpp
18
src/key.cpp
|
@ -179,7 +179,7 @@ CPrivKey CKey::GetPrivKey() const {
|
|||
size_t seckeylen;
|
||||
seckey.resize(SIZE);
|
||||
seckeylen = SIZE;
|
||||
ret = ec_seckey_export_der(secp256k1_context_sign, seckey.data(), &seckeylen, begin(), fCompressed);
|
||||
ret = ec_seckey_export_der(secp256k1_context_sign, seckey.data(), &seckeylen, UCharCast(begin()), fCompressed);
|
||||
assert(ret);
|
||||
seckey.resize(seckeylen);
|
||||
return seckey;
|
||||
|
@ -190,7 +190,7 @@ CPubKey CKey::GetPubKey() const {
|
|||
secp256k1_pubkey pubkey;
|
||||
size_t clen = CPubKey::SIZE;
|
||||
CPubKey result;
|
||||
int ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &pubkey, begin());
|
||||
int ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &pubkey, UCharCast(begin()));
|
||||
assert(ret);
|
||||
secp256k1_ec_pubkey_serialize(secp256k1_context_sign, (unsigned char*)result.begin(), &clen, &pubkey, fCompressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED);
|
||||
assert(result.size() == clen);
|
||||
|
@ -220,19 +220,19 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, bool gr
|
|||
WriteLE32(extra_entropy, test_case);
|
||||
secp256k1_ecdsa_signature sig;
|
||||
uint32_t counter = 0;
|
||||
int ret = secp256k1_ecdsa_sign(secp256k1_context_sign, &sig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, (!grind && test_case) ? extra_entropy : nullptr);
|
||||
int ret = secp256k1_ecdsa_sign(secp256k1_context_sign, &sig, hash.begin(), UCharCast(begin()), secp256k1_nonce_function_rfc6979, (!grind && test_case) ? extra_entropy : nullptr);
|
||||
|
||||
// Grind for low R
|
||||
while (ret && !SigHasLowR(&sig) && grind) {
|
||||
WriteLE32(extra_entropy, ++counter);
|
||||
ret = secp256k1_ecdsa_sign(secp256k1_context_sign, &sig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, extra_entropy);
|
||||
ret = secp256k1_ecdsa_sign(secp256k1_context_sign, &sig, hash.begin(), UCharCast(begin()), secp256k1_nonce_function_rfc6979, extra_entropy);
|
||||
}
|
||||
assert(ret);
|
||||
secp256k1_ecdsa_signature_serialize_der(secp256k1_context_sign, vchSig.data(), &nSigLen, &sig);
|
||||
vchSig.resize(nSigLen);
|
||||
// Additional verification step to prevent using a potentially corrupted signature
|
||||
secp256k1_pubkey pk;
|
||||
ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &pk, begin());
|
||||
ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &pk, UCharCast(begin()));
|
||||
assert(ret);
|
||||
ret = secp256k1_ecdsa_verify(secp256k1_context_static, &sig, hash.begin(), &pk);
|
||||
assert(ret);
|
||||
|
@ -258,7 +258,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
|
|||
vchSig.resize(CPubKey::COMPACT_SIGNATURE_SIZE);
|
||||
int rec = -1;
|
||||
secp256k1_ecdsa_recoverable_signature rsig;
|
||||
int ret = secp256k1_ecdsa_sign_recoverable(secp256k1_context_sign, &rsig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, nullptr);
|
||||
int ret = secp256k1_ecdsa_sign_recoverable(secp256k1_context_sign, &rsig, hash.begin(), UCharCast(begin()), secp256k1_nonce_function_rfc6979, nullptr);
|
||||
assert(ret);
|
||||
ret = secp256k1_ecdsa_recoverable_signature_serialize_compact(secp256k1_context_sign, &vchSig[1], &rec, &rsig);
|
||||
assert(ret);
|
||||
|
@ -266,7 +266,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
|
|||
vchSig[0] = 27 + rec + (fCompressed ? 4 : 0);
|
||||
// Additional verification step to prevent using a potentially corrupted signature
|
||||
secp256k1_pubkey epk, rpk;
|
||||
ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &epk, begin());
|
||||
ret = secp256k1_ec_pubkey_create(secp256k1_context_sign, &epk, UCharCast(begin()));
|
||||
assert(ret);
|
||||
ret = secp256k1_ecdsa_recover(secp256k1_context_static, &rpk, &rsig, hash.begin());
|
||||
assert(ret);
|
||||
|
@ -279,7 +279,7 @@ bool CKey::SignSchnorr(const uint256& hash, Span<unsigned char> sig, const uint2
|
|||
{
|
||||
assert(sig.size() == 64);
|
||||
secp256k1_keypair keypair;
|
||||
if (!secp256k1_keypair_create(secp256k1_context_sign, &keypair, begin())) return false;
|
||||
if (!secp256k1_keypair_create(secp256k1_context_sign, &keypair, UCharCast(begin()))) return false;
|
||||
if (merkle_root) {
|
||||
secp256k1_xonly_pubkey pubkey;
|
||||
if (!secp256k1_keypair_xonly_pub(secp256k1_context_sign, &pubkey, nullptr, &keypair)) return false;
|
||||
|
@ -324,7 +324,7 @@ bool CKey::Derive(CKey& keyChild, ChainCode &ccChild, unsigned int nChild, const
|
|||
BIP32Hash(cc, nChild, *pubkey.begin(), pubkey.begin()+1, vout.data());
|
||||
} else {
|
||||
assert(size() == 32);
|
||||
BIP32Hash(cc, nChild, 0, begin(), vout.data());
|
||||
BIP32Hash(cc, nChild, 0, UCharCast(begin()), vout.data());
|
||||
}
|
||||
memcpy(ccChild.begin(), vout.data()+32, 32);
|
||||
keyChild.Set(begin(), begin() + 32, true);
|
||||
|
|
|
@ -100,7 +100,7 @@ public:
|
|||
{
|
||||
if (size_t(pend - pbegin) != std::tuple_size_v<KeyType>) {
|
||||
ClearKeyData();
|
||||
} else if (Check(&pbegin[0])) {
|
||||
} else if (Check(UCharCast(&pbegin[0]))) {
|
||||
MakeKeyData();
|
||||
memcpy(keydata->data(), (unsigned char*)&pbegin[0], keydata->size());
|
||||
fCompressed = fCompressedIn;
|
||||
|
@ -112,8 +112,8 @@ public:
|
|||
//! Simple read-only vector-like interface.
|
||||
unsigned int size() const { return keydata ? keydata->size() : 0; }
|
||||
const std::byte* data() const { return keydata ? reinterpret_cast<const std::byte*>(keydata->data()) : nullptr; }
|
||||
const unsigned char* begin() const { return keydata ? keydata->data() : nullptr; }
|
||||
const unsigned char* end() const { return begin() + size(); }
|
||||
const std::byte* begin() const { return data(); }
|
||||
const std::byte* end() const { return data() + size(); }
|
||||
|
||||
//! Check whether this private key is valid.
|
||||
bool IsValid() const { return !!keydata; }
|
||||
|
|
|
@ -228,7 +228,7 @@ std::string EncodeSecret(const CKey& key)
|
|||
{
|
||||
assert(key.IsValid());
|
||||
std::vector<unsigned char> data = Params().Base58Prefix(CChainParams::SECRET_KEY);
|
||||
data.insert(data.end(), key.begin(), key.end());
|
||||
data.insert(data.end(), UCharCast(key.begin()), UCharCast(key.end()));
|
||||
if (key.IsCompressed()) {
|
||||
data.push_back(1);
|
||||
}
|
||||
|
|
|
@ -280,7 +280,7 @@ bool LegacyScriptPubKeyMan::Encrypt(const CKeyingMaterial& master_key, WalletBat
|
|||
{
|
||||
const CKey &key = mKey.second;
|
||||
CPubKey vchPubKey = key.GetPubKey();
|
||||
CKeyingMaterial vchSecret(key.begin(), key.end());
|
||||
CKeyingMaterial vchSecret{UCharCast(key.begin()), UCharCast(key.end())};
|
||||
std::vector<unsigned char> vchCryptedSecret;
|
||||
if (!EncryptSecret(master_key, vchSecret, vchPubKey.GetHash(), vchCryptedSecret)) {
|
||||
encrypted_batch = nullptr;
|
||||
|
@ -810,7 +810,7 @@ bool LegacyScriptPubKeyMan::AddKeyPubKeyInner(const CKey& key, const CPubKey &pu
|
|||
}
|
||||
|
||||
std::vector<unsigned char> vchCryptedSecret;
|
||||
CKeyingMaterial vchSecret(key.begin(), key.end());
|
||||
CKeyingMaterial vchSecret{UCharCast(key.begin()), UCharCast(key.end())};
|
||||
if (!EncryptSecret(m_storage.GetEncryptionKey(), vchSecret, pubkey.GetHash(), vchCryptedSecret)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -2088,7 +2088,7 @@ bool DescriptorScriptPubKeyMan::Encrypt(const CKeyingMaterial& master_key, Walle
|
|||
{
|
||||
const CKey &key = key_in.second;
|
||||
CPubKey pubkey = key.GetPubKey();
|
||||
CKeyingMaterial secret(key.begin(), key.end());
|
||||
CKeyingMaterial secret{UCharCast(key.begin()), UCharCast(key.end())};
|
||||
std::vector<unsigned char> crypted_secret;
|
||||
if (!EncryptSecret(master_key, secret, pubkey.GetHash(), crypted_secret)) {
|
||||
return false;
|
||||
|
@ -2261,7 +2261,7 @@ bool DescriptorScriptPubKeyMan::AddDescriptorKeyWithDB(WalletBatch& batch, const
|
|||
}
|
||||
|
||||
std::vector<unsigned char> crypted_secret;
|
||||
CKeyingMaterial secret(key.begin(), key.end());
|
||||
CKeyingMaterial secret{UCharCast(key.begin()), UCharCast(key.end())};
|
||||
if (!EncryptSecret(m_storage.GetEncryptionKey(), secret, pubkey.GetHash(), crypted_secret)) {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue