KeyChainGroup.smali
.class public Lorg/bitcoinj/wallet/KeyChainGroup;
.super Ljava/lang/Object;
.source "KeyChainGroup.java"
# interfaces
.implements Lorg/bitcoinj/wallet/KeyBag;
# static fields
.field private static final log:Lorg/slf4j/Logger;
# instance fields
.field private basic:Lorg/bitcoinj/wallet/BasicKeyChain;
.field protected final chains:Ljava/util/LinkedList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/LinkedList",
"<",
"Lorg/bitcoinj/wallet/DeterministicKeyChain;",
">;"
}
.end annotation
.end field
.field private final currentAddresses:Ljava/util/EnumMap;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/EnumMap",
"<",
"Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;",
"Lorg/bitcoinj/core/Address;",
">;"
}
.end annotation
.end field
.field private final currentKeys:Ljava/util/EnumMap;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/EnumMap",
"<",
"Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;",
"Lorg/bitcoinj/crypto/DeterministicKey;",
">;"
}
.end annotation
.end field
.field private keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
.field private lookaheadSize:I
.field private lookaheadThreshold:I
.field private params:Lorg/bitcoinj/core/NetworkParameters;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 60
invoke-static {}, Lorg/bitcoinj/core/Utils;->isAndroidRuntime()Z
move-result v0
if-eqz v0, :cond_b
.line 61
new-instance v0, Lorg/bitcoinj/crypto/LinuxSecureRandom;
invoke-direct {v0}, Lorg/bitcoinj/crypto/LinuxSecureRandom;-><init>()V
.line 64
:cond_b
const-class v0, Lorg/bitcoinj/wallet/KeyChainGroup;
invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;
move-result-object v0
sput-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;)V
.registers 8
.prologue
const/4 v2, 0x0
.line 79
new-instance v3, Ljava/util/ArrayList;
const/4 v0, 0x1
invoke-direct {v3, v0}, Ljava/util/ArrayList;-><init>(I)V
move-object v0, p0
move-object v1, p1
move-object v4, v2
move-object v5, v2
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/wallet/KeyChainGroup;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
.line 80
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/crypto/DeterministicKey;)V
.registers 9
.prologue
const/4 v2, 0x0
.line 92
invoke-static {p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->watch(Lorg/bitcoinj/crypto/DeterministicKey;)Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-static {v0}, Lcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v3
move-object v0, p0
move-object v1, p1
move-object v4, v2
move-object v5, v2
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/wallet/KeyChainGroup;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
.line 93
return-void
.end method
.method private constructor <init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
.registers 10
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/NetworkParameters;",
"Lorg/bitcoinj/wallet/BasicKeyChain;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/DeterministicKeyChain;",
">;",
"Ljava/util/EnumMap",
"<",
"Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;",
"Lorg/bitcoinj/crypto/DeterministicKey;",
">;",
"Lorg/bitcoinj/crypto/KeyCrypter;",
")V"
}
.end annotation
.prologue
const/4 v0, -0x1
.line 97
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 74
iput v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
.line 75
iput v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadThreshold:I
.line 98
iput-object p1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
.line 99
if-nez p2, :cond_11
new-instance p2, Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-direct {p2}, Lorg/bitcoinj/wallet/BasicKeyChain;-><init>()V
:cond_11
iput-object p2, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
.line 100
new-instance v1, Ljava/util/LinkedList;
invoke-static {p3}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Collection;
invoke-direct {v1, v0}, Ljava/util/LinkedList;-><init>(Ljava/util/Collection;)V
iput-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
.line 101
iput-object p5, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
.line 102
if-nez p4, :cond_2b
new-instance p4, Ljava/util/EnumMap;
const-class v0, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-direct {p4, v0}, Ljava/util/EnumMap;-><init>(Ljava/lang/Class;)V
:cond_2b
iput-object p4, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
.line 105
new-instance v0, Ljava/util/EnumMap;
const-class v1, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-direct {v0, v1}, Ljava/util/EnumMap;-><init>(Ljava/lang/Class;)V
iput-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
.line 106
invoke-direct {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->maybeLookaheadScripts()V
.line 108
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->isMarried()Z
move-result v0
if-eqz v0, :cond_73
.line 109
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
invoke-virtual {v0}, Ljava/util/EnumMap;->entrySet()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_49
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_73
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map$Entry;
.line 110
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lorg/bitcoinj/crypto/DeterministicKey;
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v3
invoke-direct {p0, v1, v3}, Lorg/bitcoinj/wallet/KeyChainGroup;->makeP2SHOutputScript(Lorg/bitcoinj/crypto/DeterministicKey;Lorg/bitcoinj/wallet/DeterministicKeyChain;)Lorg/bitcoinj/script/Script;
move-result-object v1
invoke-virtual {v1, p1}, Lorg/bitcoinj/script/Script;->getToAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v1
.line 111
iget-object v3, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Enum;
invoke-virtual {v3, v0, v1}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_49
.line 114
:cond_73
return-void
.end method
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/DeterministicSeed;)V
.registers 9
.prologue
const/4 v2, 0x0
.line 84
new-instance v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
invoke-direct {v0, p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;-><init>(Lorg/bitcoinj/wallet/DeterministicSeed;)V
invoke-static {v0}, Lcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v3
move-object v0, p0
move-object v1, p1
move-object v4, v2
move-object v5, v2
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/wallet/KeyChainGroup;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
.line 85
return-void
.end method
.method private static createCurrentKeysMap(Ljava/util/List;)Ljava/util/EnumMap;
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/DeterministicKeyChain;",
">;)",
"Ljava/util/EnumMap",
"<",
"Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;",
"Lorg/bitcoinj/crypto/DeterministicKey;",
">;"
}
.end annotation
.prologue
.line 747
invoke-interface {p0}, Ljava/util/List;->size()I
move-result v0
add-int/lit8 v0, v0, -0x1
invoke-interface {p0, v0}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 749
new-instance v1, Ljava/util/EnumMap;
const-class v2, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-direct {v1, v2}, Ljava/util/EnumMap;-><init>(Ljava/lang/Class;)V
.line 754
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getIssuedExternalKeys()I
move-result v2
if-lez v2, :cond_3b
.line 757
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getAccountPath()Lcom/google/common/collect/ImmutableList;
move-result-object v2
sget-object v3, Lorg/bitcoinj/wallet/DeterministicKeyChain;->EXTERNAL_SUBPATH:Lcom/google/common/collect/ImmutableList;
invoke-static {v2, v3}, Lorg/bitcoinj/crypto/HDUtils;->concat(Ljava/util/List;Ljava/util/List;)Lcom/google/common/collect/ImmutableList;
move-result-object v2
new-instance v3, Lorg/bitcoinj/crypto/ChildNumber;
.line 758
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getIssuedExternalKeys()I
move-result v4
add-int/lit8 v4, v4, -0x1
invoke-direct {v3, v4}, Lorg/bitcoinj/crypto/ChildNumber;-><init>(I)V
.line 756
invoke-static {v2, v3}, Lorg/bitcoinj/crypto/HDUtils;->append(Ljava/util/List;Lorg/bitcoinj/crypto/ChildNumber;)Lcom/google/common/collect/ImmutableList;
move-result-object v2
.line 755
invoke-virtual {v0, v2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getKeyByPath(Ljava/util/List;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v2
.line 759
sget-object v3, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;->RECEIVE_FUNDS:Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-virtual {v1, v3, v2}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 762
:cond_3b
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getIssuedInternalKeys()I
move-result v2
if-lez v2, :cond_63
.line 765
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getAccountPath()Lcom/google/common/collect/ImmutableList;
move-result-object v2
sget-object v3, Lorg/bitcoinj/wallet/DeterministicKeyChain;->INTERNAL_SUBPATH:Lcom/google/common/collect/ImmutableList;
invoke-static {v2, v3}, Lorg/bitcoinj/crypto/HDUtils;->concat(Ljava/util/List;Ljava/util/List;)Lcom/google/common/collect/ImmutableList;
move-result-object v2
new-instance v3, Lorg/bitcoinj/crypto/ChildNumber;
.line 766
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getIssuedInternalKeys()I
move-result v4
add-int/lit8 v4, v4, -0x1
invoke-direct {v3, v4}, Lorg/bitcoinj/crypto/ChildNumber;-><init>(I)V
.line 764
invoke-static {v2, v3}, Lorg/bitcoinj/crypto/HDUtils;->append(Ljava/util/List;Lorg/bitcoinj/crypto/ChildNumber;)Lcom/google/common/collect/ImmutableList;
move-result-object v2
.line 763
invoke-virtual {v0, v2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getKeyByPath(Ljava/util/List;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
.line 767
sget-object v2, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;->CHANGE:Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-virtual {v1, v2, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 769
:cond_63
return-object v1
.end method
.method private static extractFollowingKeychains(Ljava/util/List;)V
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/DeterministicKeyChain;",
">;)V"
}
.end annotation
.prologue
.line 3088
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 775
invoke-interface {p0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
move-object v1, v0
:goto_a
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_3f
.line 776
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 777
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isFollowing()Z
move-result v3
if-eqz v3, :cond_23
.line 778
invoke-interface {v1, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 779
invoke-interface {v2}, Ljava/util/Iterator;->remove()V
goto :goto_a
.line 780
:cond_23
invoke-interface {v1}, Ljava/util/List;->isEmpty()Z
move-result v3
if-nez v3, :cond_40
.line 781
instance-of v3, v0, Lorg/bitcoinj/wallet/MarriedKeyChain;
if-nez v3, :cond_33
.line 782
new-instance v0, Ljava/lang/IllegalStateException;
invoke-direct {v0}, Ljava/lang/IllegalStateException;-><init>()V
throw v0
.line 783
:cond_33
check-cast v0, Lorg/bitcoinj/wallet/MarriedKeyChain;
invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/MarriedKeyChain;->setFollowingKeyChains(Ljava/util/List;)V
.line 4088
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
:goto_3d
move-object v1, v0
.line 786
goto :goto_a
.line 787
:cond_3f
return-void
:cond_40
move-object v0, v1
goto :goto_3d
.end method
.method static fromProtobufEncrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;)Lorg/bitcoinj/wallet/KeyChainGroup;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/NetworkParameters;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/Protos$Key;",
">;",
"Lorg/bitcoinj/crypto/KeyCrypter;",
")",
"Lorg/bitcoinj/wallet/KeyChainGroup;"
}
.end annotation
.prologue
.line 657
new-instance v0, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;
invoke-direct {v0}, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;-><init>()V
invoke-static {p0, p1, p2, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->fromProtobufEncrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;
move-result-object v0
return-object v0
.end method
.method public static fromProtobufEncrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;
.registers 10
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/NetworkParameters;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/Protos$Key;",
">;",
"Lorg/bitcoinj/crypto/KeyCrypter;",
"Lorg/bitcoinj/wallet/KeyChainFactory;",
")",
"Lorg/bitcoinj/wallet/KeyChainGroup;"
}
.end annotation
.prologue
.line 661
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 662
invoke-static {p1, p2}, Lorg/bitcoinj/wallet/BasicKeyChain;->fromProtobufEncrypted(Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;)Lorg/bitcoinj/wallet/BasicKeyChain;
move-result-object v2
.line 663
invoke-static {p1, p2, p3}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->fromProtobuf(Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;Lorg/bitcoinj/wallet/KeyChainFactory;)Ljava/util/List;
move-result-object v3
.line 664
const/4 v4, 0x0
.line 665
invoke-interface {v3}, Ljava/util/List;->isEmpty()Z
move-result v0
if-nez v0, :cond_16
.line 666
invoke-static {v3}, Lorg/bitcoinj/wallet/KeyChainGroup;->createCurrentKeysMap(Ljava/util/List;)Ljava/util/EnumMap;
move-result-object v4
.line 667
:cond_16
invoke-static {v3}, Lorg/bitcoinj/wallet/KeyChainGroup;->extractFollowingKeychains(Ljava/util/List;)V
.line 668
new-instance v0, Lorg/bitcoinj/wallet/KeyChainGroup;
move-object v1, p0
move-object v5, p2
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/wallet/KeyChainGroup;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
return-object v0
.end method
.method static fromProtobufUnencrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;)Lorg/bitcoinj/wallet/KeyChainGroup;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/NetworkParameters;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/Protos$Key;",
">;)",
"Lorg/bitcoinj/wallet/KeyChainGroup;"
}
.end annotation
.prologue
.line 643
new-instance v0, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;
invoke-direct {v0}, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;-><init>()V
invoke-static {p0, p1, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->fromProtobufUnencrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;
move-result-object v0
return-object v0
.end method
.method public static fromProtobufUnencrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;
.registers 9
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/core/NetworkParameters;",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/Protos$Key;",
">;",
"Lorg/bitcoinj/wallet/KeyChainFactory;",
")",
"Lorg/bitcoinj/wallet/KeyChainGroup;"
}
.end annotation
.prologue
const/4 v5, 0x0
.line 647
invoke-static {p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->fromProtobufUnencrypted(Ljava/util/List;)Lorg/bitcoinj/wallet/BasicKeyChain;
move-result-object v2
.line 648
invoke-static {p1, v5, p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->fromProtobuf(Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;Lorg/bitcoinj/wallet/KeyChainFactory;)Ljava/util/List;
move-result-object v3
.line 650
invoke-interface {v3}, Ljava/util/List;->isEmpty()Z
move-result v0
if-nez v0, :cond_1d
.line 651
invoke-static {v3}, Lorg/bitcoinj/wallet/KeyChainGroup;->createCurrentKeysMap(Ljava/util/List;)Ljava/util/EnumMap;
move-result-object v4
.line 652
:goto_13
invoke-static {v3}, Lorg/bitcoinj/wallet/KeyChainGroup;->extractFollowingKeychains(Ljava/util/List;)V
.line 653
new-instance v0, Lorg/bitcoinj/wallet/KeyChainGroup;
move-object v1, p0
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/wallet/KeyChainGroup;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/BasicKeyChain;Ljava/util/List;Ljava/util/EnumMap;Lorg/bitcoinj/crypto/KeyCrypter;)V
return-object v0
:cond_1d
move-object v4, v5
goto :goto_13
.end method
.method private makeP2SHOutputScript(Lorg/bitcoinj/crypto/DeterministicKey;Lorg/bitcoinj/wallet/DeterministicKeyChain;)Lorg/bitcoinj/script/Script;
.registers 4
.prologue
.line 603
invoke-virtual {p2, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getRedeemData(Lorg/bitcoinj/crypto/DeterministicKey;)Lorg/bitcoinj/wallet/RedeemData;
move-result-object v0
iget-object v0, v0, Lorg/bitcoinj/wallet/RedeemData;->redeemScript:Lorg/bitcoinj/script/Script;
invoke-static {v0}, Lorg/bitcoinj/script/ScriptBuilder;->createP2SHOutputScript(Lorg/bitcoinj/script/Script;)Lorg/bitcoinj/script/Script;
move-result-object v0
return-object v0
.end method
.method private maybeLookaheadScripts()V
.registers 3
.prologue
.line 118
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_6
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_16
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 119
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->maybeLookAheadScripts()V
goto :goto_6
.line 121
:cond_16
return-void
.end method
.method private maybeMarkCurrentAddressAsUsed(Lorg/bitcoinj/core/Address;)V
.registers 5
.prologue
.line 395
invoke-virtual {p1}, Lorg/bitcoinj/core/Address;->isP2SHAddress()Z
move-result v0
invoke-static {v0}, Lcom/google/common/base/n;->checkArgument(Z)V
.line 396
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-virtual {v0}, Ljava/util/EnumMap;->entrySet()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v2
:cond_11
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_4b
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map$Entry;
.line 397
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
if-eqz v1, :cond_11
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lorg/bitcoinj/core/Address;
invoke-virtual {v1, p1}, Lorg/bitcoinj/core/Address;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_11
.line 398
sget-object v1, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v2, "Marking P2SH address as used: {}"
invoke-interface {v1, v2, p1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 399
iget-object v2, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Enum;
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshAddress(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/core/Address;
move-result-object v0
invoke-virtual {v2, v1, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 403
:cond_4b
return-void
.end method
.method private maybeMarkCurrentKeyAsUsed(Lorg/bitcoinj/crypto/DeterministicKey;)V
.registers 5
.prologue
.line 409
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
invoke-virtual {v0}, Ljava/util/EnumMap;->entrySet()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v2
:cond_a
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_44
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map$Entry;
.line 410
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
if-eqz v1, :cond_a
invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lorg/bitcoinj/crypto/DeterministicKey;
invoke-virtual {v1, p1}, Lorg/bitcoinj/crypto/DeterministicKey;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_a
.line 411
sget-object v1, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v2, "Marking key as used: {}"
invoke-interface {v1, v2, p1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 412
iget-object v2, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Enum;
invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
invoke-virtual {v2, v1, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 416
:cond_44
return-void
.end method
# virtual methods
.method public addAndActivateHDChain(Lorg/bitcoinj/wallet/DeterministicKeyChain;)V
.registers 5
.prologue
.line 135
sget-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v1, "Creating and activating a new HD chain: {}"
invoke-interface {v0, v1, p1}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 136
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->getListeners()Ljava/util/List;
move-result-object v0
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_11
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_27
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/utils/ListenerRegistration;
.line 137
iget-object v1, v0, Lorg/bitcoinj/utils/ListenerRegistration;->listener:Ljava/lang/Object;
check-cast v1, Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;
iget-object v0, v0, Lorg/bitcoinj/utils/ListenerRegistration;->executor:Ljava/util/concurrent/Executor;
invoke-virtual {p1, v1, v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;Ljava/util/concurrent/Executor;)V
goto :goto_11
.line 138
:cond_27
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
if-ltz v0, :cond_30
.line 139
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
invoke-virtual {p1, v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->setLookaheadSize(I)V
.line 140
:cond_30
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadThreshold:I
if-ltz v0, :cond_39
.line 141
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadThreshold:I
invoke-virtual {p1, v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->setLookaheadThreshold(I)V
.line 142
:cond_39
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0, p1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 143
return-void
.end method
.method public addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;)V
.registers 3
.prologue
.line 608
sget-object v0, Lorg/bitcoinj/utils/Threading;->USER_THREAD:Ljava/util/concurrent/Executor;
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;Ljava/util/concurrent/Executor;)V
.line 609
return-void
.end method
.method public addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;Ljava/util/concurrent/Executor;)V
.registers 5
.prologue
.line 613
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 614
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 615
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1, p2}, Lorg/bitcoinj/wallet/BasicKeyChain;->addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;Ljava/util/concurrent/Executor;)V
.line 616
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_11
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_21
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 617
invoke-virtual {v0, p1, p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->addEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;Ljava/util/concurrent/Executor;)V
goto :goto_11
.line 618
:cond_21
return-void
.end method
.method public checkAESKey(Lorg/spongycastle/crypto/params/KeyParameter;)Z
.registers 4
.prologue
.line 319
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
if-eqz v0, :cond_19
const/4 v0, 0x1
:goto_5
const-string v1, "Not encrypted"
invoke-static {v0, v1}, Lcom/google/common/base/n;->checkState(ZLjava/lang/Object;)V
.line 320
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
if-lez v0, :cond_1b
.line 321
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->checkAESKey(Lorg/spongycastle/crypto/params/KeyParameter;)Z
move-result v0
.line 322
:goto_18
return v0
.line 319
:cond_19
const/4 v0, 0x0
goto :goto_5
.line 322
:cond_1b
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->checkAESKey(Lorg/spongycastle/crypto/params/KeyParameter;)Z
move-result v0
goto :goto_18
.end method
.method public checkPassword(Ljava/lang/CharSequence;)Z
.registers 4
.prologue
.line 314
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
if-eqz v0, :cond_15
const/4 v0, 0x1
:goto_5
const-string v1, "Not encrypted"
invoke-static {v0, v1}, Lcom/google/common/base/n;->checkState(ZLjava/lang/Object;)V
.line 315
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
invoke-interface {v0, p1}, Lorg/bitcoinj/crypto/KeyCrypter;->deriveKey(Ljava/lang/CharSequence;)Lorg/spongycastle/crypto/params/KeyParameter;
move-result-object v0
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->checkAESKey(Lorg/spongycastle/crypto/params/KeyParameter;)Z
move-result v0
return v0
.line 314
:cond_15
const/4 v0, 0x0
goto :goto_5
.end method
.method public createAndActivateNewHDChain()V
.registers 3
.prologue
.line 126
new-instance v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
new-instance v1, Ljava/security/SecureRandom;
invoke-direct {v1}, Ljava/security/SecureRandom;-><init>()V
invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;-><init>(Ljava/security/SecureRandom;)V
.line 127
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->addAndActivateHDChain(Lorg/bitcoinj/wallet/DeterministicKeyChain;)V
.line 128
return-void
.end method
.method public currentAddress(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/core/Address;
.registers 4
.prologue
.line 174
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
.line 175
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isMarried()Z
move-result v0
if-eqz v0, :cond_1e
.line 176
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-virtual {v0, p1}, Ljava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/Address;
.line 177
if-nez v0, :cond_1d
.line 178
invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshAddress(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/core/Address;
move-result-object v0
.line 179
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-virtual {v1, p1, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 183
:cond_1d
:goto_1d
return-object v0
:cond_1e
invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0, v1}, Lorg/bitcoinj/crypto/DeterministicKey;->toAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v0
goto :goto_1d
.end method
.method public currentKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
.registers 4
.prologue
.line 157
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
.line 158
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isMarried()Z
move-result v0
if-eqz v0, :cond_12
.line 159
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "Key is not suitable to receive coins for married keychains. Use freshAddress to get P2SH address instead"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.line 162
:cond_12
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
invoke-virtual {v0, p1}, Ljava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/crypto/DeterministicKey;
.line 163
if-nez v0, :cond_25
.line 164
invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
.line 165
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentKeys:Ljava/util/EnumMap;
invoke-virtual {v1, p1, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 167
:cond_25
return-object v0
.end method
.method public decrypt(Lorg/spongycastle/crypto/params/KeyParameter;)V
.registers 6
.prologue
.line 516
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 517
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->toDecrypted(Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/BasicKeyChain;
move-result-object v1
.line 518
new-instance v2, Ljava/util/ArrayList;
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->size()I
move-result v0
invoke-direct {v2, v0}, Ljava/util/ArrayList;-><init>(I)V
.line 519
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v3
:goto_1a
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_2e
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 520
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->toDecrypted(Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-interface {v2, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_1a
.line 522
:cond_2e
const/4 v0, 0x0
iput-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
.line 523
iput-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
.line 524
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->clear()V
.line 525
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0, v2}, Ljava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
.line 526
return-void
.end method
.method public encrypt(Lorg/bitcoinj/crypto/KeyCrypter;Lorg/spongycastle/crypto/params/KeyParameter;)V
.registers 7
.prologue
.line 490
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 491
invoke-static {p2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 493
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1, p2}, Lorg/bitcoinj/wallet/BasicKeyChain;->toEncrypted(Lorg/bitcoinj/crypto/KeyCrypter;Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/BasicKeyChain;
move-result-object v1
.line 494
new-instance v2, Ljava/util/ArrayList;
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->size()I
move-result v0
invoke-direct {v2, v0}, Ljava/util/ArrayList;-><init>(I)V
.line 495
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v0
if-eqz v0, :cond_2a
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
if-nez v0, :cond_2a
.line 498
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->createAndActivateNewHDChain()V
.line 500
:cond_2a
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v3
:goto_30
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_44
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 501
invoke-virtual {v0, p1, p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->toEncrypted(Lorg/bitcoinj/crypto/KeyCrypter;Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-interface {v2, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_30
.line 502
:cond_44
iput-object p1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
.line 503
iput-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
.line 504
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->clear()V
.line 505
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0, v2}, Ljava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
.line 506
return-void
.end method
.method public findKeyFromPubHash([B)Lorg/bitcoinj/core/ECKey;
.registers 4
.prologue
.line 370
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->findKeyFromPubHash([B)Lorg/bitcoinj/core/ECKey;
move-result-object v0
if-eqz v0, :cond_9
.line 376
:goto_8
return-object v0
.line 372
:cond_9
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:cond_f
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_22
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 373
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->findKeyFromPubHash([B)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
if-eqz v0, :cond_f
goto :goto_8
.line 376
:cond_22
const/4 v0, 0x0
goto :goto_8
.end method
.method public findKeyFromPubKey([B)Lorg/bitcoinj/core/ECKey;
.registers 4
.prologue
.line 431
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->findKeyFromPubKey([B)Lorg/bitcoinj/core/ECKey;
move-result-object v0
if-eqz v0, :cond_9
.line 437
:goto_8
return-object v0
.line 433
:cond_9
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:cond_f
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_22
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 434
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->findKeyFromPubKey([B)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
if-eqz v0, :cond_f
goto :goto_8
.line 437
:cond_22
const/4 v0, 0x0
goto :goto_8
.end method
.method public findRedeemDataFromScriptHash([B)Lorg/bitcoinj/wallet/RedeemData;
.registers 5
.prologue
.line 342
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->descendingIterator()Ljava/util/Iterator;
move-result-object v1
:cond_6
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1d
.line 343
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 344
invoke-static {p1}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;
move-result-object v2
invoke-virtual {v0, v2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->findRedeemDataByScriptHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/RedeemData;
move-result-object v0
.line 345
if-eqz v0, :cond_6
.line 348
:goto_1c
return-object v0
:cond_1d
const/4 v0, 0x0
goto :goto_1c
.end method
.method public freshAddress(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/core/Address;
.registers 4
.prologue
.line 228
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
.line 229
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isMarried()Z
move-result v1
if-eqz v1, :cond_24
.line 230
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->freshOutputScript(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/script/Script;
move-result-object v0
.line 231
invoke-virtual {v0}, Lorg/bitcoinj/script/Script;->isPayToScriptHash()Z
move-result v1
invoke-static {v1}, Lcom/google/common/base/n;->checkState(Z)V
.line 232
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-static {v1, v0}, Lorg/bitcoinj/core/Address;->fromP2SHScript(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/script/Script;)Lorg/bitcoinj/core/Address;
move-result-object v0
.line 233
invoke-direct {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->maybeLookaheadScripts()V
.line 234
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->currentAddresses:Ljava/util/EnumMap;
invoke-virtual {v1, p1, v0}, Ljava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
.line 237
:goto_23
return-object v0
:cond_24
invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0, v1}, Lorg/bitcoinj/crypto/DeterministicKey;->toAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v0
goto :goto_23
.end method
.method public freshKey(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;)Lorg/bitcoinj/crypto/DeterministicKey;
.registers 4
.prologue
.line 200
const/4 v0, 0x1
invoke-virtual {p0, p1, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->freshKeys(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;I)Ljava/util/List;
move-result-object v0
const/4 v1, 0x0
invoke-interface {v0, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/crypto/DeterministicKey;
return-object v0
.end method
.method public freshKeys(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;I)Ljava/util/List;
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;",
"I)",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/crypto/DeterministicKey;",
">;"
}
.end annotation
.prologue
.line 216
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
.line 217
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isMarried()Z
move-result v1
if-eqz v1, :cond_12
.line 218
new-instance v0, Ljava/lang/UnsupportedOperationException;
const-string v1, "Key is not suitable to receive coins for married keychains. Use freshAddress to get P2SH address instead"
invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
throw v0
.line 221
:cond_12
invoke-virtual {v0, p1, p2}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getKeys(Lorg/bitcoinj/wallet/KeyChain$KeyPurpose;I)Ljava/util/List;
move-result-object v0
return-object v0
.end method
.method public final getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
.registers 3
.prologue
.line 243
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v0
if-eqz v0, :cond_20
.line 244
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
if-lez v0, :cond_1d
.line 245
sget-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v1, "No HD chain present but random keys are: you probably deserialized an old wallet."
invoke-interface {v0, v1}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;)V
.line 248
new-instance v0, Lorg/bitcoinj/wallet/DeterministicUpgradeRequiredException;
invoke-direct {v0}, Lorg/bitcoinj/wallet/DeterministicUpgradeRequiredException;-><init>()V
throw v0
.line 251
:cond_1d
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->createAndActivateNewHDChain()V
.line 253
:cond_20
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
add-int/lit8 v1, v1, -0x1
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
return-object v0
.end method
.method public getBloomFilter(IDJ)Lorg/bitcoinj/core/BloomFilter;
.registers 14
.prologue
.line 587
new-instance v0, Lorg/bitcoinj/core/BloomFilter;
move v1, p1
move-wide v2, p2
move-wide v4, p4
invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/core/BloomFilter;-><init>(IDJ)V
.line 588
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v1}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v1
if-lez v1, :cond_1c
.line 589
iget-object v2, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
move v3, p1
move-wide v4, p2
move-wide v6, p4
invoke-virtual/range {v2 .. v7}, Lorg/bitcoinj/wallet/BasicKeyChain;->getFilter(IDJ)Lorg/bitcoinj/core/BloomFilter;
move-result-object v1
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/BloomFilter;->merge(Lorg/bitcoinj/core/BloomFilter;)V
.line 591
:cond_1c
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_22
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_39
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Lorg/bitcoinj/wallet/DeterministicKeyChain;
move v3, p1
move-wide v4, p2
move-wide v6, p4
.line 592
invoke-virtual/range {v2 .. v7}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getFilter(IDJ)Lorg/bitcoinj/core/BloomFilter;
move-result-object v2
invoke-virtual {v0, v2}, Lorg/bitcoinj/core/BloomFilter;->merge(Lorg/bitcoinj/core/BloomFilter;)V
goto :goto_22
.line 594
:cond_39
return-object v0
.end method
.method public getBloomFilterElementCount()I
.registers 4
.prologue
.line 579
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numBloomFilterEntries()I
move-result v0
.line 580
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
move v1, v0
:goto_d
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_20
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 581
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->numBloomFilterEntries()I
move-result v0
add-int/2addr v0, v1
move v1, v0
.line 582
goto :goto_d
.line 583
:cond_20
return v1
.end method
.method public getCombinedKeyLookaheadEpochs()I
.registers 4
.prologue
.line 811
const/4 v0, 0x0
.line 812
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
move v1, v0
:goto_8
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1b
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 813
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getKeyLookaheadEpoch()I
move-result v0
add-int/2addr v0, v1
move v1, v0
goto :goto_8
.line 814
:cond_1b
return v1
.end method
.method public getDeterministicKeyChains()Ljava/util/List;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/DeterministicKeyChain;",
">;"
}
.end annotation
.prologue
.line 804
new-instance v0, Ljava/util/ArrayList;
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-direct {v0, v1}, Ljava/util/ArrayList;-><init>(Ljava/util/Collection;)V
return-object v0
.end method
.method public getEarliestKeyCreationTime()J
.registers 6
.prologue
.line 572
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->getEarliestKeyCreationTime()J
move-result-wide v0
.line 573
iget-object v2, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v2}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v4
move-wide v2, v0
:goto_d
invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_23
invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 574
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getEarliestKeyCreationTime()J
move-result-wide v0
invoke-static {v2, v3, v0, v1}, Ljava/lang/Math;->min(JJ)J
move-result-wide v0
move-wide v2, v0
goto :goto_d
.line 575
:cond_23
return-wide v2
.end method
.method public getImportedKeys()Ljava/util/List;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/core/ECKey;",
">;"
}
.end annotation
.prologue
.line 568
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->getKeys()Ljava/util/List;
move-result-object v0
return-object v0
.end method
.method public getKeyCrypter()Lorg/bitcoinj/crypto/KeyCrypter;
.registers 2
.prologue
.line 562
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
return-object v0
.end method
.method public getLookaheadSize()I
.registers 3
.prologue
.line 274
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
const/4 v1, -0x1
if-ne v0, v1, :cond_e
.line 275
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getLookaheadSize()I
move-result v0
.line 277
:goto_d
return v0
:cond_e
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
goto :goto_d
.end method
.method public getLookaheadThreshold()I
.registers 3
.prologue
.line 297
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadThreshold:I
const/4 v1, -0x1
if-ne v0, v1, :cond_e
.line 298
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->getLookaheadThreshold()I
move-result v0
.line 300
:goto_d
return v0
:cond_e
iget v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadThreshold:I
goto :goto_d
.end method
.method public hasKey(Lorg/bitcoinj/core/ECKey;)Z
.registers 5
.prologue
const/4 v1, 0x1
.line 419
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->hasKey(Lorg/bitcoinj/core/ECKey;)Z
move-result v0
if-eqz v0, :cond_b
move v0, v1
.line 424
:goto_a
return v0
.line 421
:cond_b
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
:cond_11
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_25
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 422
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->hasKey(Lorg/bitcoinj/core/ECKey;)Z
move-result v0
if-eqz v0, :cond_11
move v0, v1
.line 423
goto :goto_a
.line 424
:cond_25
const/4 v0, 0x0
goto :goto_a
.end method
.method public importKeys(Ljava/util/List;)I
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/core/ECKey;",
">;)I"
}
.end annotation
.prologue
.line 305
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->importKeys(Ljava/util/List;)I
move-result v0
return v0
.end method
.method public varargs importKeys([Lorg/bitcoinj/core/ECKey;)I
.registers 3
.prologue
.line 310
invoke-static {p1}, Lcom/google/common/collect/ImmutableList;->copyOf([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
move-result-object v0
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->importKeys(Ljava/util/List;)I
move-result v0
return v0
.end method
.method public importKeysAndEncrypt(Ljava/util/List;Lorg/spongycastle/crypto/params/KeyParameter;)I
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/core/ECKey;",
">;",
"Lorg/spongycastle/crypto/params/KeyParameter;",
")I"
}
.end annotation
.prologue
.line 328
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
if-eqz v0, :cond_2d
const/4 v0, 0x1
:goto_5
const-string v1, "Not encrypted"
invoke-static {v0, v1}, Lcom/google/common/base/n;->checkState(ZLjava/lang/Object;)V
.line 1232
new-instance v1, Ljava/util/LinkedList;
invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V
.line 330
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_13
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_39
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/ECKey;
.line 331
invoke-virtual {v0}, Lorg/bitcoinj/core/ECKey;->isEncrypted()Z
move-result v3
if-eqz v3, :cond_2f
.line 332
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "Cannot provide already encrypted keys"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 328
:cond_2d
const/4 v0, 0x0
goto :goto_5
.line 333
:cond_2f
iget-object v3, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
invoke-virtual {v0, v3, p2}, Lorg/bitcoinj/core/ECKey;->encrypt(Lorg/bitcoinj/crypto/KeyCrypter;Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/core/ECKey;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
goto :goto_13
.line 335
:cond_39
invoke-virtual {p0, v1}, Lorg/bitcoinj/wallet/KeyChainGroup;->importKeys(Ljava/util/List;)I
move-result v0
return v0
.end method
.method public isDeterministicUpgradeRequired()Z
.registers 2
.prologue
.line 743
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
if-lez v0, :cond_12
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v0
if-eqz v0, :cond_12
const/4 v0, 0x1
:goto_11
return v0
:cond_12
const/4 v0, 0x0
goto :goto_11
.end method
.method public isEncrypted()Z
.registers 2
.prologue
.line 530
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->keyCrypter:Lorg/bitcoinj/crypto/KeyCrypter;
if-eqz v0, :cond_6
const/4 v0, 0x1
:goto_5
return v0
:cond_6
const/4 v0, 0x0
goto :goto_5
.end method
.method public final isMarried()Z
.registers 2
.prologue
.line 478
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v0
if-nez v0, :cond_14
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isMarried()Z
move-result v0
if-eqz v0, :cond_14
const/4 v0, 0x1
:goto_13
return v0
:cond_14
const/4 v0, 0x0
goto :goto_13
.end method
.method public isRequiringUpdateAllBloomFilter()Z
.registers 2
.prologue
.line 599
new-instance v0, Ljava/lang/UnsupportedOperationException;
invoke-direct {v0}, Ljava/lang/UnsupportedOperationException;-><init>()V
throw v0
.end method
.method public isWatching()Z
.registers 6
.prologue
const/4 v1, 0x1
const/4 v2, 0x0
.line 540
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->isWatching()Lorg/bitcoinj/wallet/BasicKeyChain$State;
move-result-object v3
.line 541
sget-object v0, Lorg/bitcoinj/wallet/BasicKeyChain$State;->EMPTY:Lorg/bitcoinj/wallet/BasicKeyChain$State;
.line 542
iget-object v4, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v4}, Ljava/util/LinkedList;->isEmpty()Z
move-result v4
if-nez v4, :cond_1e
.line 543
invoke-virtual {p0}, Lorg/bitcoinj/wallet/KeyChainGroup;->getActiveKeyChain()Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->isWatching()Z
move-result v0
if-eqz v0, :cond_2e
.line 544
sget-object v0, Lorg/bitcoinj/wallet/BasicKeyChain$State;->WATCHING:Lorg/bitcoinj/wallet/BasicKeyChain$State;
.line 548
:cond_1e
:goto_1e
sget-object v4, Lorg/bitcoinj/wallet/BasicKeyChain$State;->EMPTY:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v3, v4, :cond_39
.line 549
sget-object v3, Lorg/bitcoinj/wallet/BasicKeyChain$State;->EMPTY:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v0, v3, :cond_31
.line 550
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Empty key chain group: cannot answer isWatching() query"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 546
:cond_2e
sget-object v0, Lorg/bitcoinj/wallet/BasicKeyChain$State;->REGULAR:Lorg/bitcoinj/wallet/BasicKeyChain$State;
goto :goto_1e
.line 551
:cond_31
sget-object v3, Lorg/bitcoinj/wallet/BasicKeyChain$State;->WATCHING:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v0, v3, :cond_37
move v0, v1
.line 557
:goto_36
return v0
:cond_37
move v0, v2
.line 551
goto :goto_36
.line 552
:cond_39
sget-object v4, Lorg/bitcoinj/wallet/BasicKeyChain$State;->EMPTY:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v0, v4, :cond_45
.line 553
sget-object v0, Lorg/bitcoinj/wallet/BasicKeyChain$State;->WATCHING:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v3, v0, :cond_43
move v0, v1
goto :goto_36
:cond_43
move v0, v2
goto :goto_36
.line 555
:cond_45
if-eq v0, v3, :cond_4f
.line 556
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Mix of watching and non-watching keys in wallet"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 557
:cond_4f
sget-object v3, Lorg/bitcoinj/wallet/BasicKeyChain$State;->WATCHING:Lorg/bitcoinj/wallet/BasicKeyChain$State;
if-ne v0, v3, :cond_55
move v0, v1
goto :goto_36
:cond_55
move v0, v2
goto :goto_36
.end method
.method public markP2SHAddressAsUsed(Lorg/bitcoinj/core/Address;)V
.registers 7
.prologue
.line 352
invoke-virtual {p1}, Lorg/bitcoinj/core/Address;->isP2SHAddress()Z
move-result v0
invoke-static {v0}, Lcom/google/common/base/n;->checkArgument(Z)V
.line 353
invoke-virtual {p1}, Lorg/bitcoinj/core/Address;->getHash160()[B
move-result-object v0
invoke-virtual {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->findRedeemDataFromScriptHash([B)Lorg/bitcoinj/wallet/RedeemData;
move-result-object v0
.line 354
if-nez v0, :cond_12
.line 364
:cond_11
return-void
.line 356
:cond_12
iget-object v0, v0, Lorg/bitcoinj/wallet/RedeemData;->keys:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:cond_18
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_11
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/ECKey;
.line 357
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v3
:cond_2a
:goto_2a
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v1
if-eqz v1, :cond_18
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 358
invoke-virtual {v0}, Lorg/bitcoinj/core/ECKey;->getPubKey()[B
move-result-object v4
invoke-virtual {v1, v4}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->findKeyFromPubKey([B)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v4
.line 359
if-eqz v4, :cond_2a
.line 360
invoke-virtual {v1, v4}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->markKeyAsUsed(Lorg/bitcoinj/crypto/DeterministicKey;)Lorg/bitcoinj/crypto/DeterministicKey;
.line 361
invoke-direct {p0, p1}, Lorg/bitcoinj/wallet/KeyChainGroup;->maybeMarkCurrentAddressAsUsed(Lorg/bitcoinj/core/Address;)V
goto :goto_2a
.end method
.method public markPubKeyAsUsed([B)V
.registers 4
.prologue
.line 445
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:cond_6
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1b
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 447
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->markPubKeyAsUsed([B)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
if-eqz v0, :cond_6
.line 448
invoke-direct {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->maybeMarkCurrentKeyAsUsed(Lorg/bitcoinj/crypto/DeterministicKey;)V
.line 452
:cond_1b
return-void
.end method
.method public markPubKeyHashAsUsed([B)V
.registers 4
.prologue
.line 384
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:cond_6
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1b
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 386
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->markPubHashAsUsed([B)Lorg/bitcoinj/crypto/DeterministicKey;
move-result-object v0
if-eqz v0, :cond_6
.line 387
invoke-direct {p0, v0}, Lorg/bitcoinj/wallet/KeyChainGroup;->maybeMarkCurrentKeyAsUsed(Lorg/bitcoinj/crypto/DeterministicKey;)V
.line 391
:cond_1b
return-void
.end method
.method public numKeys()I
.registers 4
.prologue
.line 456
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
.line 457
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
move v1, v0
:goto_d
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_20
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 458
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->numKeys()I
move-result v0
add-int/2addr v0, v1
move v1, v0
goto :goto_d
.line 459
:cond_20
return v1
.end method
.method public removeEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;)Z
.registers 4
.prologue
.line 622
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 623
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_9
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_19
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 624
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->removeEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;)Z
goto :goto_9
.line 625
:cond_19
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->removeEventListener(Lorg/bitcoinj/wallet/listeners/KeyChainEventListener;)Z
move-result v0
return v0
.end method
.method public removeImportedKey(Lorg/bitcoinj/core/ECKey;)Z
.registers 3
.prologue
.line 467
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 468
instance-of v0, p1, Lorg/bitcoinj/crypto/DeterministicKey;
if-nez v0, :cond_12
const/4 v0, 0x1
:goto_8
invoke-static {v0}, Lcom/google/common/base/n;->checkArgument(Z)V
.line 469
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/BasicKeyChain;->removeKey(Lorg/bitcoinj/core/ECKey;)Z
move-result v0
return v0
.line 468
:cond_12
const/4 v0, 0x0
goto :goto_8
.end method
.method public serializeToProtobuf()Ljava/util/List;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List",
"<",
"Lorg/bitcoinj/wallet/Protos$Key;",
">;"
}
.end annotation
.prologue
.line 631
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
if-eqz v0, :cond_25
.line 632
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->serializeToProtobuf()Ljava/util/List;
move-result-object v0
move-object v1, v0
.line 635
:goto_b
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_11
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_2c
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 636
invoke-virtual {v0}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->serializeToProtobuf()Ljava/util/List;
move-result-object v0
.line 637
invoke-interface {v1, v0}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
goto :goto_11
.line 2088
:cond_25
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
move-object v1, v0
.line 634
goto :goto_b
.line 639
:cond_2c
return-object v1
.end method
.method public setLookaheadSize(I)V
.registers 4
.prologue
.line 262
iput p1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->lookaheadSize:I
.line 263
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_8
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_18
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 264
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->setLookaheadSize(I)V
goto :goto_8
.line 266
:cond_18
return-void
.end method
.method public setLookaheadThreshold(I)V
.registers 4
.prologue
.line 286
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_6
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_16
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 287
invoke-virtual {v0, p1}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->setLookaheadThreshold(I)V
goto :goto_6
.line 289
:cond_16
return-void
.end method
.method public toString(Z)Ljava/lang/String;
.registers 6
.prologue
.line 790
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
.line 791
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
if-eqz v0, :cond_2a
.line 792
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->getKeys()Ljava/util/List;
move-result-object v0
.line 793
sget-object v2, Lorg/bitcoinj/core/ECKey;->AGE_COMPARATOR:Ljava/util/Comparator;
invoke-static {v0, v2}, Ljava/util/Collections;->sort(Ljava/util/List;Ljava/util/Comparator;)V
.line 794
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_18
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_2a
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/ECKey;
.line 795
iget-object v3, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0, p1, v1, v3}, Lorg/bitcoinj/core/ECKey;->formatKeyWithAddress(ZLjava/lang/StringBuilder;Lorg/bitcoinj/core/NetworkParameters;)V
goto :goto_18
.line 797
:cond_2a
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_30
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_4c
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/wallet/DeterministicKeyChain;
.line 798
iget-object v3, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0, p1, v3}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->toString(ZLorg/bitcoinj/core/NetworkParameters;)Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const/16 v3, 0xa
invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
goto :goto_30
.line 799
:cond_4c
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public upgradeToDeterministic(JLorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/DeterministicKeyChain;
.registers 11
.prologue
const/16 v6, 0x10
const/4 v1, 0x1
const/4 v2, 0x0
.line 689
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->numKeys()I
move-result v0
if-lez v0, :cond_2c
move v0, v1
:goto_d
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 690
const-wide/16 v4, 0x0
cmp-long v0, p1, v4
if-ltz v0, :cond_2e
move v0, v1
:goto_17
invoke-static {v0}, Lcom/google/common/base/n;->checkArgument(Z)V
.line 693
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
const-wide/16 v4, 0x1
sub-long v4, p1, v4
invoke-virtual {v0, v4, v5}, Lorg/bitcoinj/wallet/BasicKeyChain;->findOldestKeyAfter(J)Lorg/bitcoinj/core/ECKey;
move-result-object v0
.line 694
if-nez v0, :cond_30
.line 695
new-instance v0, Lorg/bitcoinj/wallet/AllRandomKeysRotating;
invoke-direct {v0}, Lorg/bitcoinj/wallet/AllRandomKeysRotating;-><init>()V
throw v0
:cond_2c
move v0, v2
.line 689
goto :goto_d
:cond_2e
move v0, v2
.line 690
goto :goto_17
.line 697
:cond_30
invoke-virtual {v0}, Lorg/bitcoinj/core/ECKey;->isEncrypted()Z
move-result v3
if-eqz v3, :cond_9d
.line 698
if-nez p3, :cond_3e
.line 711
new-instance v0, Lorg/bitcoinj/wallet/DeterministicUpgradeRequiresPassword;
invoke-direct {v0}, Lorg/bitcoinj/wallet/DeterministicUpgradeRequiresPassword;-><init>()V
throw v0
.line 713
:cond_3e
invoke-virtual {v0, p3}, Lorg/bitcoinj/core/ECKey;->decrypt(Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/core/ECKey;
move-result-object v0
move-object v3, v0
.line 718
:goto_43
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v0
if-eqz v0, :cond_a7
.line 719
sget-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v4, "Auto-upgrading pre-HD wallet to HD!"
invoke-interface {v0, v4}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
.line 723
:goto_52
sget-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v4, "Instantiating new HD chain using oldest non-rotating private key (address: {})"
iget-object v5, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v3, v5}, Lorg/bitcoinj/core/ECKey;->toAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v5
invoke-interface {v0, v4, v5}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V
.line 724
invoke-virtual {v3}, Lorg/bitcoinj/core/ECKey;->getSecretBytes()[B
move-result-object v0
invoke-static {v0}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
.line 726
array-length v4, v0
if-lt v4, v6, :cond_af
move v4, v1
:goto_6d
invoke-static {v4}, Lcom/google/common/base/n;->checkState(Z)V
.line 730
invoke-static {v0, v2, v6}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
.line 731
array-length v4, v0
if-ne v4, v6, :cond_b1
:goto_77
invoke-static {v1}, Lcom/google/common/base/n;->checkState(Z)V
.line 732
const-string v2, ""
.line 733
new-instance v1, Lorg/bitcoinj/wallet/DeterministicKeyChain;
invoke-virtual {v3}, Lorg/bitcoinj/core/ECKey;->getCreationTimeSeconds()J
move-result-wide v4
invoke-direct {v1, v0, v2, v4, v5}, Lorg/bitcoinj/wallet/DeterministicKeyChain;-><init>([BLjava/lang/String;J)V
.line 734
if-eqz p3, :cond_b3
.line 735
iget-object v0, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->basic:Lorg/bitcoinj/wallet/BasicKeyChain;
invoke-virtual {v0}, Lorg/bitcoinj/wallet/BasicKeyChain;->getKeyCrypter()Lorg/bitcoinj/crypto/KeyCrypter;
move-result-object v0
invoke-static {v0}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/crypto/KeyCrypter;
invoke-virtual {v1, v0, p3}, Lorg/bitcoinj/wallet/DeterministicKeyChain;->toEncrypted(Lorg/bitcoinj/crypto/KeyCrypter;Lorg/spongycastle/crypto/params/KeyParameter;)Lorg/bitcoinj/wallet/DeterministicKeyChain;
move-result-object v0
.line 737
:goto_97
iget-object v1, p0, Lorg/bitcoinj/wallet/KeyChainGroup;->chains:Ljava/util/LinkedList;
invoke-virtual {v1, v0}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 738
return-object v0
.line 714
:cond_9d
if-eqz p3, :cond_b5
.line 715
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "AES Key was provided but wallet is not encrypted."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 721
:cond_a7
sget-object v0, Lorg/bitcoinj/wallet/KeyChainGroup;->log:Lorg/slf4j/Logger;
const-string v4, "Wallet with existing HD chain is being re-upgraded due to change in key rotation time."
invoke-interface {v0, v4}, Lorg/slf4j/Logger;->info(Ljava/lang/String;)V
goto :goto_52
:cond_af
move v4, v2
.line 726
goto :goto_6d
:cond_b1
move v1, v2
.line 731
goto :goto_77
:cond_b3
move-object v0, v1
goto :goto_97
:cond_b5
move-object v3, v0
goto :goto_43
.end method