checkState(hashToKeys.isEmpty(), "Tried to deserialize into a non-empty chain"); for (Protos.Key key : keys) { if (key.getType() != Protos.Key.Type.ORIGINAL && key.getType() != Protos.Key.Type.ENCRYPTED_SCRYPT_AES) continue; boolean encrypted = key.getType() == Protos.Key.Type.ENCRYPTED_SCRYPT_AES; byte[] priv = key.hasSecretBytes() ? key.getSecretBytes().toByteArray() : null; if (!key.hasPublicKey()) throw new UnreadableWalletException("Public key missing"); byte[] pub = key.getPublicKey().toByteArray(); ECKey ecKey; if (encrypted) { checkState(keyCrypter != null, "This wallet is encrypted but encrypt() was not called prior to deserialization"); if (!key.hasEncryptedData()) throw new UnreadableWalletException("Encrypted private key data missing"); Protos.EncryptedData proto = key.getEncryptedData(); EncryptedData e = new EncryptedData(proto.getInitialisationVector().toByteArray(), proto.getEncryptedPrivateKey().toByteArray()); ecKey = ECKey.fromPublicOnly(pub); ecKey.setCreationTimeSeconds(key.getCreationTimestamp() / 1000); importKeyLocked(ecKey);
public org.bitcoinj.wallet.Protos.Key buildPartial() { org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0;
/** * <code>repeated .wallet.Key key = 3;</code> */ public org.bitcoinj.wallet.Protos.Key.Builder addKeyBuilder( int index) { return getKeyFieldBuilder().addBuilder( index, org.bitcoinj.wallet.Protos.Key.getDefaultInstance()); } /**
while (iter.hasNext()) { Protos.Key key = iter.next(); final Protos.Key.Type t = key.getType(); if (t == Protos.Key.Type.DETERMINISTIC_MNEMONIC) { accountPath = newArrayList(); for (int i : key.getAccountPathList()) { accountPath.add(new ChildNumber(i)); long timestamp = key.getCreationTimestamp() / 1000; if (key.hasSecretBytes()) { if (key.hasEncryptedDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); byte[] seedBytes = null; if (key.hasDeterministicSeed()) { seedBytes = key.getDeterministicSeed().toByteArray(); seed = new DeterministicSeed(key.getSecretBytes().toStringUtf8(), seedBytes, passphrase, timestamp); } else if (key.hasEncryptedData()) { if (key.hasDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); EncryptedData data = new EncryptedData(key.getEncryptedData().getInitialisationVector().toByteArray(), key.getEncryptedData().getEncryptedPrivateKey().toByteArray()); EncryptedData encryptedSeedBytes = null; if (key.hasEncryptedDeterministicSeed()) { Protos.EncryptedData encryptedSeed = key.getEncryptedDeterministicSeed(); encryptedSeedBytes = new EncryptedData(encryptedSeed.getInitialisationVector().toByteArray(), encryptedSeed.getEncryptedPrivateKey().toByteArray());
while (iter.hasNext()) { Protos.Key key = iter.next(); final Protos.Key.Type t = key.getType(); if (t == Protos.Key.Type.DETERMINISTIC_MNEMONIC) { if (chain != null) { long timestamp = key.getCreationTimestamp() / 1000; if (key.hasSecretBytes()) { if (key.hasEncryptedDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); byte[] seedBytes = null; if (key.hasDeterministicSeed()) { seedBytes = key.getDeterministicSeed().toByteArray(); seed = new DeterministicSeed(key.getSecretBytes().toStringUtf8(), seedBytes, passphrase, timestamp); } else if (key.hasEncryptedData()) { if (key.hasDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); EncryptedData data = new EncryptedData(key.getEncryptedData().getInitialisationVector().toByteArray(), key.getEncryptedData().getEncryptedPrivateKey().toByteArray()); EncryptedData encryptedSeedBytes = null; if (key.hasEncryptedDeterministicSeed()) { Protos.EncryptedData encryptedSeed = key.getEncryptedDeterministicSeed(); encryptedSeedBytes = new EncryptedData(encryptedSeed.getInitialisationVector().toByteArray(), encryptedSeed.getEncryptedPrivateKey().toByteArray()); throw new UnreadableWalletException("Malformed key proto: " + key.toString());
while (iter.hasNext()) { Protos.Key key = iter.next(); final Protos.Key.Type t = key.getType(); if (t == Protos.Key.Type.DETERMINISTIC_MNEMONIC) { if (chain != null) { long timestamp = key.getCreationTimestamp() / 1000; if (key.hasSecretBytes()) { if (key.hasEncryptedDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); byte[] seedBytes = null; if (key.hasDeterministicSeed()) { seedBytes = key.getDeterministicSeed().toByteArray(); seed = new DeterministicSeed(key.getSecretBytes().toStringUtf8(), seedBytes, passphrase, timestamp); } else if (key.hasEncryptedData()) { if (key.hasDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); EncryptedData data = new EncryptedData(key.getEncryptedData().getInitialisationVector().toByteArray(), key.getEncryptedData().getEncryptedPrivateKey().toByteArray()); EncryptedData encryptedSeedBytes = null; if (key.hasEncryptedDeterministicSeed()) { Protos.EncryptedData encryptedSeed = key.getEncryptedDeterministicSeed(); encryptedSeedBytes = new EncryptedData(encryptedSeed.getInitialisationVector().toByteArray(), encryptedSeed.getEncryptedPrivateKey().toByteArray()); throw new UnreadableWalletException("Malformed key proto: " + key.toString());
while (iter.hasNext()) { Protos.Key key = iter.next(); final Protos.Key.Type t = key.getType(); if (t == Protos.Key.Type.DETERMINISTIC_MNEMONIC) { if (chain != null) { long timestamp = key.getCreationTimestamp() / 1000; if (key.hasSecretBytes()) { if (key.hasEncryptedDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); byte[] seedBytes = null; if (key.hasDeterministicSeed()) { seedBytes = key.getDeterministicSeed().toByteArray(); seed = new DeterministicSeed(key.getSecretBytes().toStringUtf8(), seedBytes, passphrase, timestamp); } else if (key.hasEncryptedData()) { if (key.hasDeterministicSeed()) throw new UnreadableWalletException("Malformed key proto: " + key.toString()); EncryptedData data = new EncryptedData(key.getEncryptedData().getInitialisationVector().toByteArray(), key.getEncryptedData().getEncryptedPrivateKey().toByteArray()); EncryptedData encryptedSeedBytes = null; if (key.hasEncryptedDeterministicSeed()) { Protos.EncryptedData encryptedSeed = key.getEncryptedDeterministicSeed(); encryptedSeedBytes = new EncryptedData(encryptedSeed.getInitialisationVector().toByteArray(), encryptedSeed.getEncryptedPrivateKey().toByteArray()); throw new UnreadableWalletException("Malformed key proto: " + key.toString());
if (!(keyProto.getType() == Protos.Key.Type.ORIGINAL || keyProto.getType() == Protos.Key.Type.ENCRYPTED_SCRYPT_AES)) { throw new UnreadableWalletException("Unknown key type in wallet, type = " + keyProto.getType()); byte[] privKey = keyProto.hasPrivateKey() ? keyProto.getPrivateKey().toByteArray() : null; EncryptedPrivateKey encryptedPrivateKey = null; if (keyProto.hasEncryptedPrivateKey()) { Protos.EncryptedPrivateKey encryptedPrivateKeyProto = keyProto.getEncryptedPrivateKey(); encryptedPrivateKey = new EncryptedPrivateKey(encryptedPrivateKeyProto.getInitialisationVector().toByteArray(), encryptedPrivateKeyProto.getEncryptedPrivateKey().toByteArray()); byte[] pubKey = keyProto.hasPublicKey() ? keyProto.getPublicKey().toByteArray() : null; ecKey.setCreationTimeSeconds((keyProto.getCreationTimestamp() + 500) / 1000); wallet.addKey(ecKey);
public org.bitcoinj.wallet.Protos.Key buildPartial() { org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0;
.computeBytesSize(4, getLabelBytes()); if (!getAccountPathList().isEmpty()) { size += 1; size += com.google.protobuf.CodedOutputStream size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size;
public org.bitcoinj.wallet.Protos.Key buildPartial() { org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0;
public org.bitcoinj.wallet.Protos.Key buildPartial() { org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0;
.computeBytesSize(4, getLabelBytes()); .computeMessageSize(9, encryptedDeterministicSeed_); size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size;
.computeBytesSize(4, getLabelBytes()); .computeMessageSize(9, encryptedDeterministicSeed_); size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size;
.computeBytesSize(4, getLabelBytes()); .computeMessageSize(9, encryptedDeterministicSeed_); size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size;
public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); if (((bitField0_ & 0x00000001) == 0x00000001)) { output.writeEnum(1, type_.getNumber()); output.writeBytes(4, getLabelBytes()); output.writeMessage(9, encryptedDeterministicSeed_); if (getAccountPathList().size() > 0) { output.writeRawVarint32(82); output.writeRawVarint32(accountPathMemoizedSerializedSize); output.writeUInt32NoTag(accountPath_.get(i)); getUnknownFields().writeTo(output);
public Builder mergeFrom(org.bitcoinj.wallet.Protos.Key other) { if (other == org.bitcoinj.wallet.Protos.Key.getDefaultInstance()) return this; if (other.hasType()) { setType(other.getType()); if (other.hasSecretBytes()) { setSecretBytes(other.getSecretBytes()); if (other.hasEncryptedData()) { mergeEncryptedData(other.getEncryptedData()); if (other.hasPublicKey()) { setPublicKey(other.getPublicKey()); if (other.hasLabel()) { bitField0_ |= 0x00000010; label_ = other.label_; onChanged(); if (other.hasCreationTimestamp()) { setCreationTimestamp(other.getCreationTimestamp()); if (other.hasDeterministicKey()) { mergeDeterministicKey(other.getDeterministicKey()); if (other.hasDeterministicSeed()) { setDeterministicSeed(other.getDeterministicSeed()); if (other.hasEncryptedDeterministicSeed()) { mergeEncryptedDeterministicSeed(other.getEncryptedDeterministicSeed());
assertEquals(Protos.Key.Type.ORIGINAL, walletProto.getKey(0).getType()); assertEquals(0, walletProto.getExtensionCount()); assertEquals(1, walletProto.getTransactionCount());
public org.bitcoinj.wallet.Protos.Key buildPartial() { org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this); int from_bitField0_ = bitField0_; int to_bitField0_ = 0;
.computeBytesSize(4, getLabelBytes()); .computeMessageSize(6, encryptedPrivateKey_); size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size;