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

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

  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 675
            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 680
            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 685
            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 695
            aload 1 /* sig */
            aload 2 /* clntNonce */
            invokevirtual java.security.Signature.update:([B)V
         1: .line 696
            aload 1 /* sig */
            aload 3 /* svrNonce */
            invokevirtual java.security.Signature.update:([B)V
         2: .line 698
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            istore 4 /* tmp */
        start local 4 // int tmp
         3: .line 699
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         4: .line 700
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         5: .line 701
            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 703
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            istore 4 /* tmp */
         7: .line 704
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         8: .line 705
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         9: .line 706
            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 708
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            istore 4 /* tmp */
        11: .line 709
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
        12: .line 710
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
        13: .line 711
            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 712
            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   

  void <init>(sun.security.ssl.DHCrypt);
    descriptor: (Lsun/security/ssl/DHCrypt;)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.DHCrypt obj
         0: .line 718
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 720
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.getValues:(Lsun/security/ssl/DHCrypt;)V
         2: .line 721
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
         3: .line 722
            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   

  void <init>(sun.security.ssl.DHCrypt, java.security.PrivateKey, byte[], byte[], java.security.SecureRandom);
    descriptor: (Lsun/security/ssl/DHCrypt;Ljava/security/PrivateKey;[B[BLjava/security/SecureRandom;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=7, args_size=6
        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
         0: .line 729
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 733
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.getValues:(Lsun/security/ssl/DHCrypt;)V
         2: .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 5
         3: .line 737
            ldc "DSA"
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 6 /* sig */
        start local 6 // java.security.Signature sig
         4: .line 738
            goto 6
        end local 6 // java.security.Signature sig
         5: .line 739
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.DHCrypt java.security.PrivateKey byte[] byte[] java.security.SecureRandom
      StackMap stack:
            invokestatic sun.security.ssl.RSASignature.getInstance:()Ljava/security/Signature;
            astore 6 /* sig */
        start local 6 // java.security.Signature sig
         6: .line 741
      StackMap locals: java.security.Signature
      StackMap stack:
            aload 6 /* sig */
            aload 2 /* key */
            aload 5 /* sr */
            invokevirtual java.security.Signature.initSign:(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V
         7: .line 742
            aload 0 /* this */
            aload 6 /* sig */
            aload 3 /* clntNonce */
            aload 4 /* svrNonce */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.updateSignature:(Ljava/security/Signature;[B[B)V
         8: .line 743
            aload 0 /* this */
            aload 6 /* sig */
            invokevirtual java.security.Signature.sign:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
         9: .line 744
            return
        end local 6 // java.security.Signature sig
        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   10     0       this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   10     1        obj  Lsun/security/ssl/DHCrypt;
            0   10     2        key  Ljava/security/PrivateKey;
            0   10     3  clntNonce  [B
            0   10     4   svrNonce  [B
            0   10     5         sr  Ljava/security/SecureRandom;
            4    5     6        sig  Ljava/security/Signature;
            6   10     6        sig  Ljava/security/Signature;
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
           Name  Flags
      obj        
      key        
      clntNonce  
      svrNonce   
      sr         

  private void getValues(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 747
            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 748
            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 749
            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 750
            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   

  void <init>(sun.security.ssl.HandshakeInStream);
    descriptor: (Lsun/security/ssl/HandshakeInStream;)V
    flags: (0x0000) 
    Code:
      stack=8, locals=2, args_size=2
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // sun.security.ssl.HandshakeInStream input
         0: .line 757
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 759
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
         2: .line 760
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
         3: .line 761
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
         4: .line 762
            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
         5: .line 763
            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
         6: .line 764
            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
         7: .line 762
            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
         8: .line 765
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
         9: .line 766
            return
        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   10     0   this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   10     1  input  Lsun/security/ssl/HandshakeInStream;
    Exceptions:
      throws java.io.IOException, java.security.GeneralSecurityException
    MethodParameters:
       Name  Flags
      input  

  void <init>(sun.security.ssl.HandshakeInStream, java.security.PublicKey, byte[], byte[], int);
    descriptor: (Lsun/security/ssl/HandshakeInStream;Ljava/security/PublicKey;[B[BI)V
    flags: (0x0000) 
    Code:
      stack=8, locals=9, args_size=6
        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
         0: .line 773
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 777
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
         2: .line 778
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
         3: .line 779
            aload 0 /* this */
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
         4: .line 780
            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
         5: .line 781
            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
         6: .line 782
            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
         7: .line 780
            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
         8: .line 784
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 11
         9: .line 785
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            astore 6 /* signature */
        start local 6 // byte[] signature
        10: .line 786
            goto 16
        end local 6 // byte[] signature
        11: .line 787
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int
      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 */
        12: .line 788
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        13: .line 789
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        14: .line 791
            iload 5 /* messageSize */
            newarray 8
            astore 6 /* signature */
        start local 6 // byte[] signature
        15: .line 792
            aload 1 /* input */
            aload 6 /* signature */
            invokevirtual sun.security.ssl.HandshakeInStream.read:([B)I
            pop
        16: .line 796
      StackMap locals: byte[]
      StackMap stack:
            aload 2 /* publicKey */
            invokeinterface java.security.PublicKey.getAlgorithm:()Ljava/lang/String;
            astore 8 /* algorithm */
        start local 8 // java.lang.String algorithm
        17: .line 797
            ldc "DSA"
            aload 8 /* algorithm */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 20
        18: .line 798
            ldc "DSA"
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 7 /* sig */
        start local 7 // java.security.Signature sig
        19: .line 799
            goto 24
        end local 7 // java.security.Signature sig
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int byte[] top java.lang.String
      StackMap stack:
        20: ldc "RSA"
            aload 8 /* algorithm */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 23
        21: .line 800
            invokestatic sun.security.ssl.RSASignature.getInstance:()Ljava/security/Signature;
            astore 7 /* sig */
        start local 7 // java.security.Signature sig
        22: .line 801
            goto 24
        end local 7 // java.security.Signature sig
        23: .line 802
      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 7 // java.security.Signature sig
        24: .line 805
      StackMap locals: sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange sun.security.ssl.HandshakeInStream java.security.PublicKey byte[] byte[] int byte[] java.security.Signature java.lang.String
      StackMap stack:
            aload 7 /* sig */
            aload 2 /* publicKey */
            invokevirtual java.security.Signature.initVerify:(Ljava/security/PublicKey;)V
        25: .line 806
            aload 0 /* this */
            aload 7 /* sig */
            aload 3 /* clntNonce */
            aload 4 /* svrNonce */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.updateSignature:(Ljava/security/Signature;[B[B)V
        26: .line 808
            aload 7 /* sig */
            aload 6 /* signature */
            invokevirtual java.security.Signature.verify:([B)Z
            ifne 28
        27: .line 809
            new javax.net.ssl.SSLKeyException
            dup
            ldc "Server D-H key verification failed"
            invokespecial javax.net.ssl.SSLKeyException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 811
      StackMap locals:
      StackMap stack:
            return
        end local 8 // java.lang.String algorithm
        end local 7 // java.security.Signature sig
        end local 6 // byte[] signature
        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   29     0         this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   29     1        input  Lsun/security/ssl/HandshakeInStream;
            0   29     2    publicKey  Ljava/security/PublicKey;
            0   29     3    clntNonce  [B
            0   29     4     svrNonce  [B
            0   29     5  messageSize  I
           10   11     6    signature  [B
           15   29     6    signature  [B
           19   20     7          sig  Ljava/security/Signature;
           22   23     7          sig  Ljava/security/Signature;
           24   29     7          sig  Ljava/security/Signature;
           17   29     8    algorithm  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, java.security.GeneralSecurityException
    MethodParameters:
             Name  Flags
      input        
      publicKey    
      clntNonce    
      svrNonce     
      messageSize  

  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 814
            bipush 6
            istore 1 /* temp */
        start local 1 // int temp
         1: .line 816
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            iadd
            istore 1 /* temp */
         2: .line 817
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iadd
            istore 1 /* temp */
         3: .line 818
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iadd
            istore 1 /* temp */
         4: .line 819
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 8
         5: .line 820
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            arraylength
            iadd
            istore 1 /* temp */
         6: .line 821
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 8
         7: .line 822
            iinc 1 /* temp */ 2
         8: .line 825
      StackMap locals: int
      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    9     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            1    9     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 829
            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 830
            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 831
            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 832
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 8
         4: .line 833
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 7
         5: .line 834
            aload 1 /* s */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            invokevirtual sun.security.ssl.HandshakeOutStream.putBytes16:([B)V
         6: .line 835
            goto 8
         7: .line 836
      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
         8: .line 839
      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    9     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0    9     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=3, locals=2, args_size=2
        start local 0 // sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange this
        start local 1 // java.io.PrintStream s
         0: .line 842
            aload 1 /* s */
            ldc "*** Diffie-Hellman ServerKeyExchange"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         1: .line 844
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.debug:Lsun/security/ssl/Debug;
            ifnull 9
            ldc "verbose"
            invokestatic sun.security.ssl.Debug.isOn:(Ljava/lang/String;)Z
            ifeq 9
         2: .line 845
            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 846
            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 847
            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 849
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnonnull 8
         6: .line 850
            aload 1 /* s */
            ldc "Anonymous"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         7: .line 851
            goto 9
         8: .line 852
      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
         9: .line 855
      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   10     0  this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   10     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