mirror of
https://github.com/sparrowwallet/drongo.git
synced 2024-12-26 10:06:45 +00:00
no fingerprint labels and tests
This commit is contained in:
parent
8ffd225007
commit
aa60e6b92e
5 changed files with 97 additions and 2 deletions
|
@ -168,7 +168,7 @@ public class Keystore {
|
||||||
DeterministicKey derivedKeyPublicOnly = derivedKey.dropPrivateBytes().dropParent();
|
DeterministicKey derivedKeyPublicOnly = derivedKey.dropPrivateBytes().dropParent();
|
||||||
ExtendedKey xpub = new ExtendedKey(derivedKeyPublicOnly, derivedKey.getParentFingerprint(), derivation.get(derivation.size() - 1));
|
ExtendedKey xpub = new ExtendedKey(derivedKeyPublicOnly, derivedKey.getParentFingerprint(), derivation.get(derivation.size() - 1));
|
||||||
|
|
||||||
keystore.setLabel(masterFingerprint);
|
keystore.setLabel(seed.getType().name());
|
||||||
keystore.setSource(KeystoreSource.SW_SEED);
|
keystore.setSource(KeystoreSource.SW_SEED);
|
||||||
keystore.setWalletModel(WalletModel.SPARROW);
|
keystore.setWalletModel(WalletModel.SPARROW);
|
||||||
keystore.setKeyDerivation(new KeyDerivation(masterFingerprint, KeyDerivation.writePath(derivation)));
|
keystore.setKeyDerivation(new KeyDerivation(masterFingerprint, KeyDerivation.writePath(derivation)));
|
||||||
|
|
|
@ -126,6 +126,30 @@ public class Wallet {
|
||||||
return !keystores.stream().map(Keystore::getLabel).allMatch(new HashSet<>()::add);
|
return !keystores.stream().map(Keystore::getLabel).allMatch(new HashSet<>()::add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int makeLabelsUnique(Keystore newKeystore) {
|
||||||
|
int max = 0;
|
||||||
|
for(Keystore keystore : getKeystores()) {
|
||||||
|
if(newKeystore != keystore && keystore.getLabel().startsWith(newKeystore.getLabel())) {
|
||||||
|
String remainder = keystore.getLabel().substring(newKeystore.getLabel().length());
|
||||||
|
if(remainder.length() == 0) {
|
||||||
|
max = makeLabelsUnique(keystore);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
int count = Integer.parseInt(remainder.trim());
|
||||||
|
max = Math.max(max, count);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
//ignore, no terminating number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
max++;
|
||||||
|
newKeystore.setLabel(newKeystore.getLabel() + " " + max);
|
||||||
|
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
public Wallet copy() {
|
public Wallet copy() {
|
||||||
Wallet copy = new Wallet(name);
|
Wallet copy = new Wallet(name);
|
||||||
copy.setPolicyType(policyType);
|
copy.setPolicyType(policyType);
|
||||||
|
|
|
@ -93,4 +93,26 @@ public class Bip39MnemonicCodeTest {
|
||||||
|
|
||||||
Assert.assertEquals("a652d123f421f56257391af26063e900619678b552dafd3850e699f6da0667269bbcaebb0509557481db29607caac0294b3cd337d740174cfa05f552fe9e0272", Utils.bytesToHex(seed));
|
Assert.assertEquals("a652d123f421f56257391af26063e900619678b552dafd3850e699f6da0667269bbcaebb0509557481db29607caac0294b3cd337d740174cfa05f552fe9e0272", Utils.bytesToHex(seed));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@Test
|
||||||
|
public void bip39TestVector1() throws MnemonicException {
|
||||||
|
String words = "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always";
|
||||||
|
List<String> wordlist = Arrays.asList(words.split(" "));
|
||||||
|
|
||||||
|
Bip39MnemonicCode.INSTANCE.check(wordlist);
|
||||||
|
byte[] seed = Bip39MnemonicCode.toSeed(wordlist, "TREZOR");
|
||||||
|
|
||||||
|
Assert.assertEquals("107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65", Utils.bytesToHex(seed));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bip39TestVector2() throws MnemonicException {
|
||||||
|
String words = "gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog";
|
||||||
|
List<String> wordlist = Arrays.asList(words.split(" "));
|
||||||
|
|
||||||
|
Bip39MnemonicCode.INSTANCE.check(wordlist);
|
||||||
|
byte[] seed = Bip39MnemonicCode.toSeed(wordlist, "TREZOR");
|
||||||
|
|
||||||
|
Assert.assertEquals("628c3827a8823298ee685db84f55caa34b5cc195a778e52d45f59bcf75aba68e4d7590e101dc414bc1bbd5737666fbbef35d1f1903953b66624f910feef245ac", Utils.bytesToHex(seed));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package com.sparrowwallet.drongo.wallet;
|
package com.sparrowwallet.drongo.wallet;
|
||||||
|
|
||||||
|
import com.sparrowwallet.drongo.KeyDerivation;
|
||||||
import com.sparrowwallet.drongo.crypto.KeyDeriver;
|
import com.sparrowwallet.drongo.crypto.KeyDeriver;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -16,4 +17,22 @@ public class DeterministicSeedTest {
|
||||||
DeterministicSeed decryptedSeed = encryptedSeed.decrypt("pass");
|
DeterministicSeed decryptedSeed = encryptedSeed.decrypt("pass");
|
||||||
Assert.assertEquals(words, decryptedSeed.getMnemonicString());
|
Assert.assertEquals(words, decryptedSeed.getMnemonicString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBip39Vector1() throws MnemonicException {
|
||||||
|
String words = "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always";
|
||||||
|
|
||||||
|
DeterministicSeed seed = new DeterministicSeed(words, "TREZOR", 0, DeterministicSeed.Type.BIP39);
|
||||||
|
Keystore keystore = Keystore.fromSeed(seed, KeyDerivation.parsePath("m/0'"));
|
||||||
|
Assert.assertEquals("xprv9s21ZrQH143K3VPCbxbUtpkh9pRG371UCLDz3BjceqP1jz7XZsQ5EnNkYAEkfeZp62cDNj13ZTEVG1TEro9sZ9grfRmcYWLBhCocViKEJae", keystore.getExtendedMasterPrivateKey().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBip39Vector2() throws MnemonicException {
|
||||||
|
String words = "panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside";
|
||||||
|
|
||||||
|
DeterministicSeed seed = new DeterministicSeed(words, "TREZOR", 0, DeterministicSeed.Type.BIP39);
|
||||||
|
Keystore keystore = Keystore.fromSeed(seed, KeyDerivation.parsePath("m/0'"));
|
||||||
|
Assert.assertEquals("xprv9s21ZrQH143K2WNnKmssvZYM96VAr47iHUQUTUyUXH3sAGNjhJANddnhw3i3y3pBbRAVk5M5qUGFr4rHbEWwXgX4qrvrceifCYQJbbFDems", keystore.getExtendedMasterPrivateKey().toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.sparrowwallet.drongo.crypto.KeyDeriver;
|
||||||
import com.sparrowwallet.drongo.policy.Policy;
|
import com.sparrowwallet.drongo.policy.Policy;
|
||||||
import com.sparrowwallet.drongo.policy.PolicyType;
|
import com.sparrowwallet.drongo.policy.PolicyType;
|
||||||
import com.sparrowwallet.drongo.protocol.ScriptType;
|
import com.sparrowwallet.drongo.protocol.ScriptType;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class WalletTest {
|
public class WalletTest {
|
||||||
|
@ -26,4 +27,33 @@ public class WalletTest {
|
||||||
|
|
||||||
wallet.decrypt("pass");
|
wallet.decrypt("pass");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void makeLabelsUnique() {
|
||||||
|
Wallet wallet = new Wallet();
|
||||||
|
Keystore keystore1 = new Keystore("BIP39");
|
||||||
|
wallet.getKeystores().add(keystore1);
|
||||||
|
|
||||||
|
Keystore keystore2 = new Keystore("BIP39 2");
|
||||||
|
wallet.getKeystores().add(keystore2);
|
||||||
|
|
||||||
|
Keystore keystore3 = new Keystore("Coldcard");
|
||||||
|
wallet.getKeystores().add(keystore3);
|
||||||
|
|
||||||
|
Keystore keystore4 = new Keystore("Coldcard2");
|
||||||
|
wallet.getKeystores().add(keystore4);
|
||||||
|
|
||||||
|
Keystore keystore5 = new Keystore("Coldcard -1");
|
||||||
|
wallet.getKeystores().add(keystore5);
|
||||||
|
|
||||||
|
Keystore keystore = new Keystore("BIP39");
|
||||||
|
wallet.makeLabelsUnique(keystore);
|
||||||
|
Assert.assertEquals("BIP39 3", keystore1.getLabel());
|
||||||
|
Assert.assertEquals("BIP39 4", keystore.getLabel());
|
||||||
|
|
||||||
|
Keystore cckeystore = new Keystore("Coldcard");
|
||||||
|
wallet.makeLabelsUnique(cckeystore);
|
||||||
|
Assert.assertEquals("Coldcard 3", keystore3.getLabel());
|
||||||
|
Assert.assertEquals("Coldcard 4", cckeystore.getLabel());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue