public class sun.security.rsa.RSAKeyFactory extends java.security.KeyFactorySpi
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: sun.security.rsa.RSAKeyFactory
  super_class: java.security.KeyFactorySpi
{
  private static final java.lang.Class<?> RSA_PUB_KEYSPEC_CLS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  private static final java.lang.Class<?> RSA_PRIV_KEYSPEC_CLS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  private static final java.lang.Class<?> RSA_PRIVCRT_KEYSPEC_CLS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  private static final java.lang.Class<?> X509_KEYSPEC_CLS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  private static final java.lang.Class<?> PKCS8_KEYSPEC_CLS;
    descriptor: Ljava/lang/Class;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/lang/Class<*>;

  public static final int MIN_MODLEN;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 512

  public static final int MAX_MODLEN;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 16384

  private final sun.security.rsa.RSAUtil$KeyType type;
    descriptor: Lsun/security/rsa/RSAUtil$KeyType;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public static final int MAX_MODLEN_RESTRICT_EXP;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 3072

  public static final int MAX_RESTRICTED_EXPLEN;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 64

  private static final boolean restrictExpLen;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 68
            ldc Ljava/security/spec/RSAPublicKeySpec;
            putstatic sun.security.rsa.RSAKeyFactory.RSA_PUB_KEYSPEC_CLS:Ljava/lang/Class;
         1: .line 70
            ldc Ljava/security/spec/RSAPrivateKeySpec;
         2: .line 69
            putstatic sun.security.rsa.RSAKeyFactory.RSA_PRIV_KEYSPEC_CLS:Ljava/lang/Class;
         3: .line 72
            ldc Ljava/security/spec/RSAPrivateCrtKeySpec;
         4: .line 71
            putstatic sun.security.rsa.RSAKeyFactory.RSA_PRIVCRT_KEYSPEC_CLS:Ljava/lang/Class;
         5: .line 73
            ldc Ljava/security/spec/X509EncodedKeySpec;
            putstatic sun.security.rsa.RSAKeyFactory.X509_KEYSPEC_CLS:Ljava/lang/Class;
         6: .line 74
            ldc Ljava/security/spec/PKCS8EncodedKeySpec;
            putstatic sun.security.rsa.RSAKeyFactory.PKCS8_KEYSPEC_CLS:Ljava/lang/Class;
         7: .line 92
            ldc "true"
         8: .line 93
            ldc "sun.security.rsa.restrictRSAExponent"
            ldc "true"
         9: .line 92
            invokestatic sun.security.action.GetPropertyAction.privilegedGetProperty:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
        10: .line 91
            putstatic sun.security.rsa.RSAKeyFactory.restrictExpLen:Z
        11: .line 93
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static sun.security.rsa.RSAKeyFactory getInstance(sun.security.rsa.RSAUtil$KeyType);
    descriptor: (Lsun/security/rsa/RSAUtil$KeyType;)Lsun/security/rsa/RSAKeyFactory;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // sun.security.rsa.RSAUtil$KeyType type
         0: .line 96
            new sun.security.rsa.RSAKeyFactory
            dup
            aload 0 /* type */
            invokespecial sun.security.rsa.RSAKeyFactory.<init>:(Lsun/security/rsa/RSAUtil$KeyType;)V
            areturn
        end local 0 // sun.security.rsa.RSAUtil$KeyType type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  type  Lsun/security/rsa/RSAUtil$KeyType;
    MethodParameters:
      Name  Flags
      type  

  private static void checkKeyAlgo(java.security.Key, java.lang.String);
    descriptor: (Ljava/security/Key;Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // java.security.Key key
        start local 1 // java.lang.String expectedAlg
         0: .line 102
            aload 0 /* key */
            invokeinterface java.security.Key.getAlgorithm:()Ljava/lang/String;
            astore 2 /* keyAlg */
        start local 2 // java.lang.String keyAlg
         1: .line 103
            aload 2 /* keyAlg */
            ifnull 2
            aload 2 /* keyAlg */
            aload 1 /* expectedAlg */
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifne 5
         2: .line 104
      StackMap locals: java.lang.String
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Expected a "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* expectedAlg */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         3: .line 105
            ldc " key, but got "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* keyAlg */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         4: .line 104
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 107
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String keyAlg
        end local 1 // java.lang.String expectedAlg
        end local 0 // java.security.Key key
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0          key  Ljava/security/Key;
            0    6     1  expectedAlg  Ljava/lang/String;
            1    6     2       keyAlg  Ljava/lang/String;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
             Name  Flags
      key          
      expectedAlg  

  public static java.security.interfaces.RSAKey toRSAKey(java.security.Key);
    descriptor: (Ljava/security/Key;)Ljava/security/interfaces/RSAKey;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // java.security.Key key
         0: .line 117
            aload 0 /* key */
            ifnonnull 2
         1: .line 118
            new java.security.InvalidKeyException
            dup
            ldc "Key must not be null"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            instanceof sun.security.rsa.RSAPrivateKeyImpl
            ifne 5
         3: .line 121
            aload 0 /* key */
            instanceof sun.security.rsa.RSAPrivateCrtKeyImpl
            ifne 5
         4: .line 122
            aload 0 /* key */
            instanceof sun.security.rsa.RSAPublicKeyImpl
            ifeq 6
         5: .line 123
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            checkcast java.security.interfaces.RSAKey
            areturn
         6: .line 126
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            invokeinterface java.security.Key.getAlgorithm:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAUtil$KeyType.lookup:(Ljava/lang/String;)Lsun/security/rsa/RSAUtil$KeyType;
            astore 1 /* type */
        start local 1 // sun.security.rsa.RSAUtil$KeyType type
         7: .line 127
            aload 1 /* type */
            invokestatic sun.security.rsa.RSAKeyFactory.getInstance:(Lsun/security/rsa/RSAUtil$KeyType;)Lsun/security/rsa/RSAKeyFactory;
            astore 2 /* kf */
        start local 2 // sun.security.rsa.RSAKeyFactory kf
         8: .line 128
            aload 2 /* kf */
            aload 0 /* key */
            invokevirtual sun.security.rsa.RSAKeyFactory.engineTranslateKey:(Ljava/security/Key;)Ljava/security/Key;
            checkcast java.security.interfaces.RSAKey
         9: areturn
        end local 2 // sun.security.rsa.RSAKeyFactory kf
        end local 1 // sun.security.rsa.RSAUtil$KeyType type
        10: .line 129
      StackMap locals:
      StackMap stack: java.security.ProviderException
            astore 1 /* e */
        start local 1 // java.security.ProviderException e
        11: .line 130
            new java.security.InvalidKeyException
            dup
            aload 1 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 1 // java.security.ProviderException e
        end local 0 // java.security.Key key
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0   key  Ljava/security/Key;
            7   10     1  type  Lsun/security/rsa/RSAUtil$KeyType;
            8   10     2    kf  Lsun/security/rsa/RSAKeyFactory;
           11   12     1     e  Ljava/security/ProviderException;
      Exception table:
        from    to  target  type
           6     9      10  Class java.security.ProviderException
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  static void checkRSAProviderKeyLengths(int, java.math.BigInteger);
    descriptor: (ILjava/math/BigInteger;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // int modulusLen
        start local 1 // java.math.BigInteger exponent
         0: .line 145
            iload 0 /* modulusLen */
            bipush 7
            iadd
            bipush -8
            iand
            aload 1 /* exponent */
         1: .line 146
            sipush 512
            ldc 2147483647
         2: .line 145
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyLengths:(ILjava/math/BigInteger;II)V
         3: .line 147
            return
        end local 1 // java.math.BigInteger exponent
        end local 0 // int modulusLen
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0  modulusLen  I
            0    4     1    exponent  Ljava/math/BigInteger;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
            Name  Flags
      modulusLen  
      exponent    

  public static void checkKeyLengths(int, java.math.BigInteger, int, int);
    descriptor: (ILjava/math/BigInteger;II)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // int modulusLen
        start local 1 // java.math.BigInteger exponent
        start local 2 // int minModulusLen
        start local 3 // int maxModulusLen
         0: .line 166
            iload 2 /* minModulusLen */
            ifle 4
            iload 0 /* modulusLen */
            iload 2 /* minModulusLen */
            if_icmpge 4
         1: .line 167
            new java.security.InvalidKeyException
            dup
            new java.lang.StringBuilder
            dup
            ldc "RSA keys must be at least "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         2: .line 168
            iload 2 /* minModulusLen */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bits long"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 167
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 174
      StackMap locals:
      StackMap stack:
            iload 3 /* maxModulusLen */
            sipush 16384
            invokestatic java.lang.Math.min:(II)I
            istore 4 /* maxLen */
        start local 4 // int maxLen
         5: .line 178
            iload 0 /* modulusLen */
            iload 4 /* maxLen */
            if_icmple 9
         6: .line 179
            new java.security.InvalidKeyException
            dup
         7: .line 180
            new java.lang.StringBuilder
            dup
            ldc "RSA keys must be no longer than "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 4 /* maxLen */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bits"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         8: .line 179
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 184
      StackMap locals: int
      StackMap stack:
            getstatic sun.security.rsa.RSAKeyFactory.restrictExpLen:Z
            ifeq 15
            aload 1 /* exponent */
            ifnull 15
        10: .line 185
            iload 0 /* modulusLen */
            sipush 3072
            if_icmple 15
        11: .line 186
            aload 1 /* exponent */
            invokevirtual java.math.BigInteger.bitLength:()I
            bipush 64
            if_icmple 15
        12: .line 187
            new java.security.InvalidKeyException
            dup
        13: .line 188
            ldc "RSA exponents can be no longer than 64 bits  if modulus is greater than 3072 bits"
        14: .line 187
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 193
      StackMap locals:
      StackMap stack:
            return
        end local 4 // int maxLen
        end local 3 // int maxModulusLen
        end local 2 // int minModulusLen
        end local 1 // java.math.BigInteger exponent
        end local 0 // int modulusLen
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   16     0     modulusLen  I
            0   16     1       exponent  Ljava/math/BigInteger;
            0   16     2  minModulusLen  I
            0   16     3  maxModulusLen  I
            5   16     4         maxLen  I
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
               Name  Flags
      modulusLen     
      exponent       
      minModulusLen  
      maxModulusLen  

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // sun.security.rsa.RSAKeyFactory this
         0: .line 196
            aload 0 /* this */
            invokespecial java.security.KeyFactorySpi.<init>:()V
         1: .line 197
            aload 0 /* this */
            getstatic sun.security.rsa.RSAUtil$KeyType.RSA:Lsun/security/rsa/RSAUtil$KeyType;
            putfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
         2: .line 198
            return
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/security/rsa/RSAKeyFactory;

  public void <init>(sun.security.rsa.RSAUtil$KeyType);
    descriptor: (Lsun/security/rsa/RSAUtil$KeyType;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // sun.security.rsa.RSAUtil$KeyType type
         0: .line 200
            aload 0 /* this */
            invokespecial java.security.KeyFactorySpi.<init>:()V
         1: .line 201
            aload 0 /* this */
            aload 1 /* type */
            putfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
         2: .line 202
            return
        end local 1 // sun.security.rsa.RSAUtil$KeyType type
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/security/rsa/RSAKeyFactory;
            0    3     1  type  Lsun/security/rsa/RSAUtil$KeyType;
    MethodParameters:
      Name  Flags
      type  

  protected java.security.Key engineTranslateKey(java.security.Key);
    descriptor: (Ljava/security/Key;)Ljava/security/Key;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.Key key
         0: .line 210
            aload 1 /* key */
            ifnonnull 2
         1: .line 211
            new java.security.InvalidKeyException
            dup
            ldc "Key must not be null"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 214
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            invokevirtual sun.security.rsa.RSAUtil$KeyType.keyAlgo:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyAlgo:(Ljava/security/Key;Ljava/lang/String;)V
         3: .line 217
            aload 1 /* key */
            instanceof sun.security.rsa.RSAPrivateKeyImpl
            ifne 6
         4: .line 218
            aload 1 /* key */
            instanceof sun.security.rsa.RSAPrivateCrtKeyImpl
            ifne 6
         5: .line 219
            aload 1 /* key */
            instanceof sun.security.rsa.RSAPublicKeyImpl
            ifeq 7
         6: .line 220
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            areturn
         7: .line 222
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.PublicKey
            ifeq 9
         8: .line 223
            aload 0 /* this */
            aload 1 /* key */
            checkcast java.security.PublicKey
            invokevirtual sun.security.rsa.RSAKeyFactory.translatePublicKey:(Ljava/security/PublicKey;)Ljava/security/PublicKey;
            areturn
         9: .line 224
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.PrivateKey
            ifeq 11
        10: .line 225
            aload 0 /* this */
            aload 1 /* key */
            checkcast java.security.PrivateKey
            invokevirtual sun.security.rsa.RSAKeyFactory.translatePrivateKey:(Ljava/security/PrivateKey;)Ljava/security/PrivateKey;
            areturn
        11: .line 227
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Neither a public nor a private key"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.Key key
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lsun/security/rsa/RSAKeyFactory;
            0   12     1   key  Ljava/security/Key;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  protected java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 235
            aload 0 /* this */
            aload 1 /* keySpec */
            invokevirtual sun.security.rsa.RSAKeyFactory.generatePublic:(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
         1: areturn
         2: .line 236
      StackMap locals:
      StackMap stack: java.security.spec.InvalidKeySpecException
            astore 2 /* e */
        start local 2 // java.security.spec.InvalidKeySpecException e
         3: .line 237
            aload 2 /* e */
            athrow
        end local 2 // java.security.spec.InvalidKeySpecException e
         4: .line 238
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 2 /* e */
        start local 2 // java.security.GeneralSecurityException e
         5: .line 239
            new java.security.spec.InvalidKeySpecException
            dup
            aload 2 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.GeneralSecurityException e
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lsun/security/rsa/RSAKeyFactory;
            0    6     1  keySpec  Ljava/security/spec/KeySpec;
            3    4     2        e  Ljava/security/spec/InvalidKeySpecException;
            5    6     2        e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.security.spec.InvalidKeySpecException
           0     1       4  Class java.security.GeneralSecurityException
    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=3, locals=3, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 247
            aload 0 /* this */
            aload 1 /* keySpec */
            invokevirtual sun.security.rsa.RSAKeyFactory.generatePrivate:(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
         1: areturn
         2: .line 248
      StackMap locals:
      StackMap stack: java.security.spec.InvalidKeySpecException
            astore 2 /* e */
        start local 2 // java.security.spec.InvalidKeySpecException e
         3: .line 249
            aload 2 /* e */
            athrow
        end local 2 // java.security.spec.InvalidKeySpecException e
         4: .line 250
      StackMap locals:
      StackMap stack: java.security.GeneralSecurityException
            astore 2 /* e */
        start local 2 // java.security.GeneralSecurityException e
         5: .line 251
            new java.security.spec.InvalidKeySpecException
            dup
            aload 2 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.GeneralSecurityException e
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lsun/security/rsa/RSAKeyFactory;
            0    6     1  keySpec  Ljava/security/spec/KeySpec;
            3    4     2        e  Ljava/security/spec/InvalidKeySpecException;
            5    6     2        e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.security.spec.InvalidKeySpecException
           0     1       4  Class java.security.GeneralSecurityException
    Exceptions:
      throws java.security.spec.InvalidKeySpecException
    MethodParameters:
         Name  Flags
      keySpec  

  private java.security.PublicKey translatePublicKey(java.security.PublicKey);
    descriptor: (Ljava/security/PublicKey;)Ljava/security/PublicKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.PublicKey key
         0: .line 258
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPublicKey
            ifeq 10
         1: .line 259
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPublicKey
            astore 2 /* rsaKey */
        start local 2 // java.security.interfaces.RSAPublicKey rsaKey
         2: .line 261
            new sun.security.rsa.RSAPublicKeyImpl
            dup
         3: .line 262
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
         4: .line 263
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getModulus:()Ljava/math/BigInteger;
         5: .line 264
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getPublicExponent:()Ljava/math/BigInteger;
         6: .line 261
            invokespecial sun.security.rsa.RSAPublicKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
         7: areturn
         8: .line 265
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.PublicKey java.security.interfaces.RSAPublicKey
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
         9: .line 267
            new java.security.InvalidKeyException
            dup
            ldc "Invalid key"
            aload 3 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.interfaces.RSAPublicKey rsaKey
        10: .line 269
      StackMap locals:
      StackMap stack:
            ldc "X.509"
            aload 1 /* key */
            invokeinterface java.security.PublicKey.getFormat:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 14
        11: .line 270
            new sun.security.rsa.RSAPublicKeyImpl
            dup
            aload 1 /* key */
            invokeinterface java.security.PublicKey.getEncoded:()[B
            invokespecial sun.security.rsa.RSAPublicKeyImpl.<init>:([B)V
            astore 2 /* translated */
        start local 2 // java.security.interfaces.RSAPublicKey translated
        12: .line 272
            aload 2 /* translated */
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            invokevirtual sun.security.rsa.RSAUtil$KeyType.keyAlgo:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyAlgo:(Ljava/security/Key;Ljava/lang/String;)V
        13: .line 273
            aload 2 /* translated */
            areturn
        end local 2 // java.security.interfaces.RSAPublicKey translated
        14: .line 275
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Public keys must be instance of RSAPublicKey or have X.509 encoding"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.PublicKey key
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Lsun/security/rsa/RSAKeyFactory;
            0   15     1         key  Ljava/security/PublicKey;
            2   10     2      rsaKey  Ljava/security/interfaces/RSAPublicKey;
            9   10     3           e  Ljava/security/ProviderException;
           12   14     2  translated  Ljava/security/interfaces/RSAPublicKey;
      Exception table:
        from    to  target  type
           2     7       8  Class java.security.ProviderException
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  private java.security.PrivateKey translatePrivateKey(java.security.PrivateKey);
    descriptor: (Ljava/security/PrivateKey;)Ljava/security/PrivateKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=4, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.PrivateKey key
         0: .line 283
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPrivateCrtKey
            ifeq 16
         1: .line 284
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPrivateCrtKey
            astore 2 /* rsaKey */
        start local 2 // java.security.interfaces.RSAPrivateCrtKey rsaKey
         2: .line 286
            new sun.security.rsa.RSAPrivateCrtKeyImpl
            dup
         3: .line 287
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
         4: .line 288
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getModulus:()Ljava/math/BigInteger;
         5: .line 289
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPublicExponent:()Ljava/math/BigInteger;
         6: .line 290
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrivateExponent:()Ljava/math/BigInteger;
         7: .line 291
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeP:()Ljava/math/BigInteger;
         8: .line 292
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeQ:()Ljava/math/BigInteger;
         9: .line 293
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeExponentP:()Ljava/math/BigInteger;
        10: .line 294
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeExponentQ:()Ljava/math/BigInteger;
        11: .line 295
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getCrtCoefficient:()Ljava/math/BigInteger;
        12: .line 286
            invokespecial sun.security.rsa.RSAPrivateCrtKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        13: areturn
        14: .line 297
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.PrivateKey java.security.interfaces.RSAPrivateCrtKey
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
        15: .line 299
            new java.security.InvalidKeyException
            dup
            ldc "Invalid key"
            aload 3 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.interfaces.RSAPrivateCrtKey rsaKey
        16: .line 301
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPrivateKey
            ifeq 26
        17: .line 302
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPrivateKey
            astore 2 /* rsaKey */
        start local 2 // java.security.interfaces.RSAPrivateKey rsaKey
        18: .line 304
            new sun.security.rsa.RSAPrivateKeyImpl
            dup
        19: .line 305
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
        20: .line 306
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getModulus:()Ljava/math/BigInteger;
        21: .line 307
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getPrivateExponent:()Ljava/math/BigInteger;
        22: .line 304
            invokespecial sun.security.rsa.RSAPrivateKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        23: areturn
        24: .line 309
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.PrivateKey java.security.interfaces.RSAPrivateKey
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
        25: .line 311
            new java.security.InvalidKeyException
            dup
            ldc "Invalid key"
            aload 3 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.interfaces.RSAPrivateKey rsaKey
        26: .line 313
      StackMap locals:
      StackMap stack:
            ldc "PKCS#8"
            aload 1 /* key */
            invokeinterface java.security.PrivateKey.getFormat:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 31
        27: .line 315
            aload 1 /* key */
            invokeinterface java.security.PrivateKey.getEncoded:()[B
            invokestatic sun.security.rsa.RSAPrivateCrtKeyImpl.newKey:([B)Ljava/security/interfaces/RSAPrivateKey;
        28: .line 314
            astore 2 /* translated */
        start local 2 // java.security.interfaces.RSAPrivateKey translated
        29: .line 317
            aload 2 /* translated */
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            invokevirtual sun.security.rsa.RSAUtil$KeyType.keyAlgo:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyAlgo:(Ljava/security/Key;Ljava/lang/String;)V
        30: .line 318
            aload 2 /* translated */
            areturn
        end local 2 // java.security.interfaces.RSAPrivateKey translated
        31: .line 320
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Private keys must be instance of RSAPrivate(Crt)Key or have PKCS#8 encoding"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.PrivateKey key
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   32     0        this  Lsun/security/rsa/RSAKeyFactory;
            0   32     1         key  Ljava/security/PrivateKey;
            2   16     2      rsaKey  Ljava/security/interfaces/RSAPrivateCrtKey;
           15   16     3           e  Ljava/security/ProviderException;
           18   26     2      rsaKey  Ljava/security/interfaces/RSAPrivateKey;
           25   26     3           e  Ljava/security/ProviderException;
           29   31     2  translated  Ljava/security/interfaces/RSAPrivateKey;
      Exception table:
        from    to  target  type
           2    13      14  Class java.security.ProviderException
          18    23      24  Class java.security.ProviderException
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  private java.security.PublicKey generatePublic(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 328
            aload 1 /* keySpec */
            instanceof java.security.spec.X509EncodedKeySpec
            ifeq 5
         1: .line 329
            aload 1 /* keySpec */
            checkcast java.security.spec.X509EncodedKeySpec
            astore 2 /* x509Spec */
        start local 2 // java.security.spec.X509EncodedKeySpec x509Spec
         2: .line 330
            new sun.security.rsa.RSAPublicKeyImpl
            dup
            aload 2 /* x509Spec */
            invokevirtual java.security.spec.X509EncodedKeySpec.getEncoded:()[B
            invokespecial sun.security.rsa.RSAPublicKeyImpl.<init>:([B)V
            astore 3 /* generated */
        start local 3 // java.security.interfaces.RSAPublicKey generated
         3: .line 332
            aload 3 /* generated */
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            invokevirtual sun.security.rsa.RSAUtil$KeyType.keyAlgo:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyAlgo:(Ljava/security/Key;Ljava/lang/String;)V
         4: .line 333
            aload 3 /* generated */
            areturn
        end local 3 // java.security.interfaces.RSAPublicKey generated
        end local 2 // java.security.spec.X509EncodedKeySpec x509Spec
         5: .line 334
      StackMap locals:
      StackMap stack:
            aload 1 /* keySpec */
            instanceof java.security.spec.RSAPublicKeySpec
            ifeq 15
         6: .line 335
            aload 1 /* keySpec */
            checkcast java.security.spec.RSAPublicKeySpec
            astore 2 /* rsaSpec */
        start local 2 // java.security.spec.RSAPublicKeySpec rsaSpec
         7: .line 337
            new sun.security.rsa.RSAPublicKeyImpl
            dup
         8: .line 338
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPublicKeySpec.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
         9: .line 339
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPublicKeySpec.getModulus:()Ljava/math/BigInteger;
        10: .line 340
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPublicKeySpec.getPublicExponent:()Ljava/math/BigInteger;
        11: .line 337
            invokespecial sun.security.rsa.RSAPublicKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        12: areturn
        13: .line 342
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.spec.KeySpec java.security.spec.RSAPublicKeySpec
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
        14: .line 343
            new java.security.spec.InvalidKeySpecException
            dup
            aload 3 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.spec.RSAPublicKeySpec rsaSpec
        15: .line 346
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
            ldc "Only RSAPublicKeySpec and X509EncodedKeySpec supported for RSA public keys"
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   16     0       this  Lsun/security/rsa/RSAKeyFactory;
            0   16     1    keySpec  Ljava/security/spec/KeySpec;
            2    5     2   x509Spec  Ljava/security/spec/X509EncodedKeySpec;
            3    5     3  generated  Ljava/security/interfaces/RSAPublicKey;
            7   15     2    rsaSpec  Ljava/security/spec/RSAPublicKeySpec;
           14   15     3          e  Ljava/security/ProviderException;
      Exception table:
        from    to  target  type
           7    12      13  Class java.security.ProviderException
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
         Name  Flags
      keySpec  

  private java.security.PrivateKey generatePrivate(java.security.spec.KeySpec);
    descriptor: (Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=11, locals=4, args_size=2
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.spec.KeySpec keySpec
         0: .line 354
            aload 1 /* keySpec */
            instanceof java.security.spec.PKCS8EncodedKeySpec
            ifeq 5
         1: .line 355
            aload 1 /* keySpec */
            checkcast java.security.spec.PKCS8EncodedKeySpec
            astore 2 /* pkcsSpec */
        start local 2 // java.security.spec.PKCS8EncodedKeySpec pkcsSpec
         2: .line 356
            aload 2 /* pkcsSpec */
            invokevirtual java.security.spec.PKCS8EncodedKeySpec.getEncoded:()[B
            invokestatic sun.security.rsa.RSAPrivateCrtKeyImpl.newKey:([B)Ljava/security/interfaces/RSAPrivateKey;
            astore 3 /* generated */
        start local 3 // java.security.interfaces.RSAPrivateKey generated
         3: .line 358
            aload 3 /* generated */
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            invokevirtual sun.security.rsa.RSAUtil$KeyType.keyAlgo:()Ljava/lang/String;
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyAlgo:(Ljava/security/Key;Ljava/lang/String;)V
         4: .line 359
            aload 3 /* generated */
            areturn
        end local 3 // java.security.interfaces.RSAPrivateKey generated
        end local 2 // java.security.spec.PKCS8EncodedKeySpec pkcsSpec
         5: .line 360
      StackMap locals:
      StackMap stack:
            aload 1 /* keySpec */
            instanceof java.security.spec.RSAPrivateCrtKeySpec
            ifeq 21
         6: .line 361
            aload 1 /* keySpec */
            checkcast java.security.spec.RSAPrivateCrtKeySpec
            astore 2 /* rsaSpec */
        start local 2 // java.security.spec.RSAPrivateCrtKeySpec rsaSpec
         7: .line 363
            new sun.security.rsa.RSAPrivateCrtKeyImpl
            dup
         8: .line 364
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
         9: .line 365
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getModulus:()Ljava/math/BigInteger;
        10: .line 366
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPublicExponent:()Ljava/math/BigInteger;
        11: .line 367
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPrivateExponent:()Ljava/math/BigInteger;
        12: .line 368
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPrimeP:()Ljava/math/BigInteger;
        13: .line 369
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPrimeQ:()Ljava/math/BigInteger;
        14: .line 370
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPrimeExponentP:()Ljava/math/BigInteger;
        15: .line 371
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getPrimeExponentQ:()Ljava/math/BigInteger;
        16: .line 372
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateCrtKeySpec.getCrtCoefficient:()Ljava/math/BigInteger;
        17: .line 363
            invokespecial sun.security.rsa.RSAPrivateCrtKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        18: areturn
        19: .line 374
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.spec.KeySpec java.security.spec.RSAPrivateCrtKeySpec
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
        20: .line 375
            new java.security.spec.InvalidKeySpecException
            dup
            aload 3 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.spec.RSAPrivateCrtKeySpec rsaSpec
        21: .line 377
      StackMap locals:
      StackMap stack:
            aload 1 /* keySpec */
            instanceof java.security.spec.RSAPrivateKeySpec
            ifeq 31
        22: .line 378
            aload 1 /* keySpec */
            checkcast java.security.spec.RSAPrivateKeySpec
            astore 2 /* rsaSpec */
        start local 2 // java.security.spec.RSAPrivateKeySpec rsaSpec
        23: .line 380
            new sun.security.rsa.RSAPrivateKeyImpl
            dup
        24: .line 381
            aload 0 /* this */
            getfield sun.security.rsa.RSAKeyFactory.type:Lsun/security/rsa/RSAUtil$KeyType;
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateKeySpec.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokestatic sun.security.rsa.RSAUtil.createAlgorithmId:(Lsun/security/rsa/RSAUtil$KeyType;Ljava/security/spec/AlgorithmParameterSpec;)Lsun/security/x509/AlgorithmId;
        25: .line 382
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateKeySpec.getModulus:()Ljava/math/BigInteger;
        26: .line 383
            aload 2 /* rsaSpec */
            invokevirtual java.security.spec.RSAPrivateKeySpec.getPrivateExponent:()Ljava/math/BigInteger;
        27: .line 380
            invokespecial sun.security.rsa.RSAPrivateKeyImpl.<init>:(Lsun/security/x509/AlgorithmId;Ljava/math/BigInteger;Ljava/math/BigInteger;)V
        28: areturn
        29: .line 385
      StackMap locals: sun.security.rsa.RSAKeyFactory java.security.spec.KeySpec java.security.spec.RSAPrivateKeySpec
      StackMap stack: java.security.ProviderException
            astore 3 /* e */
        start local 3 // java.security.ProviderException e
        30: .line 386
            new java.security.spec.InvalidKeySpecException
            dup
            aload 3 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.ProviderException e
        end local 2 // java.security.spec.RSAPrivateKeySpec rsaSpec
        31: .line 389
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
            ldc "Only RSAPrivate(Crt)KeySpec and PKCS8EncodedKeySpec supported for RSA private keys"
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.security.spec.KeySpec keySpec
        end local 0 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   32     0       this  Lsun/security/rsa/RSAKeyFactory;
            0   32     1    keySpec  Ljava/security/spec/KeySpec;
            2    5     2   pkcsSpec  Ljava/security/spec/PKCS8EncodedKeySpec;
            3    5     3  generated  Ljava/security/interfaces/RSAPrivateKey;
            7   21     2    rsaSpec  Ljava/security/spec/RSAPrivateCrtKeySpec;
           20   21     3          e  Ljava/security/ProviderException;
           23   31     2    rsaSpec  Ljava/security/spec/RSAPrivateKeySpec;
           30   31     3          e  Ljava/security/ProviderException;
      Exception table:
        from    to  target  type
           7    18      19  Class java.security.ProviderException
          23    28      29  Class java.security.ProviderException
    Exceptions:
      throws java.security.GeneralSecurityException
    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=12, locals=4, args_size=3
        start local 0 // sun.security.rsa.RSAKeyFactory this
        start local 1 // java.security.Key key
        start local 2 // java.lang.Class keySpec
         0: .line 400
            aload 0 /* this */
            aload 1 /* key */
            invokevirtual sun.security.rsa.RSAKeyFactory.engineTranslateKey:(Ljava/security/Key;)Ljava/security/Key;
            astore 1 /* key */
         1: .line 401
            goto 4
      StackMap locals:
      StackMap stack: java.security.InvalidKeyException
         2: astore 3 /* e */
        start local 3 // java.security.InvalidKeyException e
         3: .line 402
            new java.security.spec.InvalidKeySpecException
            dup
            aload 3 /* e */
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.security.InvalidKeyException e
         4: .line 404
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPublicKey
            ifeq 17
         5: .line 405
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPublicKey
            astore 3 /* rsaKey */
        start local 3 // java.security.interfaces.RSAPublicKey rsaKey
         6: .line 406
            getstatic sun.security.rsa.RSAKeyFactory.RSA_PUB_KEYSPEC_CLS:Ljava/lang/Class;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 12
         7: .line 407
            aload 2 /* keySpec */
            new java.security.spec.RSAPublicKeySpec
            dup
         8: .line 408
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getModulus:()Ljava/math/BigInteger;
         9: .line 409
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getPublicExponent:()Ljava/math/BigInteger;
        10: .line 410
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokespecial java.security.spec.RSAPublicKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
        11: .line 407
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        12: .line 412
      StackMap locals: java.security.interfaces.RSAPublicKey
      StackMap stack:
            getstatic sun.security.rsa.RSAKeyFactory.X509_KEYSPEC_CLS:Ljava/lang/Class;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 14
        13: .line 413
            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
        14: .line 415
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        15: .line 416
            ldc "KeySpec must be RSAPublicKeySpec or X509EncodedKeySpec for RSA public keys"
        16: .line 415
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        end local 3 // java.security.interfaces.RSAPublicKey rsaKey
        17: .line 419
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPrivateKey
            ifeq 47
        18: .line 420
            getstatic sun.security.rsa.RSAKeyFactory.PKCS8_KEYSPEC_CLS:Ljava/lang/Class;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 20
        19: .line 421
            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
        20: .line 422
      StackMap locals:
      StackMap stack:
            getstatic sun.security.rsa.RSAKeyFactory.RSA_PRIVCRT_KEYSPEC_CLS:Ljava/lang/Class;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 37
        21: .line 423
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPrivateCrtKey
            ifeq 34
        22: .line 424
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPrivateCrtKey
            astore 3 /* crtKey */
        start local 3 // java.security.interfaces.RSAPrivateCrtKey crtKey
        23: .line 425
            aload 2 /* keySpec */
            new java.security.spec.RSAPrivateCrtKeySpec
            dup
        24: .line 426
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getModulus:()Ljava/math/BigInteger;
        25: .line 427
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPublicExponent:()Ljava/math/BigInteger;
        26: .line 428
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrivateExponent:()Ljava/math/BigInteger;
        27: .line 429
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeP:()Ljava/math/BigInteger;
        28: .line 430
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeQ:()Ljava/math/BigInteger;
        29: .line 431
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeExponentP:()Ljava/math/BigInteger;
        30: .line 432
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getPrimeExponentQ:()Ljava/math/BigInteger;
        31: .line 433
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getCrtCoefficient:()Ljava/math/BigInteger;
        32: .line 434
            aload 3 /* crtKey */
            invokeinterface java.security.interfaces.RSAPrivateCrtKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokespecial java.security.spec.RSAPrivateCrtKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
        33: .line 425
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        end local 3 // java.security.interfaces.RSAPrivateCrtKey crtKey
        34: .line 437
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        35: .line 438
            ldc "RSAPrivateCrtKeySpec can only be used with CRT keys"
        36: .line 437
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        37: .line 440
      StackMap locals:
      StackMap stack:
            getstatic sun.security.rsa.RSAKeyFactory.RSA_PRIV_KEYSPEC_CLS:Ljava/lang/Class;
            aload 2 /* keySpec */
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifeq 44
        38: .line 441
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPrivateKey
            astore 3 /* rsaKey */
        start local 3 // java.security.interfaces.RSAPrivateKey rsaKey
        39: .line 442
            aload 2 /* keySpec */
            new java.security.spec.RSAPrivateKeySpec
            dup
        40: .line 443
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getModulus:()Ljava/math/BigInteger;
        41: .line 444
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getPrivateExponent:()Ljava/math/BigInteger;
        42: .line 445
            aload 3 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPrivateKey.getParams:()Ljava/security/spec/AlgorithmParameterSpec;
            invokespecial java.security.spec.RSAPrivateKeySpec.<init>:(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
        43: .line 442
            invokevirtual java.lang.Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.spec.KeySpec
            areturn
        end local 3 // java.security.interfaces.RSAPrivateKey rsaKey
        44: .line 448
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
        45: .line 449
            ldc "KeySpec must be RSAPrivate(Crt)KeySpec or PKCS8EncodedKeySpec for RSA private keys"
        46: .line 448
            invokespecial java.security.spec.InvalidKeySpecException.<init>:(Ljava/lang/String;)V
            athrow
        47: .line 454
      StackMap locals:
      StackMap stack:
            new java.security.spec.InvalidKeySpecException
            dup
            ldc "Neither public nor private key"
            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 // sun.security.rsa.RSAKeyFactory this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   48     0     this  Lsun/security/rsa/RSAKeyFactory;
            0   48     1      key  Ljava/security/Key;
            0   48     2  keySpec  Ljava/lang/Class<TT;>;
            3    4     3        e  Ljava/security/InvalidKeyException;
            6   17     3   rsaKey  Ljava/security/interfaces/RSAPublicKey;
           23   34     3   crtKey  Ljava/security/interfaces/RSAPrivateCrtKey;
           39   44     3   rsaKey  Ljava/security/interfaces/RSAPrivateKey;
      Exception table:
        from    to  target  type
           0     1       2  Class java.security.InvalidKeyException
    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  
}
SourceFile: "RSAKeyFactory.java"
NestMembers:
  sun.security.rsa.RSAKeyFactory$Legacy  sun.security.rsa.RSAKeyFactory$PSS
InnerClasses:
  public final Legacy = sun.security.rsa.RSAKeyFactory$Legacy of sun.security.rsa.RSAKeyFactory
  public final PSS = sun.security.rsa.RSAKeyFactory$PSS of sun.security.rsa.RSAKeyFactory
  public final KeyType = sun.security.rsa.RSAUtil$KeyType of sun.security.rsa.RSAUtil