final class sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation implements sun.security.ssl.SSLKeyDerivation
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation
  super_class: java.lang.Object
{
  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>(sun.security.ssl.HandshakeContext, java.security.PrivateKey, java.security.PublicKey);
    descriptor: (Lsun/security/ssl/HandshakeContext;Ljava/security/PrivateKey;Ljava/security/PublicKey;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation this
        start local 1 // sun.security.ssl.HandshakeContext context
        start local 2 // java.security.PrivateKey localPrivateKey
        start local 3 // java.security.PublicKey peerPublicKey
         0: .line 405
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 408
            aload 0 /* this */
            aload 1 /* context */
            putfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
         2: .line 409
            aload 0 /* this */
            aload 2 /* localPrivateKey */
            putfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
         3: .line 410
            aload 0 /* this */
            aload 3 /* peerPublicKey */
            putfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
         4: .line 411
            return
        end local 3 // java.security.PublicKey peerPublicKey
        end local 2 // java.security.PrivateKey localPrivateKey
        end local 1 // sun.security.ssl.HandshakeContext context
        end local 0 // sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0             this  Lsun/security/ssl/ECDHKeyExchange$ECDHEKAKeyDerivation;
            0    5     1          context  Lsun/security/ssl/HandshakeContext;
            0    5     2  localPrivateKey  Ljava/security/PrivateKey;
            0    5     3    peerPublicKey  Ljava/security/PublicKey;
    MethodParameters:
                 Name  Flags
      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.ECDHKeyExchange$ECDHEKAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 416
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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 417
            aload 0 /* this */
            aload 1 /* algorithm */
            aload 2 /* params */
            invokevirtual sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.t12DeriveKey:(Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)Ljavax/crypto/SecretKey;
            areturn
         2: .line 419
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* algorithm */
            aload 2 /* params */
            invokevirtual sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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.ECDHKeyExchange$ECDHEKAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Lsun/security/ssl/ECDHKeyExchange$ECDHEKAKeyDerivation;
            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.ECDHKeyExchange$ECDHEKAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 426
            ldc "ECDH"
            invokestatic sun.security.ssl.JsseJce.getKeyAgreement:(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
            astore 3 /* ka */
        start local 3 // javax.crypto.KeyAgreement ka
         1: .line 427
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
            invokevirtual javax.crypto.KeyAgreement.init:(Ljava/security/Key;)V
         2: .line 428
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
            iconst_1
            invokevirtual javax.crypto.KeyAgreement.doPhase:(Ljava/security/Key;Z)Ljava/security/Key;
            pop
         3: .line 430
            aload 3 /* ka */
            ldc "TlsPremasterSecret"
            invokevirtual javax.crypto.KeyAgreement.generateSecret:(Ljava/lang/String;)Ljavax/crypto/SecretKey;
         4: .line 429
            astore 4 /* preMasterSecret */
        start local 4 // javax.crypto.SecretKey preMasterSecret
         5: .line 434
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            getfield sun.security.ssl.HandshakeContext.negotiatedProtocol:Lsun/security/ssl/ProtocolVersion;
         6: .line 433
            invokestatic sun.security.ssl.SSLMasterKeyDerivation.valueOf:(Lsun/security/ssl/ProtocolVersion;)Lsun/security/ssl/SSLMasterKeyDerivation;
         7: .line 432
            astore 5 /* mskd */
        start local 5 // sun.security.ssl.SSLMasterKeyDerivation mskd
         8: .line 435
            aload 5 /* mskd */
            ifnonnull 14
         9: .line 437
            new javax.net.ssl.SSLHandshakeException
            dup
        10: .line 438
            new java.lang.StringBuilder
            dup
            ldc "No expected master key derivation for protocol: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        11: .line 439
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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 438
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        13: .line 437
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 441
      StackMap locals: javax.crypto.KeyAgreement javax.crypto.SecretKey sun.security.ssl.SSLMasterKeyDerivation
      StackMap stack:
            aload 5 /* mskd */
        15: .line 442
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.context:Lsun/security/ssl/HandshakeContext;
            aload 4 /* preMasterSecret */
        16: .line 441
            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 443
            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 444
      StackMap locals: sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation java.lang.String java.security.spec.AlgorithmParameterSpec
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* gse */
        start local 3 // java.security.GeneralSecurityException gse
        20: .line 445
            new javax.net.ssl.SSLHandshakeException
            dup
        21: .line 446
            ldc "Could not generate secret"
        22: .line 445
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
        23: .line 446
            aload 3 /* gse */
            invokevirtual javax.net.ssl.SSLHandshakeException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
        24: .line 445
            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.ECDHKeyExchange$ECDHEKAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   25     0             this  Lsun/security/ssl/ECDHKeyExchange$ECDHEKAKeyDerivation;
            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.ECDHKeyExchange$ECDHEKAKeyDerivation this
        start local 1 // java.lang.String algorithm
        start local 2 // java.security.spec.AlgorithmParameterSpec params
         0: .line 453
            ldc "ECDH"
            invokestatic sun.security.ssl.JsseJce.getKeyAgreement:(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;
            astore 3 /* ka */
        start local 3 // javax.crypto.KeyAgreement ka
         1: .line 454
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.localPrivateKey:Ljava/security/PrivateKey;
            invokevirtual javax.crypto.KeyAgreement.init:(Ljava/security/Key;)V
         2: .line 455
            aload 3 /* ka */
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.peerPublicKey:Ljava/security/PublicKey;
            iconst_1
            invokevirtual javax.crypto.KeyAgreement.doPhase:(Ljava/security/Key;Z)Ljava/security/Key;
            pop
         3: .line 457
            aload 3 /* ka */
            ldc "TlsPremasterSecret"
            invokevirtual javax.crypto.KeyAgreement.generateSecret:(Ljava/lang/String;)Ljavax/crypto/SecretKey;
         4: .line 456
            astore 4 /* sharedSecret */
        start local 4 // javax.crypto.SecretKey sharedSecret
         5: .line 459
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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 460
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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 461
            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 462
            aload 6 /* kd */
            ifnonnull 15
         9: .line 465
            aload 5 /* hashAlg */
            getfield sun.security.ssl.CipherSuite$HashAlg.hashLength:I
            newarray 8
            astore 8 /* zeros */
        start local 8 // byte[] zeros
        10: .line 467
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 8 /* zeros */
            ldc "TlsPreSharedSecret"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
        11: .line 466
            astore 9 /* ikm */
        start local 9 // javax.crypto.spec.SecretKeySpec ikm
        12: .line 469
            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 468
            astore 10 /* earlySecret */
        start local 10 // javax.crypto.SecretKey earlySecret
        14: .line 470
            new sun.security.ssl.SSLSecretDerivation
            dup
            aload 0 /* this */
            getfield sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation.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 474
      StackMap locals: sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation 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 477
            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 478
      StackMap locals: sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation java.lang.String java.security.spec.AlgorithmParameterSpec
      StackMap stack: java.security.GeneralSecurityException
            astore 3 /* gse */
        start local 3 // java.security.GeneralSecurityException gse
        19: .line 479
            new javax.net.ssl.SSLHandshakeException
            dup
        20: .line 480
            ldc "Could not generate secret"
        21: .line 479
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
        22: .line 480
            aload 3 /* gse */
            invokevirtual javax.net.ssl.SSLHandshakeException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
        23: .line 479
            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.ECDHKeyExchange$ECDHEKAKeyDerivation this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   24     0          this  Lsun/security/ssl/ECDHKeyExchange$ECDHEKAKeyDerivation;
            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: "ECDHKeyExchange.java"
NestHost: sun.security.ssl.ECDHKeyExchange
InnerClasses:
  final HashAlg = sun.security.ssl.CipherSuite$HashAlg of sun.security.ssl.CipherSuite
  private final ECDHEKAKeyDerivation = sun.security.ssl.ECDHKeyExchange$ECDHEKAKeyDerivation of sun.security.ssl.ECDHKeyExchange