public final class com.sun.crypto.provider.DHKeyFactory extends java.security.KeyFactorySpi
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.sun.crypto.provider.DHKeyFactory
  super_class: java.security.KeyFactorySpi
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.crypto.provider.DHKeyFactory this
         0: .line 52
            aload 0 /* this */
            invokespecial java.security.KeyFactorySpi.<init>:()V
         1: .line 53
            return
        end local 0 // com.sun.crypto.provider.DHKeyFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/crypto/provider/DHKeyFactory;

  protected java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.sun.crypto.provider.DHKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 70
            aload 1 /* keySpec */
            instanceof javax.crypto.spec.DHPublicKeySpec
            ifeq 7
         1: .line 71
            aload 1 /* keySpec */
            checkcast javax.crypto.spec.DHPublicKeySpec
            astore 2 /* dhPubKeySpec */
        start local 2 // javax.crypto.spec.DHPublicKeySpec dhPubKeySpec
         2: .line 72
            new com.sun.crypto.provider.DHPublicKey
            dup
            aload 2 /* dhPubKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getY:()Ljava/math/BigInteger;
         3: .line 73
            aload 2 /* dhPubKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getP:()Ljava/math/BigInteger;
         4: .line 74
            aload 2 /* dhPubKeySpec */
            invokevirtual javax.crypto.spec.DHPublicKeySpec.getG:()Ljava/math/BigInteger;
         5: .line 72
            invokespecial com.sun.crypto.provider.DHPublicKey.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         6: areturn
        end local 2 // javax.crypto.spec.DHPublicKeySpec dhPubKeySpec
         7: .line 76
      StackMap locals:
      StackMap stack:
            aload 1 /* keySpec */
            instanceof java.security.spec.X509EncodedKeySpec
            ifeq 12
         8: .line 77
            new com.sun.crypto.provider.DHPublicKey
            dup
         9: .line 78
            aload 1 /* keySpec */
            checkcast java.security.spec.X509EncodedKeySpec
            invokevirtual java.security.spec.X509EncodedKeySpec.getEncoded:()[B
        10: .line 77
            invokespecial com.sun.crypto.provider.DHPublicKey.<init>:([B)V
        11: areturn
        12: .line 81
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        13: .line 82
            ldc "Inappropriate key specification"
        14: .line 81
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 84
      StackMap locals:
      StackMap stack: java.security.InvalidKeyException
            astore 2 /* e */
        start local 2 // java.security.InvalidKeyException e
        16: .line 85
            new java.security.spec.InvalidKeySpecException
            dup
        17: .line 86
            ldc "Inappropriate key specification"
            aload 2 /* e */
        18: .line 85
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.InvalidKeyException e
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // com.sun.crypto.provider.DHKeyFactory this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   19     0          this  Lcom/sun/crypto/provider/DHKeyFactory;
            0   19     1       keySpec  Ljava/security/spec/KeySpec;
            2    7     2  dhPubKeySpec  Ljavax/crypto/spec/DHPublicKeySpec;
           16   19     2             e  Ljava/security/InvalidKeyException;
      Exception table:
        from    to  target  type
           0     6      15  Class java.security.InvalidKeyException
           7    11      15  Class java.security.InvalidKeyException
          12    15      15  Class java.security.InvalidKeyException
    Exceptions:
      throws java.security.spec.InvalidKeySpecException
    MethodParameters:
         Name  Flags
      keySpec  

  protected java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.sun.crypto.provider.DHKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 105
            aload 1 /* keySpec */
            instanceof javax.crypto.spec.DHPrivateKeySpec
            ifeq 7
         1: .line 106
            aload 1 /* keySpec */
            checkcast javax.crypto.spec.DHPrivateKeySpec
            astore 2 /* dhPrivKeySpec */
        start local 2 // javax.crypto.spec.DHPrivateKeySpec dhPrivKeySpec
         2: .line 107
            new com.sun.crypto.provider.DHPrivateKey
            dup
            aload 2 /* dhPrivKeySpec */
            invokevirtual javax.crypto.spec.DHPrivateKeySpec.getX:()Ljava/math/BigInteger;
         3: .line 108
            aload 2 /* dhPrivKeySpec */
            invokevirtual javax.crypto.spec.DHPrivateKeySpec.getP:()Ljava/math/BigInteger;
         4: .line 109
            aload 2 /* dhPrivKeySpec */
            invokevirtual javax.crypto.spec.DHPrivateKeySpec.getG:()Ljava/math/BigInteger;
         5: .line 107
            invokespecial com.sun.crypto.provider.DHPrivateKey.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         6: areturn
        end local 2 // javax.crypto.spec.DHPrivateKeySpec dhPrivKeySpec
         7: .line 111
      StackMap locals:
      StackMap stack:
            aload 1 /* keySpec */
            instanceof java.security.spec.PKCS8EncodedKeySpec
            ifeq 12
         8: .line 112
            new com.sun.crypto.provider.DHPrivateKey
            dup
         9: .line 113
            aload 1 /* keySpec */
            checkcast java.security.spec.PKCS8EncodedKeySpec
            invokevirtual java.security.spec.PKCS8EncodedKeySpec.getEncoded:()[B
        10: .line 112
            invokespecial com.sun.crypto.provider.DHPrivateKey.<init>:([B)V
        11: areturn
        12: .line 116
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        13: .line 117
            ldc "Inappropriate key specification"
        14: .line 116
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 119
      StackMap locals:
      StackMap stack: java.security.InvalidKeyException
            astore 2 /* e */
        start local 2 // java.security.InvalidKeyException e
        16: .line 120
            new java.security.spec.InvalidKeySpecException
            dup
        17: .line 121
            ldc "Inappropriate key specification"
            aload 2 /* e */
        18: .line 120
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.InvalidKeyException e
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // com.sun.crypto.provider.DHKeyFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   19     0           this  Lcom/sun/crypto/provider/DHKeyFactory;
            0   19     1        keySpec  Ljava/security/spec/KeySpec;
            2    7     2  dhPrivKeySpec  Ljavax/crypto/spec/DHPrivateKeySpec;
           16   19     2              e  Ljava/security/InvalidKeyException;
      Exception table:
        from    to  target  type
           0     6      15  Class java.security.InvalidKeyException
           7    11      15  Class java.security.InvalidKeyException
          12    15      15  Class java.security.InvalidKeyException
    Exceptions:
      throws java.security.spec.InvalidKeySpecException
    MethodParameters:
         Name  Flags
      keySpec  

  protected <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, java.lang.Class<T>);
    descriptor: (Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // com.sun.crypto.provider.DHKeyFactory this
        start local 1 // java.security.Key key
        start local 2 // java.lang.Class keySpec
         0: .line 146
            aload 1 /* key */
            instanceof javax.crypto.interfaces.DHPublicKey
            ifeq 14
         1: .line 148
            ldc Ljavax/crypto/spec/DHPublicKeySpec;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 9
         2: .line 150
            aload 1 /* key */
            checkcast javax.crypto.interfaces.DHPublicKey
         3: .line 149
            astore 4 /* dhPubKey */
        start local 4 // javax.crypto.interfaces.DHPublicKey dhPubKey
         4: .line 151
            aload 4 /* dhPubKey */
            invokeinterface javax.crypto.interfaces.DHPublicKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            astore 3 /* params */
        start local 3 // javax.crypto.spec.DHParameterSpec params
         5: .line 152
            aload 2 /* keySpec */
            new javax.crypto.spec.DHPublicKeySpec
            dup
            aload 4 /* dhPubKey */
            invokeinterface javax.crypto.interfaces.DHPublicKey.getY:()Ljava/math/BigInteger;
         6: .line 153
            aload 3 /* params */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
         7: .line 154
            aload 3 /* params */
            invokevirtual javax.crypto.spec.DHParameterSpec.getG:()Ljava/math/BigInteger;
            invokespecial javax.crypto.spec.DHPublicKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         8: .line 152
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        end local 4 // javax.crypto.interfaces.DHPublicKey dhPubKey
        end local 3 // javax.crypto.spec.DHParameterSpec params
         9: .line 156
      StackMap locals:
      StackMap stack:
            ldc Ljava/security/spec/X509EncodedKeySpec;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 11
        10: .line 157
            aload 2 /* keySpec */
            new java.security.spec.X509EncodedKeySpec
            dup
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            invokespecial java.security.spec.X509EncodedKeySpec.<init>:([B)V
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        11: .line 160
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        12: .line 161
            ldc "Inappropriate key specification"
        13: .line 160
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 164
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof javax.crypto.interfaces.DHPrivateKey
            ifeq 28
        15: .line 166
            ldc Ljavax/crypto/spec/DHPrivateKeySpec;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 23
        16: .line 168
            aload 1 /* key */
            checkcast javax.crypto.interfaces.DHPrivateKey
        17: .line 167
            astore 4 /* dhPrivKey */
        start local 4 // javax.crypto.interfaces.DHPrivateKey dhPrivKey
        18: .line 169
            aload 4 /* dhPrivKey */
            invokeinterface javax.crypto.interfaces.DHPrivateKey.getParams:()Ljavax/crypto/spec/DHParameterSpec;
            astore 3 /* params */
        start local 3 // javax.crypto.spec.DHParameterSpec params
        19: .line 170
            aload 2 /* keySpec */
            new javax.crypto.spec.DHPrivateKeySpec
            dup
            aload 4 /* dhPrivKey */
            invokeinterface javax.crypto.interfaces.DHPrivateKey.getX:()Ljava/math/BigInteger;
        20: .line 171
            aload 3 /* params */
            invokevirtual javax.crypto.spec.DHParameterSpec.getP:()Ljava/math/BigInteger;
        21: .line 172
            aload 3 /* params */
            invokevirtual javax.crypto.spec.DHParameterSpec.getG:()Ljava/math/BigInteger;
            invokespecial javax.crypto.spec.DHPrivateKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        22: .line 170
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        end local 4 // javax.crypto.interfaces.DHPrivateKey dhPrivKey
        end local 3 // javax.crypto.spec.DHParameterSpec params
        23: .line 174
      StackMap locals:
      StackMap stack:
            ldc Ljava/security/spec/PKCS8EncodedKeySpec;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 25
        24: .line 175
            aload 2 /* keySpec */
            new java.security.spec.PKCS8EncodedKeySpec
            dup
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            invokespecial java.security.spec.PKCS8EncodedKeySpec.<init>:([B)V
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        25: .line 178
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        26: .line 179
            ldc "Inappropriate key specification"
        27: .line 178
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 183
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
            ldc "Inappropriate key type"
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.lang.Class keySpec
        end local 1 // java.security.Key key
        end local 0 // com.sun.crypto.provider.DHKeyFactory this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   29     0       this  Lcom/sun/crypto/provider/DHKeyFactory;
            0   29     1        key  Ljava/security/Key;
            0   29     2    keySpec  Ljava/lang/Class<TT;>;
            5    9     3     params  Ljavax/crypto/spec/DHParameterSpec;
           19   23     3     params  Ljavax/crypto/spec/DHParameterSpec;
            4    9     4   dhPubKey  Ljavax/crypto/interfaces/DHPublicKey;
           18   23     4  dhPrivKey  Ljavax/crypto/interfaces/DHPrivateKey;
    Exceptions:
      throws java.security.spec.InvalidKeySpecException
    Signature: <T::Ljava/security/spec/KeySpec;>(Ljava/security/Key;Ljava/lang/Class<TT;>;)TT;
    MethodParameters:
         Name  Flags
      key      
      keySpec  

  protected java.security.Key engineTranslateKey(java.security.Key);
    descriptor: (Ljava/security/Key;)Ljava/security/Key;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.sun.crypto.provider.DHKeyFactory this
        start local 1 // java.security.Key key
         0: .line 203
            aload 1 /* key */
            instanceof javax.crypto.interfaces.DHPublicKey
            ifeq 8
         1: .line 205
            aload 1 /* key */
            instanceof com.sun.crypto.provider.DHPublicKey
            ifeq 4
         2: .line 206
            aload 1 /* key */
         3: areturn
         4: .line 210
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* key */
            ldc Ljavax/crypto/spec/DHPublicKeySpec;
            invokevirtual com.sun.crypto.provider.DHKeyFactory.engineGetKeySpec:(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
            checkcast javax.crypto.spec.DHPublicKeySpec
         5: .line 209
            astore 2 /* dhPubKeySpec */
        start local 2 // javax.crypto.spec.DHPublicKeySpec dhPubKeySpec
         6: .line 212
            aload 0 /* this */
            aload 2 /* dhPubKeySpec */
            invokevirtual com.sun.crypto.provider.DHKeyFactory.engineGeneratePublic:(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
         7: areturn
        end local 2 // javax.crypto.spec.DHPublicKeySpec dhPubKeySpec
         8: .line 214
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof javax.crypto.interfaces.DHPrivateKey
            ifeq 16
         9: .line 216
            aload 1 /* key */
            instanceof com.sun.crypto.provider.DHPrivateKey
            ifeq 12
        10: .line 217
            aload 1 /* key */
        11: areturn
        12: .line 221
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* key */
            ldc Ljavax/crypto/spec/DHPrivateKeySpec;
            invokevirtual com.sun.crypto.provider.DHKeyFactory.engineGetKeySpec:(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;
            checkcast javax.crypto.spec.DHPrivateKeySpec
        13: .line 220
            astore 2 /* dhPrivKeySpec */
        start local 2 // javax.crypto.spec.DHPrivateKeySpec dhPrivKeySpec
        14: .line 223
            aload 0 /* this */
            aload 2 /* dhPrivKeySpec */
            invokevirtual com.sun.crypto.provider.DHKeyFactory.engineGeneratePrivate:(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
        15: areturn
        end local 2 // javax.crypto.spec.DHPrivateKeySpec dhPrivKeySpec
        16: .line 226
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Wrong algorithm type"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 229
      StackMap locals:
      StackMap stack: java.security.spec.InvalidKeySpecException
            astore 2 /* e */
        start local 2 // java.security.spec.InvalidKeySpecException e
        18: .line 230
            new java.security.InvalidKeyException
            dup
            ldc "Cannot translate key"
            aload 2 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.spec.InvalidKeySpecException e
        end local 1 // java.security.Key key
        end local 0 // com.sun.crypto.provider.DHKeyFactory this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   19     0           this  Lcom/sun/crypto/provider/DHKeyFactory;
            0   19     1            key  Ljava/security/Key;
            6    8     2   dhPubKeySpec  Ljavax/crypto/spec/DHPublicKeySpec;
           14   16     2  dhPrivKeySpec  Ljavax/crypto/spec/DHPrivateKeySpec;
           18   19     2              e  Ljava/security/spec/InvalidKeySpecException;
      Exception table:
        from    to  target  type
           0     3      17  Class java.security.spec.InvalidKeySpecException
           4     7      17  Class java.security.spec.InvalidKeySpecException
           8    11      17  Class java.security.spec.InvalidKeySpecException
          12    15      17  Class java.security.spec.InvalidKeySpecException
          16    17      17  Class java.security.spec.InvalidKeySpecException
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   
}
SourceFile: "DHKeyFactory.java"