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 1086
            ldc "com.sun.net.ssl.dhKeyExchangeFix"
            iconst_1
            invokestatic sun.security.ssl.Debug.getBooleanProperty:(Ljava/lang/String;Z)Z
         1: .line 1085
            putstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
         2: .line 1086
            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 1104
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 1105
            aload 0 /* this */
            aload 2 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 1106
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         3: .line 1109
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.setValues:(Lsun/security/ssl/DHCrypt;)V
         4: .line 1110
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
         5: .line 1111
            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 1118
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 1123
            aload 0 /* this */
            aload 7 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 1126
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.setValues:(Lsun/security/ssl/DHCrypt;)V
         3: .line 1129
            aload 7 /* protocolVersion */
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 7
         4: .line 1130
            aload 0 /* this */
            aload 6 /* signAlgorithm */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         5: .line 1131
            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 1132
            goto 12
        end local 8 // java.security.Signature sig
         7: .line 1133
      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 1134
            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 1135
            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 1136
            goto 12
        end local 8 // java.security.Signature sig
        11: .line 1137
      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 1141
      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 1142
            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 1143
            aload 0 /* this */
            aload 8 /* sig */
            invokevirtual java.security.Signature.sign:()[B
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
        15: .line 1144
            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 1151
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 1155
            aload 0 /* this */
            aload 2 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 1156
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
         3: .line 1158
            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 1159
            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 1160
            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 1161
            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 1162
            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 1163
            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 1161
            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 1165
            aload 0 /* this */
            aconst_null
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
        11: .line 1166
            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 1173
            aload 0 /* this */
            invokespecial sun.security.ssl.HandshakeMessage$ServerKeyExchange.<init>:()V
         1: .line 1179
            aload 0 /* this */
            aload 7 /* protocolVersion */
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
         2: .line 1182
            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 1183
            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 1184
            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 1185
            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 1186
            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 1187
            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 1185
            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 1190
            aload 7 /* protocolVersion */
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 24
        10: .line 1191
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getInt8:()I
            istore 8 /* hash */
        start local 8 // int hash
        11: .line 1192
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getInt8:()I
            istore 9 /* signature */
        start local 9 // int signature
        12: .line 1194
            aload 0 /* this */
        13: .line 1195
            iload 8 /* hash */
            iload 9 /* signature */
            iconst_0
            invokestatic sun.security.ssl.SignatureAndHashAlgorithm.valueOf:(III)Lsun/security/ssl/SignatureAndHashAlgorithm;
        14: .line 1194
            putfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
        15: .line 1198
            aload 6 /* localSupportedSignAlgs */
        16: .line 1199
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
        17: .line 1198
            invokeinterface java.util.Collection.contains:(Ljava/lang/Object;)Z
        18: .line 1199
            ifne 25
        19: .line 1200
            new javax.net.ssl.SSLHandshakeException
            dup
        20: .line 1201
            new java.lang.StringBuilder
            dup
            ldc "Unsupported SignatureAndHashAlgorithm in ServerKeyExchange message: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        21: .line 1203
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
        22: .line 1201
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        23: .line 1200
            invokespecial javax.net.ssl.SSLHandshakeException.<init>:(Ljava/lang/String;)V
            athrow
        end local 9 // int signature
        end local 8 // int hash
        24: .line 1206
      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;
        25: .line 1211
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 28
        26: .line 1212
            aload 1 /* input */
            invokevirtual sun.security.ssl.HandshakeInStream.getBytes16:()[B
            astore 8 /* signature */
        start local 8 // byte[] signature
        27: .line 1213
            goto 33
        end local 8 // byte[] signature
        28: .line 1214
      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 */
        29: .line 1215
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        30: .line 1216
            iload 5 /* messageSize */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iconst_2
            iadd
            isub
            istore 5 /* messageSize */
        31: .line 1218
            iload 5 /* messageSize */
            newarray 8
            astore 8 /* signature */
        start local 8 // byte[] signature
        32: .line 1219
            aload 1 /* input */
            aload 8 /* signature */
            invokevirtual sun.security.ssl.HandshakeInStream.read:([B)I
            pop
        33: .line 1223
      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
        34: .line 1224
            aload 7 /* protocolVersion */
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 38
        35: .line 1226
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.preferableSignatureAlgorithm:Lsun/security/ssl/SignatureAndHashAlgorithm;
            invokevirtual sun.security.ssl.SignatureAndHashAlgorithm.getAlgorithmName:()Ljava/lang/String;
        36: .line 1225
            invokestatic sun.security.ssl.JsseJce.getSignature:(Ljava/lang/String;)Ljava/security/Signature;
            astore 9 /* sig */
        start local 9 // java.security.Signature sig
        37: .line 1227
            goto 48
        end local 9 // java.security.Signature sig
        38: .line 1228
      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: 39
                81440: 40
              default: 45
          }
      StackMap locals: java.lang.String
      StackMap stack:
        39: aload 11
            ldc "DSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 41
            goto 45
      StackMap locals:
      StackMap stack:
        40: aload 11
            ldc "RSA"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 43
            goto 45
        41: .line 1230
      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
        42: .line 1231
            goto 48
        end local 9 // java.security.Signature sig
        43: .line 1233
      StackMap locals:
      StackMap stack:
            invokestatic sun.security.ssl.RSASignature.getInstance:()Ljava/security/Signature;
            astore 9 /* sig */
        start local 9 // java.security.Signature sig
        44: .line 1234
            goto 48
        end local 9 // java.security.Signature sig
        45: .line 1236
      StackMap locals:
      StackMap stack:
            new javax.net.ssl.SSLKeyException
            dup
        46: .line 1237
            new java.lang.StringBuilder
            dup
            ldc "neither an RSA or a DSA key: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 10 /* algorithm */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        47: .line 1236
            invokespecial javax.net.ssl.SSLKeyException.<init>:(Ljava/lang/String;)V
            athrow
        start local 9 // java.security.Signature sig
        48: .line 1241
      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
        49: .line 1242
            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
        50: .line 1244
            aload 9 /* sig */
            aload 8 /* signature */
            invokevirtual java.security.Signature.verify:([B)Z
            ifne 52
        51: .line 1245
            new javax.net.ssl.SSLKeyException
            dup
            ldc "Server D-H key verification failed"
            invokespecial javax.net.ssl.SSLKeyException.<init>:(Ljava/lang/String;)V
            athrow
        52: .line 1247
      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   53     0                    this  Lsun/security/ssl/HandshakeMessage$DH_ServerKeyExchange;
            0   53     1                   input  Lsun/security/ssl/HandshakeInStream;
            0   53     2               publicKey  Ljava/security/PublicKey;
            0   53     3               clntNonce  [B
            0   53     4                svrNonce  [B
            0   53     5             messageSize  I
            0   53     6  localSupportedSignAlgs  Ljava/util/Collection<Lsun/security/ssl/SignatureAndHashAlgorithm;>;
            0   53     7         protocolVersion  Lsun/security/ssl/ProtocolVersion;
           11   24     8                    hash  I
           12   24     9               signature  I
           27   28     8               signature  [B
           32   53     8               signature  [B
           37   38     9                     sig  Ljava/security/Signature;
           42   43     9                     sig  Ljava/security/Signature;
           44   45     9                     sig  Ljava/security/Signature;
           48   53     9                     sig  Ljava/security/Signature;
           34   53    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 1251
            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 1256
            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 1261
            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 1271
            aload 1 /* sig */
            aload 2 /* clntNonce */
            invokevirtual java.security.Signature.update:([B)V
         1: .line 1272
            aload 1 /* sig */
            aload 3 /* svrNonce */
            invokevirtual java.security.Signature.update:([B)V
         2: .line 1274
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            istore 4 /* tmp */
        start local 4 // int tmp
         3: .line 1275
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         4: .line 1276
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         5: .line 1277
            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 1279
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            istore 4 /* tmp */
         7: .line 1280
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
         8: .line 1281
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
         9: .line 1282
            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 1284
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            istore 4 /* tmp */
        11: .line 1285
            aload 1 /* sig */
            iload 4 /* tmp */
            bipush 8
            ishr
            i2b
            invokevirtual java.security.Signature.update:(B)V
        12: .line 1286
            aload 1 /* sig */
            iload 4 /* tmp */
            sipush 255
            iand
            i2b
            invokevirtual java.security.Signature.update:(B)V
        13: .line 1287
            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 1288
            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 1291
            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 1292
            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 1293
            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 1294
            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 1298
            bipush 6
            istore 1 /* temp */
        start local 1 // int temp
         1: .line 1300
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_p:[B
            arraylength
            iadd
            istore 1 /* temp */
         2: .line 1301
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_g:[B
            arraylength
            iadd
            istore 1 /* temp */
         3: .line 1302
            iload 1 /* temp */
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dh_Ys:[B
            arraylength
            iadd
            istore 1 /* temp */
         4: .line 1304
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 10
         5: .line 1305
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 7
         6: .line 1306
            iload 1 /* temp */
            invokestatic sun.security.ssl.SignatureAndHashAlgorithm.sizeInRecord:()I
            iadd
            istore 1 /* temp */
         7: .line 1309
      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 1310
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 10
         9: .line 1311
            iinc 1 /* temp */ 2
        10: .line 1315
      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 1320
            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 1321
            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 1322
            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 1324
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnull 11
         4: .line 1325
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 7
         5: .line 1326
            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 1327
            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 1330
      StackMap locals:
      StackMap stack:
            getstatic sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.dhKeyExchangeFix:Z
            ifeq 10
         8: .line 1331
            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 1332
            goto 11
        10: .line 1333
      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 1336
      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 1340
            aload 1 /* s */
            ldc "*** Diffie-Hellman ServerKeyExchange"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         1: .line 1342
            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 1343
            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 1344
            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 1345
            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 1347
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.signature:[B
            ifnonnull 8
         6: .line 1348
            aload 1 /* s */
            ldc "Anonymous"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         7: .line 1349
            goto 13
         8: .line 1350
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.protocolVersion:Lsun/security/ssl/ProtocolVersion;
            invokevirtual sun.security.ssl.ProtocolVersion.useTLS12PlusSpec:()Z
            ifeq 12
         9: .line 1351
            aload 1 /* s */
            new java.lang.StringBuilder
            dup
            ldc "Signature Algorithm "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        10: .line 1352
            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 1351
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        12: .line 1355
      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 1358
      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