From 02ce88e6a3fb24f9e1d3386f98ca85a9fc6f2b99 Mon Sep 17 00:00:00 2001 From: Ken Sedgwick Date: Sat, 23 Nov 2013 22:10:17 -0800 Subject: [PATCH] Added buffer to MnemonicCode, it was modifying it's key argument (stretching in place). --- .../java/com/google/bitcoin/crypto/MnemonicCode.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/google/bitcoin/crypto/MnemonicCode.java b/core/src/main/java/com/google/bitcoin/crypto/MnemonicCode.java index 4be29b6a..ff1cec0c 100644 --- a/core/src/main/java/com/google/bitcoin/crypto/MnemonicCode.java +++ b/core/src/main/java/com/google/bitcoin/crypto/MnemonicCode.java @@ -194,11 +194,13 @@ public class MnemonicCode { // Set block size to input size (that's why Rijndael is used, not AES). byte[] mnemonic = {'m', 'n', 'e', 'm', 'o', 'n', 'i', 'c'}; byte[] key = Sha256Hash.create(mnemonic).getBytes(); + byte[] buffer = new byte[data.length]; + System.arraycopy(data, 0, buffer, 0, data.length); RijndaelEngine cipher = new RijndaelEngine(len); cipher.init(true, new KeyParameter(key)); for (int ii = 0; ii < 10000; ++ii) - cipher.processBlock(data, 0, data, 0); - return data; + cipher.processBlock(buffer, 0, buffer, 0); + return buffer; } private byte[] unstretch(int len, byte[] data) { @@ -206,11 +208,13 @@ public class MnemonicCode { // use the same parameters as used in step 3 of encryption. byte[] mnemonic = {'m', 'n', 'e', 'm', 'o', 'n', 'i', 'c'}; byte[] key = Sha256Hash.create(mnemonic).getBytes(); + byte[] buffer = new byte[data.length]; + System.arraycopy(data, 0, buffer, 0, data.length); RijndaelEngine cipher = new RijndaelEngine(len); cipher.init(false, new KeyParameter(key)); for (int ii = 0; ii < 10000; ++ii) - cipher.processBlock(data, 0, data, 0); - return data; + cipher.processBlock(buffer, 0, buffer, 0); + return buffer; } private boolean[] checksum(boolean[] bits) {