final class sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange extends sun.security.ssl.HandshakeMessage$ServerKeyExchange
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange
  super_class: sun.security.ssl.HandshakeMessage$ServerKeyExchange
{
  private static final boolean dhKeyExchangeFix;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private byte[] dh_p;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private byte[] dh_g;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private byte[] dh_Ys;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private byte[] signature;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  sun.security.ssl.ProtocolVersion protocolVersion;
    descriptor: Lsun/security/ssl/ProtocolVersion;
    flags: (0x0000) 

  private sun.security.ssl.SignatureAndHashAlgorithm preferableSignatureAlgorithm;
    descriptor: Lsun/security/ssl/SignatureAndHashAlgorithm;
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 688
            ldc "com.sun.net.ssl.dhKeyExchangeFix"
            iconst_1
            invokestatic sun.security.ssl.Debug.getBooleanProperty:(Ljava/lang/String;Z)Z
         1: .line 687
            putstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
         2: .line 688
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(sun.security.ssl.DHCrypt, sun.security.ssl.ProtocolVersion);
    descriptor: (Lsun/security/ssl/DHCrypt;Lsun/security/ssl/ProtocolVersion;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.DHCrypt obj
        start local 2 // sun.security.ssl.ProtocolVersion protocolVersion
         0: .line 706
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 707
            aload 0 /* this */
            aload 2 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 708
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         3: .line 711
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.setValues:(Lsun/security/ssl/DHCrypt;)V
         4: .line 712
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
         5: .line 713
            return
        end local 2 // sun.security.ssl.ProtocolVersion protocolVersion
        end local 1 // sun.security.ssl.DHCrypt obj
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0             this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0    6     1              obj  Lsun/security/ssl/DHCrypt;
            0    6     2  protocolVersion  Lsun/security/ssl/ProtocolVersion;
    MethodParameters:
                 Name  Flags
      obj              
      protocolVersion  

  void <init>(sun.security.ssl.DHCrypt, java.security.PrivateKey, byte[], byte[], java.security.SecureRandom, sun.security.ssl.SignatureAndHashAlgorithm, sun.security.ssl.ProtocolVersion);
    descriptor: (Lsun/security/ssl/DHCrypt;Ljava/security/PrivateKey;[B[BLjava/security/SecureRandom;Lsun/security/ssl/SignatureAndHashAlgorithm;Lsun/security/ssl/ProtocolVersion;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=9, args_size=8
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.DHCrypt obj
        start local 2 // java.security.PrivateKey key
        start local 3 // byte[] clntNonce
        start local 4 // byte[] svrNonce
        start local 5 // java.security.SecureRandom sr
        start local 6 // sun.security.ssl.SignatureAndHashAlgorithm signAlgorithm
        start local 7 // sun.security.ssl.ProtocolVersion protocolVersion
         0: .line 720
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 725
            aload 0 /* this */
            aload 7 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 728
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.setValues:(Lsun/security/ssl/DHCrypt;)V
         3: .line 731
            aload 7 /* protocolVersion */
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 7
         4: .line 732
            aload 0 /* this */
            aload 6 /* signAlgorithm */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         5: .line 733
            aload 6 /* signAlgorithm */
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getAlgorithmName:()Ljava/lang/String;
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 8 /* sig */
        start local 8 // java.security.Signature sig
         6: .line 734
            goto 12
        end local 8 // java.security.Signature sig
         7: .line 735
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.DHCrypt java.security.PrivateKey byte[] byte[] java.security.SecureRandom sun.security.ssl.SignatureAndHashAlgorithm sun.security.ssl.ProtocolVersion
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         8: .line 736
            aload 2 /* key */
            invokeinterface java.security.PrivateKey.getAlgorithm:()Ljava/lang/String;
            ldc "DSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
         9: .line 737
            ldc "DSA"
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 8 /* sig */
        start local 8 // java.security.Signature sig
        10: .line 738
            goto 12
        end local 8 // java.security.Signature sig
        11: .line 739
      StackMap locals:
      StackMap stack:
            invokestatic sun.security.ssl.RSASignature.getInstance:()Ljava/security/Signature;
            astore 8 /* sig */
        start local 8 // java.security.Signature sig
        12: .line 743
      StackMap locals: java.security.Signature
      StackMap stack:
            aload 8 /* sig */
            aload 2 /* key */
            aload 5 /* sr */
            invokevirtual java.security.Signature.initSign:(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
        13: .line 744
            aload 0 /* this */
            aload 8 /* sig */
            aload 3 /* clntNonce */
            aload 4 /* svrNonce */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.updateSignature:(Ljava/security/Signature;[B[B)V
        14: .line 745
            aload 0 /* this */
            aload 8 /* sig */
            invokevirtual java.security.Signature.sign:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
        15: .line 746
            return
        end local 8 // java.security.Signature sig
        end local 7 // sun.security.ssl.ProtocolVersion protocolVersion
        end local 6 // sun.security.ssl.SignatureAndHashAlgorithm signAlgorithm
        end local 5 // java.security.SecureRandom sr
        end local 4 // byte[] svrNonce
        end local 3 // byte[] clntNonce
        end local 2 // java.security.PrivateKey key
        end local 1 // sun.security.ssl.DHCrypt obj
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   16     0             this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   16     1              obj  Lsun/security/ssl/DHCrypt;
            0   16     2              key  Ljava/security/PrivateKey;
            0   16     3        clntNonce  [B
            0   16     4         svrNonce  [B
            0   16     5               sr  Ljava/security/SecureRandom;
            0   16     6    signAlgorithm  Lsun/security/ssl/SignatureAndHashAlgorithm;
            0   16     7  protocolVersion  Lsun/security/ssl/ProtocolVersion;
            6    7     8              sig  Ljava/security/Signature;
           10   11     8              sig  Ljava/security/Signature;
           12   16     8              sig  Ljava/security/Signature;
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
                 Name  Flags
      obj              
      key              
      clntNonce        
      svrNonce         
      sr               
      signAlgorithm    
      protocolVersion  

  void <init>(sun.security.ssl.HandshakeInStream, sun.security.ssl.ProtocolVersion);
    descriptor: (Lsun/security/ssl/HandshakeInStream;Lsun/security/ssl/ProtocolVersion;)V
    flags: (0x0000) 
    Code:
      stack=8, locals=3, args_size=3
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.HandshakeInStream input
        start local 2 // sun.security.ssl.ProtocolVersion protocolVersion
         0: .line 753
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 757
            aload 0 /* this */
            aload 2 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 758
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         3: .line 760
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
         4: .line 761
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
         5: .line 762
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
         6: .line 763
            new javax.crypto.spec.DHPublicKeySpec
            dup
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         7: .line 764
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         8: .line 765
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         9: .line 763
            invokespecial javax.crypto.spec.DHPublicKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
            invokestatic sun.security.util.KeyUtil.validate:(Ljava/security/spec/KeySpec;)V
        10: .line 767
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
        11: .line 768
            return
        end local 2 // sun.security.ssl.ProtocolVersion protocolVersion
        end local 1 // sun.security.ssl.HandshakeInStream input
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   12     0             this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   12     1            input  Lsun/security/ssl/HandshakeInStream;
            0   12     2  protocolVersion  Lsun/security/ssl/ProtocolVersion;
    Exceptions:
      throws java.io.IOException, java.security.GeneralSecurityException
    MethodParameters:
                 Name  Flags
      input            
      protocolVersion  

  void <init>(sun.security.ssl.HandshakeInStream, java.security.PublicKey, byte[], byte[], int, java.util.Collection<sun.security.ssl.SignatureAndHashAlgorithm>, sun.security.ssl.ProtocolVersion);
    descriptor: (Lsun/security/ssl/HandshakeInStream;Ljava/security/PublicKey;[B[BILjava/util/Collection;Lsun/security/ssl/ProtocolVersion;)V
    flags: (0x0000) 
    Code:
      stack=8, locals=12, args_size=8
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.HandshakeInStream input
        start local 2 // java.security.PublicKey publicKey
        start local 3 // byte[] clntNonce
        start local 4 // byte[] svrNonce
        start local 5 // int messageSize
        start local 6 // java.util.Collection localSupportedSignAlgs
        start local 7 // sun.security.ssl.ProtocolVersion protocolVersion
         0: .line 775
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 781
            aload 0 /* this */
            aload 7 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 784
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
         3: .line 785
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
         4: .line 786
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
         5: .line 787
            new javax.crypto.spec.DHPublicKeySpec
            dup
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         6: .line 788
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         7: .line 789
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
         8: .line 787
            invokespecial javax.crypto.spec.DHPublicKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
            invokestatic sun.security.util.KeyUtil.validate:(Ljava/security/spec/KeySpec;)V
         9: .line 792
            aload 7 /* protocolVersion */
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 22
        10: .line 793
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getInt8:()I
            istore 8 /* hash */
        start local 8 // int hash
        11: .line 794
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getInt8:()I
            istore 9 /* signature */
        start local 9 // int signature
        12: .line 796
            aload 0 /* this */
        13: .line 797
            iload 8 /* hash */
            iload 9 /* signature */
            iconst_0
            invokestatic sun.security.ssl.SignatureAndHashAlgorithm.valueOf:(III)Lsun/security/ssl/SignatureAndHashAlgorithm;
        14: .line 796
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
        15: .line 800
            aload 6 /* localSupportedSignAlgs */
        16: .line 801
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
        17: .line 800
            invokeinterface java.util.Collection.contains:(Ljava/lang/Object;)Z
        18: .line 801
            ifne 23
        19: .line 802
            new javax.net.ssl.SSLHandshakeException
            dup
        20: .line 803
            ldc "Unsupported SignatureAndHashAlgorithm in ServerKeyExchange message"
        21: .line 802
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 9 // int signature
        end local 8 // int hash
        22: .line 807
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int java.util.Collection sun.security.ssl.ProtocolVersion
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
        23: .line 812
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 26
        24: .line 813
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            astore 8 /* signature */
        start local 8 // byte[] signature
        25: .line 814
            goto 31
        end local 8 // byte[] signature
        26: .line 815
      StackMap locals:
      StackMap stack:
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        27: .line 816
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        28: .line 817
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        29: .line 819
            iload 5 /* messageSize */
            newarray 8
            astore 8 /* signature */
        start local 8 // byte[] signature
        30: .line 820
            aload 1 /* input */
            aload 8 /* signature */
            invokevirtual sun.security.ssl.HandshakeInStream.read:([B)I
            pop
        31: .line 824
      StackMap locals: byte[]
      StackMap stack:
            aload 2 /* publicKey */
            invokeinterface java.security.PublicKey.getAlgorithm:()Ljava/lang/String;
            astore 10 /* algorithm */
        start local 10 // java.lang.String algorithm
        32: .line 825
            aload 7 /* protocolVersion */
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 36
        33: .line 827
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getAlgorithmName:()Ljava/lang/String;
        34: .line 826
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 9 /* sig */
        start local 9 // java.security.Signature sig
        35: .line 828
            goto 44
        end local 9 // java.security.Signature sig
        36: .line 829
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int java.util.Collection sun.security.ssl.ProtocolVersion byte[] top java.lang.String
      StackMap stack:
            aload 10 /* algorithm */
            dup
            astore 11
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 2
                67986: 37
                81440: 38
              default: 43
          }
      StackMap locals: java.lang.String
      StackMap stack:
        37: aload 11
            ldc "DSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 39
            goto 43
      StackMap locals:
      StackMap stack:
        38: aload 11
            ldc "RSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 41
            goto 43
        39: .line 831
      StackMap locals:
      StackMap stack:
            ldc "DSA"
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 9 /* sig */
        start local 9 // java.security.Signature sig
        40: .line 832
            goto 44
        end local 9 // java.security.Signature sig
        41: .line 834
      StackMap locals:
      StackMap stack:
            invokestatic sun.security.ssl.RSASignature.getInstance:()Ljava/security/Signature;
            astore 9 /* sig */
        start local 9 // java.security.Signature sig
        42: .line 835
            goto 44
        end local 9 // java.security.Signature sig
        43: .line 837
      StackMap locals:
      StackMap stack:
            new javax.net.ssl.SSLKeyException
            dup
            ldc "neither an RSA or a DSA key"
            invokespecial javax.net.ssl.SSLKeyException.<init>:(Ljava/lang/String;)V
            athrow
        start local 9 // java.security.Signature sig
        44: .line 841
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int java.util.Collection sun.security.ssl.ProtocolVersion byte[] java.security.Signature java.lang.String
      StackMap stack:
            aload 9 /* sig */
            aload 2 /* publicKey */
            invokevirtual java.security.Signature.initVerify:(Ljava/security/PublicKey;)V
        45: .line 842
            aload 0 /* this */
            aload 9 /* sig */
            aload 3 /* clntNonce */
            aload 4 /* svrNonce */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.updateSignature:(Ljava/security/Signature;[B[B)V
        46: .line 844
            aload 9 /* sig */
            aload 8 /* signature */
            invokevirtual java.security.Signature.verify:([B)Z
            ifne 48
        47: .line 845
            new javax.net.ssl.SSLKeyException
            dup
            ldc "Server D-H key verification failed"
            invokespecial javax.net.ssl.SSLKeyException.<init>:(Ljava/lang/String;)V
            athrow
        48: .line 847
      StackMap locals:
      StackMap stack:
            return
        end local 10 // java.lang.String algorithm
        end local 9 // java.security.Signature sig
        end local 8 // byte[] signature
        end local 7 // sun.security.ssl.ProtocolVersion protocolVersion
        end local 6 // java.util.Collection localSupportedSignAlgs
        end local 5 // int messageSize
        end local 4 // byte[] svrNonce
        end local 3 // byte[] clntNonce
        end local 2 // java.security.PublicKey publicKey
        end local 1 // sun.security.ssl.HandshakeInStream input
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   49     0                    this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   49     1                   input  Lsun/security/ssl/HandshakeInStream;
            0   49     2               publicKey  Ljava/security/PublicKey;
            0   49     3               clntNonce  [B
            0   49     4                svrNonce  [B
            0   49     5             messageSize  I
            0   49     6  localSupportedSignAlgs  Ljava/util/Collection<Lsun/security/ssl/SignatureAndHashAlgorithm;>;
            0   49     7         protocolVersion  Lsun/security/ssl/ProtocolVersion;
           11   22     8                    hash  I
           12   22     9               signature  I
           25   26     8               signature  [B
           30   49     8               signature  [B
           35   36     9                     sig  Ljava/security/Signature;
           40   41     9                     sig  Ljava/security/Signature;
           42   43     9                     sig  Ljava/security/Signature;
           44   49     9                     sig  Ljava/security/Signature;
           32   49    10               algorithm  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.security.GeneralSecurityException
    Signature: (Lsun/security/ssl/HandshakeInStream;Ljava/security/PublicKey;[B[BILjava/util/Collection<Lsun/security/ssl/SignatureAndHashAlgorithm;>;Lsun/security/ssl/ProtocolVersion;)V
    MethodParameters:
                        Name  Flags
      input                   
      publicKey               
      clntNonce               
      svrNonce                
      messageSize             
      localSupportedSignAlgs  
      protocolVersion         

  java.math.BigInteger getModulus();
    descriptor: ()Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
         0: .line 851
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
            areturn
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;

  java.math.BigInteger getBase();
    descriptor: ()Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
         0: .line 856
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
            areturn
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;

  java.math.BigInteger getServerPublicKey();
    descriptor: ()Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
         0: .line 861
            new java.math.BigInteger
            dup
            iconst_1
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokespecial java.math.BigInteger.<init>:(I[B)V
            areturn
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;

  private void updateSignature(java.security.Signature, byte[], byte[]);
    descriptor: (Ljava/security/Signature;[B[B)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // java.security.Signature sig
        start local 2 // byte[] clntNonce
        start local 3 // byte[] svrNonce
         0: .line 871
            aload 1 /* sig */
            aload 2 /* clntNonce */
            invokevirtual java.security.Signature.update:([B)V
         1: .line 872
            aload 1 /* sig */
            aload 3 /* svrNonce */
            invokevirtual java.security.Signature.update:([B)V
         2: .line 874
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            istore 4 /* tmp */
        start local 4 // int tmp
         3: .line 875
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         4: .line 876
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         5: .line 877
            aload 1 /* sig */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokevirtual java.security.Signature.update:([B)V
         6: .line 879
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            istore 4 /* tmp */
         7: .line 880
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         8: .line 881
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         9: .line 882
            aload 1 /* sig */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokevirtual java.security.Signature.update:([B)V
        10: .line 884
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            istore 4 /* tmp */
        11: .line 885
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
        12: .line 886
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
        13: .line 887
            aload 1 /* sig */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokevirtual java.security.Signature.update:([B)V
        14: .line 888
            return
        end local 4 // int tmp
        end local 3 // byte[] svrNonce
        end local 2 // byte[] clntNonce
        end local 1 // java.security.Signature sig
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   15     0       this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   15     1        sig  Ljava/security/Signature;
            0   15     2  clntNonce  [B
            0   15     3   svrNonce  [B
            3   15     4        tmp  I
    Exceptions:
      throws java.security.SignatureException
    MethodParameters:
           Name  Flags
      sig        
      clntNonce  
      svrNonce   

  private void setValues(sun.security.ssl.DHCrypt);
    descriptor: (Lsun/security/ssl/DHCrypt;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.DHCrypt obj
         0: .line 891
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.DHCrypt.getModulus:()Ljava/math/BigInteger;
            invokestatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.toByteArray:(Ljava/math/BigInteger;)[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
         1: .line 892
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.DHCrypt.getBase:()Ljava/math/BigInteger;
            invokestatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.toByteArray:(Ljava/math/BigInteger;)[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
         2: .line 893
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.DHCrypt.getPublicKey:()Ljava/math/BigInteger;
            invokestatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.toByteArray:(Ljava/math/BigInteger;)[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
         3: .line 894
            return
        end local 1 // sun.security.ssl.DHCrypt obj
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0    4     1   obj  Lsun/security/ssl/DHCrypt;
    MethodParameters:
      Name  Flags
      obj   

  int messageLength();
    descriptor: ()I
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
         0: .line 897
            bipush 6
            istore 1 /* temp */
        start local 1 // int temp
         1: .line 899
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            iadd
            istore 1 /* temp */
         2: .line 900
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iadd
            istore 1 /* temp */
         3: .line 901
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iadd
            istore 1 /* temp */
         4: .line 903
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 10
         5: .line 904
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 7
         6: .line 905
            iload 1 /* temp */
            invokestatic sun.security.ssl.SignatureAndHashAlgorithm.sizeInRecord:()I
            iadd
            istore 1 /* temp */
         7: .line 908
      StackMap locals: int
      StackMap stack:
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            arraylength
            iadd
            istore 1 /* temp */
         8: .line 909
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 10
         9: .line 910
            iinc 1 /* temp */ 2
        10: .line 914
      StackMap locals:
      StackMap stack:
            iload 1 /* temp */
            ireturn
        end local 1 // int temp
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            1   11     1  temp  I

  void send(sun.security.ssl.HandshakeOutStream);
    descriptor: (Lsun/security/ssl/HandshakeOutStream;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.HandshakeOutStream s
         0: .line 918
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.putBytes16:([B)V
         1: .line 919
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.putBytes16:([B)V
         2: .line 920
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.putBytes16:([B)V
         3: .line 922
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 11
         4: .line 923
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 7
         5: .line 924
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getHashValue:()I
            invokevirtual sun.security.ssl.HandshakeOutStream.putInt8:(I)V
         6: .line 925
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getSignatureValue:()I
            invokevirtual sun.security.ssl.HandshakeOutStream.putInt8:(I)V
         7: .line 928
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 10
         8: .line 929
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.putBytes16:([B)V
         9: .line 930
            goto 11
        10: .line 931
      StackMap locals:
      StackMap stack:
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.write:([B)V
        11: .line 934
      StackMap locals:
      StackMap stack:
            return
        end local 1 // sun.security.ssl.HandshakeOutStream s
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   12     1     s  Lsun/security/ssl/HandshakeOutStream;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      s     

  void print(java.io.PrintStream);
    descriptor: (Ljava/io/PrintStream;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // java.io.PrintStream s
         0: .line 937
            aload 1 /* s */
            ldc "*** Diffie-Hellman ServerKeyExchange"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         1: .line 939
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.debug:Lsun/security/ssl/Debug;
            ifnull 13
            ldc "verbose"
            invokestatic sun.security.ssl.Debug.isOn:(Ljava/lang/String;)Z
            ifeq 13
         2: .line 940
            aload 1 /* s */
            ldc "DH Modulus"
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            invokestatic sun.security.ssl.Debug.println:(Ljava/io/PrintStream;Ljava/lang/String;[B)V
         3: .line 941
            aload 1 /* s */
            ldc "DH Base"
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            invokestatic sun.security.ssl.Debug.println:(Ljava/io/PrintStream;Ljava/lang/String;[B)V
         4: .line 942
            aload 1 /* s */
            ldc "Server DH Public Key"
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            invokestatic sun.security.ssl.Debug.println:(Ljava/io/PrintStream;Ljava/lang/String;[B)V
         5: .line 944
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnonnull 8
         6: .line 945
            aload 1 /* s */
            ldc "Anonymous"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         7: .line 946
            goto 13
         8: .line 947
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
            getfield sun.security.ssl.ProtocolVersion.v:I
            if_icmplt 12
         9: .line 948
            aload 1 /* s */
            new java.lang.StringBuilder
            dup
            ldc "Signature Algorithm "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        10: .line 949
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getAlgorithmName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 948
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        12: .line 952
      StackMap locals:
      StackMap stack:
            aload 1 /* s */
            ldc "Signed with a DSA or RSA public key"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        13: .line 955
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.io.PrintStream s
        end local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   14     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   14     1     s  Ljava/io/PrintStream;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      s     
}
SourceFile: "HandshakeMessage.java"
NestHost: sun.security.ssl.HandshakeMessage
InnerClasses:
  final DH_ServerKeyExchange = sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange of sun.security.ssl.HandshakeMessage
  abstract ServerKeyExchange = sun.security.ssl.HandshakeMessage$ServerKeyExchange of sun.security.ssl.HandshakeMessage