public final class com.sun.crypto.provider.TlsKeyMaterialGenerator extends javax.crypto.KeyGeneratorSpi
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.sun.crypto.provider.TlsKeyMaterialGenerator
  super_class: javax.crypto.KeyGeneratorSpi
{
  private static final java.lang.String MSG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "TlsKeyMaterialGenerator must be initialized using a TlsKeyMaterialParameterSpec"

  private sun.security.internal.spec.TlsKeyMaterialParameterSpec spec;
    descriptor: Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
    flags: (0x0002) ACC_PRIVATE

  private int protocolVersion;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
         0: .line 53
            aload 0 /* this */
            invokespecial javax.crypto.KeyGeneratorSpi.<init>:()V
         1: .line 54
            return
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;

  protected void engineInit(java.security.SecureRandom);
    descriptor: (Ljava/security/SecureRandom;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
        start local 1 // java.security.SecureRandom random
         0: .line 57
            new java.security.InvalidParameterException
            dup
            ldc "TlsKeyMaterialGenerator must be initialized using a TlsKeyMaterialParameterSpec"
            invokespecial java.security.InvalidParameterException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.SecureRandom random
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            0    1     1  random  Ljava/security/SecureRandom;
    MethodParameters:
        Name  Flags
      random  

  protected void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom);
    descriptor: (Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
        start local 1 // java.security.spec.AlgorithmParameterSpec params
        start local 2 // java.security.SecureRandom random
         0: .line 62
            aload 1 /* params */
            instanceof sun.security.internal.spec.TlsKeyMaterialParameterSpec
            ifne 2
         1: .line 63
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "TlsKeyMaterialGenerator must be initialized using a TlsKeyMaterialParameterSpec"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 65
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* params */
            checkcast sun.security.internal.spec.TlsKeyMaterialParameterSpec
            putfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
         3: .line 66
            ldc "RAW"
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getMasterSecret:()Ljavax/crypto/SecretKey;
            invokeinterface javax.crypto.SecretKey.getFormat:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 7
         4: .line 67
            new java.security.InvalidAlgorithmParameterException
            dup
         5: .line 68
            ldc "Key format must be RAW"
         6: .line 67
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 70
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getMajorVersion:()I
            bipush 8
            ishl
         8: .line 71
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getMinorVersion:()I
            ior
         9: .line 70
            putfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
        10: .line 72
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 768
            if_icmplt 11
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 771
            if_icmple 14
        11: .line 73
      StackMap locals:
      StackMap stack:
            new java.security.InvalidAlgorithmParameterException
            dup
        12: .line 74
            ldc "Only SSL 3.0, TLS 1.0/1.1/1.2 supported"
        13: .line 73
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 76
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.security.SecureRandom random
        end local 1 // java.security.spec.AlgorithmParameterSpec params
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   15     0    this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            0   15     1  params  Ljava/security/spec/AlgorithmParameterSpec;
            0   15     2  random  Ljava/security/SecureRandom;
    Exceptions:
      throws java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      params  
      random  

  protected void engineInit(int, java.security.SecureRandom);
    descriptor: (ILjava/security/SecureRandom;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
        start local 1 // int keysize
        start local 2 // java.security.SecureRandom random
         0: .line 79
            new java.security.InvalidParameterException
            dup
            ldc "TlsKeyMaterialGenerator must be initialized using a TlsKeyMaterialParameterSpec"
            invokespecial java.security.InvalidParameterException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.security.SecureRandom random
        end local 1 // int keysize
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            0    1     1  keysize  I
            0    1     2   random  Ljava/security/SecureRandom;
    MethodParameters:
         Name  Flags
      keysize  
      random   

  protected javax.crypto.SecretKey engineGenerateKey();
    descriptor: ()Ljavax/crypto/SecretKey;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
         0: .line 83
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            ifnonnull 4
         1: .line 84
            new java.lang.IllegalStateException
            dup
         2: .line 85
            ldc "TlsKeyMaterialGenerator must be initialized"
         3: .line 84
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 88
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.TlsKeyMaterialGenerator.engineGenerateKey0:()Ljavax/crypto/SecretKey;
         5: areturn
         6: .line 89
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 1 /* e */
        start local 1 // java.security.GeneralSecurityException e
         7: .line 90
            new java.security.ProviderException
            dup
            aload 1 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.security.GeneralSecurityException e
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            7    8     1     e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           4     5       6  Class java.security.GeneralSecurityException

  private javax.crypto.SecretKey engineGenerateKey0();
    descriptor: ()Ljavax/crypto/SecretKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=26, args_size=1
        start local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
         0: .line 95
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getMasterSecret:()Ljavax/crypto/SecretKey;
            invokeinterface javax.crypto.SecretKey.getEncoded:()[B
            astore 1 /* masterSecret */
        start local 1 // byte[] masterSecret
         1: .line 97
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getClientRandom:()[B
            astore 2 /* clientRandom */
        start local 2 // byte[] clientRandom
         2: .line 98
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getServerRandom:()[B
            astore 3 /* serverRandom */
        start local 3 // byte[] serverRandom
         3: .line 100
            aconst_null
            astore 4 /* clientMacKey */
        start local 4 // javax.crypto.SecretKey clientMacKey
         4: .line 101
            aconst_null
            astore 5 /* serverMacKey */
        start local 5 // javax.crypto.SecretKey serverMacKey
         5: .line 102
            aconst_null
            astore 6 /* clientCipherKey */
        start local 6 // javax.crypto.SecretKey clientCipherKey
         6: .line 103
            aconst_null
            astore 7 /* serverCipherKey */
        start local 7 // javax.crypto.SecretKey serverCipherKey
         7: .line 104
            aconst_null
            astore 8 /* clientIv */
        start local 8 // javax.crypto.spec.IvParameterSpec clientIv
         8: .line 105
            aconst_null
            astore 9 /* serverIv */
        start local 9 // javax.crypto.spec.IvParameterSpec serverIv
         9: .line 107
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getMacKeyLength:()I
            istore 10 /* macLength */
        start local 10 // int macLength
        10: .line 108
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getExpandedCipherKeyLength:()I
            istore 11 /* expandedKeyLength */
        start local 11 // int expandedKeyLength
        11: .line 109
            iload 11 /* expandedKeyLength */
            ifeq 12
            iconst_1
            goto 13
      StackMap locals: com.sun.crypto.provider.TlsKeyMaterialGenerator byte[] byte[] byte[] javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.spec.IvParameterSpec javax.crypto.spec.IvParameterSpec int int
      StackMap stack:
        12: iconst_0
      StackMap locals:
      StackMap stack: int
        13: istore 12 /* isExportable */
        start local 12 // boolean isExportable
        14: .line 110
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getCipherKeyLength:()I
            istore 13 /* keyLength */
        start local 13 // int keyLength
        15: .line 111
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getIvLength:()I
            istore 14 /* ivLength */
        start local 14 // int ivLength
        16: .line 113
            iload 10 /* macLength */
            iload 13 /* keyLength */
            iadd
        17: .line 114
            iload 12 /* isExportable */
            ifeq 18
            iconst_0
            goto 19
      StackMap locals: com.sun.crypto.provider.TlsKeyMaterialGenerator byte[] byte[] byte[] javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.spec.IvParameterSpec javax.crypto.spec.IvParameterSpec int int int int int
      StackMap stack: int
        18: iload 14 /* ivLength */
        19: .line 113
      StackMap locals: com.sun.crypto.provider.TlsKeyMaterialGenerator byte[] byte[] byte[] javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.spec.IvParameterSpec javax.crypto.spec.IvParameterSpec int int int int int
      StackMap stack: int int
            iadd
            istore 15 /* keyBlockLen */
        start local 15 // int keyBlockLen
        20: .line 115
            iload 15 /* keyBlockLen */
            iconst_1
            ishl
            istore 15 /* keyBlockLen */
        21: .line 116
            iload 15 /* keyBlockLen */
            newarray 8
            astore 16 /* keyBlock */
        start local 16 // byte[] keyBlock
        22: .line 119
            aconst_null
            astore 17 /* md5 */
        start local 17 // java.security.MessageDigest md5
        23: .line 120
            aconst_null
            astore 18 /* sha */
        start local 18 // java.security.MessageDigest sha
        24: .line 123
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 771
            if_icmplt 31
        25: .line 125
            aload 3 /* serverRandom */
            aload 2 /* clientRandom */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.concat:([B[B)[B
            astore 19 /* seed */
        start local 19 // byte[] seed
        26: .line 126
            aload 1 /* masterSecret */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_KEY_EXPANSION:[B
            aload 19 /* seed */
        27: .line 127
            iload 15 /* keyBlockLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getPRFHashAlg:()Ljava/lang/String;
        28: .line 128
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getPRFHashLength:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getPRFBlockSize:()I
        29: .line 126
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS12PRF:([B[B[BILjava/lang/String;II)[B
            astore 16 /* keyBlock */
        end local 19 // byte[] seed
        30: .line 129
            goto 61
      StackMap locals: com.sun.crypto.provider.TlsKeyMaterialGenerator byte[] byte[] byte[] javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.SecretKey javax.crypto.spec.IvParameterSpec javax.crypto.spec.IvParameterSpec int int int int int int byte[] java.security.MessageDigest java.security.MessageDigest
      StackMap stack:
        31: aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 769
            if_icmplt 39
        32: .line 131
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 17 /* md5 */
        33: .line 132
            ldc "SHA1"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 18 /* sha */
        34: .line 133
            aload 3 /* serverRandom */
            aload 2 /* clientRandom */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.concat:([B[B)[B
            astore 19 /* seed */
        start local 19 // byte[] seed
        35: .line 134
            aload 1 /* masterSecret */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_KEY_EXPANSION:[B
            aload 19 /* seed */
        36: .line 135
            iload 15 /* keyBlockLen */
            aload 17 /* md5 */
            aload 18 /* sha */
        37: .line 134
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 16 /* keyBlock */
        end local 19 // byte[] seed
        38: .line 136
            goto 61
        39: .line 138
      StackMap locals:
      StackMap stack:
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 17 /* md5 */
        40: .line 139
            ldc "SHA1"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 18 /* sha */
        41: .line 140
            iload 15 /* keyBlockLen */
            newarray 8
            astore 16 /* keyBlock */
        42: .line 142
            bipush 20
            newarray 8
            astore 19 /* tmp */
        start local 19 // byte[] tmp
        43: .line 143
            iconst_0
            istore 20 /* i */
        start local 20 // int i
        44: iload 15 /* keyBlockLen */
            istore 21 /* remaining */
        start local 21 // int remaining
        45: .line 144
            goto 59
        46: .line 147
      StackMap locals: byte[] int int
      StackMap stack:
            aload 18 /* sha */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.SSL3_CONST:[[B
            iload 20 /* i */
            aaload
            invokevirtual java.security.MessageDigest.update:([B)V
        47: .line 148
            aload 18 /* sha */
            aload 1 /* masterSecret */
            invokevirtual java.security.MessageDigest.update:([B)V
        48: .line 149
            aload 18 /* sha */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
        49: .line 150
            aload 18 /* sha */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
        50: .line 151
            aload 18 /* sha */
            aload 19 /* tmp */
            iconst_0
            bipush 20
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        51: .line 153
            aload 17 /* md5 */
            aload 1 /* masterSecret */
            invokevirtual java.security.MessageDigest.update:([B)V
        52: .line 154
            aload 17 /* md5 */
            aload 19 /* tmp */
            invokevirtual java.security.MessageDigest.update:([B)V
        53: .line 156
            iload 21 /* remaining */
            bipush 16
            if_icmplt 56
        54: .line 157
            aload 17 /* md5 */
            aload 16 /* keyBlock */
            iload 20 /* i */
            iconst_4
            ishl
            bipush 16
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        55: .line 158
            goto 58
        56: .line 159
      StackMap locals:
      StackMap stack:
            aload 17 /* md5 */
            aload 19 /* tmp */
            iconst_0
            bipush 16
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        57: .line 160
            aload 19 /* tmp */
            iconst_0
            aload 16 /* keyBlock */
            iload 20 /* i */
            iconst_4
            ishl
            iload 21 /* remaining */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        58: .line 145
      StackMap locals:
      StackMap stack:
            iinc 20 /* i */ 1
            iinc 21 /* remaining */ -16
        59: .line 144
      StackMap locals:
      StackMap stack:
            iload 21 /* remaining */
        60: .line 143
            ifgt 46
        end local 21 // int remaining
        end local 20 // int i
        end local 19 // byte[] tmp
        61: .line 167
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 19 /* ofs */
        start local 19 // int ofs
        62: .line 168
            iload 10 /* macLength */
            newarray 8
            astore 20 /* tmp */
        start local 20 // byte[] tmp
        63: .line 171
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 20 /* tmp */
            iconst_0
            iload 10 /* macLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        64: .line 172
            iload 19 /* ofs */
            iload 10 /* macLength */
            iadd
            istore 19 /* ofs */
        65: .line 173
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            ldc "Mac"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 4 /* clientMacKey */
        66: .line 175
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 20 /* tmp */
            iconst_0
            iload 10 /* macLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        67: .line 176
            iload 19 /* ofs */
            iload 10 /* macLength */
            iadd
            istore 19 /* ofs */
        68: .line 177
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            ldc "Mac"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 5 /* serverMacKey */
        69: .line 179
            iload 13 /* keyLength */
            ifne 71
        70: .line 180
            new sun.security.internal.spec.TlsKeyMaterialSpec
            dup
            aload 4 /* clientMacKey */
            aload 5 /* serverMacKey */
            invokespecial sun.security.internal.spec.TlsKeyMaterialSpec.<init>:(Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;)V
            areturn
        71: .line 183
      StackMap locals: int byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            invokevirtual sun.security.internal.spec.TlsKeyMaterialParameterSpec.getCipherAlgorithm:()Ljava/lang/String;
            astore 21 /* alg */
        start local 21 // java.lang.String alg
        72: .line 186
            iload 13 /* keyLength */
            newarray 8
            astore 22 /* clientKeyBytes */
        start local 22 // byte[] clientKeyBytes
        73: .line 187
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 22 /* clientKeyBytes */
            iconst_0
            iload 13 /* keyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        74: .line 188
            iload 19 /* ofs */
            iload 13 /* keyLength */
            iadd
            istore 19 /* ofs */
        75: .line 190
            iload 13 /* keyLength */
            newarray 8
            astore 23 /* serverKeyBytes */
        start local 23 // byte[] serverKeyBytes
        76: .line 191
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 23 /* serverKeyBytes */
            iconst_0
            iload 13 /* keyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        77: .line 192
            iload 19 /* ofs */
            iload 13 /* keyLength */
            iadd
            istore 19 /* ofs */
        78: .line 194
            iload 12 /* isExportable */
            ifne 90
        79: .line 196
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 22 /* clientKeyBytes */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
        80: .line 197
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 23 /* serverKeyBytes */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
        81: .line 200
            iload 14 /* ivLength */
            ifeq 135
        82: .line 201
            iload 14 /* ivLength */
            newarray 8
            astore 20 /* tmp */
        83: .line 203
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        84: .line 204
            iload 19 /* ofs */
            iload 14 /* ivLength */
            iadd
            istore 19 /* ofs */
        85: .line 205
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
        86: .line 207
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        87: .line 208
            iload 19 /* ofs */
            iload 14 /* ivLength */
            iadd
            istore 19 /* ofs */
        88: .line 209
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
        89: .line 211
            goto 135
        90: .line 214
      StackMap locals: java.lang.String byte[] byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 770
            if_icmplt 94
        91: .line 216
            new java.lang.RuntimeException
            dup
        92: .line 217
            ldc "Internal Error:  TLS 1.1+ should not be negotiatingexportable ciphersuites"
        93: .line 216
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        94: .line 219
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 769
            if_icmpne 114
        95: .line 221
            aload 2 /* clientRandom */
            aload 3 /* serverRandom */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.concat:([B[B)[B
            astore 24 /* seed */
        start local 24 // byte[] seed
        96: .line 223
            aload 22 /* clientKeyBytes */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_CLIENT_WRITE_KEY:[B
            aload 24 /* seed */
        97: .line 224
            iload 11 /* expandedKeyLength */
            aload 17 /* md5 */
            aload 18 /* sha */
        98: .line 223
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 20 /* tmp */
        99: .line 225
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
       100: .line 227
            aload 23 /* serverKeyBytes */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_SERVER_WRITE_KEY:[B
            aload 24 /* seed */
       101: .line 228
            iload 11 /* expandedKeyLength */
            aload 17 /* md5 */
            aload 18 /* sha */
       102: .line 227
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 20 /* tmp */
       103: .line 229
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
       104: .line 231
            iload 14 /* ivLength */
            ifeq 135
       105: .line 232
            iload 14 /* ivLength */
            newarray 8
            astore 20 /* tmp */
       106: .line 233
            aconst_null
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_IV_BLOCK:[B
            aload 24 /* seed */
       107: .line 234
            iload 14 /* ivLength */
            iconst_1
            ishl
            aload 17 /* md5 */
            aload 18 /* sha */
       108: .line 233
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 25 /* block */
        start local 25 // byte[] block
       109: .line 235
            aload 25 /* block */
            iconst_0
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       110: .line 236
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
       111: .line 237
            aload 25 /* block */
            iload 14 /* ivLength */
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       112: .line 238
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
        end local 25 // byte[] block
        end local 24 // byte[] seed
       113: .line 240
            goto 135
       114: .line 242
      StackMap locals:
      StackMap stack:
            iload 11 /* expandedKeyLength */
            newarray 8
            astore 20 /* tmp */
       115: .line 244
            aload 17 /* md5 */
            aload 22 /* clientKeyBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
       116: .line 245
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       117: .line 246
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       118: .line 247
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 20 /* tmp */
            iconst_0
            iload 11 /* expandedKeyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       119: .line 248
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
       120: .line 250
            aload 17 /* md5 */
            aload 23 /* serverKeyBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
       121: .line 251
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       122: .line 252
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       123: .line 253
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 20 /* tmp */
            iconst_0
            iload 11 /* expandedKeyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       124: .line 254
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            aload 21 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
       125: .line 256
            iload 14 /* ivLength */
            ifeq 135
       126: .line 257
            iload 14 /* ivLength */
            newarray 8
            astore 20 /* tmp */
       127: .line 259
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       128: .line 260
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       129: .line 261
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       130: .line 262
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
       131: .line 264
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       132: .line 265
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       133: .line 266
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 20 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       134: .line 267
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 20 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
       135: .line 272
      StackMap locals:
      StackMap stack:
            new sun.security.internal.spec.TlsKeyMaterialSpec
            dup
            aload 4 /* clientMacKey */
            aload 5 /* serverMacKey */
       136: .line 273
            aload 6 /* clientCipherKey */
            aload 8 /* clientIv */
            aload 7 /* serverCipherKey */
            aload 9 /* serverIv */
       137: .line 272
            invokespecial sun.security.internal.spec.TlsKeyMaterialSpec.<init>:(Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;Ljavax/crypto/spec/IvParameterSpec;Ljavax/crypto/SecretKey;Ljavax/crypto/spec/IvParameterSpec;)V
            areturn
        end local 23 // byte[] serverKeyBytes
        end local 22 // byte[] clientKeyBytes
        end local 21 // java.lang.String alg
        end local 20 // byte[] tmp
        end local 19 // int ofs
        end local 18 // java.security.MessageDigest sha
        end local 17 // java.security.MessageDigest md5
        end local 16 // byte[] keyBlock
        end local 15 // int keyBlockLen
        end local 14 // int ivLength
        end local 13 // int keyLength
        end local 12 // boolean isExportable
        end local 11 // int expandedKeyLength
        end local 10 // int macLength
        end local 9 // javax.crypto.spec.IvParameterSpec serverIv
        end local 8 // javax.crypto.spec.IvParameterSpec clientIv
        end local 7 // javax.crypto.SecretKey serverCipherKey
        end local 6 // javax.crypto.SecretKey clientCipherKey
        end local 5 // javax.crypto.SecretKey serverMacKey
        end local 4 // javax.crypto.SecretKey clientMacKey
        end local 3 // byte[] serverRandom
        end local 2 // byte[] clientRandom
        end local 1 // byte[] masterSecret
        end local 0 // com.sun.crypto.provider.TlsKeyMaterialGenerator this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0  138     0               this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            1  138     1       masterSecret  [B
            2  138     2       clientRandom  [B
            3  138     3       serverRandom  [B
            4  138     4       clientMacKey  Ljavax/crypto/SecretKey;
            5  138     5       serverMacKey  Ljavax/crypto/SecretKey;
            6  138     6    clientCipherKey  Ljavax/crypto/SecretKey;
            7  138     7    serverCipherKey  Ljavax/crypto/SecretKey;
            8  138     8           clientIv  Ljavax/crypto/spec/IvParameterSpec;
            9  138     9           serverIv  Ljavax/crypto/spec/IvParameterSpec;
           10  138    10          macLength  I
           11  138    11  expandedKeyLength  I
           14  138    12       isExportable  Z
           15  138    13          keyLength  I
           16  138    14           ivLength  I
           20  138    15        keyBlockLen  I
           22  138    16           keyBlock  [B
           23  138    17                md5  Ljava/security/MessageDigest;
           24  138    18                sha  Ljava/security/MessageDigest;
           26   30    19               seed  [B
           35   38    19               seed  [B
           43   61    19                tmp  [B
           44   61    20                  i  I
           45   61    21          remaining  I
           62  138    19                ofs  I
           63  138    20                tmp  [B
           72  138    21                alg  Ljava/lang/String;
           73  138    22     clientKeyBytes  [B
           76  138    23     serverKeyBytes  [B
           96  113    24               seed  [B
          109  113    25              block  [B
    Exceptions:
      throws java.security.GeneralSecurityException
}
SourceFile: "TlsKeyMaterialGenerator.java"