final class sun.security.ssl.DHKeyExchange$DHEKAGenerator implements sun.security.ssl.SSLKeyAgreementGenerator
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.security.ssl.DHKeyExchange$DHEKAGenerator
  super_class: java.lang.Object
{
  private static sun.security.ssl.DHKeyExchange$DHEKAGenerator instance;
    descriptor: Lsun/security/ssl/DHKeyExchange$DHEKAGenerator;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 395
            new sun.security.ssl.DHKeyExchange$DHEKAGenerator
            dup
            invokespecial sun.security.ssl.DHKeyExchange$DHEKAGenerator.<init>:()V
            putstatic sun.security.ssl.DHKeyExchange$DHEKAGenerator.instance:Lsun/security/ssl/DHKeyExchange$DHEKAGenerator;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.ssl.DHKeyExchange$DHEKAGenerator this
         0: .line 398
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 400
            return
        end local 0 // sun.security.ssl.DHKeyExchange$DHEKAGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lsun/security/ssl/DHKeyExchange$DHEKAGenerator;

  public sun.security.ssl.SSLKeyDerivation createKeyDerivation(sun.security.ssl.HandshakeContext);
    descriptor: (Lsun/security/ssl/HandshakeContext;)Lsun/security/ssl/SSLKeyDerivation;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=12, args_size=2
        start local 0 // sun.security.ssl.DHKeyExchange$DHEKAGenerator this
        start local 1 // sun.security.ssl.HandshakeContext context
         0: .line 405
            aconst_null
            astore 2 /* dhePossession */
        start local 2 // sun.security.ssl.DHKeyExchange$DHEPossession dhePossession
         1: .line 406
            aconst_null
            astore 3 /* dheCredentials */
        start local 3 // sun.security.ssl.DHKeyExchange$DHECredentials dheCredentials
         2: .line 407
            aload 1 /* context */
            getfield sun.security.ssl.HandshakeContext.handshakePossessions:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 26
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials top java.util.Iterator
      StackMap stack:
         3: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast sun.security.ssl.SSLPossession
            astore 4 /* poss */
        start local 4 // sun.security.ssl.SSLPossession poss
         4: .line 408
            aload 4 /* poss */
            instanceof sun.security.ssl.DHKeyExchange$DHEPossession
            ifne 6
         5: .line 409
            goto 26
         6: .line 412
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials sun.security.ssl.SSLPossession java.util.Iterator
      StackMap stack:
            aload 4 /* poss */
            checkcast sun.security.ssl.DHKeyExchange$DHEPossession
            astore 6 /* dhep */
        start local 6 // sun.security.ssl.DHKeyExchange$DHEPossession dhep
         7: .line 413
            aload 1 /* context */
            getfield sun.security.ssl.HandshakeContext.handshakeCredentials:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 22
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials sun.security.ssl.SSLPossession java.util.Iterator sun.security.ssl.DHKeyExchange$DHEPossession top java.util.Iterator
      StackMap stack:
         8: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast sun.security.ssl.SSLCredentials
            astore 7 /* cred */
        start local 7 // sun.security.ssl.SSLCredentials cred
         9: .line 414
            aload 7 /* cred */
            instanceof sun.security.ssl.DHKeyExchange$DHECredentials
            ifne 11
        10: .line 415
            goto 22
        11: .line 417
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials sun.security.ssl.SSLPossession java.util.Iterator sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.SSLCredentials java.util.Iterator
      StackMap stack:
            aload 7 /* cred */
            checkcast sun.security.ssl.DHKeyExchange$DHECredentials
            astore 9 /* dhec */
        start local 9 // sun.security.ssl.DHKeyExchange$DHECredentials dhec
        12: .line 418
            aload 6 /* dhep */
            getfield sun.security.ssl.DHKeyExchange$DHEPossession.namedGroup:Lsun/security/ssl/SupportedGroupsExtension$NamedGroup;
            ifnull 16
            aload 9 /* dhec */
            getfield sun.security.ssl.DHKeyExchange$DHECredentials.namedGroup:Lsun/security/ssl/SupportedGroupsExtension$NamedGroup;
            ifnull 16
        13: .line 419
            aload 6 /* dhep */
            getfield sun.security.ssl.DHKeyExchange$DHEPossession.namedGroup:Lsun/security/ssl/SupportedGroupsExtension$NamedGroup;
            aload 9 /* dhec */
            getfield sun.security.ssl.DHKeyExchange$DHECredentials.namedGroup:Lsun/security/ssl/SupportedGroupsExtension$NamedGroup;
            invokevirtual sun.security.ssl.SupportedGroupsExtension$NamedGroup.equals:(Ljava/lang/Object;)Z
            ifeq 22
        14: .line 420
            aload 7 /* cred */
            checkcast sun.security.ssl.DHKeyExchange$DHECredentials
            astore 3 /* dheCredentials */
        15: .line 421
            goto 23
        16: .line 424
      StackMap locals: sun.security.ssl.DHKeyExchange$DHECredentials
      StackMap stack:
            aload 6 /* dhep */
            getfield sun.security.ssl.DHKeyExchange$DHEPossession.publicKey:Ljavax/crypto/interfaces/DHPublicKey;
            invokeinterface javax.crypto.interfaces.DHPublicKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            astore 10 /* pps */
        start local 10 // javax.crypto.spec.DHParameterSpec pps
        17: .line 425
            aload 9 /* dhec */
            getfield sun.security.ssl.DHKeyExchange$DHECredentials.popPublicKey:Ljavax/crypto/interfaces/DHPublicKey;
            invokeinterface javax.crypto.interfaces.DHPublicKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            astore 11 /* cps */
        start local 11 // javax.crypto.spec.DHParameterSpec cps
        18: .line 426
            aload 10 /* pps */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
            aload 11 /* cps */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
            ifeq 22
        19: .line 427
            aload 10 /* pps */
            invokevirtual javax.crypto.spec.DHParameterSpec.getG:()Ljava/math/BigInteger;
            aload 11 /* cps */
            invokevirtual javax.crypto.spec.DHParameterSpec.getG:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
            ifeq 22
        20: .line 428
            aload 7 /* cred */
            checkcast sun.security.ssl.DHKeyExchange$DHECredentials
            astore 3 /* dheCredentials */
        21: .line 429
            goto 23
        end local 11 // javax.crypto.spec.DHParameterSpec cps
        end local 10 // javax.crypto.spec.DHParameterSpec pps
        end local 9 // sun.security.ssl.DHKeyExchange$DHECredentials dhec
        end local 7 // sun.security.ssl.SSLCredentials cred
        22: .line 413
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials sun.security.ssl.SSLPossession java.util.Iterator sun.security.ssl.DHKeyExchange$DHEPossession top java.util.Iterator
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        23: .line 434
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials sun.security.ssl.SSLPossession java.util.Iterator sun.security.ssl.DHKeyExchange$DHEPossession
      StackMap stack:
            aload 3 /* dheCredentials */
            ifnull 26
        24: .line 435
            aload 4 /* poss */
            checkcast sun.security.ssl.DHKeyExchange$DHEPossession
            astore 2 /* dhePossession */
        25: .line 436
            goto 27
        end local 6 // sun.security.ssl.DHKeyExchange$DHEPossession dhep
        end local 4 // sun.security.ssl.SSLPossession poss
        26: .line 407
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        27: .line 440
      StackMap locals: sun.security.ssl.DHKeyExchange$DHEKAGenerator sun.security.ssl.HandshakeContext sun.security.ssl.DHKeyExchange$DHEPossession sun.security.ssl.DHKeyExchange$DHECredentials
      StackMap stack:
            aload 2 /* dhePossession */
            ifnull 28
            aload 3 /* dheCredentials */
            ifnonnull 31
        28: .line 441
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            getfield sun.security.ssl.HandshakeContext.conContext:Lsun/security/ssl/TransportContext;
            getstatic sun.security.ssl.Alert.HANDSHAKE_FAILURE:Lsun/security/ssl/Alert;
        29: .line 442
            ldc "No sufficient DHE key agreement parameters negotiated"
        30: .line 441
            invokevirtual sun.security.ssl.TransportContext.fatal:(Lsun/security/ssl/Alert;Ljava/lang/String;)Ljavax/net/ssl/SSLException;
            athrow
        31: .line 445
      StackMap locals:
      StackMap stack:
            new sun.security.ssl.DHKeyExchange$DHEKAGenerator$DHEKAKeyDerivation
            dup
            aload 1 /* context */
        32: .line 446
            aload 2 /* dhePossession */
            getfield sun.security.ssl.DHKeyExchange$DHEPossession.privateKey:Ljava/security/PrivateKey;
            aload 3 /* dheCredentials */
            getfield sun.security.ssl.DHKeyExchange$DHECredentials.popPublicKey:Ljavax/crypto/interfaces/DHPublicKey;
        33: .line 445
            invokespecial sun.security.ssl.DHKeyExchange$DHEKAGenerator$DHEKAKeyDerivation.<init>:(Lsun/security/ssl/HandshakeContext;Ljava/security/PrivateKey;Ljava/security/PublicKey;)V
            areturn
        end local 3 // sun.security.ssl.DHKeyExchange$DHECredentials dheCredentials
        end local 2 // sun.security.ssl.DHKeyExchange$DHEPossession dhePossession
        end local 1 // sun.security.ssl.HandshakeContext context
        end local 0 // sun.security.ssl.DHKeyExchange$DHEKAGenerator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   34     0            this  Lsun/security/ssl/DHKeyExchange$DHEKAGenerator;
            0   34     1         context  Lsun/security/ssl/HandshakeContext;
            1   34     2   dhePossession  Lsun/security/ssl/DHKeyExchange$DHEPossession;
            2   34     3  dheCredentials  Lsun/security/ssl/DHKeyExchange$DHECredentials;
            4   26     4            poss  Lsun/security/ssl/SSLPossession;
            7   26     6            dhep  Lsun/security/ssl/DHKeyExchange$DHEPossession;
            9   22     7            cred  Lsun/security/ssl/SSLCredentials;
           12   22     9            dhec  Lsun/security/ssl/DHKeyExchange$DHECredentials;
           17   22    10             pps  Ljavax/crypto/spec/DHParameterSpec;
           18   22    11             cps  Ljavax/crypto/spec/DHParameterSpec;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
}
SourceFile: "DHKeyExchange.java"
NestHost: sun.security.ssl.DHKeyExchange
InnerClasses:
  final DHECredentials = sun.security.ssl.DHKeyExchange$DHECredentials of sun.security.ssl.DHKeyExchange
  private final DHEKAGenerator = sun.security.ssl.DHKeyExchange$DHEKAGenerator of sun.security.ssl.DHKeyExchange
  private final DHEKAKeyDerivation = sun.security.ssl.DHKeyExchange$DHEKAGenerator$DHEKAKeyDerivation of sun.security.ssl.DHKeyExchange$DHEKAGenerator
  final DHEPossession = sun.security.ssl.DHKeyExchange$DHEPossession of sun.security.ssl.DHKeyExchange
  final NamedGroup = sun.security.ssl.SupportedGroupsExtension$NamedGroup of sun.security.ssl.SupportedGroupsExtension