From 6b1f7d0174d367cfb351e21b631d4a41509a882f Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 15 May 2020 13:42:58 +0200 Subject: [PATCH] complete wallet validation --- .../sparrowwallet/drongo/wallet/Keystore.java | 6 +++++- .../com/sparrowwallet/drongo/wallet/Wallet.java | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java b/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java index 4ee3531..9a844c3 100644 --- a/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java +++ b/src/main/java/com/sparrowwallet/drongo/wallet/Keystore.java @@ -109,7 +109,11 @@ public class Keystore { return false; } - if(keyDerivation.getDerivationPath() == null || !KeyDerivation.isValid(keyDerivation.getDerivationPath())) { + if(label.isEmpty() || label.replace(" ", "").length() > 16) { + return false; + } + + if(keyDerivation.getDerivationPath() == null || keyDerivation.getDerivationPath().isEmpty() || !KeyDerivation.isValid(keyDerivation.getDerivationPath())) { return false; } diff --git a/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java b/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java index 2f1300b..e84c379 100644 --- a/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java +++ b/src/main/java/com/sparrowwallet/drongo/wallet/Wallet.java @@ -7,10 +7,7 @@ import com.sparrowwallet.drongo.policy.PolicyType; import com.sparrowwallet.drongo.protocol.ScriptType; import org.bouncycastle.crypto.params.KeyParameter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; public class Wallet { @@ -99,6 +96,10 @@ public class Wallet { return false; } + if(containsDuplicateKeystoreLabels()) { + return false; + } + for(Keystore keystore : keystores) { if(!keystore.isValid()) { return false; @@ -119,6 +120,14 @@ public class Wallet { return Arrays.stream(ScriptType.values()).anyMatch(scriptType -> !scriptType.equals(this.scriptType) && scriptType.getAccount(derivationPath) > -1); } + public boolean containsDuplicateKeystoreLabels() { + if(keystores.size() <= 1) { + return false; + } + + return !keystores.stream().map(Keystore::getLabel).allMatch(new HashSet<>()::add); + } + public Wallet copy() { Wallet copy = new Wallet(name); copy.setPolicyType(policyType);