e.smali
.class public final Lcom/subgraph/orchid/b/e;
.super Lcom/subgraph/orchid/b/d;
.source "ConnectionHandshakeV2.java"
# direct methods
.method constructor <init>(Lcom/subgraph/orchid/b/h;Ljavax/net/ssl/SSLSocket;)V
.registers 3
.prologue
.line 46
invoke-direct {p0, p1, p2}, Lcom/subgraph/orchid/b/d;-><init>(Lcom/subgraph/orchid/b/h;Ljavax/net/ssl/SSLSocket;)V
.line 47
return-void
.end method
.method private static b(Ljavax/net/ssl/SSLSession;)Ljavax/security/cert/X509Certificate;
.registers 5
.prologue
.line 76
:try_start_0
invoke-interface {p0}, Ljavax/net/ssl/SSLSession;->getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;
move-result-object v0
.line 77
array-length v1, v0
const/4 v2, 0x2
if-eq v1, v2, :cond_27
.line 78
new-instance v1, Lcom/subgraph/orchid/ConnectionHandshakeException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Expecting 2 certificate chain from router and received chain length "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
array-length v0, v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)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}, Lcom/subgraph/orchid/ConnectionHandshakeException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_1e
.catch Ljavax/net/ssl/SSLPeerUnverifiedException; {:try_start_0 .. :try_end_1e} :catch_1e
.catch Ljava/security/GeneralSecurityException; {:try_start_0 .. :try_end_1e} :catch_38
.catch Ljavax/security/cert/CertificateException; {:try_start_0 .. :try_end_1e} :catch_41
.line 83
:catch_1e
move-exception v0
new-instance v0, Lcom/subgraph/orchid/ConnectionHandshakeException;
const-string v1, "No certificates received from router"
invoke-direct {v0, v1}, Lcom/subgraph/orchid/ConnectionHandshakeException;-><init>(Ljava/lang/String;)V
throw v0
.line 80
:cond_27
const/4 v1, 0x0
:try_start_28
aget-object v1, v0, v1
const/4 v2, 0x1
aget-object v2, v0, v2
invoke-virtual {v2}, Ljavax/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
move-result-object v2
invoke-virtual {v1, v2}, Ljavax/security/cert/X509Certificate;->verify(Ljava/security/PublicKey;)V
.line 81
const/4 v1, 0x1
aget-object v0, v0, v1
:try_end_37
.catch Ljavax/net/ssl/SSLPeerUnverifiedException; {:try_start_28 .. :try_end_37} :catch_1e
.catch Ljava/security/GeneralSecurityException; {:try_start_28 .. :try_end_37} :catch_38
.catch Ljavax/security/cert/CertificateException; {:try_start_28 .. :try_end_37} :catch_41
return-object v0
.line 85
:catch_38
move-exception v0
new-instance v0, Lcom/subgraph/orchid/ConnectionHandshakeException;
const-string v1, "Incorrect signature on certificate chain"
invoke-direct {v0, v1}, Lcom/subgraph/orchid/ConnectionHandshakeException;-><init>(Ljava/lang/String;)V
throw v0
.line 87
:catch_41
move-exception v0
new-instance v0, Lcom/subgraph/orchid/ConnectionHandshakeException;
const-string v1, "Malformed certificate received"
invoke-direct {v0, v1}, Lcom/subgraph/orchid/ConnectionHandshakeException;-><init>(Ljava/lang/String;)V
throw v0
.end method
# virtual methods
.method final LF()V
.registers 5
.prologue
const/4 v3, 0x0
.line 54
iget-object v0, p0, Lcom/subgraph/orchid/b/e;->bFw:Ljavax/net/ssl/SSLSocket;
sget-object v1, Lcom/subgraph/orchid/b/i;->bFL:[Ljava/lang/String;
invoke-virtual {v0, v1}, Ljavax/net/ssl/SSLSocket;->setEnabledCipherSuites([Ljava/lang/String;)V
.line 56
new-instance v0, Lcom/subgraph/orchid/b/f;
invoke-direct {v0, v3}, Lcom/subgraph/orchid/b/f;-><init>(B)V
.line 57
iget-object v1, p0, Lcom/subgraph/orchid/b/e;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v1, v0}, Ljavax/net/ssl/SSLSocket;->addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V
.line 58
iget-object v1, p0, Lcom/subgraph/orchid/b/e;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v1}, Ljavax/net/ssl/SSLSocket;->startHandshake()V
.line 1037
iget-object v1, v0, Lcom/subgraph/orchid/b/f;->lock:Ljava/lang/Object;
monitor-enter v1
.line 1038
:goto_1a
:try_start_1a
iget-boolean v2, v0, Lcom/subgraph/orchid/b/f;->isFinished:Z
if-nez v2, :cond_27
.line 1039
iget-object v2, v0, Lcom/subgraph/orchid/b/f;->lock:Ljava/lang/Object;
invoke-virtual {v2}, Ljava/lang/Object;->wait()V
goto :goto_1a
.line 1041
:catchall_24
move-exception v0
monitor-exit v1
:try_end_26
.catchall {:try_start_1a .. :try_end_26} :catchall_24
throw v0
:cond_27
:try_start_27
monitor-exit v1
:try_end_28
.catchall {:try_start_27 .. :try_end_28} :catchall_24
.line 60
iget-object v1, p0, Lcom/subgraph/orchid/b/e;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v1, v0}, Ljavax/net/ssl/SSLSocket;->removeHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V
.line 1070
iget-object v0, p0, Lcom/subgraph/orchid/b/e;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocket;->getSession()Ljavax/net/ssl/SSLSession;
move-result-object v0
invoke-static {v0}, Lcom/subgraph/orchid/b/e;->b(Ljavax/net/ssl/SSLSession;)Ljavax/security/cert/X509Certificate;
move-result-object v0
.line 1071
invoke-virtual {v0}, Ljavax/security/cert/X509Certificate;->getPublicKey()Ljava/security/PublicKey;
move-result-object v0
.line 62
invoke-virtual {p0, v0}, Lcom/subgraph/orchid/b/e;->a(Ljava/security/PublicKey;)V
.line 63
const/4 v0, 0x1
new-array v0, v0, [I
const/4 v1, 0x2
aput v1, v0, v3
invoke-virtual {p0, v0}, Lcom/subgraph/orchid/b/e;->e([I)V
.line 64
invoke-virtual {p0}, Lcom/subgraph/orchid/b/e;->LG()V
.line 65
invoke-virtual {p0}, Lcom/subgraph/orchid/b/e;->LH()V
.line 66
invoke-virtual {p0}, Lcom/subgraph/orchid/b/e;->LI()V
.line 67
return-void
.end method