@@ -125,8 +125,8 @@ bool CKey::Check(const unsigned char *vch) {
125
125
126
126
void CKey::MakeNewKey (bool fCompressedIn ) {
127
127
do {
128
- GetStrongRandBytes (vch, sizeof (vch ));
129
- } while (!Check (vch ));
128
+ GetStrongRandBytes (keydata. data (), keydata. size ( ));
129
+ } while (!Check (keydata. data () ));
130
130
fValid = true ;
131
131
fCompressed = fCompressedIn ;
132
132
}
@@ -224,20 +224,18 @@ bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) {
224
224
bool CKey::Derive (CKey& keyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode& cc) const {
225
225
assert (IsValid ());
226
226
assert (IsCompressed ());
227
- unsigned char out[64 ];
228
- LockObject (out);
227
+ std::vector<unsigned char , secure_allocator<unsigned char >> vout (64 );
229
228
if ((nChild >> 31 ) == 0 ) {
230
229
CPubKey pubkey = GetPubKey ();
231
230
assert (pubkey.begin () + 33 == pubkey.end ());
232
- BIP32Hash (cc, nChild, *pubkey.begin (), pubkey.begin ()+1 , out );
231
+ BIP32Hash (cc, nChild, *pubkey.begin (), pubkey.begin ()+1 , vout. data () );
233
232
} else {
234
233
assert (begin () + 32 == end ());
235
- BIP32Hash (cc, nChild, 0 , begin (), out );
234
+ BIP32Hash (cc, nChild, 0 , begin (), vout. data () );
236
235
}
237
- memcpy (ccChild.begin (), out +32 , 32 );
236
+ memcpy (ccChild.begin (), vout. data () +32 , 32 );
238
237
memcpy ((unsigned char *)keyChild.begin (), begin (), 32 );
239
- bool ret = secp256k1_ec_privkey_tweak_add (secp256k1_context_sign, (unsigned char *)keyChild.begin (), out);
240
- UnlockObject (out);
238
+ bool ret = secp256k1_ec_privkey_tweak_add (secp256k1_context_sign, (unsigned char *)keyChild.begin (), vout.data ());
241
239
keyChild.fCompressed = true ;
242
240
keyChild.fValid = ret;
243
241
return ret;
@@ -253,12 +251,10 @@ bool CExtKey::Derive(CExtKey &out, unsigned int _nChild) const {
253
251
254
252
void CExtKey::SetMaster (const unsigned char *seed, unsigned int nSeedLen) {
255
253
static const unsigned char hashkey[] = {' B' ,' i' ,' t' ,' c' ,' o' ,' i' ,' n' ,' ' ,' s' ,' e' ,' e' ,' d' };
256
- unsigned char out[64 ];
257
- LockObject (out);
258
- CHMAC_SHA512 (hashkey, sizeof (hashkey)).Write (seed, nSeedLen).Finalize (out);
259
- key.Set (&out[0 ], &out[32 ], true );
260
- memcpy (chaincode.begin (), &out[32 ], 32 );
261
- UnlockObject (out);
254
+ std::vector<unsigned char , secure_allocator<unsigned char >> vout (64 );
255
+ CHMAC_SHA512 (hashkey, sizeof (hashkey)).Write (seed, nSeedLen).Finalize (vout.data ());
256
+ key.Set (&vout[0 ], &vout[32 ], true );
257
+ memcpy (chaincode.begin (), &vout[32 ], 32 );
262
258
nDepth = 0 ;
263
259
nChild = 0 ;
264
260
memset (vchFingerprint, 0 , sizeof (vchFingerprint));
@@ -308,12 +304,10 @@ void ECC_Start() {
308
304
309
305
{
310
306
// Pass in a random blinding seed to the secp256k1 context.
311
- unsigned char seed[32 ];
312
- LockObject (seed);
313
- GetRandBytes (seed, 32 );
314
- bool ret = secp256k1_context_randomize (ctx, seed);
307
+ std::vector<unsigned char , secure_allocator<unsigned char >> vseed (32 );
308
+ GetRandBytes (vseed.data (), 32 );
309
+ bool ret = secp256k1_context_randomize (ctx, vseed.data ());
315
310
assert (ret);
316
- UnlockObject (seed);
317
311
}
318
312
319
313
secp256k1_context_sign = ctx;
0 commit comments