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 54
            aload 0 /* this */
            invokespecial javax.crypto.KeyGeneratorSpi.<init>:()V
         1: .line 55
            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 58
            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 64
            aload 1 /* params */
            instanceof sun.security.internal.spec.TlsKeyMaterialParameterSpec
            ifne 2
         1: .line 65
            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 67
      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 68
            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 69
            new java.security.InvalidAlgorithmParameterException
            dup
         5: .line 70
            ldc "Key format must be RAW"
         6: .line 69
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 72
      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 73
            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 72
            putfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
        10: .line 74
            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 75
      StackMap locals:
      StackMap stack:
            new java.security.InvalidAlgorithmParameterException
            dup
        12: .line 76
            ldc "Only SSL 3.0, TLS 1.0/1.1/1.2 supported"
        13: .line 75
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 78
      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 81
            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 85
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.spec:Lsun/security/internal/spec/TlsKeyMaterialParameterSpec;
            ifnonnull 4
         1: .line 86
            new java.lang.IllegalStateException
            dup
         2: .line 87
            ldc "TlsKeyMaterialGenerator must be initialized"
         3: .line 86
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 90
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.TlsKeyMaterialGenerator.engineGenerateKey0:()Ljavax/crypto/SecretKey;
         5: areturn
         6: .line 91
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 1 /* e */
        start local 1 // java.security.GeneralSecurityException e
         7: .line 92
            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 98
            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 100
            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 101
            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 103
            aconst_null
            astore 4 /* clientMacKey */
        start local 4 // javax.crypto.SecretKey clientMacKey
         4: .line 104
            aconst_null
            astore 5 /* serverMacKey */
        start local 5 // javax.crypto.SecretKey serverMacKey
         5: .line 105
            aconst_null
            astore 6 /* clientCipherKey */
        start local 6 // javax.crypto.SecretKey clientCipherKey
         6: .line 106
            aconst_null
            astore 7 /* serverCipherKey */
        start local 7 // javax.crypto.SecretKey serverCipherKey
         7: .line 107
            aconst_null
            astore 8 /* clientIv */
        start local 8 // javax.crypto.spec.IvParameterSpec clientIv
         8: .line 108
            aconst_null
            astore 9 /* serverIv */
        start local 9 // javax.crypto.spec.IvParameterSpec serverIv
         9: .line 110
            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 111
            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 112
            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 113
            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 114
            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 116
            iload 10 /* macLength */
            iload 13 /* keyLength */
            iadd
        17: .line 117
            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 116
      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 118
            iload 15 /* keyBlockLen */
            iconst_1
            ishl
            istore 15 /* keyBlockLen */
        21: .line 119
            iload 15 /* keyBlockLen */
            newarray 8
            astore 16 /* keyBlock */
        start local 16 // byte[] keyBlock
        22: .line 122
            aconst_null
            astore 17 /* md5 */
        start local 17 // java.security.MessageDigest md5
        23: .line 123
            aconst_null
            astore 18 /* sha */
        start local 18 // java.security.MessageDigest sha
        24: .line 126
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 771
            if_icmplt 31
        25: .line 128
            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 129
            aload 1 /* masterSecret */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_KEY_EXPANSION:[B
            aload 19 /* seed */
        27: .line 130
            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 131
            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 129
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS12PRF:([B[B[BILjava/lang/String;II)[B
            astore 16 /* keyBlock */
        end local 19 // byte[] seed
        30: .line 132
            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 134
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 17 /* md5 */
        33: .line 135
            ldc "SHA1"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 18 /* sha */
        34: .line 136
            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 137
            aload 1 /* masterSecret */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_KEY_EXPANSION:[B
            aload 19 /* seed */
        36: .line 138
            iload 15 /* keyBlockLen */
            aload 17 /* md5 */
            aload 18 /* sha */
        37: .line 137
            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 139
            goto 61
        39: .line 141
      StackMap locals:
      StackMap stack:
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 17 /* md5 */
        40: .line 142
            ldc "SHA1"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 18 /* sha */
        41: .line 143
            iload 15 /* keyBlockLen */
            newarray 8
            astore 16 /* keyBlock */
        42: .line 145
            bipush 20
            newarray 8
            astore 19 /* tmp */
        start local 19 // byte[] tmp
        43: .line 146
            iconst_0
            istore 20 /* i */
        start local 20 // int i
        44: iload 15 /* keyBlockLen */
            istore 21 /* remaining */
        start local 21 // int remaining
        45: .line 147
            goto 59
        46: .line 150
      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 151
            aload 18 /* sha */
            aload 1 /* masterSecret */
            invokevirtual java.security.MessageDigest.update:([B)V
        48: .line 152
            aload 18 /* sha */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
        49: .line 153
            aload 18 /* sha */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
        50: .line 154
            aload 18 /* sha */
            aload 19 /* tmp */
            iconst_0
            bipush 20
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        51: .line 156
            aload 17 /* md5 */
            aload 1 /* masterSecret */
            invokevirtual java.security.MessageDigest.update:([B)V
        52: .line 157
            aload 17 /* md5 */
            aload 19 /* tmp */
            invokevirtual java.security.MessageDigest.update:([B)V
        53: .line 159
            iload 21 /* remaining */
            bipush 16
            if_icmplt 56
        54: .line 160
            aload 17 /* md5 */
            aload 16 /* keyBlock */
            iload 20 /* i */
            iconst_4
            ishl
            bipush 16
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        55: .line 161
            goto 58
        56: .line 162
      StackMap locals:
      StackMap stack:
            aload 17 /* md5 */
            aload 19 /* tmp */
            iconst_0
            bipush 16
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        57: .line 163
            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 148
      StackMap locals:
      StackMap stack:
            iinc 20 /* i */ 1
            iinc 21 /* remaining */ -16
        59: .line 147
      StackMap locals:
      StackMap stack:
            iload 21 /* remaining */
        60: .line 146
            ifgt 46
        end local 21 // int remaining
        end local 20 // int i
        end local 19 // byte[] tmp
        61: .line 170
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 19 /* ofs */
        start local 19 // int ofs
        62: .line 171
            iload 10 /* macLength */
            ifeq 70
        63: .line 172
            iload 10 /* macLength */
            newarray 8
            astore 20 /* tmp */
        start local 20 // byte[] tmp
        64: .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
        65: .line 176
            iload 19 /* ofs */
            iload 10 /* macLength */
            iadd
            istore 19 /* ofs */
        66: .line 177
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            ldc "Mac"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 4 /* clientMacKey */
        67: .line 179
            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
        68: .line 180
            iload 19 /* ofs */
            iload 10 /* macLength */
            iadd
            istore 19 /* ofs */
        69: .line 181
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 20 /* tmp */
            ldc "Mac"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 5 /* serverMacKey */
        end local 20 // byte[] tmp
        70: .line 184
      StackMap locals: int
      StackMap stack:
            iload 13 /* keyLength */
            ifne 72
        71: .line 185
            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
        72: .line 188
      StackMap locals:
      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 20 /* alg */
        start local 20 // java.lang.String alg
        73: .line 191
            iload 13 /* keyLength */
            newarray 8
            astore 21 /* clientKeyBytes */
        start local 21 // byte[] clientKeyBytes
        74: .line 192
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 21 /* clientKeyBytes */
            iconst_0
            iload 13 /* keyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        75: .line 193
            iload 19 /* ofs */
            iload 13 /* keyLength */
            iadd
            istore 19 /* ofs */
        76: .line 195
            iload 13 /* keyLength */
            newarray 8
            astore 22 /* serverKeyBytes */
        start local 22 // byte[] serverKeyBytes
        77: .line 196
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 22 /* serverKeyBytes */
            iconst_0
            iload 13 /* keyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        78: .line 197
            iload 19 /* ofs */
            iload 13 /* keyLength */
            iadd
            istore 19 /* ofs */
        79: .line 199
            iload 12 /* isExportable */
            ifne 91
        80: .line 201
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 21 /* clientKeyBytes */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
        81: .line 202
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 22 /* serverKeyBytes */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
        82: .line 205
            iload 14 /* ivLength */
            ifeq 136
        83: .line 206
            iload 14 /* ivLength */
            newarray 8
            astore 23 /* tmp */
        start local 23 // byte[] tmp
        84: .line 208
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 23 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        85: .line 209
            iload 19 /* ofs */
            iload 14 /* ivLength */
            iadd
            istore 19 /* ofs */
        86: .line 210
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 23 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
        87: .line 212
            aload 16 /* keyBlock */
            iload 19 /* ofs */
            aload 23 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        88: .line 213
            iload 19 /* ofs */
            iload 14 /* ivLength */
            iadd
            istore 19 /* ofs */
        89: .line 214
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 23 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
        end local 23 // byte[] tmp
        90: .line 216
            goto 136
        91: .line 219
      StackMap locals: java.lang.String byte[] byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 770
            if_icmplt 95
        92: .line 221
            new java.lang.RuntimeException
            dup
        93: .line 222
            ldc "Internal Error:  TLS 1.1+ should not be negotiatingexportable ciphersuites"
        94: .line 221
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        95: .line 224
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsKeyMaterialGenerator.protocolVersion:I
            sipush 769
            if_icmpne 115
        96: .line 226
            aload 2 /* clientRandom */
            aload 3 /* serverRandom */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.concat:([B[B)[B
            astore 23 /* seed */
        start local 23 // byte[] seed
        97: .line 228
            aload 21 /* clientKeyBytes */
        98: .line 229
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_CLIENT_WRITE_KEY:[B
            aload 23 /* seed */
            iload 11 /* expandedKeyLength */
            aload 17 /* md5 */
            aload 18 /* sha */
        99: .line 228
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 24 /* tmp */
        start local 24 // byte[] tmp
       100: .line 230
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 24 /* tmp */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
       101: .line 232
            aload 22 /* serverKeyBytes */
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_SERVER_WRITE_KEY:[B
            aload 23 /* seed */
       102: .line 233
            iload 11 /* expandedKeyLength */
            aload 17 /* md5 */
            aload 18 /* sha */
       103: .line 232
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 24 /* tmp */
       104: .line 234
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 24 /* tmp */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
       105: .line 236
            iload 14 /* ivLength */
            ifeq 136
       106: .line 237
            iload 14 /* ivLength */
            newarray 8
            astore 24 /* tmp */
       107: .line 238
            aconst_null
            getstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_IV_BLOCK:[B
            aload 23 /* seed */
       108: .line 239
            iload 14 /* ivLength */
            iconst_1
            ishl
            aload 17 /* md5 */
            aload 18 /* sha */
       109: .line 238
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doTLS10PRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            astore 25 /* block */
        start local 25 // byte[] block
       110: .line 240
            aload 25 /* block */
            iconst_0
            aload 24 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       111: .line 241
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 24 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
       112: .line 242
            aload 25 /* block */
            iload 14 /* ivLength */
            aload 24 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       113: .line 243
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 24 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
        end local 25 // byte[] block
        end local 24 // byte[] tmp
        end local 23 // byte[] seed
       114: .line 245
            goto 136
       115: .line 247
      StackMap locals:
      StackMap stack:
            iload 11 /* expandedKeyLength */
            newarray 8
            astore 23 /* tmp */
        start local 23 // byte[] tmp
       116: .line 249
            aload 17 /* md5 */
            aload 21 /* clientKeyBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
       117: .line 250
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       118: .line 251
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       119: .line 252
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 23 /* tmp */
            iconst_0
            iload 11 /* expandedKeyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       120: .line 253
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 23 /* tmp */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 6 /* clientCipherKey */
       121: .line 255
            aload 17 /* md5 */
            aload 22 /* serverKeyBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
       122: .line 256
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       123: .line 257
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       124: .line 258
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 23 /* tmp */
            iconst_0
            iload 11 /* expandedKeyLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       125: .line 259
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 23 /* tmp */
            aload 20 /* alg */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 7 /* serverCipherKey */
       126: .line 261
            iload 14 /* ivLength */
            ifeq 136
       127: .line 262
            iload 14 /* ivLength */
            newarray 8
            astore 23 /* tmp */
       128: .line 264
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       129: .line 265
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       130: .line 266
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 23 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       131: .line 267
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 23 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 8 /* clientIv */
       132: .line 269
            aload 17 /* md5 */
            aload 3 /* serverRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       133: .line 270
            aload 17 /* md5 */
            aload 2 /* clientRandom */
            invokevirtual java.security.MessageDigest.update:([B)V
       134: .line 271
            aload 17 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            iconst_0
            aload 23 /* tmp */
            iconst_0
            iload 14 /* ivLength */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
       135: .line 272
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 23 /* tmp */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 9 /* serverIv */
        end local 23 // byte[] tmp
       136: .line 277
      StackMap locals:
      StackMap stack:
            new sun.security.internal.spec.TlsKeyMaterialSpec
            dup
            aload 4 /* clientMacKey */
            aload 5 /* serverMacKey */
       137: .line 278
            aload 6 /* clientCipherKey */
            aload 8 /* clientIv */
            aload 7 /* serverCipherKey */
            aload 9 /* serverIv */
       138: .line 277
            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 22 // byte[] serverKeyBytes
        end local 21 // byte[] clientKeyBytes
        end local 20 // java.lang.String alg
        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  139     0               this  Lcom/sun/crypto/provider/TlsKeyMaterialGenerator;
            1  139     1       masterSecret  [B
            2  139     2       clientRandom  [B
            3  139     3       serverRandom  [B
            4  139     4       clientMacKey  Ljavax/crypto/SecretKey;
            5  139     5       serverMacKey  Ljavax/crypto/SecretKey;
            6  139     6    clientCipherKey  Ljavax/crypto/SecretKey;
            7  139     7    serverCipherKey  Ljavax/crypto/SecretKey;
            8  139     8           clientIv  Ljavax/crypto/spec/IvParameterSpec;
            9  139     9           serverIv  Ljavax/crypto/spec/IvParameterSpec;
           10  139    10          macLength  I
           11  139    11  expandedKeyLength  I
           14  139    12       isExportable  Z
           15  139    13          keyLength  I
           16  139    14           ivLength  I
           20  139    15        keyBlockLen  I
           22  139    16           keyBlock  [B
           23  139    17                md5  Ljava/security/MessageDigest;
           24  139    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  139    19                ofs  I
           64   70    20                tmp  [B
           73  139    20                alg  Ljava/lang/String;
           74  139    21     clientKeyBytes  [B
           77  139    22     serverKeyBytes  [B
           84   90    23                tmp  [B
           97  114    23               seed  [B
          100  114    24                tmp  [B
          110  114    25              block  [B
          116  136    23                tmp  [B
    Exceptions:
      throws java.security.GeneralSecurityException
}
SourceFile: "TlsKeyMaterialGenerator.java"