diff --git a/src/key.cpp b/src/key.cpp index 512790252af..2bd63962981 100644 --- a/src/key.cpp +++ b/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& 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& 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& 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 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); diff --git a/src/key.h b/src/key.h index 9cac716ec86..d6b26f891d0 100644 --- a/src/key.h +++ b/src/key.h @@ -100,7 +100,7 @@ public: { if (size_t(pend - pbegin) != std::tuple_size_v) { 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(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; } diff --git a/src/key_io.cpp b/src/key_io.cpp index 5bcbb8a0694..a373a2201d9 100644 --- a/src/key_io.cpp +++ b/src/key_io.cpp @@ -228,7 +228,7 @@ std::string EncodeSecret(const CKey& key) { assert(key.IsValid()); std::vector 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); } diff --git a/src/pubkey.h b/src/pubkey.h index 2b655c3f73b..15d7e7bc07d 100644 --- a/src/pubkey.h +++ b/src/pubkey.h @@ -285,10 +285,11 @@ public: CPubKey GetEvenCorrespondingCPubKey() const; const unsigned char& operator[](int pos) const { return *(m_keydata.begin() + pos); } - const unsigned char* data() const { return m_keydata.begin(); } static constexpr size_t size() { return decltype(m_keydata)::size(); } + const unsigned char* data() const { return m_keydata.begin(); } const unsigned char* begin() const { return m_keydata.begin(); } const unsigned char* end() const { return m_keydata.end(); } + unsigned char* data() { return m_keydata.begin(); } unsigned char* begin() { return m_keydata.begin(); } unsigned char* end() { return m_keydata.end(); } bool operator==(const XOnlyPubKey& other) const { return m_keydata == other.m_keydata; } diff --git a/src/wallet/scriptpubkeyman.cpp b/src/wallet/scriptpubkeyman.cpp index 8f0b72c2b01..6bbe6a1647f 100644 --- a/src/wallet/scriptpubkeyman.cpp +++ b/src/wallet/scriptpubkeyman.cpp @@ -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 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 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 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 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; }