TlsUtils.smali

.class public Lorg/spongycastle/crypto/tls/TlsUtils;
.super Ljava/lang/Object;
.source "TlsUtils.java"


# static fields
.field public static final EMPTY_BYTES:[B

.field public static final EMPTY_INTS:[I

.field public static final EMPTY_LONGS:[J

.field public static final EMPTY_SHORTS:[S

.field public static final EXT_signature_algorithms:Ljava/lang/Integer;

.field static final SSL3_CONST:[[B

.field static final SSL_CLIENT:[B

.field static final SSL_SERVER:[B


# direct methods
.method static constructor <clinit>()V
    .registers 3

    .prologue
    const/4 v2, 0x4

    const/4 v1, 0x0

    .line 46
    new-array v0, v1, [B

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_BYTES:[B

    .line 47
    new-array v0, v1, [S

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_SHORTS:[S

    .line 48
    new-array v0, v1, [I

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_INTS:[I

    .line 49
    new-array v0, v1, [J

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_LONGS:[J

    .line 51
    const/16 v0, 0xd

    invoke-static {v0}, Lorg/spongycastle/util/Integers;->valueOf(I)Ljava/lang/Integer;

    move-result-object v0

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EXT_signature_algorithms:Ljava/lang/Integer;

    .line 1376
    new-array v0, v2, [B

    fill-array-data v0, :array_30

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->SSL_CLIENT:[B

    .line 1377
    new-array v0, v2, [B

    fill-array-data v0, :array_36

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->SSL_SERVER:[B

    .line 1380
    invoke-static {}, Lorg/spongycastle/crypto/tls/TlsUtils;->genSSL3Const()[[B

    move-result-object v0

    sput-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->SSL3_CONST:[[B

    return-void

    .line 1376
    nop

    :array_30
    .array-data 1
        0x43t
        0x4ct
        0x4et
        0x54t
    .end array-data

    .line 1377
    :array_36
    .array-data 1
        0x53t
        0x52t
        0x56t
        0x52t
    .end array-data
.end method

.method public constructor <init>()V
    .registers 1

    .prologue
    .line 44
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static PRF(Lorg/spongycastle/crypto/tls/TlsContext;[BLjava/lang/String;[BI)[B
    .registers 8

    .prologue
    .line 946
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getServerVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    .line 948
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isSSL()Z

    move-result v0

    if-eqz v0, :cond_12

    .line 950
    new-instance v0, Ljava/lang/IllegalStateException;

    const-string v1, "No PRF available for SSLv3 session"

    invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 953
    :cond_12
    invoke-static {p2}, Lorg/spongycastle/util/Strings;->toByteArray(Ljava/lang/String;)[B

    move-result-object v0

    .line 954
    invoke-static {v0, p3}, Lorg/spongycastle/crypto/tls/TlsUtils;->concat([B[B)[B

    move-result-object v1

    .line 956
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getSecurityParameters()Lorg/spongycastle/crypto/tls/SecurityParameters;

    move-result-object v2

    invoke-virtual {v2}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getPrfAlgorithm()I

    move-result v2

    .line 958
    if-nez v2, :cond_29

    .line 960
    invoke-static {p1, v0, v1, p4}, Lorg/spongycastle/crypto/tls/TlsUtils;->PRF_legacy([B[B[BI)[B

    move-result-object v0

    .line 966
    :goto_28
    return-object v0

    .line 963
    :cond_29
    invoke-static {v2}, Lorg/spongycastle/crypto/tls/TlsUtils;->createPRFHash(I)Lorg/spongycastle/crypto/Digest;

    move-result-object v2

    .line 964
    new-array v0, p4, [B

    .line 965
    invoke-static {v2, p1, v1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->hmac_hash(Lorg/spongycastle/crypto/Digest;[B[B[B)V

    goto :goto_28
.end method

.method public static PRF_legacy([BLjava/lang/String;[BI)[B
    .registers 6

    .prologue
    .line 971
    invoke-static {p1}, Lorg/spongycastle/util/Strings;->toByteArray(Ljava/lang/String;)[B

    move-result-object v0

    .line 972
    invoke-static {v0, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->concat([B[B)[B

    move-result-object v1

    .line 974
    invoke-static {p0, v0, v1, p3}, Lorg/spongycastle/crypto/tls/TlsUtils;->PRF_legacy([B[B[BI)[B

    move-result-object v0

    return-object v0
.end method

.method static PRF_legacy([B[B[BI)[B
    .registers 10

    .prologue
    const/4 v0, 0x0

    .line 979
    array-length v1, p0

    add-int/lit8 v1, v1, 0x1

    div-int/lit8 v1, v1, 0x2

    .line 980
    new-array v2, v1, [B

    .line 981
    new-array v3, v1, [B

    .line 982
    invoke-static {p0, v0, v2, v0, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 983
    array-length v4, p0

    sub-int/2addr v4, v1

    invoke-static {p0, v4, v3, v0, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 985
    new-array v1, p3, [B

    .line 986
    new-array v4, p3, [B

    .line 987
    const/4 v5, 0x1

    invoke-static {v5}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v5

    invoke-static {v5, v2, p2, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->hmac_hash(Lorg/spongycastle/crypto/Digest;[B[B[B)V

    .line 988
    const/4 v2, 0x2

    invoke-static {v2}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v2

    invoke-static {v2, v3, p2, v4}, Lorg/spongycastle/crypto/tls/TlsUtils;->hmac_hash(Lorg/spongycastle/crypto/Digest;[B[B[B)V

    .line 989
    :goto_26
    if-ge v0, p3, :cond_33

    .line 991
    aget-byte v2, v1, v0

    aget-byte v3, v4, v0

    xor-int/2addr v2, v3

    int-to-byte v2, v2

    aput-byte v2, v1, v0

    .line 989
    add-int/lit8 v0, v0, 0x1

    goto :goto_26

    .line 993
    :cond_33
    return-object v1
.end method

.method public static addSignatureAlgorithmsExtension(Ljava/util/Hashtable;Ljava/util/Vector;)V
    .registers 4

    .prologue
    .line 798
    sget-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EXT_signature_algorithms:Ljava/lang/Integer;

    invoke-static {p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->createSignatureAlgorithmsExtension(Ljava/util/Vector;)[B

    move-result-object v1

    invoke-virtual {p0, v0, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 799
    return-void
.end method

.method static calculateKeyBlock(Lorg/spongycastle/crypto/tls/TlsContext;I)[B
    .registers 5

    .prologue
    .line 1045
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getSecurityParameters()Lorg/spongycastle/crypto/tls/SecurityParameters;

    move-result-object v0

    .line 1046
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getMasterSecret()[B

    move-result-object v1

    .line 1047
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getServerRandom()[B

    move-result-object v2

    .line 1048
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getClientRandom()[B

    move-result-object v0

    .line 1047
    invoke-static {v2, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->concat([B[B)[B

    move-result-object v0

    .line 1050
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isSSL(Lorg/spongycastle/crypto/tls/TlsContext;)Z

    move-result v2

    if-eqz v2, :cond_1f

    .line 1052
    invoke-static {v1, v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->calculateKeyBlock_SSL([B[BI)[B

    move-result-object v0

    .line 1055
    :goto_1e
    return-object v0

    :cond_1f
    const-string v2, "key expansion"

    invoke-static {p0, v1, v2, v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->PRF(Lorg/spongycastle/crypto/tls/TlsContext;[BLjava/lang/String;[BI)[B

    move-result-object v0

    goto :goto_1e
.end method

.method static calculateKeyBlock_SSL([B[BI)[B
    .registers 13

    .prologue
    const/4 v1, 0x0

    .line 1060
    const/4 v0, 0x1

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v3

    .line 1061
    const/4 v0, 0x2

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v4

    .line 1062
    invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I

    move-result v5

    .line 1063
    invoke-interface {v4}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I

    move-result v0

    new-array v6, v0, [B

    .line 1064
    add-int v0, p2, v5

    new-array v7, v0, [B

    move v0, v1

    move v2, v1

    .line 1067
    :goto_1b
    if-ge v0, p2, :cond_3f

    .line 1069
    sget-object v8, Lorg/spongycastle/crypto/tls/TlsUtils;->SSL3_CONST:[[B

    aget-object v8, v8, v2

    .line 1071
    array-length v9, v8

    invoke-interface {v4, v8, v1, v9}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1072
    array-length v8, p0

    invoke-interface {v4, p0, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1073
    array-length v8, p1

    invoke-interface {v4, p1, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1074
    invoke-interface {v4, v6, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I

    .line 1076
    array-length v8, p0

    invoke-interface {v3, p0, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1077
    array-length v8, v6

    invoke-interface {v3, v6, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1078
    invoke-interface {v3, v7, v0}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I

    .line 1080
    add-int/2addr v0, v5

    .line 1081
    add-int/lit8 v2, v2, 0x1

    .line 1082
    goto :goto_1b

    .line 1084
    :cond_3f
    invoke-static {v7, v1, p2}, Lorg/spongycastle/util/Arrays;->copyOfRange([BII)[B

    move-result-object v0

    return-object v0
.end method

.method static calculateMasterSecret(Lorg/spongycastle/crypto/tls/TlsContext;[B)[B
    .registers 5

    .prologue
    .line 1089
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getSecurityParameters()Lorg/spongycastle/crypto/tls/SecurityParameters;

    move-result-object v1

    .line 1092
    iget-boolean v0, v1, Lorg/spongycastle/crypto/tls/SecurityParameters;->extendedMasterSecret:Z

    if-eqz v0, :cond_17

    .line 1094
    invoke-virtual {v1}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getSessionHash()[B

    move-result-object v0

    .line 1101
    :goto_c
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isSSL(Lorg/spongycastle/crypto/tls/TlsContext;)Z

    move-result v2

    if-eqz v2, :cond_24

    .line 1103
    invoke-static {p1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->calculateMasterSecret_SSL([B[B)[B

    move-result-object v0

    .line 1110
    :goto_16
    return-object v0

    .line 1098
    :cond_17
    invoke-virtual {v1}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getClientRandom()[B

    move-result-object v0

    invoke-virtual {v1}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getServerRandom()[B

    move-result-object v2

    invoke-static {v0, v2}, Lorg/spongycastle/crypto/tls/TlsUtils;->concat([B[B)[B

    move-result-object v0

    goto :goto_c

    .line 1106
    :cond_24
    iget-boolean v1, v1, Lorg/spongycastle/crypto/tls/SecurityParameters;->extendedMasterSecret:Z

    if-eqz v1, :cond_31

    const-string v1, "extended master secret"

    .line 1110
    :goto_2a
    const/16 v2, 0x30

    invoke-static {p0, p1, v1, v0, v2}, Lorg/spongycastle/crypto/tls/TlsUtils;->PRF(Lorg/spongycastle/crypto/tls/TlsContext;[BLjava/lang/String;[BI)[B

    move-result-object v0

    goto :goto_16

    .line 1106
    :cond_31
    const-string v1, "master secret"

    goto :goto_2a
.end method

.method static calculateMasterSecret_SSL([B[B)[B
    .registers 12

    .prologue
    const/4 v1, 0x0

    .line 1115
    const/4 v0, 0x1

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v3

    .line 1116
    const/4 v0, 0x2

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v4

    .line 1117
    invoke-interface {v3}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I

    move-result v5

    .line 1118
    invoke-interface {v4}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I

    move-result v0

    new-array v6, v0, [B

    .line 1120
    mul-int/lit8 v0, v5, 0x3

    new-array v7, v0, [B

    move v0, v1

    move v2, v1

    .line 1123
    :goto_1b
    const/4 v8, 0x3

    if-ge v0, v8, :cond_40

    .line 1125
    sget-object v8, Lorg/spongycastle/crypto/tls/TlsUtils;->SSL3_CONST:[[B

    aget-object v8, v8, v0

    .line 1127
    array-length v9, v8

    invoke-interface {v4, v8, v1, v9}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1128
    array-length v8, p0

    invoke-interface {v4, p0, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1129
    array-length v8, p1

    invoke-interface {v4, p1, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1130
    invoke-interface {v4, v6, v1}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I

    .line 1132
    array-length v8, p0

    invoke-interface {v3, p0, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1133
    array-length v8, v6

    invoke-interface {v3, v6, v1, v8}, Lorg/spongycastle/crypto/Digest;->update([BII)V

    .line 1134
    invoke-interface {v3, v7, v2}, Lorg/spongycastle/crypto/Digest;->doFinal([BI)I

    .line 1136
    add-int/2addr v2, v5

    .line 1123
    add-int/lit8 v0, v0, 0x1

    goto :goto_1b

    .line 1139
    :cond_40
    return-object v7
.end method

.method static calculateVerifyData(Lorg/spongycastle/crypto/tls/TlsContext;Ljava/lang/String;[B)[B
    .registers 5

    .prologue
    .line 1144
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isSSL(Lorg/spongycastle/crypto/tls/TlsContext;)Z

    move-result v0

    if-eqz v0, :cond_7

    .line 1153
    :goto_6
    return-object p2

    .line 1149
    :cond_7
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getSecurityParameters()Lorg/spongycastle/crypto/tls/SecurityParameters;

    move-result-object v0

    .line 1150
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getMasterSecret()[B

    move-result-object v1

    .line 1151
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SecurityParameters;->getVerifyDataLength()I

    move-result v0

    .line 1153
    invoke-static {p0, v1, p1, p2, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->PRF(Lorg/spongycastle/crypto/tls/TlsContext;[BLjava/lang/String;[BI)[B

    move-result-object p2

    goto :goto_6
.end method

.method public static checkUint16(I)V
    .registers 3

    .prologue
    .line 79
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint16(I)Z

    move-result v0

    if-nez v0, :cond_e

    .line 81
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 83
    :cond_e
    return-void
.end method

.method public static checkUint16(J)V
    .registers 4

    .prologue
    .line 87
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint16(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 89
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 91
    :cond_e
    return-void
.end method

.method public static checkUint24(I)V
    .registers 3

    .prologue
    .line 95
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint24(I)Z

    move-result v0

    if-nez v0, :cond_e

    .line 97
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 99
    :cond_e
    return-void
.end method

.method public static checkUint24(J)V
    .registers 4

    .prologue
    .line 103
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint24(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 105
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 107
    :cond_e
    return-void
.end method

.method public static checkUint32(J)V
    .registers 4

    .prologue
    .line 111
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint32(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 113
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 115
    :cond_e
    return-void
.end method

.method public static checkUint48(J)V
    .registers 4

    .prologue
    .line 119
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint48(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 121
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 123
    :cond_e
    return-void
.end method

.method public static checkUint64(J)V
    .registers 4

    .prologue
    .line 127
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint64(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 129
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 131
    :cond_e
    return-void
.end method

.method public static checkUint8(I)V
    .registers 3

    .prologue
    .line 63
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint8(I)Z

    move-result v0

    if-nez v0, :cond_e

    .line 65
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 67
    :cond_e
    return-void
.end method

.method public static checkUint8(J)V
    .registers 4

    .prologue
    .line 71
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint8(J)Z

    move-result v0

    if-nez v0, :cond_e

    .line 73
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 75
    :cond_e
    return-void
.end method

.method public static checkUint8(S)V
    .registers 3

    .prologue
    .line 55
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isValidUint8(S)Z

    move-result v0

    if-nez v0, :cond_e

    .line 57
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 59
    :cond_e
    return-void
.end method

.method public static cloneHash(SLorg/spongycastle/crypto/Digest;)Lorg/spongycastle/crypto/Digest;
    .registers 4

    .prologue
    .line 1186
    packed-switch p0, :pswitch_data_3c

    .line 1201
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "unknown HashAlgorithm"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1189
    :pswitch_b
    new-instance v0, Lorg/spongycastle/crypto/digests/MD5Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/MD5Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/MD5Digest;-><init>(Lorg/spongycastle/crypto/digests/MD5Digest;)V

    .line 1199
    :goto_12
    return-object v0

    .line 1191
    :pswitch_13
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA1Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/SHA1Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>(Lorg/spongycastle/crypto/digests/SHA1Digest;)V

    goto :goto_12

    .line 1193
    :pswitch_1b
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA224Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/SHA224Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/SHA224Digest;-><init>(Lorg/spongycastle/crypto/digests/SHA224Digest;)V

    goto :goto_12

    .line 1195
    :pswitch_23
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA256Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/SHA256Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/SHA256Digest;-><init>(Lorg/spongycastle/crypto/digests/SHA256Digest;)V

    goto :goto_12

    .line 1197
    :pswitch_2b
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA384Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/SHA384Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/SHA384Digest;-><init>(Lorg/spongycastle/crypto/digests/SHA384Digest;)V

    goto :goto_12

    .line 1199
    :pswitch_33
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA512Digest;

    check-cast p1, Lorg/spongycastle/crypto/digests/SHA512Digest;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/digests/SHA512Digest;-><init>(Lorg/spongycastle/crypto/digests/SHA512Digest;)V

    goto :goto_12

    .line 1186
    nop

    :pswitch_data_3c
    .packed-switch 0x1
        :pswitch_b
        :pswitch_13
        :pswitch_1b
        :pswitch_23
        :pswitch_2b
        :pswitch_33
    .end packed-switch
.end method

.method public static clonePRFHash(ILorg/spongycastle/crypto/Digest;)Lorg/spongycastle/crypto/Digest;
    .registers 3

    .prologue
    .line 1218
    packed-switch p0, :pswitch_data_14

    .line 1223
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getHashAlgorithmForPRFAlgorithm(I)S

    move-result v0

    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->cloneHash(SLorg/spongycastle/crypto/Digest;)Lorg/spongycastle/crypto/Digest;

    move-result-object v0

    :goto_b
    return-object v0

    .line 1221
    :pswitch_c
    new-instance v0, Lorg/spongycastle/crypto/tls/CombinedHash;

    check-cast p1, Lorg/spongycastle/crypto/tls/CombinedHash;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/tls/CombinedHash;-><init>(Lorg/spongycastle/crypto/tls/CombinedHash;)V

    goto :goto_b

    .line 1218
    :pswitch_data_14
    .packed-switch 0x0
        :pswitch_c
    .end packed-switch
.end method

.method static concat([B[B)[B
    .registers 6

    .prologue
    const/4 v3, 0x0

    .line 998
    array-length v0, p0

    array-length v1, p1

    add-int/2addr v0, v1

    new-array v0, v0, [B

    .line 999
    array-length v1, p0

    invoke-static {p0, v3, v0, v3, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 1000
    array-length v1, p0

    array-length v2, p1

    invoke-static {p1, v3, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 1001
    return-object v0
.end method

.method public static createHash(Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;)Lorg/spongycastle/crypto/Digest;
    .registers 2

    .prologue
    .line 1179
    if-nez p0, :cond_8

    new-instance v0, Lorg/spongycastle/crypto/tls/CombinedHash;

    invoke-direct {v0}, Lorg/spongycastle/crypto/tls/CombinedHash;-><init>()V

    .line 1181
    :goto_7
    return-object v0

    :cond_8
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getHash()S

    move-result v0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v0

    goto :goto_7
.end method

.method public static createHash(S)Lorg/spongycastle/crypto/Digest;
    .registers 3

    .prologue
    .line 1158
    packed-switch p0, :pswitch_data_30

    .line 1173
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "unknown HashAlgorithm"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1161
    :pswitch_b
    new-instance v0, Lorg/spongycastle/crypto/digests/MD5Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/MD5Digest;-><init>()V

    .line 1171
    :goto_10
    return-object v0

    .line 1163
    :pswitch_11
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA1Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/SHA1Digest;-><init>()V

    goto :goto_10

    .line 1165
    :pswitch_17
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA224Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/SHA224Digest;-><init>()V

    goto :goto_10

    .line 1167
    :pswitch_1d
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA256Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/SHA256Digest;-><init>()V

    goto :goto_10

    .line 1169
    :pswitch_23
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA384Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/SHA384Digest;-><init>()V

    goto :goto_10

    .line 1171
    :pswitch_29
    new-instance v0, Lorg/spongycastle/crypto/digests/SHA512Digest;

    invoke-direct {v0}, Lorg/spongycastle/crypto/digests/SHA512Digest;-><init>()V

    goto :goto_10

    .line 1158
    nop

    :pswitch_data_30
    .packed-switch 0x1
        :pswitch_b
        :pswitch_11
        :pswitch_17
        :pswitch_1d
        :pswitch_23
        :pswitch_29
    .end packed-switch
.end method

.method public static createPRFHash(I)Lorg/spongycastle/crypto/Digest;
    .registers 2

    .prologue
    .line 1207
    packed-switch p0, :pswitch_data_12

    .line 1212
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getHashAlgorithmForPRFAlgorithm(I)S

    move-result v0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->createHash(S)Lorg/spongycastle/crypto/Digest;

    move-result-object v0

    :goto_b
    return-object v0

    .line 1210
    :pswitch_c
    new-instance v0, Lorg/spongycastle/crypto/tls/CombinedHash;

    invoke-direct {v0}, Lorg/spongycastle/crypto/tls/CombinedHash;-><init>()V

    goto :goto_b

    .line 1207
    :pswitch_data_12
    .packed-switch 0x0
        :pswitch_c
    .end packed-switch
.end method

.method public static createSignatureAlgorithmsExtension(Ljava/util/Vector;)[B
    .registers 3

    .prologue
    .line 825
    new-instance v0, Ljava/io/ByteArrayOutputStream;

    invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;-><init>()V

    .line 828
    const/4 v1, 0x0

    invoke-static {p0, v1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->encodeSupportedSignatureAlgorithms(Ljava/util/Vector;ZLjava/io/OutputStream;)V

    .line 830
    invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B

    move-result-object v0

    return-object v0
.end method

.method public static createTlsSigner(S)Lorg/spongycastle/crypto/tls/TlsSigner;
    .registers 3

    .prologue
    .line 1363
    sparse-switch p0, :sswitch_data_1e

    .line 1372
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'clientCertificateType\' is not a type with signing capability"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1366
    :sswitch_b
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsDSSSigner;

    invoke-direct {v0}, Lorg/spongycastle/crypto/tls/TlsDSSSigner;-><init>()V

    .line 1370
    :goto_10
    return-object v0

    .line 1368
    :sswitch_11
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsECDSASigner;

    invoke-direct {v0}, Lorg/spongycastle/crypto/tls/TlsECDSASigner;-><init>()V

    goto :goto_10

    .line 1370
    :sswitch_17
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsRSASigner;

    invoke-direct {v0}, Lorg/spongycastle/crypto/tls/TlsRSASigner;-><init>()V

    goto :goto_10

    .line 1363
    nop

    :sswitch_data_1e
    .sparse-switch
        0x1 -> :sswitch_17
        0x2 -> :sswitch_b
        0x40 -> :sswitch_11
    .end sparse-switch
.end method

.method public static encodeOpaque8([B)[B
    .registers 2

    .prologue
    .line 420
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint8(I)V

    .line 421
    array-length v0, p0

    int-to-byte v0, v0

    invoke-static {p0, v0}, Lorg/spongycastle/util/Arrays;->prepend([BB)[B

    move-result-object v0

    return-object v0
.end method

.method public static encodeSupportedSignatureAlgorithms(Ljava/util/Vector;ZLjava/io/OutputStream;)V
    .registers 6

    .prologue
    .line 861
    if-eqz p0, :cond_11

    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    if-lez v0, :cond_11

    .line 862
    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    const v1, 0x8000

    if-lt v0, v1, :cond_19

    .line 864
    :cond_11
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'supportedSignatureAlgorithms\' must have length from 1 to (2^15 - 1)"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 869
    :cond_19
    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    mul-int/lit8 v0, v0, 0x2

    .line 870
    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint16(I)V

    .line 871
    invoke-static {v0, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(ILjava/io/OutputStream;)V

    .line 872
    const/4 v0, 0x0

    move v1, v0

    :goto_27
    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    if-ge v1, v0, :cond_4a

    .line 874
    invoke-virtual {p0, v1}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    .line 875
    if-nez p1, :cond_43

    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getSignature()S

    move-result v2

    if-nez v2, :cond_43

    .line 881
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "SignatureAlgorithm.anonymous MUST NOT appear in the signature_algorithms extension"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 884
    :cond_43
    invoke-virtual {v0, p2}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->encode(Ljava/io/OutputStream;)V

    .line 872
    add-int/lit8 v0, v1, 0x1

    move v1, v0

    goto :goto_27

    .line 886
    :cond_4a
    return-void
.end method

.method public static encodeUint16ArrayWithUint16Length([I)[B
    .registers 3

    .prologue
    .line 433
    array-length v0, p0

    mul-int/lit8 v0, v0, 0x2

    .line 434
    add-int/lit8 v0, v0, 0x2

    new-array v0, v0, [B

    .line 435
    const/4 v1, 0x0

    invoke-static {p0, v0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16ArrayWithUint16Length([I[BI)V

    .line 436
    return-object v0
.end method

.method public static encodeUint8ArrayWithUint8Length([S)[B
    .registers 3

    .prologue
    .line 426
    array-length v0, p0

    add-int/lit8 v0, v0, 0x1

    new-array v0, v0, [B

    .line 427
    const/4 v1, 0x0

    invoke-static {p0, v0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8ArrayWithUint8Length([S[BI)V

    .line 428
    return-object v0
.end method

.method private static genSSL3Const()[[B
    .registers 5

    .prologue
    const/16 v4, 0xa

    .line 1385
    new-array v1, v4, [[B

    .line 1386
    const/4 v0, 0x0

    :goto_5
    if-ge v0, v4, :cond_16

    .line 1388
    add-int/lit8 v2, v0, 0x1

    new-array v2, v2, [B

    .line 1389
    add-int/lit8 v3, v0, 0x41

    int-to-byte v3, v3

    invoke-static {v2, v3}, Lorg/spongycastle/util/Arrays;->fill([BB)V

    .line 1390
    aput-object v2, v1, v0

    .line 1386
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 1392
    :cond_16
    return-object v1
.end method

.method public static getCipherType(I)I
    .registers 3

    .prologue
    .line 1404
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getEncryptionAlgorithm(I)I

    move-result v0

    sparse-switch v0, :sswitch_data_16

    .line 1436
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 1415
    :sswitch_f
    const/4 v0, 0x2

    .line 1433
    :goto_10
    return v0

    .line 1427
    :sswitch_11
    const/4 v0, 0x1

    goto :goto_10

    .line 1433
    :sswitch_13
    const/4 v0, 0x0

    goto :goto_10

    .line 1404
    nop

    :sswitch_data_16
    .sparse-switch
        0x1 -> :sswitch_13
        0x2 -> :sswitch_13
        0x3 -> :sswitch_11
        0x4 -> :sswitch_11
        0x5 -> :sswitch_11
        0x6 -> :sswitch_11
        0x7 -> :sswitch_11
        0x8 -> :sswitch_11
        0x9 -> :sswitch_11
        0xa -> :sswitch_f
        0xb -> :sswitch_f
        0xc -> :sswitch_11
        0xd -> :sswitch_11
        0xe -> :sswitch_11
        0xf -> :sswitch_f
        0x10 -> :sswitch_f
        0x11 -> :sswitch_f
        0x12 -> :sswitch_f
        0x13 -> :sswitch_f
        0x14 -> :sswitch_f
        0x64 -> :sswitch_13
        0x65 -> :sswitch_13
        0x66 -> :sswitch_f
    .end sparse-switch
.end method

.method static getClientCertificateType(Lorg/spongycastle/crypto/tls/Certificate;Lorg/spongycastle/crypto/tls/Certificate;)S
    .registers 6

    .prologue
    const/16 v3, 0x2b

    .line 1266
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/Certificate;->isEmpty()Z

    move-result v0

    if-eqz v0, :cond_a

    .line 1268
    const/4 v0, -0x1

    .line 1321
    :goto_9
    return v0

    .line 1271
    :cond_a
    const/4 v0, 0x0

    invoke-virtual {p0, v0}, Lorg/spongycastle/crypto/tls/Certificate;->getCertificateAt(I)Lorg/spongycastle/asn1/x509/Certificate;

    move-result-object v0

    .line 1272
    invoke-virtual {v0}, Lorg/spongycastle/asn1/x509/Certificate;->getSubjectPublicKeyInfo()Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;

    move-result-object v1

    .line 1275
    :try_start_13
    invoke-static {v1}, Lorg/spongycastle/crypto/util/PublicKeyFactory;->createKey(Lorg/spongycastle/asn1/x509/SubjectPublicKeyInfo;)Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;

    move-result-object v1

    .line 1276
    invoke-virtual {v1}, Lorg/spongycastle/crypto/params/AsymmetricKeyParameter;->isPrivate()Z

    move-result v2

    if-eqz v2, :cond_2c

    .line 1278
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0
    :try_end_25
    .catch Ljava/lang/Exception; {:try_start_13 .. :try_end_25} :catch_25

    .line 1328
    :catch_25
    move-exception v0

    .line 1330
    new-instance v1, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    invoke-direct {v1, v3, v0}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(SLjava/lang/Throwable;)V

    throw v1

    .line 1296
    :cond_2c
    :try_start_2c
    instance-of v2, v1, Lorg/spongycastle/crypto/params/RSAKeyParameters;

    if-eqz v2, :cond_37

    .line 1298
    const/16 v1, 0x80

    invoke-static {v0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->validateKeyUsage(Lorg/spongycastle/asn1/x509/Certificate;I)V

    .line 1299
    const/4 v0, 0x1

    goto :goto_9

    .line 1306
    :cond_37
    instance-of v2, v1, Lorg/spongycastle/crypto/params/DSAPublicKeyParameters;

    if-eqz v2, :cond_42

    .line 1308
    const/16 v1, 0x80

    invoke-static {v0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->validateKeyUsage(Lorg/spongycastle/asn1/x509/Certificate;I)V

    .line 1309
    const/4 v0, 0x2

    goto :goto_9

    .line 1317
    :cond_42
    instance-of v1, v1, Lorg/spongycastle/crypto/params/ECPublicKeyParameters;

    if-eqz v1, :cond_4e

    .line 1319
    const/16 v1, 0x80

    invoke-static {v0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->validateKeyUsage(Lorg/spongycastle/asn1/x509/Certificate;I)V

    .line 1321
    const/16 v0, 0x40

    goto :goto_9

    .line 1326
    :cond_4e
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x2b

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0
    :try_end_56
    .catch Ljava/lang/Exception; {:try_start_2c .. :try_end_56} :catch_25
.end method

.method public static getDefaultDSSSignatureAlgorithms()Ljava/util/Vector;
    .registers 2

    .prologue
    const/4 v1, 0x2

    .line 711
    new-instance v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    invoke-direct {v0, v1, v1}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;-><init>(SS)V

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->vectorOfOne(Ljava/lang/Object;)Ljava/util/Vector;

    move-result-object v0

    return-object v0
.end method

.method public static getDefaultECDSASignatureAlgorithms()Ljava/util/Vector;
    .registers 3

    .prologue
    .line 716
    new-instance v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    const/4 v1, 0x2

    const/4 v2, 0x3

    invoke-direct {v0, v1, v2}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;-><init>(SS)V

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->vectorOfOne(Ljava/lang/Object;)Ljava/util/Vector;

    move-result-object v0

    return-object v0
.end method

.method public static getDefaultRSASignatureAlgorithms()Ljava/util/Vector;
    .registers 3

    .prologue
    .line 721
    new-instance v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    const/4 v1, 0x2

    const/4 v2, 0x1

    invoke-direct {v0, v1, v2}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;-><init>(SS)V

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->vectorOfOne(Ljava/lang/Object;)Ljava/util/Vector;

    move-result-object v0

    return-object v0
.end method

.method public static getDefaultSupportedSignatureAlgorithms()Ljava/util/Vector;
    .registers 11

    .prologue
    const/4 v10, 0x5

    const/4 v9, 0x3

    const/4 v1, 0x0

    .line 726
    new-array v3, v10, [S

    fill-array-data v3, :array_2c

    .line 728
    new-array v4, v9, [S

    fill-array-data v4, :array_36

    .line 731
    new-instance v5, Ljava/util/Vector;

    invoke-direct {v5}, Ljava/util/Vector;-><init>()V

    move v2, v1

    .line 732
    :goto_13
    if-ge v2, v9, :cond_2b

    move v0, v1

    .line 734
    :goto_16
    if-ge v0, v10, :cond_27

    .line 736
    new-instance v6, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    aget-short v7, v3, v0

    aget-short v8, v4, v2

    invoke-direct {v6, v7, v8}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;-><init>(SS)V

    invoke-virtual {v5, v6}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V

    .line 734
    add-int/lit8 v0, v0, 0x1

    goto :goto_16

    .line 732
    :cond_27
    add-int/lit8 v0, v2, 0x1

    move v2, v0

    goto :goto_13

    .line 739
    :cond_2b
    return-object v5

    .line 726
    :array_2c
    .array-data 2
        0x2s
        0x3s
        0x4s
        0x5s
        0x6s
    .end array-data

    .line 728
    nop

    :array_36
    .array-data 2
        0x1s
        0x2s
        0x3s
    .end array-data
.end method

.method public static getEncryptionAlgorithm(I)I
    .registers 6

    .prologue
    const/16 v0, 0x8

    const/4 v4, 0x2

    const/16 v2, 0xd

    const/16 v1, 0x9

    const/4 v3, 0x0

    .line 1442
    sparse-switch p0, :sswitch_data_58

    .line 1736
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 1460
    :sswitch_13
    const/4 v0, 0x7

    .line 1733
    :goto_14
    :sswitch_14
    return v0

    .line 1465
    :sswitch_15
    const/16 v0, 0x66

    goto :goto_14

    .line 1505
    :sswitch_18
    const/16 v0, 0xf

    goto :goto_14

    .line 1512
    :sswitch_1b
    const/16 v0, 0x10

    goto :goto_14

    .line 1526
    :sswitch_1e
    const/16 v0, 0xa

    goto :goto_14

    :sswitch_21
    move v0, v1

    .line 1544
    goto :goto_14

    :sswitch_23
    move v0, v1

    .line 1551
    goto :goto_14

    :sswitch_25
    move v0, v1

    .line 1561
    goto :goto_14

    .line 1568
    :sswitch_27
    const/16 v0, 0x11

    goto :goto_14

    .line 1575
    :sswitch_2a
    const/16 v0, 0x12

    goto :goto_14

    .line 1589
    :sswitch_2d
    const/16 v0, 0xb

    goto :goto_14

    .line 1596
    :sswitch_30
    const/16 v0, 0xc

    goto :goto_14

    .line 1611
    :sswitch_33
    const/16 v0, 0xc

    goto :goto_14

    .line 1625
    :sswitch_36
    const/16 v0, 0x13

    goto :goto_14

    :sswitch_39
    move v0, v2

    .line 1632
    goto :goto_14

    :sswitch_3b
    move v0, v2

    .line 1639
    goto :goto_14

    :sswitch_3d
    move v0, v2

    .line 1649
    goto :goto_14

    .line 1663
    :sswitch_3f
    const/16 v0, 0x14

    goto :goto_14

    .line 1673
    :sswitch_42
    const/16 v0, 0x64

    goto :goto_14

    :sswitch_45
    move v0, v3

    .line 1676
    goto :goto_14

    :sswitch_47
    move v0, v3

    .line 1687
    goto :goto_14

    :sswitch_49
    move v0, v3

    .line 1694
    goto :goto_14

    :sswitch_4b
    move v0, v3

    .line 1700
    goto :goto_14

    :sswitch_4d
    move v0, v4

    .line 1704
    goto :goto_14

    :sswitch_4f
    move v0, v4

    .line 1716
    goto :goto_14

    .line 1726
    :sswitch_51
    const/16 v0, 0x65

    goto :goto_14

    .line 1733
    :sswitch_54
    const/16 v0, 0xe

    goto :goto_14

    .line 1442
    nop

    :sswitch_data_58
    .sparse-switch
        0x1 -> :sswitch_45
        0x2 -> :sswitch_47
        0x4 -> :sswitch_4d
        0x5 -> :sswitch_4f
        0xa -> :sswitch_13
        0xd -> :sswitch_13
        0x10 -> :sswitch_13
        0x13 -> :sswitch_13
        0x16 -> :sswitch_13
        0x18 -> :sswitch_4d
        0x2c -> :sswitch_47
        0x2d -> :sswitch_47
        0x2e -> :sswitch_47
        0x2f -> :sswitch_14
        0x30 -> :sswitch_14
        0x31 -> :sswitch_14
        0x32 -> :sswitch_14
        0x33 -> :sswitch_14
        0x35 -> :sswitch_21
        0x36 -> :sswitch_21
        0x37 -> :sswitch_21
        0x38 -> :sswitch_21
        0x39 -> :sswitch_21
        0x3b -> :sswitch_49
        0x3c -> :sswitch_14
        0x3d -> :sswitch_23
        0x3e -> :sswitch_14
        0x3f -> :sswitch_14
        0x40 -> :sswitch_14
        0x41 -> :sswitch_30
        0x42 -> :sswitch_30
        0x43 -> :sswitch_30
        0x44 -> :sswitch_30
        0x45 -> :sswitch_30
        0x67 -> :sswitch_14
        0x68 -> :sswitch_23
        0x69 -> :sswitch_23
        0x6a -> :sswitch_23
        0x6b -> :sswitch_23
        0x84 -> :sswitch_39
        0x85 -> :sswitch_39
        0x86 -> :sswitch_39
        0x87 -> :sswitch_39
        0x88 -> :sswitch_39
        0x8a -> :sswitch_4f
        0x8b -> :sswitch_13
        0x8c -> :sswitch_14
        0x8d -> :sswitch_21
        0x8e -> :sswitch_4f
        0x8f -> :sswitch_13
        0x90 -> :sswitch_14
        0x91 -> :sswitch_21
        0x92 -> :sswitch_4f
        0x93 -> :sswitch_13
        0x94 -> :sswitch_14
        0x95 -> :sswitch_21
        0x96 -> :sswitch_54
        0x97 -> :sswitch_54
        0x98 -> :sswitch_54
        0x99 -> :sswitch_54
        0x9a -> :sswitch_54
        0x9c -> :sswitch_1e
        0x9d -> :sswitch_2d
        0x9e -> :sswitch_1e
        0x9f -> :sswitch_2d
        0xa0 -> :sswitch_1e
        0xa1 -> :sswitch_2d
        0xa2 -> :sswitch_1e
        0xa3 -> :sswitch_2d
        0xa4 -> :sswitch_1e
        0xa5 -> :sswitch_2d
        0xa8 -> :sswitch_1e
        0xa9 -> :sswitch_2d
        0xaa -> :sswitch_1e
        0xab -> :sswitch_2d
        0xac -> :sswitch_1e
        0xad -> :sswitch_2d
        0xae -> :sswitch_14
        0xaf -> :sswitch_25
        0xb0 -> :sswitch_49
        0xb1 -> :sswitch_4b
        0xb2 -> :sswitch_14
        0xb3 -> :sswitch_25
        0xb4 -> :sswitch_49
        0xb5 -> :sswitch_4b
        0xb6 -> :sswitch_14
        0xb7 -> :sswitch_25
        0xb8 -> :sswitch_49
        0xb9 -> :sswitch_4b
        0xba -> :sswitch_33
        0xbb -> :sswitch_33
        0xbc -> :sswitch_33
        0xbd -> :sswitch_33
        0xbe -> :sswitch_33
        0xc0 -> :sswitch_3b
        0xc1 -> :sswitch_3b
        0xc2 -> :sswitch_3b
        0xc3 -> :sswitch_3b
        0xc4 -> :sswitch_3b
        0xc001 -> :sswitch_47
        0xc002 -> :sswitch_4f
        0xc003 -> :sswitch_13
        0xc004 -> :sswitch_14
        0xc005 -> :sswitch_21
        0xc006 -> :sswitch_47
        0xc007 -> :sswitch_4f
        0xc008 -> :sswitch_13
        0xc009 -> :sswitch_14
        0xc00a -> :sswitch_21
        0xc00b -> :sswitch_47
        0xc00c -> :sswitch_4f
        0xc00d -> :sswitch_13
        0xc00e -> :sswitch_14
        0xc00f -> :sswitch_21
        0xc010 -> :sswitch_47
        0xc011 -> :sswitch_4f
        0xc012 -> :sswitch_13
        0xc013 -> :sswitch_14
        0xc014 -> :sswitch_21
        0xc016 -> :sswitch_4f
        0xc01a -> :sswitch_13
        0xc01b -> :sswitch_13
        0xc01c -> :sswitch_13
        0xc01d -> :sswitch_14
        0xc01e -> :sswitch_14
        0xc01f -> :sswitch_14
        0xc020 -> :sswitch_21
        0xc021 -> :sswitch_21
        0xc022 -> :sswitch_21
        0xc023 -> :sswitch_14
        0xc024 -> :sswitch_25
        0xc025 -> :sswitch_14
        0xc026 -> :sswitch_25
        0xc027 -> :sswitch_14
        0xc028 -> :sswitch_25
        0xc029 -> :sswitch_14
        0xc02a -> :sswitch_25
        0xc02b -> :sswitch_1e
        0xc02c -> :sswitch_2d
        0xc02d -> :sswitch_1e
        0xc02e -> :sswitch_2d
        0xc02f -> :sswitch_1e
        0xc030 -> :sswitch_2d
        0xc031 -> :sswitch_1e
        0xc032 -> :sswitch_2d
        0xc033 -> :sswitch_4f
        0xc034 -> :sswitch_13
        0xc035 -> :sswitch_14
        0xc036 -> :sswitch_21
        0xc037 -> :sswitch_14
        0xc038 -> :sswitch_25
        0xc039 -> :sswitch_47
        0xc03a -> :sswitch_49
        0xc03b -> :sswitch_4b
        0xc072 -> :sswitch_33
        0xc073 -> :sswitch_3d
        0xc074 -> :sswitch_33
        0xc075 -> :sswitch_3d
        0xc076 -> :sswitch_33
        0xc077 -> :sswitch_3d
        0xc078 -> :sswitch_33
        0xc079 -> :sswitch_3d
        0xc07a -> :sswitch_36
        0xc07b -> :sswitch_3f
        0xc07c -> :sswitch_36
        0xc07d -> :sswitch_3f
        0xc07e -> :sswitch_36
        0xc07f -> :sswitch_3f
        0xc080 -> :sswitch_36
        0xc081 -> :sswitch_3f
        0xc082 -> :sswitch_36
        0xc083 -> :sswitch_3f
        0xc086 -> :sswitch_36
        0xc087 -> :sswitch_3f
        0xc088 -> :sswitch_36
        0xc089 -> :sswitch_3f
        0xc08a -> :sswitch_36
        0xc08b -> :sswitch_3f
        0xc08c -> :sswitch_36
        0xc08d -> :sswitch_3f
        0xc08e -> :sswitch_36
        0xc08f -> :sswitch_3f
        0xc090 -> :sswitch_36
        0xc091 -> :sswitch_3f
        0xc092 -> :sswitch_36
        0xc093 -> :sswitch_3f
        0xc094 -> :sswitch_33
        0xc095 -> :sswitch_3d
        0xc096 -> :sswitch_33
        0xc097 -> :sswitch_3d
        0xc098 -> :sswitch_33
        0xc099 -> :sswitch_3d
        0xc09a -> :sswitch_33
        0xc09b -> :sswitch_3d
        0xc09c -> :sswitch_18
        0xc09d -> :sswitch_27
        0xc09e -> :sswitch_18
        0xc09f -> :sswitch_27
        0xc0a0 -> :sswitch_1b
        0xc0a1 -> :sswitch_2a
        0xc0a2 -> :sswitch_1b
        0xc0a3 -> :sswitch_2a
        0xc0a4 -> :sswitch_18
        0xc0a5 -> :sswitch_27
        0xc0a6 -> :sswitch_18
        0xc0a7 -> :sswitch_27
        0xc0a8 -> :sswitch_1b
        0xc0a9 -> :sswitch_2a
        0xc0aa -> :sswitch_1b
        0xc0ab -> :sswitch_2a
        0xc0ac -> :sswitch_18
        0xc0ad -> :sswitch_27
        0xc0ae -> :sswitch_1b
        0xc0af -> :sswitch_2a
        0xcc13 -> :sswitch_15
        0xcc14 -> :sswitch_15
        0xcc15 -> :sswitch_15
        0xe410 -> :sswitch_42
        0xe411 -> :sswitch_51
        0xe412 -> :sswitch_42
        0xe413 -> :sswitch_51
        0xe414 -> :sswitch_42
        0xe415 -> :sswitch_51
        0xe416 -> :sswitch_42
        0xe417 -> :sswitch_51
        0xe418 -> :sswitch_42
        0xe419 -> :sswitch_51
        0xe41a -> :sswitch_42
        0xe41b -> :sswitch_51
        0xe41c -> :sswitch_42
        0xe41d -> :sswitch_51
        0xe41e -> :sswitch_42
        0xe41f -> :sswitch_51
    .end sparse-switch
.end method

.method public static getExtensionData(Ljava/util/Hashtable;Ljava/lang/Integer;)[B
    .registers 3

    .prologue
    .line 760
    if-nez p0, :cond_4

    const/4 v0, 0x0

    :goto_3
    return-object v0

    :cond_4
    invoke-virtual {p0, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, [B

    goto :goto_3
.end method

.method public static getHashAlgorithmForPRFAlgorithm(I)S
    .registers 3

    .prologue
    .line 1229
    packed-switch p0, :pswitch_data_18

    .line 1238
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "unknown PRFAlgorithm"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1232
    :pswitch_b
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "legacy PRF not a valid algorithm"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1234
    :pswitch_13
    const/4 v0, 0x4

    .line 1236
    :goto_14
    return v0

    :pswitch_15
    const/4 v0, 0x5

    goto :goto_14

    .line 1229
    nop

    :pswitch_data_18
    .packed-switch 0x0
        :pswitch_b
        :pswitch_13
        :pswitch_15
    .end packed-switch
.end method

.method public static getKeyExchangeAlgorithm(I)I
    .registers 3

    .prologue
    .line 1742
    sparse-switch p0, :sswitch_data_38

    .line 2008
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 1758
    :sswitch_b
    const/4 v0, 0x7

    .line 2005
    :goto_c
    return v0

    .line 1774
    :sswitch_d
    const/16 v0, 0x9

    goto :goto_c

    .line 1790
    :sswitch_10
    const/4 v0, 0x3

    goto :goto_c

    .line 1813
    :sswitch_12
    const/16 v0, 0xe

    goto :goto_c

    .line 1836
    :sswitch_15
    const/4 v0, 0x5

    goto :goto_c

    .line 1851
    :sswitch_17
    const/16 v0, 0x10

    goto :goto_c

    .line 1866
    :sswitch_1a
    const/16 v0, 0x12

    goto :goto_c

    .line 1888
    :sswitch_1d
    const/16 v0, 0x11

    goto :goto_c

    .line 1903
    :sswitch_20
    const/16 v0, 0x18

    goto :goto_c

    .line 1921
    :sswitch_23
    const/16 v0, 0x13

    goto :goto_c

    .line 1944
    :sswitch_26
    const/16 v0, 0xd

    goto :goto_c

    .line 1971
    :sswitch_29
    const/4 v0, 0x1

    goto :goto_c

    .line 1990
    :sswitch_2b
    const/16 v0, 0xf

    goto :goto_c

    .line 1995
    :sswitch_2e
    const/16 v0, 0x15

    goto :goto_c

    .line 2000
    :sswitch_31
    const/16 v0, 0x16

    goto :goto_c

    .line 2005
    :sswitch_34
    const/16 v0, 0x17

    goto :goto_c

    .line 1742
    nop

    :sswitch_data_38
    .sparse-switch
        0x1 -> :sswitch_29
        0x2 -> :sswitch_29
        0x4 -> :sswitch_29
        0x5 -> :sswitch_29
        0xa -> :sswitch_29
        0xd -> :sswitch_b
        0x10 -> :sswitch_d
        0x13 -> :sswitch_10
        0x16 -> :sswitch_15
        0x2c -> :sswitch_26
        0x2d -> :sswitch_12
        0x2e -> :sswitch_2b
        0x2f -> :sswitch_29
        0x30 -> :sswitch_b
        0x31 -> :sswitch_d
        0x32 -> :sswitch_10
        0x33 -> :sswitch_15
        0x35 -> :sswitch_29
        0x36 -> :sswitch_b
        0x37 -> :sswitch_d
        0x38 -> :sswitch_10
        0x39 -> :sswitch_15
        0x3b -> :sswitch_29
        0x3c -> :sswitch_29
        0x3d -> :sswitch_29
        0x3e -> :sswitch_b
        0x3f -> :sswitch_d
        0x40 -> :sswitch_10
        0x41 -> :sswitch_29
        0x42 -> :sswitch_b
        0x43 -> :sswitch_d
        0x44 -> :sswitch_10
        0x45 -> :sswitch_15
        0x67 -> :sswitch_15
        0x68 -> :sswitch_b
        0x69 -> :sswitch_d
        0x6a -> :sswitch_10
        0x6b -> :sswitch_15
        0x84 -> :sswitch_29
        0x85 -> :sswitch_b
        0x86 -> :sswitch_d
        0x87 -> :sswitch_10
        0x88 -> :sswitch_15
        0x8a -> :sswitch_26
        0x8b -> :sswitch_26
        0x8c -> :sswitch_26
        0x8d -> :sswitch_26
        0x8e -> :sswitch_12
        0x8f -> :sswitch_12
        0x90 -> :sswitch_12
        0x91 -> :sswitch_12
        0x92 -> :sswitch_2b
        0x93 -> :sswitch_2b
        0x94 -> :sswitch_2b
        0x95 -> :sswitch_2b
        0x96 -> :sswitch_29
        0x97 -> :sswitch_b
        0x98 -> :sswitch_d
        0x99 -> :sswitch_10
        0x9a -> :sswitch_15
        0x9c -> :sswitch_29
        0x9d -> :sswitch_29
        0x9e -> :sswitch_15
        0x9f -> :sswitch_15
        0xa0 -> :sswitch_d
        0xa1 -> :sswitch_d
        0xa2 -> :sswitch_10
        0xa3 -> :sswitch_10
        0xa4 -> :sswitch_b
        0xa5 -> :sswitch_b
        0xa8 -> :sswitch_26
        0xa9 -> :sswitch_26
        0xaa -> :sswitch_12
        0xab -> :sswitch_12
        0xac -> :sswitch_2b
        0xad -> :sswitch_2b
        0xae -> :sswitch_26
        0xaf -> :sswitch_26
        0xb0 -> :sswitch_26
        0xb1 -> :sswitch_26
        0xb2 -> :sswitch_12
        0xb3 -> :sswitch_12
        0xb4 -> :sswitch_12
        0xb5 -> :sswitch_12
        0xb6 -> :sswitch_2b
        0xb7 -> :sswitch_2b
        0xb8 -> :sswitch_2b
        0xb9 -> :sswitch_2b
        0xba -> :sswitch_29
        0xbb -> :sswitch_b
        0xbc -> :sswitch_d
        0xbd -> :sswitch_10
        0xbe -> :sswitch_15
        0xc0 -> :sswitch_29
        0xc1 -> :sswitch_b
        0xc2 -> :sswitch_d
        0xc3 -> :sswitch_10
        0xc4 -> :sswitch_15
        0xc001 -> :sswitch_17
        0xc002 -> :sswitch_17
        0xc003 -> :sswitch_17
        0xc004 -> :sswitch_17
        0xc005 -> :sswitch_17
        0xc006 -> :sswitch_1d
        0xc007 -> :sswitch_1d
        0xc008 -> :sswitch_1d
        0xc009 -> :sswitch_1d
        0xc00a -> :sswitch_1d
        0xc00b -> :sswitch_1a
        0xc00c -> :sswitch_1a
        0xc00d -> :sswitch_1a
        0xc00e -> :sswitch_1a
        0xc00f -> :sswitch_1a
        0xc010 -> :sswitch_23
        0xc011 -> :sswitch_23
        0xc012 -> :sswitch_23
        0xc013 -> :sswitch_23
        0xc014 -> :sswitch_23
        0xc01a -> :sswitch_2e
        0xc01b -> :sswitch_34
        0xc01c -> :sswitch_31
        0xc01d -> :sswitch_2e
        0xc01e -> :sswitch_34
        0xc01f -> :sswitch_31
        0xc020 -> :sswitch_2e
        0xc021 -> :sswitch_34
        0xc022 -> :sswitch_31
        0xc023 -> :sswitch_1d
        0xc024 -> :sswitch_1d
        0xc025 -> :sswitch_17
        0xc026 -> :sswitch_17
        0xc027 -> :sswitch_23
        0xc028 -> :sswitch_23
        0xc029 -> :sswitch_1a
        0xc02a -> :sswitch_1a
        0xc02b -> :sswitch_1d
        0xc02c -> :sswitch_1d
        0xc02d -> :sswitch_17
        0xc02e -> :sswitch_17
        0xc02f -> :sswitch_23
        0xc030 -> :sswitch_23
        0xc031 -> :sswitch_1a
        0xc032 -> :sswitch_1a
        0xc033 -> :sswitch_20
        0xc034 -> :sswitch_20
        0xc035 -> :sswitch_20
        0xc036 -> :sswitch_20
        0xc037 -> :sswitch_20
        0xc038 -> :sswitch_20
        0xc039 -> :sswitch_20
        0xc03a -> :sswitch_20
        0xc03b -> :sswitch_20
        0xc072 -> :sswitch_1d
        0xc073 -> :sswitch_1d
        0xc074 -> :sswitch_17
        0xc075 -> :sswitch_17
        0xc076 -> :sswitch_23
        0xc077 -> :sswitch_23
        0xc078 -> :sswitch_1a
        0xc079 -> :sswitch_1a
        0xc07a -> :sswitch_29
        0xc07b -> :sswitch_29
        0xc07c -> :sswitch_15
        0xc07d -> :sswitch_15
        0xc07e -> :sswitch_d
        0xc07f -> :sswitch_d
        0xc080 -> :sswitch_10
        0xc081 -> :sswitch_10
        0xc082 -> :sswitch_b
        0xc083 -> :sswitch_b
        0xc086 -> :sswitch_1d
        0xc087 -> :sswitch_1d
        0xc088 -> :sswitch_17
        0xc089 -> :sswitch_17
        0xc08a -> :sswitch_23
        0xc08b -> :sswitch_23
        0xc08c -> :sswitch_1a
        0xc08d -> :sswitch_1a
        0xc08e -> :sswitch_26
        0xc08f -> :sswitch_26
        0xc090 -> :sswitch_12
        0xc091 -> :sswitch_12
        0xc092 -> :sswitch_2b
        0xc093 -> :sswitch_2b
        0xc094 -> :sswitch_26
        0xc095 -> :sswitch_26
        0xc096 -> :sswitch_12
        0xc097 -> :sswitch_12
        0xc098 -> :sswitch_2b
        0xc099 -> :sswitch_2b
        0xc09a -> :sswitch_20
        0xc09b -> :sswitch_20
        0xc09c -> :sswitch_29
        0xc09d -> :sswitch_29
        0xc09e -> :sswitch_15
        0xc09f -> :sswitch_15
        0xc0a0 -> :sswitch_29
        0xc0a1 -> :sswitch_29
        0xc0a2 -> :sswitch_15
        0xc0a3 -> :sswitch_15
        0xc0a4 -> :sswitch_26
        0xc0a5 -> :sswitch_26
        0xc0a6 -> :sswitch_12
        0xc0a7 -> :sswitch_12
        0xc0a8 -> :sswitch_26
        0xc0a9 -> :sswitch_26
        0xc0aa -> :sswitch_12
        0xc0ab -> :sswitch_12
        0xc0ac -> :sswitch_1d
        0xc0ad -> :sswitch_1d
        0xc0ae -> :sswitch_1d
        0xc0af -> :sswitch_1d
        0xcc13 -> :sswitch_23
        0xcc14 -> :sswitch_1d
        0xcc15 -> :sswitch_15
        0xe410 -> :sswitch_29
        0xe411 -> :sswitch_29
        0xe412 -> :sswitch_23
        0xe413 -> :sswitch_23
        0xe414 -> :sswitch_1d
        0xe415 -> :sswitch_1d
        0xe416 -> :sswitch_26
        0xe417 -> :sswitch_26
        0xe418 -> :sswitch_20
        0xe419 -> :sswitch_20
        0xe41a -> :sswitch_2b
        0xe41b -> :sswitch_2b
        0xe41c -> :sswitch_12
        0xe41d -> :sswitch_12
        0xe41e -> :sswitch_15
        0xe41f -> :sswitch_15
    .end sparse-switch
.end method

.method public static getMACAlgorithm(I)I
    .registers 3

    .prologue
    .line 2014
    sparse-switch p0, :sswitch_data_16

    .line 2258
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 2087
    :sswitch_b
    const/4 v0, 0x0

    .line 2255
    :goto_c
    return v0

    .line 2091
    :sswitch_d
    const/4 v0, 0x1

    goto :goto_c

    .line 2190
    :sswitch_f
    const/4 v0, 0x2

    goto :goto_c

    .line 2233
    :sswitch_11
    const/4 v0, 0x3

    goto :goto_c

    .line 2255
    :sswitch_13
    const/4 v0, 0x4

    goto :goto_c

    .line 2014
    nop

    :sswitch_data_16
    .sparse-switch
        0x1 -> :sswitch_d
        0x2 -> :sswitch_f
        0x4 -> :sswitch_d
        0x5 -> :sswitch_f
        0xa -> :sswitch_f
        0xd -> :sswitch_f
        0x10 -> :sswitch_f
        0x13 -> :sswitch_f
        0x16 -> :sswitch_f
        0x2c -> :sswitch_f
        0x2d -> :sswitch_f
        0x2e -> :sswitch_f
        0x2f -> :sswitch_f
        0x30 -> :sswitch_f
        0x31 -> :sswitch_f
        0x32 -> :sswitch_f
        0x33 -> :sswitch_f
        0x35 -> :sswitch_f
        0x36 -> :sswitch_f
        0x37 -> :sswitch_f
        0x38 -> :sswitch_f
        0x39 -> :sswitch_f
        0x3b -> :sswitch_11
        0x3c -> :sswitch_11
        0x3d -> :sswitch_11
        0x3e -> :sswitch_11
        0x3f -> :sswitch_11
        0x40 -> :sswitch_11
        0x41 -> :sswitch_f
        0x42 -> :sswitch_f
        0x43 -> :sswitch_f
        0x44 -> :sswitch_f
        0x45 -> :sswitch_f
        0x67 -> :sswitch_11
        0x68 -> :sswitch_11
        0x69 -> :sswitch_11
        0x6a -> :sswitch_11
        0x6b -> :sswitch_11
        0x84 -> :sswitch_f
        0x85 -> :sswitch_f
        0x86 -> :sswitch_f
        0x87 -> :sswitch_f
        0x88 -> :sswitch_f
        0x8a -> :sswitch_f
        0x8b -> :sswitch_f
        0x8c -> :sswitch_f
        0x8d -> :sswitch_f
        0x8e -> :sswitch_f
        0x8f -> :sswitch_f
        0x90 -> :sswitch_f
        0x91 -> :sswitch_f
        0x92 -> :sswitch_f
        0x93 -> :sswitch_f
        0x94 -> :sswitch_f
        0x95 -> :sswitch_f
        0x96 -> :sswitch_f
        0x97 -> :sswitch_f
        0x98 -> :sswitch_f
        0x99 -> :sswitch_f
        0x9a -> :sswitch_f
        0x9c -> :sswitch_b
        0x9d -> :sswitch_b
        0x9e -> :sswitch_b
        0x9f -> :sswitch_b
        0xa0 -> :sswitch_b
        0xa1 -> :sswitch_b
        0xa2 -> :sswitch_b
        0xa3 -> :sswitch_b
        0xa4 -> :sswitch_b
        0xa5 -> :sswitch_b
        0xa8 -> :sswitch_b
        0xa9 -> :sswitch_b
        0xaa -> :sswitch_b
        0xab -> :sswitch_b
        0xac -> :sswitch_b
        0xad -> :sswitch_b
        0xae -> :sswitch_11
        0xaf -> :sswitch_13
        0xb0 -> :sswitch_11
        0xb1 -> :sswitch_13
        0xb2 -> :sswitch_11
        0xb3 -> :sswitch_13
        0xb4 -> :sswitch_11
        0xb5 -> :sswitch_13
        0xb6 -> :sswitch_11
        0xb7 -> :sswitch_13
        0xb8 -> :sswitch_11
        0xb9 -> :sswitch_13
        0xba -> :sswitch_11
        0xbb -> :sswitch_11
        0xbc -> :sswitch_11
        0xbd -> :sswitch_11
        0xbe -> :sswitch_11
        0xc0 -> :sswitch_11
        0xc1 -> :sswitch_11
        0xc2 -> :sswitch_11
        0xc3 -> :sswitch_11
        0xc4 -> :sswitch_11
        0xc001 -> :sswitch_f
        0xc002 -> :sswitch_f
        0xc003 -> :sswitch_f
        0xc004 -> :sswitch_f
        0xc005 -> :sswitch_f
        0xc006 -> :sswitch_f
        0xc007 -> :sswitch_f
        0xc008 -> :sswitch_f
        0xc009 -> :sswitch_f
        0xc00a -> :sswitch_f
        0xc00b -> :sswitch_f
        0xc00c -> :sswitch_f
        0xc00d -> :sswitch_f
        0xc00e -> :sswitch_f
        0xc00f -> :sswitch_f
        0xc010 -> :sswitch_f
        0xc011 -> :sswitch_f
        0xc012 -> :sswitch_f
        0xc013 -> :sswitch_f
        0xc014 -> :sswitch_f
        0xc01a -> :sswitch_f
        0xc01b -> :sswitch_f
        0xc01c -> :sswitch_f
        0xc01d -> :sswitch_f
        0xc01e -> :sswitch_f
        0xc01f -> :sswitch_f
        0xc020 -> :sswitch_f
        0xc021 -> :sswitch_f
        0xc022 -> :sswitch_f
        0xc023 -> :sswitch_11
        0xc024 -> :sswitch_13
        0xc025 -> :sswitch_11
        0xc026 -> :sswitch_13
        0xc027 -> :sswitch_11
        0xc028 -> :sswitch_13
        0xc029 -> :sswitch_11
        0xc02a -> :sswitch_13
        0xc02b -> :sswitch_b
        0xc02c -> :sswitch_b
        0xc02d -> :sswitch_b
        0xc02e -> :sswitch_b
        0xc02f -> :sswitch_b
        0xc030 -> :sswitch_b
        0xc031 -> :sswitch_b
        0xc032 -> :sswitch_b
        0xc033 -> :sswitch_f
        0xc034 -> :sswitch_f
        0xc035 -> :sswitch_f
        0xc036 -> :sswitch_f
        0xc037 -> :sswitch_11
        0xc038 -> :sswitch_13
        0xc039 -> :sswitch_f
        0xc03a -> :sswitch_11
        0xc03b -> :sswitch_13
        0xc072 -> :sswitch_11
        0xc073 -> :sswitch_13
        0xc074 -> :sswitch_11
        0xc075 -> :sswitch_13
        0xc076 -> :sswitch_11
        0xc077 -> :sswitch_13
        0xc078 -> :sswitch_11
        0xc079 -> :sswitch_13
        0xc07a -> :sswitch_b
        0xc07b -> :sswitch_b
        0xc07c -> :sswitch_b
        0xc07d -> :sswitch_b
        0xc07e -> :sswitch_b
        0xc07f -> :sswitch_b
        0xc080 -> :sswitch_b
        0xc081 -> :sswitch_b
        0xc082 -> :sswitch_b
        0xc083 -> :sswitch_b
        0xc086 -> :sswitch_b
        0xc087 -> :sswitch_b
        0xc088 -> :sswitch_b
        0xc089 -> :sswitch_b
        0xc08a -> :sswitch_b
        0xc08b -> :sswitch_b
        0xc08c -> :sswitch_b
        0xc08d -> :sswitch_b
        0xc08e -> :sswitch_b
        0xc08f -> :sswitch_b
        0xc090 -> :sswitch_b
        0xc091 -> :sswitch_b
        0xc092 -> :sswitch_b
        0xc093 -> :sswitch_b
        0xc094 -> :sswitch_11
        0xc095 -> :sswitch_13
        0xc096 -> :sswitch_11
        0xc097 -> :sswitch_13
        0xc098 -> :sswitch_11
        0xc099 -> :sswitch_13
        0xc09a -> :sswitch_11
        0xc09b -> :sswitch_13
        0xc09c -> :sswitch_b
        0xc09d -> :sswitch_b
        0xc09e -> :sswitch_b
        0xc09f -> :sswitch_b
        0xc0a0 -> :sswitch_b
        0xc0a1 -> :sswitch_b
        0xc0a2 -> :sswitch_b
        0xc0a3 -> :sswitch_b
        0xc0a4 -> :sswitch_b
        0xc0a5 -> :sswitch_b
        0xc0a6 -> :sswitch_b
        0xc0a7 -> :sswitch_b
        0xc0a8 -> :sswitch_b
        0xc0a9 -> :sswitch_b
        0xc0aa -> :sswitch_b
        0xc0ab -> :sswitch_b
        0xc0ac -> :sswitch_b
        0xc0ad -> :sswitch_b
        0xc0ae -> :sswitch_b
        0xc0af -> :sswitch_b
        0xcc13 -> :sswitch_b
        0xcc14 -> :sswitch_b
        0xcc15 -> :sswitch_b
        0xe410 -> :sswitch_f
        0xe411 -> :sswitch_f
        0xe412 -> :sswitch_f
        0xe413 -> :sswitch_f
        0xe414 -> :sswitch_f
        0xe415 -> :sswitch_f
        0xe416 -> :sswitch_f
        0xe417 -> :sswitch_f
        0xe418 -> :sswitch_f
        0xe419 -> :sswitch_f
        0xe41a -> :sswitch_f
        0xe41b -> :sswitch_f
        0xe41c -> :sswitch_f
        0xe41d -> :sswitch_f
        0xe41e -> :sswitch_f
        0xe41f -> :sswitch_f
    .end sparse-switch
.end method

.method public static getMinimumVersion(I)Lorg/spongycastle/crypto/tls/ProtocolVersion;
    .registers 2

    .prologue
    .line 2264
    sparse-switch p0, :sswitch_data_a

    .line 2381
    sget-object v0, Lorg/spongycastle/crypto/tls/ProtocolVersion;->SSLv3:Lorg/spongycastle/crypto/tls/ProtocolVersion;

    :goto_5
    return-object v0

    .line 2378
    :sswitch_6
    sget-object v0, Lorg/spongycastle/crypto/tls/ProtocolVersion;->TLSv12:Lorg/spongycastle/crypto/tls/ProtocolVersion;

    goto :goto_5

    .line 2264
    nop

    :sswitch_data_a
    .sparse-switch
        0x3b -> :sswitch_6
        0x3c -> :sswitch_6
        0x3d -> :sswitch_6
        0x3e -> :sswitch_6
        0x3f -> :sswitch_6
        0x40 -> :sswitch_6
        0x67 -> :sswitch_6
        0x68 -> :sswitch_6
        0x69 -> :sswitch_6
        0x6a -> :sswitch_6
        0x6b -> :sswitch_6
        0x9c -> :sswitch_6
        0x9d -> :sswitch_6
        0x9e -> :sswitch_6
        0x9f -> :sswitch_6
        0xa0 -> :sswitch_6
        0xa1 -> :sswitch_6
        0xa2 -> :sswitch_6
        0xa3 -> :sswitch_6
        0xa4 -> :sswitch_6
        0xa5 -> :sswitch_6
        0xa8 -> :sswitch_6
        0xa9 -> :sswitch_6
        0xaa -> :sswitch_6
        0xab -> :sswitch_6
        0xac -> :sswitch_6
        0xad -> :sswitch_6
        0xba -> :sswitch_6
        0xbb -> :sswitch_6
        0xbc -> :sswitch_6
        0xbd -> :sswitch_6
        0xbe -> :sswitch_6
        0xbf -> :sswitch_6
        0xc0 -> :sswitch_6
        0xc1 -> :sswitch_6
        0xc2 -> :sswitch_6
        0xc3 -> :sswitch_6
        0xc4 -> :sswitch_6
        0xc5 -> :sswitch_6
        0xc023 -> :sswitch_6
        0xc024 -> :sswitch_6
        0xc025 -> :sswitch_6
        0xc026 -> :sswitch_6
        0xc027 -> :sswitch_6
        0xc028 -> :sswitch_6
        0xc029 -> :sswitch_6
        0xc02a -> :sswitch_6
        0xc02b -> :sswitch_6
        0xc02c -> :sswitch_6
        0xc02d -> :sswitch_6
        0xc02e -> :sswitch_6
        0xc02f -> :sswitch_6
        0xc030 -> :sswitch_6
        0xc031 -> :sswitch_6
        0xc032 -> :sswitch_6
        0xc072 -> :sswitch_6
        0xc073 -> :sswitch_6
        0xc074 -> :sswitch_6
        0xc075 -> :sswitch_6
        0xc076 -> :sswitch_6
        0xc077 -> :sswitch_6
        0xc078 -> :sswitch_6
        0xc079 -> :sswitch_6
        0xc07a -> :sswitch_6
        0xc07b -> :sswitch_6
        0xc07c -> :sswitch_6
        0xc07d -> :sswitch_6
        0xc07e -> :sswitch_6
        0xc07f -> :sswitch_6
        0xc080 -> :sswitch_6
        0xc081 -> :sswitch_6
        0xc082 -> :sswitch_6
        0xc083 -> :sswitch_6
        0xc084 -> :sswitch_6
        0xc085 -> :sswitch_6
        0xc086 -> :sswitch_6
        0xc087 -> :sswitch_6
        0xc088 -> :sswitch_6
        0xc089 -> :sswitch_6
        0xc08a -> :sswitch_6
        0xc08b -> :sswitch_6
        0xc08c -> :sswitch_6
        0xc08d -> :sswitch_6
        0xc08e -> :sswitch_6
        0xc08f -> :sswitch_6
        0xc090 -> :sswitch_6
        0xc091 -> :sswitch_6
        0xc092 -> :sswitch_6
        0xc093 -> :sswitch_6
        0xc09c -> :sswitch_6
        0xc09d -> :sswitch_6
        0xc09e -> :sswitch_6
        0xc09f -> :sswitch_6
        0xc0a0 -> :sswitch_6
        0xc0a1 -> :sswitch_6
        0xc0a2 -> :sswitch_6
        0xc0a3 -> :sswitch_6
        0xc0a4 -> :sswitch_6
        0xc0a5 -> :sswitch_6
        0xc0a6 -> :sswitch_6
        0xc0a7 -> :sswitch_6
        0xc0a8 -> :sswitch_6
        0xc0a9 -> :sswitch_6
        0xc0aa -> :sswitch_6
        0xc0ab -> :sswitch_6
        0xc0ac -> :sswitch_6
        0xc0ad -> :sswitch_6
        0xc0ae -> :sswitch_6
        0xc0af -> :sswitch_6
        0xcc13 -> :sswitch_6
        0xcc14 -> :sswitch_6
        0xcc15 -> :sswitch_6
    .end sparse-switch
.end method

.method public static getOIDForHashAlgorithm(S)Lorg/spongycastle/asn1/ASN1ObjectIdentifier;
    .registers 3

    .prologue
    .line 1244
    packed-switch p0, :pswitch_data_1e

    .line 1259
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "unknown HashAlgorithm"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 1247
    :pswitch_b
    sget-object v0, Lorg/spongycastle/asn1/pkcs/PKCSObjectIdentifiers;->md5:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    .line 1257
    :goto_d
    return-object v0

    .line 1249
    :pswitch_e
    sget-object v0, Lorg/spongycastle/asn1/x509/X509ObjectIdentifiers;->id_SHA1:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    goto :goto_d

    .line 1251
    :pswitch_11
    sget-object v0, Lorg/spongycastle/asn1/nist/NISTObjectIdentifiers;->id_sha224:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    goto :goto_d

    .line 1253
    :pswitch_14
    sget-object v0, Lorg/spongycastle/asn1/nist/NISTObjectIdentifiers;->id_sha256:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    goto :goto_d

    .line 1255
    :pswitch_17
    sget-object v0, Lorg/spongycastle/asn1/nist/NISTObjectIdentifiers;->id_sha384:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    goto :goto_d

    .line 1257
    :pswitch_1a
    sget-object v0, Lorg/spongycastle/asn1/nist/NISTObjectIdentifiers;->id_sha512:Lorg/spongycastle/asn1/ASN1ObjectIdentifier;

    goto :goto_d

    .line 1244
    nop

    :pswitch_data_1e
    .packed-switch 0x1
        :pswitch_b
        :pswitch_e
        :pswitch_11
        :pswitch_14
        :pswitch_17
        :pswitch_1a
    .end packed-switch
.end method

.method public static getSignatureAlgorithmsExtension(Ljava/util/Hashtable;)Ljava/util/Vector;
    .registers 2

    .prologue
    .line 811
    sget-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EXT_signature_algorithms:Ljava/lang/Integer;

    invoke-static {p0, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getExtensionData(Ljava/util/Hashtable;Ljava/lang/Integer;)[B

    move-result-object v0

    .line 812
    if-nez v0, :cond_a

    const/4 v0, 0x0

    :goto_9
    return-object v0

    :cond_a
    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readSignatureAlgorithmsExtension([B)Ljava/util/Vector;

    move-result-object v0

    goto :goto_9
.end method

.method public static getSignatureAndHashAlgorithm(Lorg/spongycastle/crypto/tls/TlsContext;Lorg/spongycastle/crypto/tls/TlsSignerCredentials;)Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;
    .registers 4

    .prologue
    .line 746
    const/4 v0, 0x0

    .line 747
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isTLSv12(Lorg/spongycastle/crypto/tls/TlsContext;)Z

    move-result v1

    if-eqz v1, :cond_15

    .line 749
    invoke-interface {p1}, Lorg/spongycastle/crypto/tls/TlsSignerCredentials;->getSignatureAndHashAlgorithm()Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    move-result-object v0

    .line 750
    if-nez v0, :cond_15

    .line 752
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 755
    :cond_15
    return-object v0
.end method

.method public static hasExpectedEmptyExtensionData(Ljava/util/Hashtable;Ljava/lang/Integer;S)Z
    .registers 4

    .prologue
    .line 766
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->getExtensionData(Ljava/util/Hashtable;Ljava/lang/Integer;)[B

    move-result-object v0

    .line 767
    if-nez v0, :cond_8

    .line 769
    const/4 v0, 0x0

    .line 775
    :goto_7
    return v0

    .line 771
    :cond_8
    array-length v0, v0

    if-eqz v0, :cond_11

    .line 773
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    invoke-direct {v0, p2}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 775
    :cond_11
    const/4 v0, 0x1

    goto :goto_7
.end method

.method public static hasSigningCapability(S)Z
    .registers 2

    .prologue
    .line 1350
    sparse-switch p0, :sswitch_data_8

    .line 1357
    const/4 v0, 0x0

    :goto_4
    return v0

    .line 1355
    :sswitch_5
    const/4 v0, 0x1

    goto :goto_4

    .line 1350
    nop

    :sswitch_data_8
    .sparse-switch
        0x1 -> :sswitch_5
        0x2 -> :sswitch_5
        0x40 -> :sswitch_5
    .end sparse-switch
.end method

.method static hmac_hash(Lorg/spongycastle/crypto/Digest;[B[B[B)V
    .registers 14

    .prologue
    const/4 v1, 0x0

    .line 1006
    new-instance v4, Lorg/spongycastle/crypto/macs/HMac;

    invoke-direct {v4, p0}, Lorg/spongycastle/crypto/macs/HMac;-><init>(Lorg/spongycastle/crypto/Digest;)V

    .line 1007
    new-instance v0, Lorg/spongycastle/crypto/params/KeyParameter;

    invoke-direct {v0, p1}, Lorg/spongycastle/crypto/params/KeyParameter;-><init>([B)V

    invoke-virtual {v4, v0}, Lorg/spongycastle/crypto/macs/HMac;->init(Lorg/spongycastle/crypto/CipherParameters;)V

    .line 1009
    invoke-interface {p0}, Lorg/spongycastle/crypto/Digest;->getDigestSize()I

    move-result v5

    .line 1010
    array-length v0, p3

    add-int/2addr v0, v5

    add-int/lit8 v0, v0, -0x1

    div-int v6, v0, v5

    .line 1011
    invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I

    move-result v0

    new-array v3, v0, [B

    .line 1012
    invoke-virtual {v4}, Lorg/spongycastle/crypto/macs/HMac;->getMacSize()I

    move-result v0

    new-array v7, v0, [B

    move v0, v1

    move-object v2, p2

    .line 1013
    :goto_26
    if-ge v0, v6, :cond_4b

    .line 1015
    array-length v8, v2

    invoke-virtual {v4, v2, v1, v8}, Lorg/spongycastle/crypto/macs/HMac;->update([BII)V

    .line 1016
    invoke-virtual {v4, v3, v1}, Lorg/spongycastle/crypto/macs/HMac;->doFinal([BI)I

    .line 1018
    array-length v2, v3

    invoke-virtual {v4, v3, v1, v2}, Lorg/spongycastle/crypto/macs/HMac;->update([BII)V

    .line 1019
    array-length v2, p2

    invoke-virtual {v4, p2, v1, v2}, Lorg/spongycastle/crypto/macs/HMac;->update([BII)V

    .line 1020
    invoke-virtual {v4, v7, v1}, Lorg/spongycastle/crypto/macs/HMac;->doFinal([BI)I

    .line 1021
    mul-int v2, v5, v0

    array-length v8, p3

    mul-int v9, v5, v0

    sub-int/2addr v8, v9

    invoke-static {v5, v8}, Ljava/lang/Math;->min(II)I

    move-result v8

    invoke-static {v7, v1, p3, v2, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 1013
    add-int/lit8 v0, v0, 0x1

    move-object v2, v3

    goto :goto_26

    .line 1023
    :cond_4b
    return-void
.end method

.method public static importSession([BLorg/spongycastle/crypto/tls/SessionParameters;)Lorg/spongycastle/crypto/tls/TlsSession;
    .registers 3

    .prologue
    .line 780
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsSessionImpl;

    invoke-direct {v0, p0, p1}, Lorg/spongycastle/crypto/tls/TlsSessionImpl;-><init>([BLorg/spongycastle/crypto/tls/SessionParameters;)V

    return-object v0
.end method

.method public static isAEADCipherSuite(I)Z
    .registers 3

    .prologue
    .line 2387
    const/4 v0, 0x2

    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getCipherType(I)I

    move-result v1

    if-ne v0, v1, :cond_9

    const/4 v0, 0x1

    :goto_8
    return v0

    :cond_9
    const/4 v0, 0x0

    goto :goto_8
.end method

.method public static isBlockCipherSuite(I)Z
    .registers 3

    .prologue
    const/4 v0, 0x1

    .line 2392
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getCipherType(I)I

    move-result v1

    if-ne v0, v1, :cond_8

    :goto_7
    return v0

    :cond_8
    const/4 v0, 0x0

    goto :goto_7
.end method

.method public static isSSL(Lorg/spongycastle/crypto/tls/TlsContext;)Z
    .registers 2

    .prologue
    .line 185
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getServerVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isSSL()Z

    move-result v0

    return v0
.end method

.method public static isSignatureAlgorithmsExtensionAllowed(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z
    .registers 3

    .prologue
    .line 785
    sget-object v0, Lorg/spongycastle/crypto/tls/ProtocolVersion;->TLSv12:Lorg/spongycastle/crypto/tls/ProtocolVersion;

    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getEquivalentTLSVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isEqualOrEarlierVersionOf(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isStreamCipherSuite(I)Z
    .registers 2

    .prologue
    .line 2397
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getCipherType(I)I

    move-result v0

    if-nez v0, :cond_8

    const/4 v0, 0x1

    :goto_7
    return v0

    :cond_8
    const/4 v0, 0x0

    goto :goto_7
.end method

.method public static isTLSv11(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z
    .registers 3

    .prologue
    .line 190
    sget-object v0, Lorg/spongycastle/crypto/tls/ProtocolVersion;->TLSv11:Lorg/spongycastle/crypto/tls/ProtocolVersion;

    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getEquivalentTLSVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isEqualOrEarlierVersionOf(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isTLSv11(Lorg/spongycastle/crypto/tls/TlsContext;)Z
    .registers 2

    .prologue
    .line 195
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getServerVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isTLSv11(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isTLSv12(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z
    .registers 3

    .prologue
    .line 200
    sget-object v0, Lorg/spongycastle/crypto/tls/ProtocolVersion;->TLSv12:Lorg/spongycastle/crypto/tls/ProtocolVersion;

    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getEquivalentTLSVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isEqualOrEarlierVersionOf(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isTLSv12(Lorg/spongycastle/crypto/tls/TlsContext;)Z
    .registers 2

    .prologue
    .line 205
    invoke-interface {p0}, Lorg/spongycastle/crypto/tls/TlsContext;->getServerVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->isTLSv12(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isValidCipherSuiteForVersion(ILorg/spongycastle/crypto/tls/ProtocolVersion;)Z
    .registers 4

    .prologue
    .line 2402
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->getMinimumVersion(I)Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    invoke-virtual {p1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getEquivalentTLSVersion()Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->isEqualOrEarlierVersionOf(Lorg/spongycastle/crypto/tls/ProtocolVersion;)Z

    move-result v0

    return v0
.end method

.method public static isValidUint16(I)Z
    .registers 2

    .prologue
    .line 150
    const v0, 0xffff

    and-int/2addr v0, p0

    if-ne v0, p0, :cond_8

    const/4 v0, 0x1

    :goto_7
    return v0

    :cond_8
    const/4 v0, 0x0

    goto :goto_7
.end method

.method public static isValidUint16(J)Z
    .registers 4

    .prologue
    .line 155
    const-wide/32 v0, 0xffff

    and-long/2addr v0, p0

    cmp-long v0, v0, p0

    if-nez v0, :cond_a

    const/4 v0, 0x1

    :goto_9
    return v0

    :cond_a
    const/4 v0, 0x0

    goto :goto_9
.end method

.method public static isValidUint24(I)Z
    .registers 2

    .prologue
    .line 160
    const v0, 0xffffff

    and-int/2addr v0, p0

    if-ne v0, p0, :cond_8

    const/4 v0, 0x1

    :goto_7
    return v0

    :cond_8
    const/4 v0, 0x0

    goto :goto_7
.end method

.method public static isValidUint24(J)Z
    .registers 4

    .prologue
    .line 165
    const-wide/32 v0, 0xffffff

    and-long/2addr v0, p0

    cmp-long v0, v0, p0

    if-nez v0, :cond_a

    const/4 v0, 0x1

    :goto_9
    return v0

    :cond_a
    const/4 v0, 0x0

    goto :goto_9
.end method

.method public static isValidUint32(J)Z
    .registers 4

    .prologue
    .line 170
    const-wide v0, 0xffffffffL

    and-long/2addr v0, p0

    cmp-long v0, v0, p0

    if-nez v0, :cond_c

    const/4 v0, 0x1

    :goto_b
    return v0

    :cond_c
    const/4 v0, 0x0

    goto :goto_b
.end method

.method public static isValidUint48(J)Z
    .registers 4

    .prologue
    .line 175
    const-wide v0, 0xffffffffffffL

    and-long/2addr v0, p0

    cmp-long v0, v0, p0

    if-nez v0, :cond_c

    const/4 v0, 0x1

    :goto_b
    return v0

    :cond_c
    const/4 v0, 0x0

    goto :goto_b
.end method

.method public static isValidUint64(J)Z
    .registers 3

    .prologue
    .line 180
    const/4 v0, 0x1

    return v0
.end method

.method public static isValidUint8(I)Z
    .registers 2

    .prologue
    .line 140
    and-int/lit16 v0, p0, 0xff

    if-ne v0, p0, :cond_6

    const/4 v0, 0x1

    :goto_5
    return v0

    :cond_6
    const/4 v0, 0x0

    goto :goto_5
.end method

.method public static isValidUint8(J)Z
    .registers 4

    .prologue
    .line 145
    const-wide/16 v0, 0xff

    and-long/2addr v0, p0

    cmp-long v0, v0, p0

    if-nez v0, :cond_9

    const/4 v0, 0x1

    :goto_8
    return v0

    :cond_9
    const/4 v0, 0x0

    goto :goto_8
.end method

.method public static isValidUint8(S)Z
    .registers 2

    .prologue
    .line 135
    and-int/lit16 v0, p0, 0xff

    if-ne v0, p0, :cond_6

    const/4 v0, 0x1

    :goto_5
    return v0

    :cond_6
    const/4 v0, 0x0

    goto :goto_5
.end method

.method public static parseSupportedSignatureAlgorithms(ZLjava/io/InputStream;)Ljava/util/Vector;
    .registers 7

    .prologue
    .line 892
    invoke-static {p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint16(Ljava/io/InputStream;)I

    move-result v0

    .line 893
    const/4 v1, 0x2

    if-lt v0, v1, :cond_b

    and-int/lit8 v1, v0, 0x1

    if-eqz v1, :cond_13

    .line 895
    :cond_b
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x32

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 897
    :cond_13
    div-int/lit8 v1, v0, 0x2

    .line 898
    new-instance v2, Ljava/util/Vector;

    invoke-direct {v2, v1}, Ljava/util/Vector;-><init>(I)V

    .line 899
    const/4 v0, 0x0

    :goto_1b
    if-ge v0, v1, :cond_37

    .line 901
    invoke-static {p1}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->parse(Ljava/io/InputStream;)Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    move-result-object v3

    .line 902
    if-nez p0, :cond_31

    invoke-virtual {v3}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getSignature()S

    move-result v4

    if-nez v4, :cond_31

    .line 908
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x2f

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 910
    :cond_31
    invoke-virtual {v2, v3}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V

    .line 899
    add-int/lit8 v0, v0, 0x1

    goto :goto_1b

    .line 912
    :cond_37
    return-object v2
.end method

.method public static readASN1Object([B)Lorg/spongycastle/asn1/ASN1Primitive;
    .registers 4

    .prologue
    const/16 v2, 0x32

    .line 659
    new-instance v0, Lorg/spongycastle/asn1/ASN1InputStream;

    invoke-direct {v0, p0}, Lorg/spongycastle/asn1/ASN1InputStream;-><init>([B)V

    .line 660
    invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1InputStream;->readObject()Lorg/spongycastle/asn1/ASN1Primitive;

    move-result-object v1

    .line 661
    if-nez v1, :cond_13

    .line 663
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    invoke-direct {v0, v2}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 665
    :cond_13
    invoke-virtual {v0}, Lorg/spongycastle/asn1/ASN1InputStream;->readObject()Lorg/spongycastle/asn1/ASN1Primitive;

    move-result-object v0

    if-eqz v0, :cond_1f

    .line 667
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    invoke-direct {v0, v2}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 669
    :cond_1f
    return-object v1
.end method

.method public static readAllOrNothing(ILjava/io/InputStream;)[B
    .registers 4

    .prologue
    .line 536
    if-gtz p0, :cond_5

    .line 538
    sget-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_BYTES:[B

    .line 550
    :cond_4
    :goto_4
    return-object v0

    .line 540
    :cond_5
    new-array v0, p0, [B

    .line 541
    invoke-static {p1, v0}, Lorg/spongycastle/util/io/Streams;->readFully(Ljava/io/InputStream;[B)I

    move-result v1

    .line 542
    if-nez v1, :cond_f

    .line 544
    const/4 v0, 0x0

    goto :goto_4

    .line 546
    :cond_f
    if-eq v1, p0, :cond_4

    .line 548
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0
.end method

.method public static readDERObject([B)Lorg/spongycastle/asn1/ASN1Primitive;
    .registers 3

    .prologue
    .line 678
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readASN1Object([B)Lorg/spongycastle/asn1/ASN1Primitive;

    move-result-object v0

    .line 679
    const-string v1, "DER"

    invoke-virtual {v0, v1}, Lorg/spongycastle/asn1/ASN1Primitive;->getEncoded(Ljava/lang/String;)[B

    move-result-object v1

    .line 680
    invoke-static {v1, p0}, Lorg/spongycastle/util/Arrays;->areEqual([B[B)Z

    move-result v1

    if-nez v1, :cond_18

    .line 682
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x32

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 684
    :cond_18
    return-object v0
.end method

.method public static readFully([BLjava/io/InputStream;)V
    .registers 4

    .prologue
    .line 571
    array-length v0, p0

    .line 572
    if-lez v0, :cond_f

    invoke-static {p1, p0}, Lorg/spongycastle/util/io/Streams;->readFully(Ljava/io/InputStream;[B)I

    move-result v1

    if-eq v0, v1, :cond_f

    .line 574
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 576
    :cond_f
    return-void
.end method

.method public static readFully(ILjava/io/InputStream;)[B
    .registers 4

    .prologue
    .line 556
    if-gtz p0, :cond_5

    .line 558
    sget-object v0, Lorg/spongycastle/crypto/tls/TlsUtils;->EMPTY_BYTES:[B

    .line 565
    :cond_4
    return-object v0

    .line 560
    :cond_5
    new-array v0, p0, [B

    .line 561
    invoke-static {p1, v0}, Lorg/spongycastle/util/io/Streams;->readFully(Ljava/io/InputStream;[B)I

    move-result v1

    if-eq p0, v1, :cond_4

    .line 563
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0
.end method

.method public static readOpaque16(Ljava/io/InputStream;)[B
    .registers 2

    .prologue
    .line 588
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint16(Ljava/io/InputStream;)I

    move-result v0

    .line 589
    invoke-static {v0, p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readFully(ILjava/io/InputStream;)[B

    move-result-object v0

    return-object v0
.end method

.method public static readOpaque24(Ljava/io/InputStream;)[B
    .registers 2

    .prologue
    .line 595
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint24(Ljava/io/InputStream;)I

    move-result v0

    .line 596
    invoke-static {v0, p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readFully(ILjava/io/InputStream;)[B

    move-result-object v0

    return-object v0
.end method

.method public static readOpaque8(Ljava/io/InputStream;)[B
    .registers 2

    .prologue
    .line 581
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint8(Ljava/io/InputStream;)S

    move-result v0

    .line 582
    invoke-static {v0, p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readFully(ILjava/io/InputStream;)[B

    move-result-object v0

    return-object v0
.end method

.method public static readSignatureAlgorithmsExtension([B)Ljava/util/Vector;
    .registers 3

    .prologue
    .line 843
    if-nez p0, :cond_a

    .line 845
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'extensionData\' cannot be null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 848
    :cond_a
    new-instance v0, Ljava/io/ByteArrayInputStream;

    invoke-direct {v0, p0}, Ljava/io/ByteArrayInputStream;-><init>([B)V

    .line 851
    const/4 v1, 0x0

    invoke-static {v1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->parseSupportedSignatureAlgorithms(ZLjava/io/InputStream;)Ljava/util/Vector;

    move-result-object v1

    .line 853
    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsProtocol;->assertEmpty(Ljava/io/ByteArrayInputStream;)V

    .line 855
    return-object v1
.end method

.method public static readUint16(Ljava/io/InputStream;)I
    .registers 3

    .prologue
    .line 458
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 459
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v1

    .line 460
    if-gez v1, :cond_10

    .line 462
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 464
    :cond_10
    shl-int/lit8 v0, v0, 0x8

    or-int/2addr v0, v1

    return v0
.end method

.method public static readUint16([BI)I
    .registers 4

    .prologue
    .line 469
    aget-byte v0, p0, p1

    and-int/lit16 v0, v0, 0xff

    shl-int/lit8 v0, v0, 0x8

    .line 470
    add-int/lit8 v1, p1, 0x1

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    or-int/2addr v0, v1

    .line 471
    return v0
.end method

.method public static readUint16Array(ILjava/io/InputStream;)[I
    .registers 5

    .prologue
    .line 613
    new-array v1, p0, [I

    .line 614
    const/4 v0, 0x0

    :goto_3
    if-ge v0, p0, :cond_e

    .line 616
    invoke-static {p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint16(Ljava/io/InputStream;)I

    move-result v2

    aput v2, v1, v0

    .line 614
    add-int/lit8 v0, v0, 0x1

    goto :goto_3

    .line 618
    :cond_e
    return-object v1
.end method

.method public static readUint24(Ljava/io/InputStream;)I
    .registers 4

    .prologue
    .line 477
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 478
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v1

    .line 479
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v2

    .line 480
    if-gez v2, :cond_14

    .line 482
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 484
    :cond_14
    shl-int/lit8 v0, v0, 0x10

    shl-int/lit8 v1, v1, 0x8

    or-int/2addr v0, v1

    or-int/2addr v0, v2

    return v0
.end method

.method public static readUint24([BI)I
    .registers 5

    .prologue
    .line 489
    aget-byte v0, p0, p1

    and-int/lit16 v0, v0, 0xff

    shl-int/lit8 v0, v0, 0x10

    .line 490
    add-int/lit8 v1, p1, 0x1

    aget-byte v2, p0, v1

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x8

    or-int/2addr v0, v2

    .line 491
    add-int/lit8 v1, v1, 0x1

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    or-int/2addr v0, v1

    .line 492
    return v0
.end method

.method public static readUint32(Ljava/io/InputStream;)J
    .registers 5

    .prologue
    .line 498
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 499
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v1

    .line 500
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v2

    .line 501
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v3

    .line 502
    if-gez v3, :cond_18

    .line 504
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 506
    :cond_18
    shl-int/lit8 v0, v0, 0x2

    shl-int/lit8 v1, v1, 0x10

    or-int/2addr v0, v1

    shl-int/lit8 v1, v2, 0x8

    or-int/2addr v0, v1

    or-int/2addr v0, v3

    int-to-long v0, v0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    return-wide v0
.end method

.method public static readUint32([BI)J
    .registers 6

    .prologue
    .line 511
    aget-byte v0, p0, p1

    and-int/lit16 v0, v0, 0xff

    shl-int/lit8 v0, v0, 0x18

    .line 512
    add-int/lit8 v1, p1, 0x1

    aget-byte v2, p0, v1

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x10

    or-int/2addr v0, v2

    .line 513
    add-int/lit8 v1, v1, 0x1

    aget-byte v2, p0, v1

    and-int/lit16 v2, v2, 0xff

    shl-int/lit8 v2, v2, 0x8

    or-int/2addr v0, v2

    .line 514
    add-int/lit8 v1, v1, 0x1

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    or-int/2addr v0, v1

    .line 515
    int-to-long v0, v0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    return-wide v0
.end method

.method public static readUint48(Ljava/io/InputStream;)J
    .registers 7

    .prologue
    const-wide v4, 0xffffffffL

    .line 521
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint24(Ljava/io/InputStream;)I

    move-result v0

    .line 522
    invoke-static {p0}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint24(Ljava/io/InputStream;)I

    move-result v1

    .line 523
    int-to-long v2, v0

    and-long/2addr v2, v4

    const/16 v0, 0x18

    shl-long/2addr v2, v0

    int-to-long v0, v1

    and-long/2addr v0, v4

    or-long/2addr v0, v2

    return-wide v0
.end method

.method public static readUint48([BI)J
    .registers 8

    .prologue
    const-wide v4, 0xffffffffL

    .line 528
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint24([BI)I

    move-result v0

    .line 529
    add-int/lit8 v1, p1, 0x3

    invoke-static {p0, v1}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint24([BI)I

    move-result v1

    .line 530
    int-to-long v2, v0

    and-long/2addr v2, v4

    const/16 v0, 0x18

    shl-long/2addr v2, v0

    int-to-long v0, v1

    and-long/2addr v0, v4

    or-long/2addr v0, v2

    return-wide v0
.end method

.method public static readUint8(Ljava/io/InputStream;)S
    .registers 2

    .prologue
    .line 442
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 443
    if-gez v0, :cond_c

    .line 445
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 447
    :cond_c
    int-to-short v0, v0

    return v0
.end method

.method public static readUint8([BI)S
    .registers 3

    .prologue
    .line 452
    aget-byte v0, p0, p1

    int-to-short v0, v0

    return v0
.end method

.method public static readUint8Array(ILjava/io/InputStream;)[S
    .registers 5

    .prologue
    .line 602
    new-array v1, p0, [S

    .line 603
    const/4 v0, 0x0

    :goto_3
    if-ge v0, p0, :cond_e

    .line 605
    invoke-static {p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->readUint8(Ljava/io/InputStream;)S

    move-result v2

    aput-short v2, v1, v0

    .line 603
    add-int/lit8 v0, v0, 0x1

    goto :goto_3

    .line 607
    :cond_e
    return-object v1
.end method

.method public static readVersion(Ljava/io/InputStream;)Lorg/spongycastle/crypto/tls/ProtocolVersion;
    .registers 3

    .prologue
    .line 630
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 631
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v1

    .line 632
    if-gez v1, :cond_10

    .line 634
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 636
    :cond_10
    invoke-static {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->get(II)Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    return-object v0
.end method

.method public static readVersion([BI)Lorg/spongycastle/crypto/tls/ProtocolVersion;
    .registers 4

    .prologue
    .line 624
    aget-byte v0, p0, p1

    and-int/lit16 v0, v0, 0xff

    add-int/lit8 v1, p1, 0x1

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    invoke-static {v0, v1}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->get(II)Lorg/spongycastle/crypto/tls/ProtocolVersion;

    move-result-object v0

    return-object v0
.end method

.method public static readVersionRaw(Ljava/io/InputStream;)I
    .registers 3

    .prologue
    .line 648
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v0

    .line 649
    invoke-virtual {p0}, Ljava/io/InputStream;->read()I

    move-result v1

    .line 650
    if-gez v1, :cond_10

    .line 652
    new-instance v0, Ljava/io/EOFException;

    invoke-direct {v0}, Ljava/io/EOFException;-><init>()V

    throw v0

    .line 654
    :cond_10
    shl-int/lit8 v0, v0, 0x8

    or-int/2addr v0, v1

    return v0
.end method

.method public static readVersionRaw([BI)I
    .registers 4

    .prologue
    .line 642
    aget-byte v0, p0, p1

    shl-int/lit8 v0, v0, 0x8

    add-int/lit8 v1, p1, 0x1

    aget-byte v1, p0, v1

    or-int/2addr v0, v1

    return v0
.end method

.method static trackHashAlgorithms(Lorg/spongycastle/crypto/tls/TlsHandshakeHash;Ljava/util/Vector;)V
    .registers 4

    .prologue
    .line 1336
    if-eqz p1, :cond_1b

    .line 1338
    const/4 v0, 0x0

    move v1, v0

    :goto_4
    invoke-virtual {p1}, Ljava/util/Vector;->size()I

    move-result v0

    if-ge v1, v0, :cond_1b

    .line 1341
    invoke-virtual {p1, v1}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    .line 1342
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getHash()S

    move-result v0

    .line 1343
    invoke-interface {p0, v0}, Lorg/spongycastle/crypto/tls/TlsHandshakeHash;->trackHashAlgorithm(S)V

    .line 1338
    add-int/lit8 v0, v1, 0x1

    move v1, v0

    goto :goto_4

    .line 1346
    :cond_1b
    return-void
.end method

.method static validateKeyUsage(Lorg/spongycastle/asn1/x509/Certificate;I)V
    .registers 4

    .prologue
    .line 1028
    invoke-virtual {p0}, Lorg/spongycastle/asn1/x509/Certificate;->getTBSCertificate()Lorg/spongycastle/asn1/x509/TBSCertificate;

    move-result-object v0

    invoke-virtual {v0}, Lorg/spongycastle/asn1/x509/TBSCertificate;->getExtensions()Lorg/spongycastle/asn1/x509/Extensions;

    move-result-object v0

    .line 1029
    if-eqz v0, :cond_24

    .line 1031
    invoke-static {v0}, Lorg/spongycastle/asn1/x509/KeyUsage;->fromExtensions(Lorg/spongycastle/asn1/x509/Extensions;)Lorg/spongycastle/asn1/x509/KeyUsage;

    move-result-object v0

    .line 1032
    if-eqz v0, :cond_24

    .line 1034
    invoke-virtual {v0}, Lorg/spongycastle/asn1/x509/KeyUsage;->getBytes()[B

    move-result-object v0

    const/4 v1, 0x0

    aget-byte v0, v0, v1

    and-int/lit16 v0, v0, 0xff

    .line 1035
    and-int/2addr v0, p1

    if-eq v0, p1, :cond_24

    .line 1037
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x2e

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 1041
    :cond_24
    return-void
.end method

.method private static vectorOfOne(Ljava/lang/Object;)Ljava/util/Vector;
    .registers 3

    .prologue
    .line 1397
    new-instance v0, Ljava/util/Vector;

    const/4 v1, 0x1

    invoke-direct {v0, v1}, Ljava/util/Vector;-><init>(I)V

    .line 1398
    invoke-virtual {v0, p0}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V

    .line 1399
    return-object v0
.end method

.method public static verifySupportedSignatureAlgorithm(Ljava/util/Vector;Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;)V
    .registers 6

    .prologue
    .line 918
    if-eqz p0, :cond_11

    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    if-lez v0, :cond_11

    .line 919
    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    const v1, 0x8000

    if-lt v0, v1, :cond_19

    .line 921
    :cond_11
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'supportedSignatureAlgorithms\' must have length from 1 to (2^15 - 1)"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 924
    :cond_19
    if-nez p1, :cond_23

    .line 926
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'signatureAlgorithm\' cannot be null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 929
    :cond_23
    invoke-virtual {p1}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getSignature()S

    move-result v0

    if-eqz v0, :cond_50

    .line 931
    const/4 v0, 0x0

    move v1, v0

    :goto_2b
    invoke-virtual {p0}, Ljava/util/Vector;->size()I

    move-result v0

    if-ge v1, v0, :cond_50

    .line 933
    invoke-virtual {p0, v1}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;

    .line 934
    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getHash()S

    move-result v2

    invoke-virtual {p1}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getHash()S

    move-result v3

    if-ne v2, v3, :cond_4c

    invoke-virtual {v0}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getSignature()S

    move-result v0

    invoke-virtual {p1}, Lorg/spongycastle/crypto/tls/SignatureAndHashAlgorithm;->getSignature()S

    move-result v2

    if-ne v0, v2, :cond_4c

    .line 936
    return-void

    .line 931
    :cond_4c
    add-int/lit8 v0, v1, 0x1

    move v1, v0

    goto :goto_2b

    .line 941
    :cond_50
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x2f

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0
.end method

.method public static writeGMTUnixTime([BI)V
    .registers 6

    .prologue
    .line 689
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    const-wide/16 v2, 0x3e8

    div-long/2addr v0, v2

    long-to-int v0, v0

    .line 690
    shr-int/lit8 v1, v0, 0x18

    aput-byte v1, p0, p1

    .line 691
    add-int/lit8 v1, p1, 0x1

    ushr-int/lit8 v2, v0, 0x10

    int-to-byte v2, v2

    aput-byte v2, p0, v1

    .line 692
    add-int/lit8 v1, p1, 0x2

    ushr-int/lit8 v2, v0, 0x8

    int-to-byte v2, v2

    aput-byte v2, p0, v1

    .line 693
    add-int/lit8 v1, p1, 0x3

    int-to-byte v0, v0

    aput-byte v0, p0, v1

    .line 694
    return-void
.end method

.method public static writeOpaque16([BLjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 332
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint16(I)V

    .line 333
    array-length v0, p0

    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(ILjava/io/OutputStream;)V

    .line 334
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write([B)V

    .line 335
    return-void
.end method

.method public static writeOpaque24([BLjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 340
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint24(I)V

    .line 341
    array-length v0, p0

    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint24(ILjava/io/OutputStream;)V

    .line 342
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write([B)V

    .line 343
    return-void
.end method

.method public static writeOpaque8([BLjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 324
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint8(I)V

    .line 325
    array-length v0, p0

    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8(ILjava/io/OutputStream;)V

    .line 326
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write([B)V

    .line 327
    return-void
.end method

.method public static writeUint16(ILjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 233
    ushr-int/lit8 v0, p0, 0x8

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 234
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write(I)V

    .line 235
    return-void
.end method

.method public static writeUint16(I[BI)V
    .registers 5

    .prologue
    .line 239
    ushr-int/lit8 v0, p0, 0x8

    int-to-byte v0, v0

    aput-byte v0, p1, p2

    .line 240
    add-int/lit8 v0, p2, 0x1

    int-to-byte v1, p0

    aput-byte v1, p1, v0

    .line 241
    return-void
.end method

.method public static writeUint16Array([ILjava/io/OutputStream;)V
    .registers 4

    .prologue
    .line 383
    const/4 v0, 0x0

    :goto_1
    array-length v1, p0

    if-ge v0, v1, :cond_c

    .line 385
    aget v1, p0, v0

    invoke-static {v1, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(ILjava/io/OutputStream;)V

    .line 383
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 387
    :cond_c
    return-void
.end method

.method public static writeUint16Array([I[BI)V
    .registers 5

    .prologue
    .line 392
    const/4 v0, 0x0

    :goto_1
    array-length v1, p0

    if-ge v0, v1, :cond_e

    .line 394
    aget v1, p0, v0

    invoke-static {v1, p1, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(I[BI)V

    .line 395
    add-int/lit8 p2, p2, 0x2

    .line 392
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 397
    :cond_e
    return-void
.end method

.method public static writeUint16ArrayWithUint16Length([ILjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 402
    array-length v0, p0

    mul-int/lit8 v0, v0, 0x2

    .line 403
    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint16(I)V

    .line 404
    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(ILjava/io/OutputStream;)V

    .line 405
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16Array([ILjava/io/OutputStream;)V

    .line 406
    return-void
.end method

.method public static writeUint16ArrayWithUint16Length([I[BI)V
    .registers 4

    .prologue
    .line 411
    array-length v0, p0

    mul-int/lit8 v0, v0, 0x2

    .line 412
    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint16(I)V

    .line 413
    invoke-static {v0, p1, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16(I[BI)V

    .line 414
    add-int/lit8 v0, p2, 0x2

    invoke-static {p0, p1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint16Array([I[BI)V

    .line 415
    return-void
.end method

.method public static writeUint24(ILjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 246
    ushr-int/lit8 v0, p0, 0x10

    int-to-byte v0, v0

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 247
    ushr-int/lit8 v0, p0, 0x8

    int-to-byte v0, v0

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 248
    int-to-byte v0, p0

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 249
    return-void
.end method

.method public static writeUint24(I[BI)V
    .registers 5

    .prologue
    .line 253
    ushr-int/lit8 v0, p0, 0x10

    int-to-byte v0, v0

    aput-byte v0, p1, p2

    .line 254
    add-int/lit8 v0, p2, 0x1

    ushr-int/lit8 v1, p0, 0x8

    int-to-byte v1, v1

    aput-byte v1, p1, v0

    .line 255
    add-int/lit8 v0, p2, 0x2

    int-to-byte v1, p0

    aput-byte v1, p1, v0

    .line 256
    return-void
.end method

.method public static writeUint32(JLjava/io/OutputStream;)V
    .registers 5

    .prologue
    .line 261
    const/16 v0, 0x18

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 262
    const/16 v0, 0x10

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 263
    const/16 v0, 0x8

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 264
    long-to-int v0, p0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 265
    return-void
.end method

.method public static writeUint32(J[BI)V
    .registers 8

    .prologue
    .line 269
    const/16 v0, 0x18

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    aput-byte v0, p2, p3

    .line 270
    add-int/lit8 v0, p3, 0x1

    const/16 v1, 0x10

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 271
    add-int/lit8 v0, p3, 0x2

    const/16 v1, 0x8

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 272
    add-int/lit8 v0, p3, 0x3

    long-to-int v1, p0

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 273
    return-void
.end method

.method public static writeUint48(JLjava/io/OutputStream;)V
    .registers 5

    .prologue
    .line 278
    const/16 v0, 0x28

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 279
    const/16 v0, 0x20

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 280
    const/16 v0, 0x18

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 281
    const/16 v0, 0x10

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 282
    const/16 v0, 0x8

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 283
    long-to-int v0, p0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 284
    return-void
.end method

.method public static writeUint48(J[BI)V
    .registers 8

    .prologue
    .line 288
    const/16 v0, 0x28

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    aput-byte v0, p2, p3

    .line 289
    add-int/lit8 v0, p3, 0x1

    const/16 v1, 0x20

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 290
    add-int/lit8 v0, p3, 0x2

    const/16 v1, 0x18

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 291
    add-int/lit8 v0, p3, 0x3

    const/16 v1, 0x10

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 292
    add-int/lit8 v0, p3, 0x4

    const/16 v1, 0x8

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 293
    add-int/lit8 v0, p3, 0x5

    long-to-int v1, p0

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 294
    return-void
.end method

.method public static writeUint64(JLjava/io/OutputStream;)V
    .registers 5

    .prologue
    .line 299
    const/16 v0, 0x38

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 300
    const/16 v0, 0x30

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 301
    const/16 v0, 0x28

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 302
    const/16 v0, 0x20

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 303
    const/16 v0, 0x18

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 304
    const/16 v0, 0x10

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 305
    const/16 v0, 0x8

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 306
    long-to-int v0, p0

    int-to-byte v0, v0

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 307
    return-void
.end method

.method public static writeUint64(J[BI)V
    .registers 8

    .prologue
    .line 311
    const/16 v0, 0x38

    ushr-long v0, p0, v0

    long-to-int v0, v0

    int-to-byte v0, v0

    aput-byte v0, p2, p3

    .line 312
    add-int/lit8 v0, p3, 0x1

    const/16 v1, 0x30

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 313
    add-int/lit8 v0, p3, 0x2

    const/16 v1, 0x28

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 314
    add-int/lit8 v0, p3, 0x3

    const/16 v1, 0x20

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 315
    add-int/lit8 v0, p3, 0x4

    const/16 v1, 0x18

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 316
    add-int/lit8 v0, p3, 0x5

    const/16 v1, 0x10

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 317
    add-int/lit8 v0, p3, 0x6

    const/16 v1, 0x8

    ushr-long v2, p0, v1

    long-to-int v1, v2

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 318
    add-int/lit8 v0, p3, 0x7

    long-to-int v1, p0

    int-to-byte v1, v1

    aput-byte v1, p2, v0

    .line 319
    return-void
.end method

.method public static writeUint8(ILjava/io/OutputStream;)V
    .registers 2

    .prologue
    .line 217
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write(I)V

    .line 218
    return-void
.end method

.method public static writeUint8(I[BI)V
    .registers 4

    .prologue
    .line 227
    int-to-byte v0, p0

    aput-byte v0, p1, p2

    .line 228
    return-void
.end method

.method public static writeUint8(SLjava/io/OutputStream;)V
    .registers 2

    .prologue
    .line 211
    invoke-virtual {p1, p0}, Ljava/io/OutputStream;->write(I)V

    .line 212
    return-void
.end method

.method public static writeUint8(S[BI)V
    .registers 4

    .prologue
    .line 222
    int-to-byte v0, p0

    aput-byte v0, p1, p2

    .line 223
    return-void
.end method

.method public static writeUint8Array([SLjava/io/OutputStream;)V
    .registers 4

    .prologue
    .line 348
    const/4 v0, 0x0

    :goto_1
    array-length v1, p0

    if-ge v0, v1, :cond_c

    .line 350
    aget-short v1, p0, v0

    invoke-static {v1, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8(SLjava/io/OutputStream;)V

    .line 348
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 352
    :cond_c
    return-void
.end method

.method public static writeUint8Array([S[BI)V
    .registers 5

    .prologue
    .line 357
    const/4 v0, 0x0

    :goto_1
    array-length v1, p0

    if-ge v0, v1, :cond_e

    .line 359
    aget-short v1, p0, v0

    invoke-static {v1, p1, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8(S[BI)V

    .line 360
    add-int/lit8 p2, p2, 0x1

    .line 357
    add-int/lit8 v0, v0, 0x1

    goto :goto_1

    .line 362
    :cond_e
    return-void
.end method

.method public static writeUint8ArrayWithUint8Length([SLjava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 367
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint8(I)V

    .line 368
    array-length v0, p0

    invoke-static {v0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8(ILjava/io/OutputStream;)V

    .line 369
    invoke-static {p0, p1}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8Array([SLjava/io/OutputStream;)V

    .line 370
    return-void
.end method

.method public static writeUint8ArrayWithUint8Length([S[BI)V
    .registers 4

    .prologue
    .line 375
    array-length v0, p0

    invoke-static {v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->checkUint8(I)V

    .line 376
    array-length v0, p0

    invoke-static {v0, p1, p2}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8(I[BI)V

    .line 377
    add-int/lit8 v0, p2, 0x1

    invoke-static {p0, p1, v0}, Lorg/spongycastle/crypto/tls/TlsUtils;->writeUint8Array([S[BI)V

    .line 378
    return-void
.end method

.method public static writeVersion(Lorg/spongycastle/crypto/tls/ProtocolVersion;Ljava/io/OutputStream;)V
    .registers 3

    .prologue
    .line 699
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getMajorVersion()I

    move-result v0

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 700
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getMinorVersion()I

    move-result v0

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 701
    return-void
.end method

.method public static writeVersion(Lorg/spongycastle/crypto/tls/ProtocolVersion;[BI)V
    .registers 5

    .prologue
    .line 705
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getMajorVersion()I

    move-result v0

    int-to-byte v0, v0

    aput-byte v0, p1, p2

    .line 706
    add-int/lit8 v0, p2, 0x1

    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/ProtocolVersion;->getMinorVersion()I

    move-result v1

    int-to-byte v1, v1

    aput-byte v1, p1, v0

    .line 707
    return-void
.end method