public final class com.sun.crypto.provider.TlsPrfGenerator 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.TlsPrfGenerator
  super_class: javax.crypto.KeyGeneratorSpi
{
  private static final byte[] B0;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_MASTER_SECRET;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_EXTENDED_MASTER_SECRET;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_KEY_EXPANSION;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_CLIENT_WRITE_KEY;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_SERVER_WRITE_KEY;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  static final byte[] LABEL_IV_BLOCK;
    descriptor: [B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private static final byte[] HMAC_ipad;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final byte[] HMAC_opad;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static final byte[][] SSL3_CONST;
    descriptor: [[B
    flags: (0x0018) ACC_STATIC, ACC_FINAL

  private static final java.lang.String MSG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "TlsPrfGenerator must be initialized using a TlsPrfParameterSpec"

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

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 49
            iconst_0
            newarray 8
            putstatic com.sun.crypto.provider.TlsPrfGenerator.B0:[B
         1: .line 52
            bipush 13
            newarray 8
            dup
            iconst_0
            bipush 109
            bastore
            dup
            iconst_1
            bipush 97
            bastore
            dup
            iconst_2
            bipush 115
            bastore
            dup
            iconst_3
            bipush 116
            bastore
            dup
            iconst_4
            bipush 101
            bastore
            dup
            iconst_5
            bipush 114
            bastore
            dup
            bipush 6
            bipush 32
            bastore
            dup
            bipush 7
            bipush 115
            bastore
            dup
            bipush 8
            bipush 101
            bastore
            dup
            bipush 9
            bipush 99
            bastore
            dup
            bipush 10
            bipush 114
            bastore
            dup
            bipush 11
            bipush 101
            bastore
            dup
            bipush 12
            bipush 116
            bastore
         2: .line 51
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_MASTER_SECRET:[B
         3: .line 56
            bipush 22
            newarray 8
            dup
            iconst_0
            bipush 101
            bastore
            dup
            iconst_1
            bipush 120
            bastore
            dup
            iconst_2
            bipush 116
            bastore
            dup
            iconst_3
            bipush 101
            bastore
            dup
            iconst_4
            bipush 110
            bastore
            dup
            iconst_5
            bipush 100
            bastore
            dup
            bipush 6
            bipush 101
            bastore
            dup
            bipush 7
            bipush 100
            bastore
            dup
            bipush 8
            bipush 32
            bastore
            dup
            bipush 9
            bipush 109
            bastore
            dup
            bipush 10
            bipush 97
            bastore
            dup
            bipush 11
            bipush 115
            bastore
            dup
            bipush 12
            bipush 116
            bastore
            dup
            bipush 13
         4: .line 57
            bipush 101
            bastore
            dup
            bipush 14
            bipush 114
            bastore
            dup
            bipush 15
            bipush 32
            bastore
            dup
            bipush 16
            bipush 115
            bastore
            dup
            bipush 17
            bipush 101
            bastore
            dup
            bipush 18
            bipush 99
            bastore
            dup
            bipush 19
            bipush 114
            bastore
            dup
            bipush 20
            bipush 101
            bastore
            dup
            bipush 21
            bipush 116
            bastore
         5: .line 54
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_EXTENDED_MASTER_SECRET:[B
         6: .line 60
            bipush 13
            newarray 8
            dup
            iconst_0
            bipush 107
            bastore
            dup
            iconst_1
            bipush 101
            bastore
            dup
            iconst_2
            bipush 121
            bastore
            dup
            iconst_3
            bipush 32
            bastore
            dup
            iconst_4
            bipush 101
            bastore
            dup
            iconst_5
            bipush 120
            bastore
            dup
            bipush 6
            bipush 112
            bastore
            dup
            bipush 7
            bipush 97
            bastore
            dup
            bipush 8
            bipush 110
            bastore
            dup
            bipush 9
            bipush 115
            bastore
            dup
            bipush 10
            bipush 105
            bastore
            dup
            bipush 11
            bipush 111
            bastore
            dup
            bipush 12
            bipush 110
            bastore
         7: .line 59
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_KEY_EXPANSION:[B
         8: .line 63
            bipush 16
            newarray 8
            dup
            iconst_0
            bipush 99
            bastore
            dup
            iconst_1
            bipush 108
            bastore
            dup
            iconst_2
            bipush 105
            bastore
            dup
            iconst_3
            bipush 101
            bastore
            dup
            iconst_4
            bipush 110
            bastore
            dup
            iconst_5
            bipush 116
            bastore
            dup
            bipush 6
            bipush 32
            bastore
            dup
            bipush 7
            bipush 119
            bastore
            dup
            bipush 8
            bipush 114
            bastore
            dup
            bipush 9
            bipush 105
            bastore
            dup
            bipush 10
            bipush 116
            bastore
            dup
            bipush 11
            bipush 101
            bastore
            dup
            bipush 12
            bipush 32
            bastore
            dup
            bipush 13
         9: .line 64
            bipush 107
            bastore
            dup
            bipush 14
            bipush 101
            bastore
            dup
            bipush 15
            bipush 121
            bastore
        10: .line 62
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_CLIENT_WRITE_KEY:[B
        11: .line 67
            bipush 16
            newarray 8
            dup
            iconst_0
            bipush 115
            bastore
            dup
            iconst_1
            bipush 101
            bastore
            dup
            iconst_2
            bipush 114
            bastore
            dup
            iconst_3
            bipush 118
            bastore
            dup
            iconst_4
            bipush 101
            bastore
            dup
            iconst_5
            bipush 114
            bastore
            dup
            bipush 6
            bipush 32
            bastore
            dup
            bipush 7
            bipush 119
            bastore
            dup
            bipush 8
            bipush 114
            bastore
            dup
            bipush 9
            bipush 105
            bastore
            dup
            bipush 10
            bipush 116
            bastore
            dup
            bipush 11
            bipush 101
            bastore
            dup
            bipush 12
            bipush 32
            bastore
            dup
            bipush 13
        12: .line 68
            bipush 107
            bastore
            dup
            bipush 14
            bipush 101
            bastore
            dup
            bipush 15
            bipush 121
            bastore
        13: .line 66
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_SERVER_WRITE_KEY:[B
        14: .line 71
            bipush 8
            newarray 8
            dup
            iconst_0
            bipush 73
            bastore
            dup
            iconst_1
            bipush 86
            bastore
            dup
            iconst_2
            bipush 32
            bastore
            dup
            iconst_3
            bipush 98
            bastore
            dup
            iconst_4
            bipush 108
            bastore
            dup
            iconst_5
            bipush 111
            bastore
            dup
            bipush 6
            bipush 99
            bastore
            dup
            bipush 7
            bipush 107
            bastore
        15: .line 70
            putstatic com.sun.crypto.provider.TlsPrfGenerator.LABEL_IV_BLOCK:[B
        16: .line 77
            bipush 54
            bipush 64
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.genPad:(BI)[B
            putstatic com.sun.crypto.provider.TlsPrfGenerator.HMAC_ipad:[B
        17: .line 78
            bipush 92
            bipush 64
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.genPad:(BI)[B
            putstatic com.sun.crypto.provider.TlsPrfGenerator.HMAC_opad:[B
        18: .line 81
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.genConst:()[[B
            putstatic com.sun.crypto.provider.TlsPrfGenerator.SSL3_CONST:[[B
        19: .line 112
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static byte[] genPad(byte, int);
    descriptor: (BI)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // byte b
        start local 1 // int count
         0: .line 84
            iload 1 /* count */
            newarray 8
            astore 2 /* padding */
        start local 2 // byte[] padding
         1: .line 85
            aload 2 /* padding */
            iload 0 /* b */
            invokestatic java.util.Arrays.fill:([BB)V
         2: .line 86
            aload 2 /* padding */
            areturn
        end local 2 // byte[] padding
        end local 1 // int count
        end local 0 // byte b
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0        b  B
            0    3     1    count  I
            1    3     2  padding  [B
    MethodParameters:
       Name  Flags
      b      
      count  

  static byte[] concat(byte[], byte[]);
    descriptor: ([B[B)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // byte[] b1
        start local 1 // byte[] b2
         0: .line 90
            aload 0 /* b1 */
            arraylength
            istore 2 /* n1 */
        start local 2 // int n1
         1: .line 91
            aload 1 /* b2 */
            arraylength
            istore 3 /* n2 */
        start local 3 // int n2
         2: .line 92
            iload 2 /* n1 */
            iload 3 /* n2 */
            iadd
            newarray 8
            astore 4 /* b */
        start local 4 // byte[] b
         3: .line 93
            aload 0 /* b1 */
            iconst_0
            aload 4 /* b */
            iconst_0
            iload 2 /* n1 */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 94
            aload 1 /* b2 */
            iconst_0
            aload 4 /* b */
            iload 2 /* n1 */
            iload 3 /* n2 */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 95
            aload 4 /* b */
            areturn
        end local 4 // byte[] b
        end local 3 // int n2
        end local 2 // int n1
        end local 1 // byte[] b2
        end local 0 // byte[] b1
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0    b1  [B
            0    6     1    b2  [B
            1    6     2    n1  I
            2    6     3    n2  I
            3    6     4     b  [B
    MethodParameters:
      Name  Flags
      b1    
      b2    

  private static byte[][] genConst();
    descriptor: ()[[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=0
         0: .line 99
            bipush 10
            istore 0 /* n */
        start local 0 // int n
         1: .line 100
            iload 0 /* n */
            anewarray byte[]
            astore 1 /* arr */
        start local 1 // byte[][] arr
         2: .line 101
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         3: goto 8
         4: .line 102
      StackMap locals: int byte[][] int
      StackMap stack:
            iload 2 /* i */
            iconst_1
            iadd
            newarray 8
            astore 3 /* b */
        start local 3 // byte[] b
         5: .line 103
            aload 3 /* b */
            bipush 65
            iload 2 /* i */
            iadd
            i2b
            invokestatic java.util.Arrays.fill:([BB)V
         6: .line 104
            aload 1 /* arr */
            iload 2 /* i */
            aload 3 /* b */
            aastore
        end local 3 // byte[] b
         7: .line 101
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 2 /* i */
            iload 0 /* n */
            if_icmplt 4
        end local 2 // int i
         9: .line 106
            aload 1 /* arr */
            areturn
        end local 1 // byte[][] arr
        end local 0 // int n
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1   10     0     n  I
            2   10     1   arr  [[B
            3    9     2     i  I
            5    7     3     b  [B

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

  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.TlsPrfGenerator this
        start local 1 // java.security.SecureRandom random
         0: .line 120
            new java.security.InvalidParameterException
            dup
            ldc "TlsPrfGenerator must be initialized using a TlsPrfParameterSpec"
            invokespecial java.security.InvalidParameterException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.SecureRandom random
        end local 0 // com.sun.crypto.provider.TlsPrfGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lcom/sun/crypto/provider/TlsPrfGenerator;
            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=4, args_size=3
        start local 0 // com.sun.crypto.provider.TlsPrfGenerator this
        start local 1 // java.security.spec.AlgorithmParameterSpec params
        start local 2 // java.security.SecureRandom random
         0: .line 125
            aload 1 /* params */
            instanceof sun.security.internal.spec.TlsPrfParameterSpec
            ifne 2
         1: .line 126
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "TlsPrfGenerator must be initialized using a TlsPrfParameterSpec"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 128
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* params */
            checkcast sun.security.internal.spec.TlsPrfParameterSpec
            putfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
         3: .line 129
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            invokevirtual sun.security.internal.spec.TlsPrfParameterSpec.getSecret:()Ljavax/crypto/SecretKey;
            astore 3 /* key */
        start local 3 // javax.crypto.SecretKey key
         4: .line 130
            aload 3 /* key */
            ifnull 8
            ldc "RAW"
            aload 3 /* key */
            invokeinterface javax.crypto.SecretKey.getFormat:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
         5: .line 131
            new java.security.InvalidAlgorithmParameterException
            dup
         6: .line 132
            ldc "Key encoding format must be RAW"
         7: .line 131
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 134
      StackMap locals: javax.crypto.SecretKey
      StackMap stack:
            return
        end local 3 // javax.crypto.SecretKey key
        end local 2 // java.security.SecureRandom random
        end local 1 // java.security.spec.AlgorithmParameterSpec params
        end local 0 // com.sun.crypto.provider.TlsPrfGenerator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Lcom/sun/crypto/provider/TlsPrfGenerator;
            0    9     1  params  Ljava/security/spec/AlgorithmParameterSpec;
            0    9     2  random  Ljava/security/SecureRandom;
            4    9     3     key  Ljavax/crypto/SecretKey;
    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.TlsPrfGenerator this
        start local 1 // int keysize
        start local 2 // java.security.SecureRandom random
         0: .line 137
            new java.security.InvalidParameterException
            dup
            ldc "TlsPrfGenerator must be initialized using a TlsPrfParameterSpec"
            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.TlsPrfGenerator this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/sun/crypto/provider/TlsPrfGenerator;
            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=4, locals=6, args_size=1
        start local 0 // com.sun.crypto.provider.TlsPrfGenerator this
         0: .line 141
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            ifnonnull 4
         1: .line 142
            new java.lang.IllegalStateException
            dup
         2: .line 143
            ldc "TlsPrfGenerator must be initialized"
         3: .line 142
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 145
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            invokevirtual sun.security.internal.spec.TlsPrfParameterSpec.getSecret:()Ljavax/crypto/SecretKey;
            astore 1 /* key */
        start local 1 // javax.crypto.SecretKey key
         5: .line 146
            aload 1 /* key */
            ifnonnull 6
            aconst_null
            goto 7
      StackMap locals: javax.crypto.SecretKey
      StackMap stack:
         6: aload 1 /* key */
            invokeinterface javax.crypto.SecretKey.getEncoded:()[B
      StackMap locals:
      StackMap stack: byte[]
         7: astore 2 /* secret */
        start local 2 // byte[] secret
         8: .line 148
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            invokevirtual sun.security.internal.spec.TlsPrfParameterSpec.getLabel:()Ljava/lang/String;
            ldc "UTF8"
            invokevirtual java.lang.String.getBytes:(Ljava/lang/String;)[B
            astore 3 /* labelBytes */
        start local 3 // byte[] labelBytes
         9: .line 149
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            invokevirtual sun.security.internal.spec.TlsPrfParameterSpec.getOutputLength:()I
            istore 4 /* n */
        start local 4 // int n
        10: .line 150
            aload 2 /* secret */
            aload 3 /* labelBytes */
            aload 0 /* this */
            getfield com.sun.crypto.provider.TlsPrfGenerator.spec:Lsun/security/internal/spec/TlsPrfParameterSpec;
            invokevirtual sun.security.internal.spec.TlsPrfParameterSpec.getSeed:()[B
            iload 4 /* n */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doPRF:([B[B[BI)[B
            astore 5 /* prfBytes */
        start local 5 // byte[] prfBytes
        11: .line 151
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 5 /* prfBytes */
            ldc "TlsPrf"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
        12: areturn
        end local 5 // byte[] prfBytes
        end local 4 // int n
        end local 3 // byte[] labelBytes
        13: .line 152
      StackMap locals: com.sun.crypto.provider.TlsPrfGenerator javax.crypto.SecretKey byte[]
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* e */
        start local 3 // java.security.GeneralSecurityException e
        14: .line 153
            new java.security.ProviderException
            dup
            ldc "Could not generate PRF"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.GeneralSecurityException e
        15: .line 154
      StackMap locals:
      StackMap stack: java.io.UnsupportedEncodingException
            astore 3 /* e */
        start local 3 // java.io.UnsupportedEncodingException e
        16: .line 155
            new java.security.ProviderException
            dup
            ldc "Could not generate PRF"
            aload 3 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.UnsupportedEncodingException e
        end local 2 // byte[] secret
        end local 1 // javax.crypto.SecretKey key
        end local 0 // com.sun.crypto.provider.TlsPrfGenerator this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   17     0        this  Lcom/sun/crypto/provider/TlsPrfGenerator;
            5   17     1         key  Ljavax/crypto/SecretKey;
            8   17     2      secret  [B
            9   13     3  labelBytes  [B
           10   13     4           n  I
           11   13     5    prfBytes  [B
           14   15     3           e  Ljava/security/GeneralSecurityException;
           16   17     3           e  Ljava/io/UnsupportedEncodingException;
      Exception table:
        from    to  target  type
           8    12      13  Class java.security.GeneralSecurityException
           8    12      15  Class java.io.UnsupportedEncodingException

  static final byte[] doPRF(byte[], byte[], byte[], int);
    descriptor: ([B[B[BI)[B
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Code:
      stack=6, locals=6, args_size=4
        start local 0 // byte[] secret
        start local 1 // byte[] labelBytes
        start local 2 // byte[] seed
        start local 3 // int outputLength
         0: .line 161
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 4 /* md5 */
        start local 4 // java.security.MessageDigest md5
         1: .line 162
            ldc "SHA1"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 5 /* sha */
        start local 5 // java.security.MessageDigest sha
         2: .line 163
            aload 0 /* secret */
            aload 1 /* labelBytes */
            aload 2 /* seed */
            iload 3 /* outputLength */
            aload 4 /* md5 */
            aload 5 /* sha */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.doPRF:([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
            areturn
        end local 5 // java.security.MessageDigest sha
        end local 4 // java.security.MessageDigest md5
        end local 3 // int outputLength
        end local 2 // byte[] seed
        end local 1 // byte[] labelBytes
        end local 0 // byte[] secret
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0        secret  [B
            0    3     1    labelBytes  [B
            0    3     2          seed  [B
            0    3     3  outputLength  I
            1    3     4           md5  Ljava/security/MessageDigest;
            2    3     5           sha  Ljava/security/MessageDigest;
    Exceptions:
      throws java.security.NoSuchAlgorithmException, java.security.DigestException
    MethodParameters:
              Name  Flags
      secret        
      labelBytes    
      seed          
      outputLength  

  static final byte[] doPRF(byte[], byte[], byte[], int, java.security.MessageDigest, java.security.MessageDigest);
    descriptor: ([B[B[BILjava/security/MessageDigest;Ljava/security/MessageDigest;)[B
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Code:
      stack=8, locals=11, args_size=6
        start local 0 // byte[] secret
        start local 1 // byte[] labelBytes
        start local 2 // byte[] seed
        start local 3 // int outputLength
        start local 4 // java.security.MessageDigest md5
        start local 5 // java.security.MessageDigest sha
         0: .line 182
            aload 0 /* secret */
            ifnonnull 2
         1: .line 183
            getstatic com.sun.crypto.provider.TlsPrfGenerator.B0:[B
            astore 0 /* secret */
         2: .line 185
      StackMap locals:
      StackMap stack:
            aload 0 /* secret */
            arraylength
            iconst_1
            ishr
            istore 6 /* off */
        start local 6 // int off
         3: .line 186
            iload 6 /* off */
            aload 0 /* secret */
            arraylength
            iconst_1
            iand
            iadd
            istore 7 /* seclen */
        start local 7 // int seclen
         4: .line 188
            aload 0 /* secret */
            astore 8 /* secKey */
        start local 8 // byte[] secKey
         5: .line 189
            iload 7 /* seclen */
            istore 9 /* keyLen */
        start local 9 // int keyLen
         6: .line 190
            iload 3 /* outputLength */
            newarray 8
            astore 10 /* output */
        start local 10 // byte[] output
         7: .line 194
            iload 7 /* seclen */
            bipush 64
            if_icmple 11
         8: .line 195
            aload 4 /* md5 */
            aload 0 /* secret */
            iconst_0
            iload 7 /* seclen */
            invokevirtual java.security.MessageDigest.update:([BII)V
         9: .line 196
            aload 4 /* md5 */
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 8 /* secKey */
        10: .line 197
            aload 8 /* secKey */
            arraylength
            istore 9 /* keyLen */
        11: .line 199
      StackMap locals: byte[] byte[] byte[] int java.security.MessageDigest java.security.MessageDigest int int byte[] int byte[]
      StackMap stack:
            aload 4 /* md5 */
            bipush 16
            aload 8 /* secKey */
            iconst_0
            iload 9 /* keyLen */
            aload 1 /* labelBytes */
            aload 2 /* seed */
            aload 10 /* output */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.expand:(Ljava/security/MessageDigest;I[BII[B[B[B)V
        12: .line 203
            iload 7 /* seclen */
            bipush 64
            if_icmple 17
        13: .line 204
            aload 5 /* sha */
            aload 0 /* secret */
            iload 6 /* off */
            iload 7 /* seclen */
            invokevirtual java.security.MessageDigest.update:([BII)V
        14: .line 205
            aload 5 /* sha */
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 8 /* secKey */
        15: .line 206
            aload 8 /* secKey */
            arraylength
            istore 9 /* keyLen */
        16: .line 207
            iconst_0
            istore 6 /* off */
        17: .line 209
      StackMap locals:
      StackMap stack:
            aload 5 /* sha */
            bipush 20
            aload 8 /* secKey */
            iload 6 /* off */
            iload 9 /* keyLen */
            aload 1 /* labelBytes */
            aload 2 /* seed */
            aload 10 /* output */
            invokestatic com.sun.crypto.provider.TlsPrfGenerator.expand:(Ljava/security/MessageDigest;I[BII[B[B[B)V
        18: .line 211
            aload 10 /* output */
            areturn
        end local 10 // byte[] output
        end local 9 // int keyLen
        end local 8 // byte[] secKey
        end local 7 // int seclen
        end local 6 // int off
        end local 5 // java.security.MessageDigest sha
        end local 4 // java.security.MessageDigest md5
        end local 3 // int outputLength
        end local 2 // byte[] seed
        end local 1 // byte[] labelBytes
        end local 0 // byte[] secret
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   19     0        secret  [B
            0   19     1    labelBytes  [B
            0   19     2          seed  [B
            0   19     3  outputLength  I
            0   19     4           md5  Ljava/security/MessageDigest;
            0   19     5           sha  Ljava/security/MessageDigest;
            3   19     6           off  I
            4   19     7        seclen  I
            5   19     8        secKey  [B
            6   19     9        keyLen  I
            7   19    10        output  [B
    Exceptions:
      throws java.security.DigestException
    MethodParameters:
              Name  Flags
      secret        
      labelBytes    
      seed          
      outputLength  
      md5           
      sha           

  private static final void expand(java.security.MessageDigest, int, byte[], int, int, byte[], byte[], byte[]);
    descriptor: (Ljava/security/MessageDigest;I[BII[B[B[B)V
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Code:
      stack=6, locals=16, args_size=8
        start local 0 // java.security.MessageDigest digest
        start local 1 // int hmacSize
        start local 2 // byte[] secret
        start local 3 // int secOff
        start local 4 // int secLen
        start local 5 // byte[] label
        start local 6 // byte[] seed
        start local 7 // byte[] output
         0: .line 231
            getstatic com.sun.crypto.provider.TlsPrfGenerator.HMAC_ipad:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            astore 8 /* pad1 */
        start local 8 // byte[] pad1
         1: .line 232
            getstatic com.sun.crypto.provider.TlsPrfGenerator.HMAC_opad:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            astore 9 /* pad2 */
        start local 9 // byte[] pad2
         2: .line 234
            iconst_0
            istore 10 /* i */
        start local 10 // int i
         3: goto 7
         4: .line 235
      StackMap locals: byte[] byte[] int
      StackMap stack:
            aload 8 /* pad1 */
            iload 10 /* i */
            dup2
            baload
            aload 2 /* secret */
            iload 10 /* i */
            iload 3 /* secOff */
            iadd
            baload
            ixor
            i2b
            bastore
         5: .line 236
            aload 9 /* pad2 */
            iload 10 /* i */
            dup2
            baload
            aload 2 /* secret */
            iload 10 /* i */
            iload 3 /* secOff */
            iadd
            baload
            ixor
            i2b
            bastore
         6: .line 234
            iinc 10 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 10 /* i */
            iload 4 /* secLen */
            if_icmplt 4
        end local 10 // int i
         8: .line 239
            iload 1 /* hmacSize */
            newarray 8
            astore 10 /* tmp */
        start local 10 // byte[] tmp
         9: .line 240
            aconst_null
            astore 11 /* aBytes */
        start local 11 // byte[] aBytes
        10: .line 253
            aload 7 /* output */
            arraylength
            istore 12 /* remaining */
        start local 12 // int remaining
        11: .line 254
            iconst_0
            istore 13 /* ofs */
        start local 13 // int ofs
        12: .line 255
            goto 40
        13: .line 260
      StackMap locals: java.security.MessageDigest int byte[] int int byte[] byte[] byte[] byte[] byte[] byte[] byte[] int int
      StackMap stack:
            aload 0 /* digest */
            aload 8 /* pad1 */
            invokevirtual java.security.MessageDigest.update:([B)V
        14: .line 261
            aload 11 /* aBytes */
            ifnonnull 18
        15: .line 262
            aload 0 /* digest */
            aload 5 /* label */
            invokevirtual java.security.MessageDigest.update:([B)V
        16: .line 263
            aload 0 /* digest */
            aload 6 /* seed */
            invokevirtual java.security.MessageDigest.update:([B)V
        17: .line 264
            goto 19
        18: .line 265
      StackMap locals:
      StackMap stack:
            aload 0 /* digest */
            aload 11 /* aBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
        19: .line 267
      StackMap locals:
      StackMap stack:
            aload 0 /* digest */
            aload 10 /* tmp */
            iconst_0
            iload 1 /* hmacSize */
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        20: .line 270
            aload 0 /* digest */
            aload 9 /* pad2 */
            invokevirtual java.security.MessageDigest.update:([B)V
        21: .line 271
            aload 0 /* digest */
            aload 10 /* tmp */
            invokevirtual java.security.MessageDigest.update:([B)V
        22: .line 272
            aload 11 /* aBytes */
            ifnonnull 24
        23: .line 273
            iload 1 /* hmacSize */
            newarray 8
            astore 11 /* aBytes */
        24: .line 275
      StackMap locals:
      StackMap stack:
            aload 0 /* digest */
            aload 11 /* aBytes */
            iconst_0
            iload 1 /* hmacSize */
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        25: .line 281
            aload 0 /* digest */
            aload 8 /* pad1 */
            invokevirtual java.security.MessageDigest.update:([B)V
        26: .line 282
            aload 0 /* digest */
            aload 11 /* aBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
        27: .line 283
            aload 0 /* digest */
            aload 5 /* label */
            invokevirtual java.security.MessageDigest.update:([B)V
        28: .line 284
            aload 0 /* digest */
            aload 6 /* seed */
            invokevirtual java.security.MessageDigest.update:([B)V
        29: .line 285
            aload 0 /* digest */
            aload 10 /* tmp */
            iconst_0
            iload 1 /* hmacSize */
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        30: .line 288
            aload 0 /* digest */
            aload 9 /* pad2 */
            invokevirtual java.security.MessageDigest.update:([B)V
        31: .line 289
            aload 0 /* digest */
            aload 10 /* tmp */
            invokevirtual java.security.MessageDigest.update:([B)V
        32: .line 290
            aload 0 /* digest */
            aload 10 /* tmp */
            iconst_0
            iload 1 /* hmacSize */
            invokevirtual java.security.MessageDigest.digest:([BII)I
            pop
        33: .line 292
            iload 1 /* hmacSize */
            iload 12 /* remaining */
            invokestatic java.lang.Math.min:(II)I
            istore 14 /* k */
        start local 14 // int k
        34: .line 293
            iconst_0
            istore 15 /* i */
        start local 15 // int i
        35: goto 38
        36: .line 294
      StackMap locals: int int
      StackMap stack:
            aload 7 /* output */
            iload 13 /* ofs */
            iinc 13 /* ofs */ 1
            dup2
            baload
            aload 10 /* tmp */
            iload 15 /* i */
            baload
            ixor
            i2b
            bastore
        37: .line 293
            iinc 15 /* i */ 1
      StackMap locals:
      StackMap stack:
        38: iload 15 /* i */
            iload 14 /* k */
            if_icmplt 36
        end local 15 // int i
        39: .line 296
            iload 12 /* remaining */
            iload 14 /* k */
            isub
            istore 12 /* remaining */
        end local 14 // int k
        40: .line 255
      StackMap locals:
      StackMap stack:
            iload 12 /* remaining */
            ifgt 13
        41: .line 299
            return
        end local 13 // int ofs
        end local 12 // int remaining
        end local 11 // byte[] aBytes
        end local 10 // byte[] tmp
        end local 9 // byte[] pad2
        end local 8 // byte[] pad1
        end local 7 // byte[] output
        end local 6 // byte[] seed
        end local 5 // byte[] label
        end local 4 // int secLen
        end local 3 // int secOff
        end local 2 // byte[] secret
        end local 1 // int hmacSize
        end local 0 // java.security.MessageDigest digest
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   42     0     digest  Ljava/security/MessageDigest;
            0   42     1   hmacSize  I
            0   42     2     secret  [B
            0   42     3     secOff  I
            0   42     4     secLen  I
            0   42     5      label  [B
            0   42     6       seed  [B
            0   42     7     output  [B
            1   42     8       pad1  [B
            2   42     9       pad2  [B
            3    8    10          i  I
            9   42    10        tmp  [B
           10   42    11     aBytes  [B
           11   42    12  remaining  I
           12   42    13        ofs  I
           34   40    14          k  I
           35   39    15          i  I
    Exceptions:
      throws java.security.DigestException
    MethodParameters:
          Name  Flags
      digest    
      hmacSize  
      secret    
      secOff    
      secLen    
      label     
      seed      
      output    
}
SourceFile: "TlsPrfGenerator.java"