|
|
|
@ -138,7 +138,7 @@ CPrivKey CKey::GetPrivKey() const {
@@ -138,7 +138,7 @@ CPrivKey CKey::GetPrivKey() const {
|
|
|
|
|
size_t privkeylen; |
|
|
|
|
privkey.resize(279); |
|
|
|
|
privkeylen = 279; |
|
|
|
|
ret = ec_privkey_export_der(secp256k1_context_sign, (unsigned char*)&privkey[0], &privkeylen, begin(), fCompressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED); |
|
|
|
|
ret = ec_privkey_export_der(secp256k1_context_sign, (unsigned char*) privkey.data(), &privkeylen, begin(), fCompressed ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED); |
|
|
|
|
assert(ret); |
|
|
|
|
privkey.resize(privkeylen); |
|
|
|
|
return privkey; |
|
|
|
@ -167,7 +167,7 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, uint32_
@@ -167,7 +167,7 @@ bool CKey::Sign(const uint256 &hash, std::vector<unsigned char>& vchSig, uint32_
|
|
|
|
|
secp256k1_ecdsa_signature sig; |
|
|
|
|
int ret = secp256k1_ecdsa_sign(secp256k1_context_sign, &sig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, test_case ? extra_entropy : NULL); |
|
|
|
|
assert(ret); |
|
|
|
|
secp256k1_ecdsa_signature_serialize_der(secp256k1_context_sign, (unsigned char*)&vchSig[0], &nSigLen, &sig); |
|
|
|
|
secp256k1_ecdsa_signature_serialize_der(secp256k1_context_sign, (unsigned char*)vchSig.data(), &nSigLen, &sig); |
|
|
|
|
vchSig.resize(nSigLen); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
@ -202,7 +202,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
@@ -202,7 +202,7 @@ bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) { |
|
|
|
|
if (!ec_privkey_import_der(secp256k1_context_sign, (unsigned char*)begin(), &privkey[0], privkey.size())) |
|
|
|
|
if (!ec_privkey_import_der(secp256k1_context_sign, (unsigned char*)begin(), privkey.data(), privkey.size())) |
|
|
|
|
return false; |
|
|
|
|
fCompressed = vchPubKey.IsCompressed(); |
|
|
|
|
fValid = true; |
|
|
|
@ -245,8 +245,8 @@ void CExtKey::SetMaster(const unsigned char *seed, unsigned int nSeedLen) {
@@ -245,8 +245,8 @@ void CExtKey::SetMaster(const unsigned char *seed, unsigned int nSeedLen) {
|
|
|
|
|
static const unsigned char hashkey[] = {'B','i','t','c','o','i','n',' ','s','e','e','d'}; |
|
|
|
|
std::vector<unsigned char, secure_allocator<unsigned char>> vout(64); |
|
|
|
|
CHMAC_SHA512(hashkey, sizeof(hashkey)).Write(seed, nSeedLen).Finalize(vout.data()); |
|
|
|
|
key.Set(&vout[0], &vout[32], true); |
|
|
|
|
memcpy(chaincode.begin(), &vout[32], 32); |
|
|
|
|
key.Set(vout.data(), vout.data() + 32, true); |
|
|
|
|
memcpy(chaincode.begin(), vout.data() + 32, 32); |
|
|
|
|
nDepth = 0; |
|
|
|
|
nChild = 0; |
|
|
|
|
memset(vchFingerprint, 0, sizeof(vchFingerprint)); |
|
|
|
|