OpenSSLX509CertificateFactory$Parser.smali
.class abstract Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;
.super Ljava/lang/Object;
.source ""
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lorg/conscrypt/OpenSSLX509CertificateFactory;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "Parser"
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">",
"Ljava/lang/Object;"
}
.end annotation
# direct methods
.method private constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method synthetic constructor <init>(Lorg/conscrypt/OpenSSLX509CertificateFactory$1;)V
.registers 2
invoke-direct {p0}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;-><init>()V
return-void
.end method
# virtual methods
.method protected abstract fromPkcs7DerInputStream(Ljava/io/InputStream;)Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")",
"Ljava/util/List<",
"+TT;>;"
}
.end annotation
.end method
.method protected abstract fromPkcs7PemInputStream(Ljava/io/InputStream;)Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")",
"Ljava/util/List<",
"+TT;>;"
}
.end annotation
.end method
.method protected abstract fromX509DerInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")TT;"
}
.end annotation
.end method
.method protected abstract fromX509PemInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")TT;"
}
.end annotation
.end method
.method generateItem(Ljava/io/InputStream;)Ljava/lang/Object;
.registers 10
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")TT;"
}
.end annotation
if-eqz p1, :cond_83
invoke-virtual {p1}, Ljava/io/InputStream;->markSupported()Z
move-result v0
if-eqz v0, :cond_10
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v1
array-length v1, v1
invoke-virtual {p1, v1}, Ljava/io/InputStream;->mark(I)V
:cond_10
new-instance v1, Ljava/io/PushbackInputStream;
const/16 v2, 0x40
invoke-direct {v1, p1, v2}, Ljava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
:try_start_17
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v2
array-length v2, v2
new-array v2, v2, [B
invoke-virtual {v1, v2}, Ljava/io/PushbackInputStream;->read([B)I
move-result v3
if-ltz v3, :cond_6f
const/4 v4, 0x0
invoke-virtual {v1, v2, v4, v3}, Ljava/io/PushbackInputStream;->unread([BII)V
aget-byte v5, v2, v4
const/16 v6, 0x2d
const/4 v7, 0x0
if-ne v5, v6, :cond_54
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v5
array-length v5, v5
if-ne v3, v5, :cond_4f
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v3
invoke-static {v3, v2}, Ljava/util/Arrays;->equals([B[B)Z
move-result v3
if-eqz v3, :cond_4f
invoke-virtual {p0, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromPkcs7PemInputStream(Ljava/io/InputStream;)Ljava/util/List;
move-result-object v3
invoke-interface {v3}, Ljava/util/List;->size()I
move-result v5
if-nez v5, :cond_4b
return-object v7
:cond_4b
invoke-interface {v3, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
goto :goto_54
:cond_4f
invoke-virtual {p0, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromX509PemInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
move-result-object p1
return-object p1
:cond_54
:goto_54
const/4 v3, 0x4
aget-byte v2, v2, v3
const/4 v3, 0x6
if-ne v2, v3, :cond_6a
invoke-virtual {p0, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromPkcs7DerInputStream(Ljava/io/InputStream;)Ljava/util/List;
move-result-object v1
invoke-interface {v1}, Ljava/util/List;->size()I
move-result v2
if-nez v2, :cond_65
return-object v7
:cond_65
invoke-interface {v1, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object p1
return-object p1
:cond_6a
invoke-virtual {p0, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromX509DerInputStream(Ljava/io/InputStream;)Ljava/lang/Object;
move-result-object p1
return-object p1
:cond_6f
new-instance v1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
const-string v2, "inStream is empty"
invoke-direct {v1, v2}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_77
.catch Ljava/lang/Exception; {:try_start_17 .. :try_end_77} :catch_77
:catch_77
move-exception v1
if-eqz v0, :cond_7d
:try_start_7a
invoke-virtual {p1}, Ljava/io/InputStream;->reset()V
:try_end_7d
.catch Ljava/io/IOException; {:try_start_7a .. :try_end_7d} :catch_7d
:catch_7d
:cond_7d
new-instance p1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
invoke-direct {p1, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/Exception;)V
throw p1
:cond_83
new-instance p1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
const-string v0, "inStream == null"
invoke-direct {p1, v0}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method generateItems(Ljava/io/InputStream;)Ljava/util/Collection;
.registers 8
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/io/InputStream;",
")",
"Ljava/util/Collection<",
"+TT;>;"
}
.end annotation
if-eqz p1, :cond_89
:try_start_2
invoke-virtual {p1}, Ljava/io/InputStream;->available()I
move-result v0
if-nez v0, :cond_e
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
:try_end_d
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_d} :catch_80
return-object p1
:cond_e
invoke-virtual {p1}, Ljava/io/InputStream;->markSupported()Z
move-result v0
const/16 v1, 0x40
if-eqz v0, :cond_19
invoke-virtual {p1, v1}, Ljava/io/InputStream;->mark(I)V
:cond_19
new-instance v2, Ljava/io/PushbackInputStream;
invoke-direct {v2, p1, v1}, Ljava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
:try_start_1e
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v3
array-length v3, v3
new-array v3, v3, [B
invoke-virtual {v2, v3}, Ljava/io/PushbackInputStream;->read([B)I
move-result v4
if-ltz v4, :cond_6c
const/4 v5, 0x0
invoke-virtual {v2, v3, v5, v4}, Ljava/io/PushbackInputStream;->unread([BII)V
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v5
array-length v5, v5
if-ne v4, v5, :cond_45
# getter for: Lorg/conscrypt/OpenSSLX509CertificateFactory;->PKCS7_MARKER:[B
invoke-static {}, Lorg/conscrypt/OpenSSLX509CertificateFactory;->access$000()[B
move-result-object v4
invoke-static {v4, v3}, Ljava/util/Arrays;->equals([B[B)Z
move-result v4
if-eqz v4, :cond_45
invoke-virtual {p0, v2}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromPkcs7PemInputStream(Ljava/io/InputStream;)Ljava/util/List;
move-result-object p1
return-object p1
:cond_45
const/4 v4, 0x4
aget-byte v3, v3, v4
const/4 v4, 0x6
if-ne v3, v4, :cond_50
invoke-virtual {p0, v2}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->fromPkcs7DerInputStream(Ljava/io/InputStream;)Ljava/util/List;
move-result-object p1
:try_end_4f
.catch Ljava/lang/Exception; {:try_start_1e .. :try_end_4f} :catch_74
return-object p1
:cond_50
new-instance v3, Ljava/util/ArrayList;
invoke-direct {v3}, Ljava/util/ArrayList;-><init>()V
:cond_55
if-eqz v0, :cond_5a
invoke-virtual {p1, v1}, Ljava/io/InputStream;->mark(I)V
:cond_5a
:try_start_5a
invoke-virtual {p0, v2}, Lorg/conscrypt/OpenSSLX509CertificateFactory$Parser;->generateItem(Ljava/io/InputStream;)Ljava/lang/Object;
move-result-object v4
invoke-interface {v3, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
:try_end_61
.catch Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException; {:try_start_5a .. :try_end_61} :catch_62
goto :goto_69
:catch_62
nop
if-eqz v0, :cond_68
:try_start_65
invoke-virtual {p1}, Ljava/io/InputStream;->reset()V
:try_end_68
.catch Ljava/io/IOException; {:try_start_65 .. :try_end_68} :catch_68
:catch_68
:cond_68
const/4 v4, 0x0
:goto_69
if-nez v4, :cond_55
return-object v3
:cond_6c
:try_start_6c
new-instance v1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
const-string v2, "inStream is empty"
invoke-direct {v1, v2}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_74
.catch Ljava/lang/Exception; {:try_start_6c .. :try_end_74} :catch_74
:catch_74
move-exception v1
if-eqz v0, :cond_7a
:try_start_77
invoke-virtual {p1}, Ljava/io/InputStream;->reset()V
:try_end_7a
.catch Ljava/io/IOException; {:try_start_77 .. :try_end_7a} :catch_7a
:catch_7a
:cond_7a
new-instance p1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
invoke-direct {p1, v1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/Exception;)V
throw p1
:catch_80
move-exception p1
new-instance v0, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
const-string v1, "Problem reading input stream"
invoke-direct {v0, v1, p1}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/String;Ljava/lang/Exception;)V
throw v0
:cond_89
new-instance p1, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;
const-string v0, "inStream == null"
invoke-direct {p1, v0}, Lorg/conscrypt/OpenSSLX509CertificateFactory$ParsingException;-><init>(Ljava/lang/String;)V
goto :goto_92
:goto_91
throw p1
:goto_92
goto :goto_91
.end method