BIP38PrivateKey.smali
.class public Lorg/bitcoinj/crypto/BIP38PrivateKey;
.super Lorg/bitcoinj/core/VersionedChecksummedBytes;
.source "BIP38PrivateKey.java"
# instance fields
.field public final addressHash:[B
.field public final compressed:Z
.field public final content:[B
.field public final ecMultiply:Z
.field public final hasLotAndSequence:Z
.field public transient params:Lorg/bitcoinj/core/NetworkParameters;
# direct methods
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;)V
.registers 9
.annotation runtime Ljava/lang/Deprecated;
.end annotation
.prologue
const/16 v5, 0x26
const/4 v4, 0x6
const/4 v2, 0x0
const/4 v1, 0x1
.line 71
invoke-direct {p0, p2}, Lorg/bitcoinj/core/VersionedChecksummedBytes;-><init>(Ljava/lang/String;)V
.line 72
invoke-static {p1}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/bitcoinj/core/NetworkParameters;
iput-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
.line 73
iget v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->version:I
if-eq v0, v1, :cond_2b
.line 74
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Mismatched version number: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->version:I
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 75
:cond_2b
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
array-length v0, v0
if-eq v0, v5, :cond_48
.line 76
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Wrong number of bytes, excluding version byte: "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
array-length v2, v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 77
:cond_48
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x4
if-eqz v0, :cond_6e
move v0, v1
:goto_51
iput-boolean v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->hasLotAndSequence:Z
.line 78
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x20
if-eqz v0, :cond_70
move v0, v1
:goto_5c
iput-boolean v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->compressed:Z
.line 79
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x1
if-eqz v0, :cond_72
.line 80
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bit 0x01 reserved for future use."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
:cond_6e
move v0, v2
.line 77
goto :goto_51
:cond_70
move v0, v2
.line 78
goto :goto_5c
.line 81
:cond_72
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x2
if-eqz v0, :cond_82
.line 82
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bit 0x02 reserved for future use."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 83
:cond_82
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x8
if-eqz v0, :cond_92
.line 84
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bit 0x08 reserved for future use."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 85
:cond_92
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit8 v0, v0, 0x10
if-eqz v0, :cond_a2
.line 86
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bit 0x10 reserved for future use."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 87
:cond_a2
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v2
and-int/lit16 v0, v0, 0xff
.line 88
const/16 v3, 0x42
if-ne v0, v3, :cond_cc
.line 90
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xc0
const/16 v1, 0xc0
if-eq v0, v1, :cond_be
.line 91
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bits 0x40 and 0x80 must be set for non-EC-multiplied keys."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 92
:cond_be
iput-boolean v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->ecMultiply:Z
.line 93
iget-boolean v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->hasLotAndSequence:Z
if-eqz v0, :cond_e2
.line 94
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Non-EC-multiplied keys cannot have lot/sequence."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 95
:cond_cc
const/16 v2, 0x43
if-ne v0, v2, :cond_f4
.line 97
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
aget-byte v0, v0, v1
and-int/lit16 v0, v0, 0xc0
if-eqz v0, :cond_e0
.line 98
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Bits 0x40 and 0x80 must be cleared for EC-multiplied keys."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.line 99
:cond_e0
iput-boolean v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->ecMultiply:Z
.line 103
:cond_e2
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
const/4 v1, 0x2
invoke-static {v0, v1, v4}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->addressHash:[B
.line 104
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->bytes:[B
invoke-static {v0, v4, v5}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
iput-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->content:[B
.line 105
return-void
.line 101
:cond_f4
new-instance v0, Lorg/bitcoinj/core/AddressFormatException;
const-string v1, "Second byte must by 0x42 or 0x43."
invoke-direct {v0, v1}, Lorg/bitcoinj/core/AddressFormatException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private decryptEC(Ljava/lang/String;)Lorg/bitcoinj/core/ECKey;
.registers 14
.prologue
const/16 v11, 0x10
const/4 v6, 0x1
const/4 v7, 0x0
.line 138
:try_start_4
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->content:[B
const/4 v1, 0x0
const/16 v2, 0x8
invoke-static {v0, v1, v2}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v8
.line 139
iget-boolean v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->hasLotAndSequence:Z
if-eqz v0, :cond_b6
const/4 v0, 0x0
const/4 v1, 0x4
invoke-static {v8, v0, v1}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v1
.line 141
:goto_17
sget-object v0, Lcom/google/common/base/f;->UTF_8:Ljava/nio/charset/Charset;
invoke-virtual {p1, v0}, Ljava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B
move-result-object v0
const/16 v2, 0x4000
const/16 v3, 0x8
const/16 v4, 0x8
const/16 v5, 0x20
invoke-static/range {v0 .. v5}, Lcom/lambdaworks/crypto/SCrypt;->a([B[BIIII)[B
move-result-object v0
.line 142
iget-boolean v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->hasLotAndSequence:Z
if-eqz v1, :cond_47
.line 143
const/4 v1, 0x2
new-array v1, v1, [[B
const/4 v2, 0x0
aput-object v0, v1, v2
const/4 v0, 0x1
aput-object v8, v1, v0
invoke-static {v1}, Lcom/google/common/primitives/a;->a([[B)[B
move-result-object v1
.line 144
array-length v0, v1
const/16 v2, 0x28
if-ne v0, v2, :cond_b9
move v0, v6
:goto_40
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 145
invoke-static {v1}, Lorg/bitcoinj/core/Sha256Hash;->hashTwice([B)[B
move-result-object v0
.line 147
:cond_47
new-instance v9, Ljava/math/BigInteger;
const/4 v1, 0x1
invoke-direct {v9, v1, v0}, Ljava/math/BigInteger;-><init>(I[B)V
.line 148
const/4 v0, 0x1
invoke-static {v9, v0}, Lorg/bitcoinj/core/ECKey;->fromPrivate(Ljava/math/BigInteger;Z)Lorg/bitcoinj/core/ECKey;
move-result-object v2
.line 150
const/4 v0, 0x2
new-array v0, v0, [[B
const/4 v1, 0x0
iget-object v3, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->addressHash:[B
aput-object v3, v0, v1
const/4 v1, 0x1
aput-object v8, v0, v1
invoke-static {v0}, Lcom/google/common/primitives/a;->a([[B)[B
move-result-object v1
.line 151
array-length v0, v1
const/16 v3, 0xc
if-ne v0, v3, :cond_bb
move v0, v6
:goto_67
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 152
invoke-virtual {v2}, Lorg/bitcoinj/core/ECKey;->getPubKey()[B
move-result-object v0
const/16 v2, 0x400
const/4 v3, 0x1
const/4 v4, 0x1
const/16 v5, 0x40
invoke-static/range {v0 .. v5}, Lcom/lambdaworks/crypto/SCrypt;->a([B[BIIII)[B
move-result-object v1
.line 153
const/16 v0, 0x20
const/16 v2, 0x40
invoke-static {v1, v0, v2}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
.line 155
new-instance v2, Ljavax/crypto/spec/SecretKeySpec;
const-string v3, "AES"
invoke-direct {v2, v0, v3}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
.line 156
const-string v0, "AES/ECB/NoPadding"
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v3
.line 157
const/4 v0, 0x2
invoke-virtual {v3, v0, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V
.line 159
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->content:[B
const/16 v2, 0x10
const/16 v4, 0x20
invoke-static {v0, v2, v4}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
.line 160
invoke-virtual {v3, v0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object v2
.line 161
array-length v0, v2
if-ne v0, v11, :cond_bd
move v0, v6
:goto_a3
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
move v0, v7
.line 162
:goto_a7
if-ge v0, v11, :cond_bf
.line 163
aget-byte v4, v2, v0
add-int/lit8 v5, v0, 0x10
aget-byte v5, v1, v5
xor-int/2addr v4, v5
int-to-byte v4, v4
aput-byte v4, v2, v0
.line 162
add-int/lit8 v0, v0, 0x1
goto :goto_a7
:cond_b6
move-object v1, v8
.line 139
goto/16 :goto_17
:cond_b9
move v0, v7
.line 144
goto :goto_40
:cond_bb
move v0, v7
.line 151
goto :goto_67
:cond_bd
move v0, v7
.line 161
goto :goto_a3
.line 165
:cond_bf
const/4 v0, 0x2
new-array v0, v0, [[B
const/4 v4, 0x0
iget-object v5, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->content:[B
const/16 v8, 0x8
const/16 v10, 0x10
invoke-static {v5, v8, v10}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v5
aput-object v5, v0, v4
const/4 v4, 0x1
const/4 v5, 0x0
const/16 v8, 0x8
invoke-static {v2, v5, v8}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v5
aput-object v5, v0, v4
invoke-static {v0}, Lcom/google/common/primitives/a;->a([[B)[B
move-result-object v0
.line 166
invoke-virtual {v3, v0}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object v3
.line 167
array-length v0, v3
if-ne v0, v11, :cond_f6
move v0, v6
:goto_e5
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
move v0, v7
.line 168
:goto_e9
if-ge v0, v11, :cond_f8
.line 169
aget-byte v4, v3, v0
aget-byte v5, v1, v0
xor-int/2addr v4, v5
int-to-byte v4, v4
aput-byte v4, v3, v0
.line 168
add-int/lit8 v0, v0, 0x1
goto :goto_e9
:cond_f6
move v0, v7
.line 167
goto :goto_e5
.line 171
:cond_f8
const/4 v0, 0x2
new-array v0, v0, [[B
const/4 v1, 0x0
aput-object v3, v0, v1
const/4 v1, 0x1
const/16 v3, 0x8
const/16 v4, 0x10
invoke-static {v2, v3, v4}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v2
aput-object v2, v0, v1
invoke-static {v0}, Lcom/google/common/primitives/a;->a([[B)[B
move-result-object v1
.line 172
array-length v0, v1
const/16 v2, 0x18
if-ne v0, v2, :cond_149
move v0, v6
:goto_113
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 173
new-instance v2, Ljava/math/BigInteger;
const/4 v0, 0x1
invoke-static {v1}, Lorg/bitcoinj/core/Sha256Hash;->hashTwice([B)[B
move-result-object v1
invoke-direct {v2, v0, v1}, Ljava/math/BigInteger;-><init>(I[B)V
.line 174
invoke-virtual {v9}, Ljava/math/BigInteger;->signum()I
move-result v0
if-ltz v0, :cond_14b
move v0, v6
:goto_127
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 175
invoke-virtual {v2}, Ljava/math/BigInteger;->signum()I
move-result v0
if-ltz v0, :cond_14d
move v0, v6
:goto_131
invoke-static {v0}, Lcom/google/common/base/n;->checkState(Z)V
.line 176
invoke-virtual {v9, v2}, Ljava/math/BigInteger;->multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
sget-object v1, Lorg/bitcoinj/core/ECKey;->CURVE:Lorg/spongycastle/crypto/params/ECDomainParameters;
invoke-virtual {v1}, Lorg/spongycastle/crypto/params/ECDomainParameters;->getN()Ljava/math/BigInteger;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/math/BigInteger;->mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;
move-result-object v0
.line 178
iget-boolean v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->compressed:Z
invoke-static {v0, v1}, Lorg/bitcoinj/core/ECKey;->fromPrivate(Ljava/math/BigInteger;Z)Lorg/bitcoinj/core/ECKey;
:try_end_147
.catch Ljava/security/GeneralSecurityException; {:try_start_4 .. :try_end_147} :catch_14f
move-result-object v0
return-object v0
:cond_149
move v0, v7
.line 172
goto :goto_113
:cond_14b
move v0, v7
.line 174
goto :goto_127
:cond_14d
move v0, v7
.line 175
goto :goto_131
.line 179
:catch_14f
move-exception v0
.line 180
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method private decryptNoEC(Ljava/lang/String;)Lorg/bitcoinj/core/ECKey;
.registers 10
.prologue
const/4 v6, 0x0
const/16 v7, 0x20
.line 119
:try_start_3
sget-object v0, Lcom/google/common/base/f;->UTF_8:Ljava/nio/charset/Charset;
invoke-virtual {p1, v0}, Ljava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B
move-result-object v0
iget-object v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->addressHash:[B
const/16 v2, 0x4000
const/16 v3, 0x8
const/16 v4, 0x8
const/16 v5, 0x40
invoke-static/range {v0 .. v5}, Lcom/lambdaworks/crypto/SCrypt;->a([B[BIIII)[B
move-result-object v1
.line 120
const/16 v0, 0x20
const/16 v2, 0x40
invoke-static {v1, v0, v2}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v0
.line 121
new-instance v2, Ljavax/crypto/spec/SecretKeySpec;
const-string v3, "AES"
invoke-direct {v2, v0, v3}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
.line 123
invoke-static {}, Lorg/bitcoinj/crypto/DRMWorkaround;->maybeDisableExportControls()V
.line 124
const-string v0, "AES/ECB/NoPadding"
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
move-result-object v0
.line 126
const/4 v3, 0x2
invoke-virtual {v0, v3, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V
.line 127
iget-object v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->content:[B
const/4 v3, 0x0
const/16 v4, 0x20
invoke-virtual {v0, v2, v3, v4}, Ljavax/crypto/Cipher;->doFinal([BII)[B
move-result-object v2
move v0, v6
.line 128
:goto_3d
if-ge v0, v7, :cond_4a
.line 129
aget-byte v3, v2, v0
aget-byte v4, v1, v0
xor-int/2addr v3, v4
int-to-byte v3, v3
aput-byte v3, v2, v0
.line 128
add-int/lit8 v0, v0, 0x1
goto :goto_3d
.line 130
:cond_4a
iget-boolean v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->compressed:Z
invoke-static {v2, v0}, Lorg/bitcoinj/core/ECKey;->fromPrivate([BZ)Lorg/bitcoinj/core/ECKey;
:try_end_4f
.catch Ljava/security/GeneralSecurityException; {:try_start_3 .. :try_end_4f} :catch_51
move-result-object v0
return-object v0
.line 131
:catch_51
move-exception v0
.line 132
new-instance v1, Ljava/lang/RuntimeException;
invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public static fromBase58(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;)Lorg/bitcoinj/crypto/BIP38PrivateKey;
.registers 3
.prologue
.line 65
new-instance v0, Lorg/bitcoinj/crypto/BIP38PrivateKey;
invoke-direct {v0, p0, p1}, Lorg/bitcoinj/crypto/BIP38PrivateKey;-><init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/lang/String;)V
return-object v0
.end method
.method private readObject(Ljava/io/ObjectInputStream;)V
.registers 3
.prologue
.line 205
invoke-virtual {p1}, Ljava/io/ObjectInputStream;->defaultReadObject()V
.line 206
invoke-virtual {p1}, Ljava/io/ObjectInputStream;->readUTF()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lorg/bitcoinj/core/NetworkParameters;->fromID(Ljava/lang/String;)Lorg/bitcoinj/core/NetworkParameters;
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/core/NetworkParameters;
iput-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
.line 207
return-void
.end method
.method private writeObject(Ljava/io/ObjectOutputStream;)V
.registers 3
.prologue
.line 200
invoke-virtual {p1}, Ljava/io/ObjectOutputStream;->defaultWriteObject()V
.line 201
iget-object v0, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0}, Lorg/bitcoinj/core/NetworkParameters;->getId()Ljava/lang/String;
move-result-object v0
invoke-virtual {p1, v0}, Ljava/io/ObjectOutputStream;->writeUTF(Ljava/lang/String;)V
.line 202
return-void
.end method
# virtual methods
.method public decrypt(Ljava/lang/String;)Lorg/bitcoinj/core/ECKey;
.registers 6
.prologue
.line 108
sget-object v0, Ljava/text/Normalizer$Form;->NFC:Ljava/text/Normalizer$Form;
invoke-static {p1, v0}, Ljava/text/Normalizer;->normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;
move-result-object v0
.line 109
iget-boolean v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->ecMultiply:Z
if-eqz v1, :cond_3a
invoke-direct {p0, v0}, Lorg/bitcoinj/crypto/BIP38PrivateKey;->decryptEC(Ljava/lang/String;)Lorg/bitcoinj/core/ECKey;
move-result-object v0
.line 110
:goto_e
iget-object v1, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-virtual {v0, v1}, Lorg/bitcoinj/core/ECKey;->toAddress(Lorg/bitcoinj/core/NetworkParameters;)Lorg/bitcoinj/core/Address;
move-result-object v1
invoke-virtual {v1}, Lorg/bitcoinj/core/Address;->toString()Ljava/lang/String;
move-result-object v1
sget-object v2, Lcom/google/common/base/f;->US_ASCII:Ljava/nio/charset/Charset;
invoke-virtual {v1, v2}, Ljava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B
move-result-object v1
invoke-static {v1}, Lorg/bitcoinj/core/Sha256Hash;->twiceOf([B)Lorg/bitcoinj/core/Sha256Hash;
move-result-object v1
.line 111
invoke-virtual {v1}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B
move-result-object v1
const/4 v2, 0x0
const/4 v3, 0x4
invoke-static {v1, v2, v3}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v1
.line 112
iget-object v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->addressHash:[B
invoke-static {v1, v2}, Ljava/util/Arrays;->equals([B[B)Z
move-result v1
if-nez v1, :cond_3f
.line 113
new-instance v0, Lorg/bitcoinj/crypto/BIP38PrivateKey$BadPassphraseException;
invoke-direct {v0}, Lorg/bitcoinj/crypto/BIP38PrivateKey$BadPassphraseException;-><init>()V
throw v0
.line 109
:cond_3a
invoke-direct {p0, v0}, Lorg/bitcoinj/crypto/BIP38PrivateKey;->decryptNoEC(Ljava/lang/String;)Lorg/bitcoinj/core/ECKey;
move-result-object v0
goto :goto_e
.line 114
:cond_3f
return-object v0
.end method
.method public equals(Ljava/lang/Object;)Z
.registers 6
.prologue
const/4 v0, 0x1
const/4 v1, 0x0
.line 186
if-ne p0, p1, :cond_5
.line 189
:cond_4
:goto_4
return v0
.line 187
:cond_5
if-eqz p1, :cond_11
invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v2
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v3
if-eq v2, v3, :cond_13
:cond_11
move v0, v1
goto :goto_4
.line 188
:cond_13
check-cast p1, Lorg/bitcoinj/crypto/BIP38PrivateKey;
.line 189
invoke-super {p0, p1}, Lorg/bitcoinj/core/VersionedChecksummedBytes;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_25
iget-object v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
iget-object v3, p1, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
invoke-static {v2, v3}, Lcom/google/common/base/m;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v2
if-nez v2, :cond_4
:cond_25
move v0, v1
goto :goto_4
.end method
.method public hashCode()I
.registers 4
.prologue
.line 194
const/4 v0, 0x2
new-array v0, v0, [Ljava/lang/Object;
const/4 v1, 0x0
invoke-super {p0}, Lorg/bitcoinj/core/VersionedChecksummedBytes;->hashCode()I
move-result v2
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
aput-object v2, v0, v1
const/4 v1, 0x1
iget-object v2, p0, Lorg/bitcoinj/crypto/BIP38PrivateKey;->params:Lorg/bitcoinj/core/NetworkParameters;
aput-object v2, v0, v1
.line 1084
invoke-static {v0}, Ljava/util/Arrays;->hashCode([Ljava/lang/Object;)I
move-result v0
.line 194
return v0
.end method