mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-01-31 15:22:16 +00:00
Bump wallet version and add missing check (!) to detect wallets from the future. The absence/incompleteness of this feature had not been noticed before, and it means that old apps will fail to read HD wallets due to the new key enum value rather than a more sensible error (but there's still no chance of an old app accepting an HD wallet, so it should still be safe).
This commit is contained in:
parent
c8850c94ae
commit
a807994b9a
@ -18,4 +18,8 @@ public class UnreadableWalletException extends Exception {
|
|||||||
super("Password incorrect");
|
super("Password incorrect");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class FutureVersion extends UnreadableWalletException {
|
||||||
|
public FutureVersion() { super("Unknown wallet version from the future."); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -362,6 +362,9 @@ public class WalletProtobufSerializer {
|
|||||||
*/
|
*/
|
||||||
public Wallet readWallet(NetworkParameters params, @Nullable WalletExtension[] extensions,
|
public Wallet readWallet(NetworkParameters params, @Nullable WalletExtension[] extensions,
|
||||||
Protos.Wallet walletProto) throws UnreadableWalletException {
|
Protos.Wallet walletProto) throws UnreadableWalletException {
|
||||||
|
if (walletProto.getVersion() > 1)
|
||||||
|
throw new UnreadableWalletException.FutureVersion();
|
||||||
|
|
||||||
// Read the scrypt parameters that specify how encryption and decryption is performed.
|
// Read the scrypt parameters that specify how encryption and decryption is performed.
|
||||||
KeyChainGroup chain;
|
KeyChainGroup chain;
|
||||||
if (walletProto.hasEncryptionParameters()) {
|
if (walletProto.hasEncryptionParameters()) {
|
||||||
|
@ -332,6 +332,13 @@ public class WalletProtobufSerializerTest {
|
|||||||
assertEquals(0, wallet5.getExtensions().size());
|
assertEquals(0, wallet5.getExtensions().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = UnreadableWalletException.FutureVersion.class)
|
||||||
|
public void versions() throws Exception {
|
||||||
|
Protos.Wallet.Builder proto = Protos.Wallet.newBuilder(new WalletProtobufSerializer().walletToProto(myWallet));
|
||||||
|
proto.setVersion(2);
|
||||||
|
new WalletProtobufSerializer().readWallet(params, null, proto.build());
|
||||||
|
}
|
||||||
|
|
||||||
private static class SomeFooExtension implements WalletExtension {
|
private static class SomeFooExtension implements WalletExtension {
|
||||||
private final byte[] data = new byte[]{1, 2, 3};
|
private final byte[] data = new byte[]{1, 2, 3};
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ message Wallet {
|
|||||||
|
|
||||||
// The version number of the wallet - used to detect wallets that were produced in the future
|
// The version number of the wallet - used to detect wallets that were produced in the future
|
||||||
// (i.e the wallet may contain some future format this protobuf/ code does not know about)
|
// (i.e the wallet may contain some future format this protobuf/ code does not know about)
|
||||||
optional int32 version = 7;
|
optional int32 version = 7 [default = 1];
|
||||||
|
|
||||||
// deprecated - do not recycle this numeric identifier
|
// deprecated - do not recycle this numeric identifier
|
||||||
// optional int32 minor_version = 8;
|
// optional int32 minor_version = 8;
|
||||||
|
Loading…
Reference in New Issue
Block a user