public final class sun.security.util.KeyUtil
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: sun.security.util.KeyUtil
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.util.KeyUtil this
         0: .line 54
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // sun.security.util.KeyUtil this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/util/KeyUtil;

  public static final int getKeySize(java.security.Key);
    descriptor: (Ljava/security/Key;)I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.security.Key key
         0: .line 64
            iconst_m1
            istore 1 /* size */
        start local 1 // int size
         1: .line 66
            aload 0 /* key */
            instanceof sun.security.util.Length
            ifeq 8
         2: .line 68
            aload 0 /* key */
            checkcast sun.security.util.Length
            astore 2 /* ruler */
        start local 2 // sun.security.util.Length ruler
         3: .line 69
            aload 2 /* ruler */
            invokeinterface sun.security.util.Length.length:()I
            istore 1 /* size */
        end local 2 // sun.security.util.Length ruler
         4: .line 70
            goto 6
      StackMap locals: java.security.Key int
      StackMap stack: java.lang.UnsupportedOperationException
         5: pop
         6: .line 74
      StackMap locals:
      StackMap stack:
            iload 1 /* size */
            iflt 8
         7: .line 75
            iload 1 /* size */
            ireturn
         8: .line 80
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            instanceof javax.crypto.SecretKey
            ifeq 14
         9: .line 81
            aload 0 /* key */
            checkcast javax.crypto.SecretKey
            astore 2 /* sk */
        start local 2 // javax.crypto.SecretKey sk
        10: .line 82
            aload 2 /* sk */
            invokeinterface javax.crypto.SecretKey.getFormat:()Ljava/lang/String;
            astore 3 /* format */
        start local 3 // java.lang.String format
        11: .line 83
            ldc "RAW"
            aload 3 /* format */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 45
            aload 2 /* sk */
            invokeinterface javax.crypto.SecretKey.getEncoded:()[B
            ifnull 45
        12: .line 84
            aload 2 /* sk */
            invokeinterface javax.crypto.SecretKey.getEncoded:()[B
            arraylength
            bipush 8
            imul
            istore 1 /* size */
        end local 3 // java.lang.String format
        end local 2 // javax.crypto.SecretKey sk
        13: .line 87
            goto 45
      StackMap locals:
      StackMap stack:
        14: aload 0 /* key */
            instanceof java.security.interfaces.RSAKey
            ifeq 18
        15: .line 88
            aload 0 /* key */
            checkcast java.security.interfaces.RSAKey
            astore 2 /* pubk */
        start local 2 // java.security.interfaces.RSAKey pubk
        16: .line 89
            aload 2 /* pubk */
            invokeinterface java.security.interfaces.RSAKey.getModulus:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
            istore 1 /* size */
        end local 2 // java.security.interfaces.RSAKey pubk
        17: .line 90
            goto 45
      StackMap locals:
      StackMap stack:
        18: aload 0 /* key */
            instanceof java.security.interfaces.ECKey
            ifeq 22
        19: .line 91
            aload 0 /* key */
            checkcast java.security.interfaces.ECKey
            astore 2 /* pubk */
        start local 2 // java.security.interfaces.ECKey pubk
        20: .line 92
            aload 2 /* pubk */
            invokeinterface java.security.interfaces.ECKey.getParams:()Ljava/security/spec/ECParameterSpec;
            invokevirtual java.security.spec.ECParameterSpec.getOrder:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
            istore 1 /* size */
        end local 2 // java.security.interfaces.ECKey pubk
        21: .line 93
            goto 45
      StackMap locals:
      StackMap stack:
        22: aload 0 /* key */
            instanceof java.security.interfaces.DSAKey
            ifeq 29
        23: .line 94
            aload 0 /* key */
            checkcast java.security.interfaces.DSAKey
            astore 2 /* pubk */
        start local 2 // java.security.interfaces.DSAKey pubk
        24: .line 95
            aload 2 /* pubk */
            invokeinterface java.security.interfaces.DSAKey.getParams:()Ljava/security/interfaces/DSAParams;
            astore 3 /* params */
        start local 3 // java.security.interfaces.DSAParams params
        25: .line 96
            aload 3 /* params */
            ifnull 26
            aload 3 /* params */
            invokeinterface java.security.interfaces.DSAParams.getP:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
            goto 27
      StackMap locals: java.security.interfaces.DSAKey java.security.interfaces.DSAParams
      StackMap stack:
        26: iconst_m1
      StackMap locals:
      StackMap stack: int
        27: istore 1 /* size */
        end local 3 // java.security.interfaces.DSAParams params
        end local 2 // java.security.interfaces.DSAKey pubk
        28: .line 97
            goto 45
      StackMap locals:
      StackMap stack:
        29: aload 0 /* key */
            instanceof javax.crypto.interfaces.DHKey
            ifeq 33
        30: .line 98
            aload 0 /* key */
            checkcast javax.crypto.interfaces.DHKey
            astore 2 /* pubk */
        start local 2 // javax.crypto.interfaces.DHKey pubk
        31: .line 99
            aload 2 /* pubk */
            invokeinterface javax.crypto.interfaces.DHKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
            istore 1 /* size */
        end local 2 // javax.crypto.interfaces.DHKey pubk
        32: .line 100
            goto 45
      StackMap locals:
      StackMap stack:
        33: aload 0 /* key */
            instanceof java.security.interfaces.EdECKey
            ifeq 45
        34: .line 101
            aload 0 /* key */
            checkcast java.security.interfaces.EdECKey
            invokeinterface java.security.interfaces.EdECKey.getParams:()Ljava/security/spec/NamedParameterSpec;
            invokevirtual java.security.spec.NamedParameterSpec.getName:()Ljava/lang/String;
            astore 2 /* nc */
        start local 2 // java.lang.String nc
        35: .line 102
            aload 2 /* nc */
            getstatic java.security.spec.NamedParameterSpec.ED25519:Ljava/security/spec/NamedParameterSpec;
            invokevirtual java.security.spec.NamedParameterSpec.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 38
        36: .line 103
            sipush 255
            istore 1 /* size */
        37: .line 104
            goto 45
      StackMap locals: java.lang.String
      StackMap stack:
        38: aload 2 /* nc */
        39: .line 105
            getstatic java.security.spec.NamedParameterSpec.ED448:Ljava/security/spec/NamedParameterSpec;
            invokevirtual java.security.spec.NamedParameterSpec.getName:()Ljava/lang/String;
        40: .line 104
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
        41: .line 105
            ifeq 44
        42: .line 106
            sipush 448
            istore 1 /* size */
        43: .line 107
            goto 45
        44: .line 108
      StackMap locals:
      StackMap stack:
            iconst_m1
            istore 1 /* size */
        end local 2 // java.lang.String nc
        45: .line 113
      StackMap locals:
      StackMap stack:
            iload 1 /* size */
            ireturn
        end local 1 // int size
        end local 0 // java.security.Key key
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   46     0     key  Ljava/security/Key;
            1   46     1    size  I
            3    4     2   ruler  Lsun/security/util/Length;
           10   13     2      sk  Ljavax/crypto/SecretKey;
           11   13     3  format  Ljava/lang/String;
           16   17     2    pubk  Ljava/security/interfaces/RSAKey;
           20   21     2    pubk  Ljava/security/interfaces/ECKey;
           24   28     2    pubk  Ljava/security/interfaces/DSAKey;
           25   28     3  params  Ljava/security/interfaces/DSAParams;
           31   32     2    pubk  Ljavax/crypto/interfaces/DHKey;
           35   45     2      nc  Ljava/lang/String;
      Exception table:
        from    to  target  type
           2     4       5  Class java.lang.UnsupportedOperationException
    MethodParameters:
      Name  Flags
      key   

  public static final int getKeySize(java.security.AlgorithmParameters);
    descriptor: (Ljava/security/AlgorithmParameters;)I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.security.AlgorithmParameters parameters
         0: .line 125
            aload 0 /* parameters */
            invokevirtual java.security.AlgorithmParameters.getAlgorithm:()Ljava/lang/String;
            astore 1 /* algorithm */
        start local 1 // java.lang.String algorithm
         1: .line 126
            aload 1 /* algorithm */
            dup
            astore 2
            invokevirtual java.lang.String.hashCode:()I
            lookupswitch { // 2
          -1976312388: 2
                 2206: 3
              default: 26
          }
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
         2: aload 2
            ldc "DiffieHellman"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 19
            goto 26
      StackMap locals:
      StackMap stack:
         3: aload 2
            ldc "EC"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
            goto 26
         4: .line 129
      StackMap locals:
      StackMap stack:
            aload 0 /* parameters */
         5: .line 130
            ldc Lsun/security/util/ECKeySizeParameterSpec;
         6: .line 129
            invokevirtual java.security.AlgorithmParameters.getParameterSpec:(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
            checkcast sun.security.util.ECKeySizeParameterSpec
            astore 3 /* ps */
        start local 3 // sun.security.util.ECKeySizeParameterSpec ps
         7: .line 131
            aload 3 /* ps */
            ifnull 11
         8: .line 132
            aload 3 /* ps */
            invokevirtual sun.security.util.ECKeySizeParameterSpec.getKeySize:()I
         9: ireturn
        end local 3 // sun.security.util.ECKeySizeParameterSpec ps
        10: .line 134
      StackMap locals:
      StackMap stack: java.security.spec.InvalidParameterSpecException
            pop
        11: .line 139
      StackMap locals:
      StackMap stack:
            aload 0 /* parameters */
        12: .line 140
            ldc Ljava/security/spec/ECParameterSpec;
        13: .line 139
            invokevirtual java.security.AlgorithmParameters.getParameterSpec:(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
            checkcast java.security.spec.ECParameterSpec
            astore 3 /* ps */
        start local 3 // java.security.spec.ECParameterSpec ps
        14: .line 141
            aload 3 /* ps */
            ifnull 26
        15: .line 142
            aload 3 /* ps */
            invokevirtual java.security.spec.ECParameterSpec.getOrder:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
        16: ireturn
        end local 3 // java.security.spec.ECParameterSpec ps
        17: .line 144
      StackMap locals:
      StackMap stack: java.security.spec.InvalidParameterSpecException
            pop
        18: .line 152
            goto 26
        19: .line 155
      StackMap locals:
      StackMap stack:
            aload 0 /* parameters */
        20: .line 156
            ldc Ljavax/crypto/spec/DHParameterSpec;
        21: .line 155
            invokevirtual java.security.AlgorithmParameters.getParameterSpec:(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
            checkcast javax.crypto.spec.DHParameterSpec
            astore 3 /* ps */
        start local 3 // javax.crypto.spec.DHParameterSpec ps
        22: .line 157
            aload 3 /* ps */
            ifnull 26
        23: .line 158
            aload 3 /* ps */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.bitLength:()I
        24: ireturn
        end local 3 // javax.crypto.spec.DHParameterSpec ps
        25: .line 160
      StackMap locals:
      StackMap stack: java.security.spec.InvalidParameterSpecException
            pop
        26: .line 168
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 1 // java.lang.String algorithm
        end local 0 // java.security.AlgorithmParameters parameters
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   27     0  parameters  Ljava/security/AlgorithmParameters;
            1   27     1   algorithm  Ljava/lang/String;
            7   10     3          ps  Lsun/security/util/ECKeySizeParameterSpec;
           14   17     3          ps  Ljava/security/spec/ECParameterSpec;
           22   25     3          ps  Ljavax/crypto/spec/DHParameterSpec;
      Exception table:
        from    to  target  type
           4     9      10  Class java.security.spec.InvalidParameterSpecException
          11    16      17  Class java.security.spec.InvalidParameterSpecException
          19    24      25  Class java.security.spec.InvalidParameterSpecException
    MethodParameters:
            Name  Flags
      parameters  

  public static final void validate(java.security.Key);
    descriptor: (Ljava/security/Key;)V
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.security.Key key
         0: .line 183
            aload 0 /* key */
            ifnonnull 4
         1: .line 184
            new java.lang.NullPointerException
            dup
         2: .line 185
            ldc "The key to be validated cannot be null"
         3: .line 184
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 188
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            instanceof javax.crypto.interfaces.DHPublicKey
            ifeq 6
         5: .line 189
            aload 0 /* key */
            checkcast javax.crypto.interfaces.DHPublicKey
            invokestatic sun.security.util.KeyUtil.validateDHPublicKey:(Ljavax/crypto/interfaces/DHPublicKey;)V
         6: .line 191
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.security.Key key
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0   key  Ljava/security/Key;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  public static final void validate(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)V
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.security.spec.KeySpec keySpec
         0: .line 207
            aload 0 /* keySpec */
            ifnonnull 4
         1: .line 208
            new java.lang.NullPointerException
            dup
         2: .line 209
            ldc "The key spec to be validated cannot be null"
         3: .line 208
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 212
      StackMap locals:
      StackMap stack:
            aload 0 /* keySpec */
            instanceof javax.crypto.spec.DHPublicKeySpec
            ifeq 6
         5: .line 213
            aload 0 /* keySpec */
            checkcast javax.crypto.spec.DHPublicKeySpec
            invokestatic sun.security.util.KeyUtil.validateDHPublicKey:(Ljavax/crypto/spec/DHPublicKeySpec;)V
         6: .line 215
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.security.spec.KeySpec keySpec
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0  keySpec  Ljava/security/spec/KeySpec;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
         Name  Flags
      keySpec  

  public static final boolean isOracleJCEProvider(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String providerName
         0: .line 226
            aload 0 /* providerName */
            ifnull 5
         1: .line 227
            aload 0 /* providerName */
            ldc "SunJCE"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
         2: .line 228
            aload 0 /* providerName */
            ldc "SunMSCAPI"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
         3: .line 229
            aload 0 /* providerName */
            ldc "SunPKCS11"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 5
         4: .line 226
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_0
            ireturn
        end local 0 // java.lang.String providerName
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0  providerName  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      providerName  

  public static byte[] checkTlsPreMasterSecretKey(int, int, java.security.SecureRandom, byte[], boolean);
    descriptor: (IILjava/security/SecureRandom;[BZ)[B
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=7, args_size=5
        start local 0 // int clientVersion
        start local 1 // int serverVersion
        start local 2 // java.security.SecureRandom random
        start local 3 // byte[] encoded
        start local 4 // boolean isFailOver
         0: .line 275
            aload 2 /* random */
            ifnonnull 2
         1: .line 276
            invokestatic sun.security.jca.JCAUtil.getSecureRandom:()Ljava/security/SecureRandom;
            astore 2 /* random */
         2: .line 278
      StackMap locals:
      StackMap stack:
            bipush 48
            newarray 8
            astore 5 /* replacer */
        start local 5 // byte[] replacer
         3: .line 279
            aload 2 /* random */
            aload 5 /* replacer */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         4: .line 281
            iload 4 /* isFailOver */
            ifne 14
            aload 3 /* encoded */
            ifnull 14
         5: .line 283
            aload 3 /* encoded */
            arraylength
            bipush 48
            if_icmpeq 7
         6: .line 285
            aload 5 /* replacer */
            areturn
         7: .line 289
      StackMap locals: byte[]
      StackMap stack:
            aload 3 /* encoded */
            iconst_0
            baload
            sipush 255
            iand
            bipush 8
            ishl
            aload 3 /* encoded */
            iconst_1
            baload
            sipush 255
            iand
            ior
         8: .line 288
            istore 6 /* encodedVersion */
        start local 6 // int encodedVersion
         9: .line 290
            iload 0 /* clientVersion */
            iload 6 /* encodedVersion */
            if_icmpeq 13
        10: .line 291
            iload 0 /* clientVersion */
            sipush 769
            if_icmpgt 12
        11: .line 292
            iload 1 /* serverVersion */
            iload 6 /* encodedVersion */
            if_icmpeq 13
        12: .line 293
      StackMap locals: int
      StackMap stack:
            aload 5 /* replacer */
            astore 3 /* encoded */
        13: .line 300
      StackMap locals:
      StackMap stack:
            aload 3 /* encoded */
            areturn
        end local 6 // int encodedVersion
        14: .line 304
      StackMap locals:
      StackMap stack:
            aload 5 /* replacer */
            areturn
        end local 5 // byte[] replacer
        end local 4 // boolean isFailOver
        end local 3 // byte[] encoded
        end local 2 // java.security.SecureRandom random
        end local 1 // int serverVersion
        end local 0 // int clientVersion
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   15     0   clientVersion  I
            0   15     1   serverVersion  I
            0   15     2          random  Ljava/security/SecureRandom;
            0   15     3         encoded  [B
            0   15     4      isFailOver  Z
            3   15     5        replacer  [B
            9   14     6  encodedVersion  I
    MethodParameters:
               Name  Flags
      clientVersion  
      serverVersion  
      random         
      encoded        
      isFailOver     

  private static void validateDHPublicKey(javax.crypto.interfaces.DHPublicKey);
    descriptor: (Ljavax/crypto/interfaces/DHPublicKey;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=1
        start local 0 // javax.crypto.interfaces.DHPublicKey publicKey
         0: .line 319
            aload 0 /* publicKey */
            invokeinterface javax.crypto.interfaces.DHPublicKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            astore 1 /* paramSpec */
        start local 1 // javax.crypto.spec.DHParameterSpec paramSpec
         1: .line 321
            aload 1 /* paramSpec */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
            astore 2 /* p */
        start local 2 // java.math.BigInteger p
         2: .line 322
            aload 1 /* paramSpec */
            invokevirtual javax.crypto.spec.DHParameterSpec.getG:()Ljava/math/BigInteger;
            astore 3 /* g */
        start local 3 // java.math.BigInteger g
         3: .line 323
            aload 0 /* publicKey */
            invokeinterface javax.crypto.interfaces.DHPublicKey.getY:()Ljava/math/BigInteger;
            astore 4 /* y */
        start local 4 // java.math.BigInteger y
         4: .line 325
            aload 2 /* p */
            aload 3 /* g */
            aload 4 /* y */
            invokestatic sun.security.util.KeyUtil.validateDHPublicKey:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         5: .line 326
            return
        end local 4 // java.math.BigInteger y
        end local 3 // java.math.BigInteger g
        end local 2 // java.math.BigInteger p
        end local 1 // javax.crypto.spec.DHParameterSpec paramSpec
        end local 0 // javax.crypto.interfaces.DHPublicKey publicKey
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    6     0  publicKey  Ljavax/crypto/interfaces/DHPublicKey;
            1    6     1  paramSpec  Ljavax/crypto/spec/DHParameterSpec;
            2    6     2          p  Ljava/math/BigInteger;
            3    6     3          g  Ljava/math/BigInteger;
            4    6     4          y  Ljava/math/BigInteger;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
           Name  Flags
      publicKey  

  private static void validateDHPublicKey(javax.crypto.spec.DHPublicKeySpec);
    descriptor: (Ljavax/crypto/spec/DHPublicKeySpec;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // javax.crypto.spec.DHPublicKeySpec publicKeySpec
         0: .line 330
            aload 0 /* publicKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getP:()Ljava/math/BigInteger;
         1: .line 331
            aload 0 /* publicKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getG:()Ljava/math/BigInteger;
            aload 0 /* publicKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getY:()Ljava/math/BigInteger;
         2: .line 330
            invokestatic sun.security.util.KeyUtil.validateDHPublicKey:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         3: .line 332
            return
        end local 0 // javax.crypto.spec.DHPublicKeySpec publicKeySpec
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0  publicKeySpec  Ljavax/crypto/spec/DHPublicKeySpec;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
               Name  Flags
      publicKeySpec  

  private static void validateDHPublicKey(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
    descriptor: (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // java.math.BigInteger p
        start local 1 // java.math.BigInteger g
        start local 2 // java.math.BigInteger y
         0: .line 338
            getstatic java.math.BigInteger.ONE:Ljava/math/BigInteger;
            astore 3 /* leftOpen */
        start local 3 // java.math.BigInteger leftOpen
         1: .line 339
            aload 0 /* p */
            getstatic java.math.BigInteger.ONE:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 4 /* rightOpen */
        start local 4 // java.math.BigInteger rightOpen
         2: .line 340
            aload 2 /* y */
            aload 3 /* leftOpen */
            invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
            ifgt 6
         3: .line 341
            new java.security.InvalidKeyException
            dup
         4: .line 342
            ldc "Diffie-Hellman public key is too small"
         5: .line 341
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 344
      StackMap locals: java.math.BigInteger java.math.BigInteger
      StackMap stack:
            aload 2 /* y */
            aload 4 /* rightOpen */
            invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
            iflt 10
         7: .line 345
            new java.security.InvalidKeyException
            dup
         8: .line 346
            ldc "Diffie-Hellman public key is too large"
         9: .line 345
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 355
      StackMap locals:
      StackMap stack:
            aload 0 /* p */
            aload 2 /* y */
            invokevirtual java.math.BigInteger.remainder:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 5 /* r */
        start local 5 // java.math.BigInteger r
        11: .line 356
            aload 5 /* r */
            getstatic java.math.BigInteger.ZERO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
            ifeq 13
        12: .line 357
            new java.security.InvalidKeyException
            dup
            ldc "Invalid Diffie-Hellman parameters"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        13: .line 359
      StackMap locals: java.math.BigInteger
      StackMap stack:
            return
        end local 5 // java.math.BigInteger r
        end local 4 // java.math.BigInteger rightOpen
        end local 3 // java.math.BigInteger leftOpen
        end local 2 // java.math.BigInteger y
        end local 1 // java.math.BigInteger g
        end local 0 // java.math.BigInteger p
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   14     0          p  Ljava/math/BigInteger;
            0   14     1          g  Ljava/math/BigInteger;
            0   14     2          y  Ljava/math/BigInteger;
            1   14     3   leftOpen  Ljava/math/BigInteger;
            2   14     4  rightOpen  Ljava/math/BigInteger;
           11   14     5          r  Ljava/math/BigInteger;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      p     
      g     
      y     

  public static byte[] trimZeroes(byte[]);
    descriptor: ([B)[B
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=1
        start local 0 // byte[] b
         0: .line 367
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: .line 368
            goto 3
         2: .line 369
      StackMap locals: int
      StackMap stack:
            iinc 1 /* i */ 1
         3: .line 368
      StackMap locals:
      StackMap stack:
            iload 1 /* i */
            aload 0 /* b */
            arraylength
            iconst_1
            isub
            if_icmpge 4
            aload 0 /* b */
            iload 1 /* i */
            baload
            ifeq 2
         4: .line 371
      StackMap locals:
      StackMap stack:
            iload 1 /* i */
            ifne 6
         5: .line 372
            aload 0 /* b */
            areturn
         6: .line 374
      StackMap locals:
      StackMap stack:
            aload 0 /* b */
            arraylength
            iload 1 /* i */
            isub
            newarray 8
            astore 2 /* t */
        start local 2 // byte[] t
         7: .line 375
            aload 0 /* b */
            iload 1 /* i */
            aload 2 /* t */
            iconst_0
            aload 2 /* t */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         8: .line 376
            aload 2 /* t */
            areturn
        end local 2 // byte[] t
        end local 1 // int i
        end local 0 // byte[] b
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0     b  [B
            1    9     1     i  I
            7    9     2     t  [B
    MethodParameters:
      Name  Flags
      b     
}
SourceFile: "KeyUtil.java"