From 5580fd9d928b519b21fe58ae82ee9485fa5837c8 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sat, 5 Jul 2014 15:10:24 +0200 Subject: [PATCH] Make DumpedPrivateKey serializable, so that it can be used to pass around keys between loosely coupled application components. --- .../core/VersionedChecksummedBytes.java | 5 ++- .../bitcoin/core/DumpedPrivateKeyTest.java | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/com/google/bitcoin/core/DumpedPrivateKeyTest.java diff --git a/core/src/main/java/com/google/bitcoin/core/VersionedChecksummedBytes.java b/core/src/main/java/com/google/bitcoin/core/VersionedChecksummedBytes.java index 22e770e5..a0215ae2 100644 --- a/core/src/main/java/com/google/bitcoin/core/VersionedChecksummedBytes.java +++ b/core/src/main/java/com/google/bitcoin/core/VersionedChecksummedBytes.java @@ -16,6 +16,7 @@ package com.google.bitcoin.core; +import java.io.Serializable; import java.util.Arrays; import static com.google.common.base.Preconditions.checkArgument; @@ -28,8 +29,8 @@ import static com.google.common.base.Preconditions.checkArgument; *

and the result is then Base58 encoded. This format is used for addresses, and private keys exported using the * dumpprivkey command.

*/ -public class VersionedChecksummedBytes { - protected int version; +public class VersionedChecksummedBytes implements Serializable { + protected final int version; protected byte[] bytes; protected VersionedChecksummedBytes(String encoded) throws AddressFormatException { diff --git a/core/src/test/java/com/google/bitcoin/core/DumpedPrivateKeyTest.java b/core/src/test/java/com/google/bitcoin/core/DumpedPrivateKeyTest.java new file mode 100644 index 00000000..1819f79d --- /dev/null +++ b/core/src/test/java/com/google/bitcoin/core/DumpedPrivateKeyTest.java @@ -0,0 +1,41 @@ +/* + * Copyright 2014 Andreas Schildbach + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.bitcoin.core; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import org.junit.Test; + +import com.google.bitcoin.params.MainNetParams; + +public class DumpedPrivateKeyTest { + @Test + public void testJavaSerialization() throws Exception { + + DumpedPrivateKey key = new DumpedPrivateKey(MainNetParams.get(), new ECKey().getPrivKeyBytes(), true); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + new ObjectOutputStream(os).writeObject(key); + DumpedPrivateKey keyCopy = (DumpedPrivateKey) new ObjectInputStream(new ByteArrayInputStream(os.toByteArray())) + .readObject(); + assertEquals(key, keyCopy); + } +}