StripeSSLSocketFactory.smali
.class public Lcom/stripe/android/net/StripeSSLSocketFactory;
.super Ljavax/net/ssl/SSLSocketFactory;
.source "StripeSSLSocketFactory.java"
# static fields
.field private static final TLSv11Proto:Ljava/lang/String; = "TLSv1.1"
.field private static final TLSv12Proto:Ljava/lang/String; = "TLSv1.2"
# instance fields
.field private final tlsv11Supported:Z
.field private final tlsv12Supported:Z
.field private final under:Ljavax/net/ssl/SSLSocketFactory;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>()V
.registers 8
.line 29
invoke-direct {p0}, Ljavax/net/ssl/SSLSocketFactory;-><init>()V
.line 30
invoke-static {}, Ljavax/net/ssl/HttpsURLConnection;->getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
move-result-object v0
iput-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
.line 33
const/4 v0, 0x0
.local v0, "tlsv11Supported":Z
const/4 v1, 0x0
.line 37
.local v1, "tlsv12Supported":Z
const/4 v2, 0x0
:try_start_c
invoke-static {}, Ljavax/net/ssl/SSLContext;->getDefault()Ljavax/net/ssl/SSLContext;
move-result-object v3
invoke-virtual {v3}, Ljavax/net/ssl/SSLContext;->getSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;
move-result-object v3
invoke-virtual {v3}, Ljavax/net/ssl/SSLParameters;->getProtocols()[Ljava/lang/String;
move-result-object v3
:try_end_18
.catch Ljava/security/NoSuchAlgorithmException; {:try_start_c .. :try_end_18} :catch_19
.line 40
.local v3, "supportedProtocols":[Ljava/lang/String;
goto :goto_1d
.line 38
.end local v3 # "supportedProtocols":[Ljava/lang/String;
:catch_19
move-exception v3
.line 39
.local v3, "e":Ljava/security/NoSuchAlgorithmException;
new-array v4, v2, [Ljava/lang/String;
move-object v3, v4
.line 42
.local v3, "supportedProtocols":[Ljava/lang/String;
:goto_1d
array-length v4, v3
:goto_1e
if-ge v2, v4, :cond_38
aget-object v5, v3, v2
.line 43
.local v5, "proto":Ljava/lang/String;
const-string v6, "TLSv1.1"
invoke-virtual {v5, v6}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v6
if-eqz v6, :cond_2c
.line 44
const/4 v0, 0x1
goto :goto_35
.line 45
:cond_2c
const-string v6, "TLSv1.2"
invoke-virtual {v5, v6}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v6
if-eqz v6, :cond_35
.line 46
const/4 v1, 0x1
.line 42
.end local v5 # "proto":Ljava/lang/String;
:cond_35
:goto_35
add-int/lit8 v2, v2, 0x1
goto :goto_1e
.line 50
:cond_38
iput-boolean v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->tlsv11Supported:Z
.line 51
iput-boolean v1, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->tlsv12Supported:Z
.line 52
return-void
.end method
.method private fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
.registers 5
.param p1, "sock" # Ljava/net/Socket;
.line 103
instance-of v0, p1, Ljavax/net/ssl/SSLSocket;
if-nez v0, :cond_5
.line 104
return-object p1
.line 107
:cond_5
move-object v0, p1
check-cast v0, Ljavax/net/ssl/SSLSocket;
.line 109
.local v0, "sslSock":Ljavax/net/ssl/SSLSocket;
new-instance v1, Ljava/util/HashSet;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocket;->getEnabledProtocols()[Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
move-result-object v2
invoke-direct {v1, v2}, Ljava/util/HashSet;-><init>(Ljava/util/Collection;)V
.line 110
.local v1, "protos":Ljava/util/Set;, "Ljava/util/Set<Ljava/lang/String;>;"
iget-boolean v2, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->tlsv11Supported:Z
if-eqz v2, :cond_1e
.line 111
const-string v2, "TLSv1.1"
invoke-interface {v1, v2}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 113
:cond_1e
iget-boolean v2, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->tlsv12Supported:Z
if-eqz v2, :cond_27
.line 114
const-string v2, "TLSv1.2"
invoke-interface {v1, v2}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 117
:cond_27
const/4 v2, 0x0
new-array v2, v2, [Ljava/lang/String;
invoke-interface {v1, v2}, Ljava/util/Set;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v2
check-cast v2, [Ljava/lang/String;
invoke-virtual {v0, v2}, Ljavax/net/ssl/SSLSocket;->setEnabledProtocols([Ljava/lang/String;)V
.line 118
return-object v0
.end method
# virtual methods
.method public createSocket(Ljava/lang/String;I)Ljava/net/Socket;
.registers 4
.param p1, "host" # Ljava/lang/String;
.param p2, "port" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 75
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0, p1, p2}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/lang/String;I)Ljava/net/Socket;
move-result-object v0
invoke-direct {p0, v0}, Lcom/stripe/android/net/StripeSSLSocketFactory;->fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
move-result-object v0
return-object v0
.end method
.method public createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;
.registers 6
.param p1, "host" # Ljava/lang/String;
.param p2, "port" # I
.param p3, "localHost" # Ljava/net/InetAddress;
.param p4, "localPort" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 84
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;
move-result-object v0
invoke-direct {p0, v0}, Lcom/stripe/android/net/StripeSSLSocketFactory;->fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
move-result-object v0
return-object v0
.end method
.method public createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
.registers 4
.param p1, "host" # Ljava/net/InetAddress;
.param p2, "port" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 89
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0, p1, p2}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
move-result-object v0
invoke-direct {p0, v0}, Lcom/stripe/android/net/StripeSSLSocketFactory;->fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
move-result-object v0
return-object v0
.end method
.method public createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
.registers 6
.param p1, "address" # Ljava/net/InetAddress;
.param p2, "port" # I
.param p3, "localAddress" # Ljava/net/InetAddress;
.param p4, "localPort" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 98
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
.line 99
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
move-result-object v0
.line 98
invoke-direct {p0, v0}, Lcom/stripe/android/net/StripeSSLSocketFactory;->fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
move-result-object v0
return-object v0
.end method
.method public createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
.registers 6
.param p1, "s" # Ljava/net/Socket;
.param p2, "host" # Ljava/lang/String;
.param p3, "port" # I
.param p4, "autoClose" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 70
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
move-result-object v0
invoke-direct {p0, v0}, Lcom/stripe/android/net/StripeSSLSocketFactory;->fixupSocket(Ljava/net/Socket;)Ljava/net/Socket;
move-result-object v0
return-object v0
.end method
.method public getDefaultCipherSuites()[Ljava/lang/String;
.registers 2
.line 56
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocketFactory;->getDefaultCipherSuites()[Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public getSupportedCipherSuites()[Ljava/lang/String;
.registers 2
.line 61
iget-object v0, p0, Lcom/stripe/android/net/StripeSSLSocketFactory;->under:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocketFactory;->getSupportedCipherSuites()[Ljava/lang/String;
move-result-object v0
return-object v0
.end method