public class sun.security.ssl.KAKeyDerivation implements sun.security.ssl.SSLKeyDerivation
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: sun.security.ssl.KAKeyDerivation
  super_class: java.lang.Object
{
  private final java.lang.String algorithmName;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final sun.security.ssl.HandshakeContext context;
    descriptor: Lsun/security/ssl/HandshakeContext;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.security.PrivateKey localPrivateKey;
    descriptor: Ljava/security/PrivateKey;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.security.PublicKey peerPublicKey;
    descriptor: Ljava/security/PublicKey;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  void <init>(java.lang.String, sun.security.ssl.HandshakeContext, java.security.PrivateKey, java.security.PublicKey);
    descriptor: (Ljava/lang/String;Lsun/security/ssl/HandshakeContext;Ljava/security/PrivateKey;Ljava/security/PublicKey;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // sun.security.ssl.KAKeyDerivation this
        start local 1 // java.lang.String algorithmName
        start local 2 // sun.security.ssl.HandshakeContext context
        start local 3 // java.security.PrivateKey localPrivateKey
        start local 4 // java.security.PublicKey peerPublicKey
         0: .line 47
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 51
            aload 0 /* this */
            aload 1 /* algorithmName */
            putfield sun.security.ssl.KAKeyDerivation.algorithmName:Ljava/lang/String;
         2: .line 52
            aload 0 /* this */
            aload 2 /* context */
            putfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
         3: .line 53
            aload 0 /* this */
            aload 3 /* localPrivateKey */
            putfield sun.security.ssl.KAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
         4: .line 54
            aload 0 /* this */
            aload 4 /* peerPublicKey */
            putfield sun.security.ssl.KAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
         5: .line 55
            return
        end local 4 // java.security.PublicKey peerPublicKey
        end local 3 // java.security.PrivateKey localPrivateKey
        end local 2 // sun.security.ssl.HandshakeContext context
        end local 1 // java.lang.String algorithmName
        end local 0 // sun.security.ssl.KAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0             this  Lsun/security/ssl/KAKeyDerivation;
            0    6     1    algorithmName  Ljava/lang/String;
            0    6     2          context  Lsun/security/ssl/HandshakeContext;
            0    6     3  localPrivateKey  Ljava/security/PrivateKey;
            0    6     4    peerPublicKey  Ljava/security/PublicKey;
    MethodParameters:
                 Name  Flags
      algorithmName    
      context          
      localPrivateKey  
      peerPublicKey    

  public javax.crypto.SecretKey deriveKey(java.lang.String, java.security.spec.AlgorithmParameterSpec);
    descriptor: (Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // sun.security.ssl.KAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 60
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.negotiatedProtocol:Lsun/security/ssl/ProtocolVersion;
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS13PlusSpec:()Z
            ifne 2
         1: .line 61
            aload 0 /* this */
            aload 1 /* algorithm */
            aload 2 /* params */
            invokevirtual sun.security.ssl.KAKeyDerivation.t12DeriveKey:(Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
            areturn
         2: .line 63
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* algorithm */
            aload 2 /* params */
            invokevirtual sun.security.ssl.KAKeyDerivation.t13DeriveKey:(Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
            areturn
        end local 2 // java.security.spec.AlgorithmParameterSpec params
        end local 1 // java.lang.String algorithm
        end local 0 // sun.security.ssl.KAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Lsun/security/ssl/KAKeyDerivation;
            0    3     1  algorithm  Ljava/lang/String;
            0    3     2     params  Ljava/security/spec/AlgorithmParameterSpec;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      algorithm  
      params     

  private javax.crypto.SecretKey t12DeriveKey(java.lang.String, java.security.spec.AlgorithmParameterSpec);
    descriptor: (Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // sun.security.ssl.KAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 73
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.algorithmName:Ljava/lang/String;
            invokestatic javax.crypto.KeyAgreement.getInstance:(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
            astore 3 /* ka */
        start local 3 // javax.crypto.KeyAgreement ka
         1: .line 74
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
            invokevirtual javax.crypto.KeyAgreement.init:(Ljava/security/Key;)V
         2: .line 75
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
            iconst_1
            invokevirtual javax.crypto.KeyAgreement.doPhase:(Ljava/security/Key;Z)Ljava/security/Key;
            pop
         3: .line 77
            aload 3 /* ka */
            ldc "TlsPremasterSecret"
            invokevirtual javax.crypto.KeyAgreement.generateSecret:(Ljava/lang/String;)Ljavax/crypto/SecretKey;
         4: .line 76
            astore 4 /* preMasterSecret */
        start local 4 // javax.crypto.SecretKey preMasterSecret
         5: .line 80
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.negotiatedProtocol:Lsun/security/ssl/ProtocolVersion;
         6: .line 79
            invokestatic sun.security.ssl.SSLMasterKeyDerivation.valueOf:(Lsun/security/ssl/ProtocolVersion;)Lsun/security/ssl/SSLMasterKeyDerivation;
         7: .line 78
            astore 5 /* mskd */
        start local 5 // sun.security.ssl.SSLMasterKeyDerivation mskd
         8: .line 81
            aload 5 /* mskd */
            ifnonnull 14
         9: .line 83
            new javax.net.ssl.SSLHandshakeException
            dup
        10: .line 84
            new java.lang.StringBuilder
            dup
            ldc "No expected master key derivation for protocol: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        11: .line 85
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.negotiatedProtocol:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        12: .line 84
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        13: .line 83
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 87
      StackMap locals: javax.crypto.KeyAgreement javax.crypto.SecretKey sun.security.ssl.SSLMasterKeyDerivation
      StackMap stack:
            aload 5 /* mskd */
        15: .line 88
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            aload 4 /* preMasterSecret */
        16: .line 87
            invokevirtual sun.security.ssl.SSLMasterKeyDerivation.createKeyDerivation:(Lsun/security/ssl/HandshakeContext;Ljavax/crypto/SecretKey;)Lsun/security/ssl/SSLKeyDerivation;
            astore 6 /* kd */
        start local 6 // sun.security.ssl.SSLKeyDerivation kd
        17: .line 89
            aload 6 /* kd */
            ldc "MasterSecret"
            aload 2 /* params */
            invokeinterface sun.security.ssl.SSLKeyDerivation.deriveKey:(Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
        18: areturn
        end local 6 // sun.security.ssl.SSLKeyDerivation kd
        end local 5 // sun.security.ssl.SSLMasterKeyDerivation mskd
        end local 4 // javax.crypto.SecretKey preMasterSecret
        end local 3 // javax.crypto.KeyAgreement ka
        19: .line 90
      StackMap locals: sun.security.ssl.KAKeyDerivation java.lang.String java.security.spec.AlgorithmParameterSpec
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* gse */
        start local 3 // java.security.GeneralSecurityException gse
        20: .line 91
            new javax.net.ssl.SSLHandshakeException
            dup
        21: .line 92
            ldc "Could not generate secret"
        22: .line 91
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
        23: .line 92
            aload 3 /* gse */
            invokevirtual javax.net.ssl.SSLHandshakeException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
        24: .line 91
            checkcast javax.net.ssl.SSLHandshakeException
            athrow
        end local 3 // java.security.GeneralSecurityException gse
        end local 2 // java.security.spec.AlgorithmParameterSpec params
        end local 1 // java.lang.String algorithm
        end local 0 // sun.security.ssl.KAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   25     0             this  Lsun/security/ssl/KAKeyDerivation;
            0   25     1        algorithm  Ljava/lang/String;
            0   25     2           params  Ljava/security/spec/AlgorithmParameterSpec;
            1   19     3               ka  Ljavax/crypto/KeyAgreement;
            5   19     4  preMasterSecret  Ljavax/crypto/SecretKey;
            8   19     5             mskd  Lsun/security/ssl/SSLMasterKeyDerivation;
           17   19     6               kd  Lsun/security/ssl/SSLKeyDerivation;
           20   25     3              gse  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0    18      19  Class java.security.GeneralSecurityException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      algorithm  
      params     

  private javax.crypto.SecretKey t13DeriveKey(java.lang.String, java.security.spec.AlgorithmParameterSpec);
    descriptor: (Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=11, args_size=3
        start local 0 // sun.security.ssl.KAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 102
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.algorithmName:Ljava/lang/String;
            invokestatic javax.crypto.KeyAgreement.getInstance:(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
            astore 3 /* ka */
        start local 3 // javax.crypto.KeyAgreement ka
         1: .line 103
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
            invokevirtual javax.crypto.KeyAgreement.init:(Ljava/security/Key;)V
         2: .line 104
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
            iconst_1
            invokevirtual javax.crypto.KeyAgreement.doPhase:(Ljava/security/Key;Z)Ljava/security/Key;
            pop
         3: .line 106
            aload 3 /* ka */
            ldc "TlsPremasterSecret"
            invokevirtual javax.crypto.KeyAgreement.generateSecret:(Ljava/lang/String;)Ljavax/crypto/SecretKey;
         4: .line 105
            astore 4 /* sharedSecret */
        start local 4 // javax.crypto.SecretKey sharedSecret
         5: .line 108
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.negotiatedCipherSuite:Lsun/security/ssl/CipherSuite;
            getfield sun.security.ssl.CipherSuite.hashAlg:Lsun/security/ssl/CipherSuite$HashAlg;
            astore 5 /* hashAlg */
        start local 5 // sun.security.ssl.CipherSuite$HashAlg hashAlg
         6: .line 109
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.handshakeKeyDerivation:Lsun/security/ssl/SSLKeyDerivation;
            astore 6 /* kd */
        start local 6 // sun.security.ssl.SSLKeyDerivation kd
         7: .line 110
            new sun.security.ssl.HKDF
            dup
            aload 5 /* hashAlg */
            getfield sun.security.ssl.CipherSuite$HashAlg.name:Ljava/lang/String;
            invokespecial sun.security.ssl.HKDF.<init>:(Ljava/lang/String;)V
            astore 7 /* hkdf */
        start local 7 // sun.security.ssl.HKDF hkdf
         8: .line 111
            aload 6 /* kd */
            ifnonnull 15
         9: .line 114
            aload 5 /* hashAlg */
            getfield sun.security.ssl.CipherSuite$HashAlg.hashLength:I
            newarray 8
            astore 8 /* zeros */
        start local 8 // byte[] zeros
        10: .line 116
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 8 /* zeros */
            ldc "TlsPreSharedSecret"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
        11: .line 115
            astore 9 /* ikm */
        start local 9 // javax.crypto.spec.SecretKeySpec ikm
        12: .line 118
            aload 7 /* hkdf */
            aload 8 /* zeros */
            aload 9 /* ikm */
            ldc "TlsEarlySecret"
            invokevirtual sun.security.ssl.HKDF.extract:([BLjavax/crypto/SecretKey;Ljava/lang/String;)Ljavax/crypto/SecretKey;
        13: .line 117
            astore 10 /* earlySecret */
        start local 10 // javax.crypto.SecretKey earlySecret
        14: .line 119
            new sun.security.ssl.SSLSecretDerivation
            dup
            aload 0 /* this */
            getfield sun.security.ssl.KAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            aload 10 /* earlySecret */
            invokespecial sun.security.ssl.SSLSecretDerivation.<init>:(Lsun/security/ssl/HandshakeContext;Ljavax/crypto/SecretKey;)V
            astore 6 /* kd */
        end local 10 // javax.crypto.SecretKey earlySecret
        end local 9 // javax.crypto.spec.SecretKeySpec ikm
        end local 8 // byte[] zeros
        15: .line 123
      StackMap locals: sun.security.ssl.KAKeyDerivation java.lang.String java.security.spec.AlgorithmParameterSpec javax.crypto.KeyAgreement javax.crypto.SecretKey sun.security.ssl.CipherSuite$HashAlg sun.security.ssl.SSLKeyDerivation sun.security.ssl.HKDF
      StackMap stack:
            aload 6 /* kd */
            ldc "TlsSaltSecret"
            aconst_null
            invokeinterface sun.security.ssl.SSLKeyDerivation.deriveKey:(Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
            astore 8 /* saltSecret */
        start local 8 // javax.crypto.SecretKey saltSecret
        16: .line 126
            aload 7 /* hkdf */
            aload 8 /* saltSecret */
            aload 4 /* sharedSecret */
            aload 1 /* algorithm */
            invokevirtual sun.security.ssl.HKDF.extract:(Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;Ljava/lang/String;)Ljavax/crypto/SecretKey;
        17: areturn
        end local 8 // javax.crypto.SecretKey saltSecret
        end local 7 // sun.security.ssl.HKDF hkdf
        end local 6 // sun.security.ssl.SSLKeyDerivation kd
        end local 5 // sun.security.ssl.CipherSuite$HashAlg hashAlg
        end local 4 // javax.crypto.SecretKey sharedSecret
        end local 3 // javax.crypto.KeyAgreement ka
        18: .line 127
      StackMap locals: sun.security.ssl.KAKeyDerivation java.lang.String java.security.spec.AlgorithmParameterSpec
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* gse */
        start local 3 // java.security.GeneralSecurityException gse
        19: .line 128
            new javax.net.ssl.SSLHandshakeException
            dup
        20: .line 129
            ldc "Could not generate secret"
        21: .line 128
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
        22: .line 129
            aload 3 /* gse */
            invokevirtual javax.net.ssl.SSLHandshakeException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
        23: .line 128
            checkcast javax.net.ssl.SSLHandshakeException
            athrow
        end local 3 // java.security.GeneralSecurityException gse
        end local 2 // java.security.spec.AlgorithmParameterSpec params
        end local 1 // java.lang.String algorithm
        end local 0 // sun.security.ssl.KAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   24     0          this  Lsun/security/ssl/KAKeyDerivation;
            0   24     1     algorithm  Ljava/lang/String;
            0   24     2        params  Ljava/security/spec/AlgorithmParameterSpec;
            1   18     3            ka  Ljavax/crypto/KeyAgreement;
            5   18     4  sharedSecret  Ljavax/crypto/SecretKey;
            6   18     5       hashAlg  Lsun/security/ssl/CipherSuite$HashAlg;
            7   18     6            kd  Lsun/security/ssl/SSLKeyDerivation;
            8   18     7          hkdf  Lsun/security/ssl/HKDF;
           10   15     8         zeros  [B
           12   15     9           ikm  Ljavax/crypto/spec/SecretKeySpec;
           14   15    10   earlySecret  Ljavax/crypto/SecretKey;
           16   18     8    saltSecret  Ljavax/crypto/SecretKey;
           19   24     3           gse  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0    17      18  Class java.security.GeneralSecurityException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      algorithm  
      params     
}
SourceFile: "KAKeyDerivation.java"
InnerClasses:
  final HashAlg = sun.security.ssl.CipherSuite$HashAlg of sun.security.ssl.CipherSuite