o.smali
.class public final Lcom/subgraph/orchid/crypto/o;
.super Ljava/lang/Object;
.source "TorPublicKey.java"
# instance fields
.field private final bGk:Ljava/lang/String;
.field private bGl:Ljava/security/interfaces/RSAPublicKey;
.field private bGm:[B
.field private bGn:Lcom/subgraph/orchid/d/c;
# direct methods
.method public constructor <init>(Ljava/lang/String;)V
.registers 3
.prologue
const/4 v0, 0x0
.line 32
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 29
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGm:[B
.line 30
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGn:Lcom/subgraph/orchid/d/c;
.line 33
iput-object p1, p0, Lcom/subgraph/orchid/crypto/o;->bGk:Ljava/lang/String;
.line 34
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
.line 35
return-void
.end method
.method public constructor <init>(Ljava/security/interfaces/RSAPublicKey;)V
.registers 3
.prologue
const/4 v0, 0x0
.line 37
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 29
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGm:[B
.line 30
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGn:Lcom/subgraph/orchid/d/c;
.line 38
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGk:Ljava/lang/String;
.line 39
iput-object p1, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
.line 40
return-void
.end method
.method private Mh()Ljavax/crypto/Cipher;
.registers 4
.prologue
.line 93
:try_start_0
invoke-static {}, Lcom/subgraph/orchid/crypto/o;->Mi()Ljavax/crypto/Cipher;
move-result-object v0
.line 94
const/4 v1, 0x2
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Me()Ljava/security/interfaces/RSAPublicKey;
move-result-object v2
invoke-virtual {v0, v1, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V
:try_end_c
.catch Ljava/security/InvalidKeyException; {:try_start_0 .. :try_end_c} :catch_d
.line 95
return-object v0
.line 96
:catch_d
move-exception v0
.line 97
new-instance v1, Lcom/subgraph/orchid/TorException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method private static Mi()Ljavax/crypto/Cipher;
.registers 2
.prologue
.line 104
:try_start_0
const-string v0, "RSA/ECB/PKCS1Padding"
const-string v1, "SunJCE"
invoke-static {v0, v1}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Cipher;
:try_end_7
.catch Ljava/security/NoSuchProviderException; {:try_start_0 .. :try_end_7} :catch_9
.catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_7} :catch_11
.catch Ljavax/crypto/NoSuchPaddingException; {:try_start_0 .. :try_end_7} :catch_18
move-result-object v0
.line 106
:goto_8
return-object v0
:catch_9
move-exception v0
:try_start_a
const-string v0, "RSA/ECB/PKCS1Padding"
invoke-static {v0}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;
:try_end_f
.catch Ljava/security/NoSuchAlgorithmException; {:try_start_a .. :try_end_f} :catch_11
.catch Ljavax/crypto/NoSuchPaddingException; {:try_start_a .. :try_end_f} :catch_18
move-result-object v0
goto :goto_8
.line 108
:catch_11
move-exception v0
.line 109
new-instance v1, Lcom/subgraph/orchid/TorException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 110
:catch_18
move-exception v0
.line 111
new-instance v1, Lcom/subgraph/orchid/TorException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
# virtual methods
.method final declared-synchronized Me()Ljava/security/interfaces/RSAPublicKey;
.registers 5
.prologue
.line 43
monitor-enter p0
:try_start_1
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
if-eqz v0, :cond_9
.line 44
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
:try_end_7
.catchall {:try_start_1 .. :try_end_7} :catchall_33
.line 53
:goto_7
monitor-exit p0
return-object v0
.line 45
:cond_9
:try_start_9
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGk:Ljava/lang/String;
if-eqz v0, :cond_1a
.line 46
new-instance v0, Lcom/subgraph/orchid/crypto/i;
invoke-direct {v0}, Lcom/subgraph/orchid/crypto/i;-><init>()V
:try_end_12
.catchall {:try_start_9 .. :try_end_12} :catchall_33
.line 48
:try_start_12
iget-object v1, p0, Lcom/subgraph/orchid/crypto/o;->bGk:Ljava/lang/String;
invoke-virtual {v0, v1}, Lcom/subgraph/orchid/crypto/i;->gI(Ljava/lang/String;)Ljava/security/interfaces/RSAPublicKey;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
:try_end_1a
.catch Ljava/security/GeneralSecurityException; {:try_start_12 .. :try_end_1a} :catch_1d
.catchall {:try_start_12 .. :try_end_1a} :catchall_33
.line 53
:cond_1a
:try_start_1a
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGl:Ljava/security/interfaces/RSAPublicKey;
goto :goto_7
.line 49
:catch_1d
move-exception v0
.line 50
new-instance v1, Ljava/lang/IllegalArgumentException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Failed to parse PEM encoded key: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_33
.catchall {:try_start_1a .. :try_end_33} :catchall_33
.line 43
:catchall_33
move-exception v0
monitor-exit p0
throw v0
.end method
.method public final declared-synchronized Mf()[B
.registers 3
.prologue
.line 57
monitor-enter p0
:try_start_1
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGm:[B
if-nez v0, :cond_3a
.line 58
new-instance v0, Lcom/subgraph/orchid/crypto/i;
invoke-direct {v0}, Lcom/subgraph/orchid/crypto/i;-><init>()V
.line 59
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Me()Ljava/security/interfaces/RSAPublicKey;
move-result-object v1
.line 1062
invoke-interface {v1}, Ljava/security/interfaces/RSAPublicKey;->getEncoded()[B
move-result-object v1
.line 1084
iget-object v0, v0, Lcom/subgraph/orchid/crypto/i;->bFW:Lcom/subgraph/orchid/crypto/a;
invoke-static {v1}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
move-result-object v1
invoke-virtual {v0, v1}, Lcom/subgraph/orchid/crypto/a;->b(Ljava/nio/ByteBuffer;)Lcom/subgraph/orchid/crypto/e;
move-result-object v0
.line 1085
invoke-static {v0}, Lcom/subgraph/orchid/crypto/i;->b(Lcom/subgraph/orchid/crypto/e;)Ljava/util/List;
move-result-object v0
.line 1086
const/4 v1, 0x1
invoke-interface {v0, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/subgraph/orchid/crypto/e;
.line 1110
instance-of v1, v0, Lcom/subgraph/orchid/crypto/b;
if-nez v1, :cond_34
.line 1111
new-instance v0, Ljava/lang/IllegalArgumentException;
invoke-direct {v0}, Ljava/lang/IllegalArgumentException;-><init>()V
throw v0
:try_end_31
.catchall {:try_start_1 .. :try_end_31} :catchall_31
.line 57
:catchall_31
move-exception v0
monitor-exit p0
throw v0
.line 1113
:cond_34
:try_start_34
check-cast v0, Lcom/subgraph/orchid/crypto/b;
.line 2051
iget-object v0, v0, Lcom/subgraph/orchid/crypto/b;->bytes:[B
.line 59
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGm:[B
.line 61
:cond_3a
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGm:[B
:try_end_3c
.catchall {:try_start_34 .. :try_end_3c} :catchall_31
monitor-exit p0
return-object v0
.end method
.method public final declared-synchronized Mg()Lcom/subgraph/orchid/d/c;
.registers 3
.prologue
.line 65
monitor-enter p0
:try_start_1
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGn:Lcom/subgraph/orchid/d/c;
if-nez v0, :cond_1c
.line 66
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Mf()[B
move-result-object v0
.line 2054
new-instance v1, Lcom/subgraph/orchid/crypto/m;
invoke-direct {v1}, Lcom/subgraph/orchid/crypto/m;-><init>()V
.line 2055
invoke-virtual {v1, v0}, Lcom/subgraph/orchid/crypto/m;->update([B)V
.line 2056
new-instance v0, Lcom/subgraph/orchid/d/c;
invoke-virtual {v1}, Lcom/subgraph/orchid/crypto/m;->Mb()[B
move-result-object v1
invoke-direct {v0, v1}, Lcom/subgraph/orchid/d/c;-><init>([B)V
.line 66
iput-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGn:Lcom/subgraph/orchid/d/c;
.line 68
:cond_1c
iget-object v0, p0, Lcom/subgraph/orchid/crypto/o;->bGn:Lcom/subgraph/orchid/d/c;
:try_end_1e
.catchall {:try_start_1 .. :try_end_1e} :catchall_20
monitor-exit p0
return-object v0
.line 65
:catchall_20
move-exception v0
monitor-exit p0
throw v0
.end method
.method public final a(Lcom/subgraph/orchid/crypto/TorSignature;Lcom/subgraph/orchid/d/c;)Z
.registers 4
.prologue
.line 72
invoke-virtual {p2}, Lcom/subgraph/orchid/d/c;->Mf()[B
move-result-object v0
invoke-virtual {p0, p1, v0}, Lcom/subgraph/orchid/crypto/o;->a(Lcom/subgraph/orchid/crypto/TorSignature;[B)Z
move-result v0
return v0
.end method
.method public final a(Lcom/subgraph/orchid/crypto/TorSignature;[B)Z
.registers 6
.prologue
.line 80
invoke-direct {p0}, Lcom/subgraph/orchid/crypto/o;->Mh()Ljavax/crypto/Cipher;
move-result-object v0
.line 2058
:try_start_4
iget-object v1, p1, Lcom/subgraph/orchid/crypto/TorSignature;->bGp:[B
iget-object v2, p1, Lcom/subgraph/orchid/crypto/TorSignature;->bGp:[B
array-length v2, v2
invoke-static {v1, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v1
.line 82
invoke-virtual {v0, v1}, Ljavax/crypto/Cipher;->doFinal([B)[B
move-result-object v0
.line 83
invoke-static {v0, p2}, Lcom/subgraph/orchid/g/a;->i([B[B)Z
:try_end_14
.catch Ljavax/crypto/IllegalBlockSizeException; {:try_start_4 .. :try_end_14} :catch_16
.catch Ljavax/crypto/BadPaddingException; {:try_start_4 .. :try_end_14} :catch_1d
move-result v0
return v0
.line 84
:catch_16
move-exception v0
.line 85
new-instance v1, Lcom/subgraph/orchid/TorException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 86
:catch_1d
move-exception v0
.line 87
new-instance v1, Lcom/subgraph/orchid/TorException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method public final equals(Ljava/lang/Object;)Z
.registers 4
.prologue
.line 124
instance-of v0, p1, Lcom/subgraph/orchid/crypto/o;
if-nez v0, :cond_6
.line 125
const/4 v0, 0x0
.line 127
:goto_5
return v0
.line 126
:cond_6
check-cast p1, Lcom/subgraph/orchid/crypto/o;
.line 127
invoke-virtual {p1}, Lcom/subgraph/orchid/crypto/o;->Mg()Lcom/subgraph/orchid/d/c;
move-result-object v0
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Mg()Lcom/subgraph/orchid/d/c;
move-result-object v1
invoke-virtual {v0, v1}, Lcom/subgraph/orchid/d/c;->equals(Ljava/lang/Object;)Z
move-result v0
goto :goto_5
.end method
.method public final hashCode()I
.registers 2
.prologue
.line 131
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Mg()Lcom/subgraph/orchid/d/c;
move-result-object v0
invoke-virtual {v0}, Lcom/subgraph/orchid/d/c;->hashCode()I
move-result v0
return v0
.end method
.method public final toString()Ljava/lang/String;
.registers 3
.prologue
.line 120
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "Tor Public Key: "
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p0}, Lcom/subgraph/orchid/crypto/o;->Mg()Lcom/subgraph/orchid/d/c;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method