bool CAccountHD::Encrypt(const CKeyingMaterial& vMasterKeyIn) { assert(sizeof(accountUUID) == WALLET_CRYPTO_IV_SIZE); if (IsReadOnly()) { return true; } // NB! We don't encrypt the keystores for HD accounts - as they only contain public keys. // Encrypt account key SecureUnsignedCharVector accountKeyPrivEncoded(BIP32_EXTKEY_SIZE); accountKeyPriv.Encode(accountKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(accountKeyPrivEncoded.begin(), accountKeyPrivEncoded.end()), std::vector<unsigned char>(accountUUID.begin(), accountUUID.end()), accountKeyPrivEncrypted)) return false; // Encrypt primary chain key SecureUnsignedCharVector primaryChainKeyPrivEncoded(BIP32_EXTKEY_SIZE); primaryChainKeyPriv.Encode(primaryChainKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(primaryChainKeyPrivEncoded.begin(), primaryChainKeyPrivEncoded.end()), primaryChainKeyPub.pubkey.GetHash(), primaryChainKeyEncrypted)) return false; // Encrypt change chain key SecureUnsignedCharVector changeChainKeyPrivEncoded(BIP32_EXTKEY_SIZE); changeChainKeyPriv.Encode(changeChainKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(changeChainKeyPrivEncoded.begin(), changeChainKeyPrivEncoded.end()), changeChainKeyPub.pubkey.GetHash(), changeChainKeyEncrypted)) return false; encrypted = true; return true; }
bool CAccountHD::Encrypt(CKeyingMaterial& vMasterKeyIn) { assert(sizeof(accountUUID) == WALLET_CRYPTO_IV_SIZE); SecureUnsignedCharVector accountKeyPrivEncoded(BIP32_EXTKEY_SIZE); accountKeyPriv.Encode(accountKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(accountKeyPrivEncoded.begin(), accountKeyPrivEncoded.end()), std::vector<unsigned char>(accountUUID.begin(), accountUUID.end()), accountKeyPrivEncrypted)) return false; SecureUnsignedCharVector primaryChainKeyPrivEncoded(BIP32_EXTKEY_SIZE); primaryChainKeyPriv.Encode(primaryChainKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(primaryChainKeyPrivEncoded.begin(), primaryChainKeyPrivEncoded.end()), primaryChainKeyPub.pubkey.GetHash(), primaryChainKeyEncrypted)) return false; SecureUnsignedCharVector changeChainKeyPrivEncoded(BIP32_EXTKEY_SIZE); changeChainKeyPriv.Encode(changeChainKeyPrivEncoded.data()); if (!EncryptSecret(vMasterKeyIn, CKeyingMaterial(changeChainKeyPrivEncoded.begin(), changeChainKeyPrivEncoded.end()), changeChainKeyPub.pubkey.GetHash(), changeChainKeyEncrypted)) return false; encrypted = true; return true; }