class sun.security.mscapi.CSignature$RSA extends sun.security.mscapi.CSignature
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: sun.security.mscapi.CSignature$RSA
  super_class: sun.security.mscapi.CSignature
{
  public void <init>(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // sun.security.mscapi.CSignature$RSA this
        start local 1 // java.lang.String digestAlgorithm
         0: .line 115
            aload 0 /* this */
            ldc "RSA"
            aload 1 /* digestAlgorithm */
            invokespecial sun.security.mscapi.CSignature.<init>:(Ljava/lang/String;Ljava/lang/String;)V
         1: .line 116
            return
        end local 1 // java.lang.String digestAlgorithm
        end local 0 // sun.security.mscapi.CSignature$RSA this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lsun/security/mscapi/CSignature$RSA;
            0    2     1  digestAlgorithm  Ljava/lang/String;
    MethodParameters:
                 Name  Flags
      digestAlgorithm  

  protected void engineInitSign(java.security.PrivateKey);
    descriptor: (Ljava/security/PrivateKey;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // sun.security.mscapi.CSignature$RSA this
        start local 1 // java.security.PrivateKey key
         0: .line 121
            aload 1 /* key */
            ifnonnull 2
         1: .line 122
            new java.security.InvalidKeyException
            dup
            ldc "Key cannot be null"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 124
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof sun.security.mscapi.CPrivateKey
            ifeq 4
         3: .line 125
            aload 1 /* key */
            invokeinterface java.security.PrivateKey.getAlgorithm:()Ljava/lang/String;
            ldc "RSA"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifne 7
         4: .line 126
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Key type not supported: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         5: .line 127
            aload 1 /* key */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* key */
            invokeinterface java.security.PrivateKey.getAlgorithm:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         6: .line 126
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 129
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* key */
            checkcast sun.security.mscapi.CPrivateKey
            putfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
         8: .line 133
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
            invokevirtual sun.security.mscapi.CPrivateKey.length:()I
            bipush 7
            iadd
            bipush -8
            iand
         9: .line 134
            aconst_null
            sipush 512
        10: .line 135
            sipush 16384
        11: .line 133
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyLengths:(ILjava/math/BigInteger;II)V
        12: .line 137
            aload 0 /* this */
            aconst_null
            putfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
        13: .line 138
            aload 0 /* this */
            invokevirtual sun.security.mscapi.CSignature$RSA.resetDigest:()V
        14: .line 139
            return
        end local 1 // java.security.PrivateKey key
        end local 0 // sun.security.mscapi.CSignature$RSA this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Lsun/security/mscapi/CSignature$RSA;
            0   15     1   key  Ljava/security/PrivateKey;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  protected void engineInitVerify(java.security.PublicKey);
    descriptor: (Ljava/security/PublicKey;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=10, args_size=2
        start local 0 // sun.security.mscapi.CSignature$RSA this
        start local 1 // java.security.PublicKey key
         0: .line 144
            aload 1 /* key */
            ifnonnull 2
         1: .line 145
            new java.security.InvalidKeyException
            dup
            ldc "Key cannot be null"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 148
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.security.interfaces.RSAPublicKey
            ifne 6
         3: .line 149
            new java.security.InvalidKeyException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Key type not supported: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         4: .line 150
            aload 1 /* key */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 149
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 154
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof sun.security.mscapi.CPublicKey
            ifne 26
         7: .line 158
            aload 1 /* key */
            checkcast java.security.interfaces.RSAPublicKey
         8: .line 157
            astore 2 /* rsaKey */
        start local 2 // java.security.interfaces.RSAPublicKey rsaKey
         9: .line 160
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getModulus:()Ljava/math/BigInteger;
            astore 3 /* modulus */
        start local 3 // java.math.BigInteger modulus
        10: .line 161
            aload 2 /* rsaKey */
            invokeinterface java.security.interfaces.RSAPublicKey.getPublicExponent:()Ljava/math/BigInteger;
            astore 4 /* exponent */
        start local 4 // java.math.BigInteger exponent
        11: .line 165
            aload 3 /* modulus */
            invokevirtual java.math.BigInteger.bitLength:()I
            bipush 7
            iadd
            bipush -8
            iand
        12: .line 166
            aload 4 /* exponent */
            iconst_m1
            sipush 16384
        13: .line 165
            invokestatic sun.security.rsa.RSAKeyFactory.checkKeyLengths:(ILjava/math/BigInteger;II)V
        14: .line 168
            aload 3 /* modulus */
            invokevirtual java.math.BigInteger.toByteArray:()[B
            astore 5 /* modulusBytes */
        start local 5 // byte[] modulusBytes
        15: .line 169
            aload 4 /* exponent */
            invokevirtual java.math.BigInteger.toByteArray:()[B
            astore 6 /* exponentBytes */
        start local 6 // byte[] exponentBytes
        16: .line 172
            aload 5 /* modulusBytes */
            iconst_0
            baload
            ifne 18
        17: .line 173
            aload 5 /* modulusBytes */
            arraylength
            iconst_1
            isub
            bipush 8
            imul
            goto 19
        18: .line 174
      StackMap locals: sun.security.mscapi.CSignature$RSA java.security.PublicKey java.security.interfaces.RSAPublicKey java.math.BigInteger java.math.BigInteger byte[] byte[]
      StackMap stack:
            aload 5 /* modulusBytes */
            arraylength
            bipush 8
            imul
        19: .line 172
      StackMap locals:
      StackMap stack: int
            istore 7 /* keyBitLength */
        start local 7 // int keyBitLength
        20: .line 177
            iload 7 /* keyBitLength */
            aload 5 /* modulusBytes */
            aload 6 /* exponentBytes */
        21: .line 176
            invokestatic sun.security.mscapi.CSignature$RSA.generatePublicKeyBlob:(I[B[B)[B
            astore 8 /* keyBlob */
        start local 8 // byte[] keyBlob
        22: .line 180
            aload 0 /* this */
            ldc "RSA"
            aload 8 /* keyBlob */
            iload 7 /* keyBitLength */
            invokestatic sun.security.mscapi.CSignature$RSA.importPublicKey:(Ljava/lang/String;[BI)Lsun/security/mscapi/CPublicKey;
            putfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
        23: .line 182
            goto 27
      StackMap locals: sun.security.mscapi.CSignature$RSA java.security.PublicKey java.security.interfaces.RSAPublicKey java.math.BigInteger java.math.BigInteger byte[] byte[] int byte[]
      StackMap stack: java.security.KeyStoreException
        24: astore 9 /* e */
        start local 9 // java.security.KeyStoreException e
        25: .line 183
            new java.security.InvalidKeyException
            dup
            aload 9 /* e */
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 9 // java.security.KeyStoreException e
        end local 8 // byte[] keyBlob
        end local 7 // int keyBitLength
        end local 6 // byte[] exponentBytes
        end local 5 // byte[] modulusBytes
        end local 4 // java.math.BigInteger exponent
        end local 3 // java.math.BigInteger modulus
        end local 2 // java.security.interfaces.RSAPublicKey rsaKey
        26: .line 187
      StackMap locals: sun.security.mscapi.CSignature$RSA java.security.PublicKey
      StackMap stack:
            aload 0 /* this */
            aload 1 /* key */
            checkcast sun.security.mscapi.CPublicKey
            putfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
        27: .line 190
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
        28: .line 191
            aload 0 /* this */
            invokevirtual sun.security.mscapi.CSignature$RSA.resetDigest:()V
        29: .line 192
            return
        end local 1 // java.security.PublicKey key
        end local 0 // sun.security.mscapi.CSignature$RSA this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   30     0           this  Lsun/security/mscapi/CSignature$RSA;
            0   30     1            key  Ljava/security/PublicKey;
            9   26     2         rsaKey  Ljava/security/interfaces/RSAPublicKey;
           10   26     3        modulus  Ljava/math/BigInteger;
           11   26     4       exponent  Ljava/math/BigInteger;
           15   26     5   modulusBytes  [B
           16   26     6  exponentBytes  [B
           20   26     7   keyBitLength  I
           22   26     8        keyBlob  [B
           25   26     9              e  Ljava/security/KeyStoreException;
      Exception table:
        from    to  target  type
          22    23      24  Class java.security.KeyStoreException
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  protected byte[] engineSign();
    descriptor: ()[B
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=9, locals=4, args_size=1
        start local 0 // sun.security.mscapi.CSignature$RSA this
         0: .line 209
            aload 0 /* this */
            invokevirtual sun.security.mscapi.CSignature$RSA.getDigestValue:()[B
            astore 1 /* hash */
        start local 1 // byte[] hash
         1: .line 211
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
            invokevirtual sun.security.mscapi.CPrivateKey.getHCryptKey:()J
            lconst_0
            lcmp
            ifne 8
         2: .line 212
            iconst_1
            aload 1 /* hash */
            aload 1 /* hash */
            arraylength
         3: .line 213
            iconst_0
         4: .line 214
            aload 0 /* this */
            instanceof sun.security.mscapi.CSignature$NONEwithRSA
            ifeq 5
            aconst_null
            goto 6
      StackMap locals: sun.security.mscapi.CSignature$RSA byte[]
      StackMap stack: int byte[] int int
         5: aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.messageDigestAlgorithm:Ljava/lang/String;
         6: .line 215
      StackMap locals: sun.security.mscapi.CSignature$RSA byte[]
      StackMap stack: int byte[] int int java.lang.String
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
            invokevirtual sun.security.mscapi.CPrivateKey.getHCryptProvider:()J
            lconst_0
         7: .line 212
            invokestatic sun.security.mscapi.CSignature$RSA.signCngHash:(I[BIILjava/lang/String;JJ)[B
            areturn
         8: .line 218
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            instanceof sun.security.mscapi.CSignature$NONEwithRSA
            istore 2 /* noHashOID */
        start local 2 // boolean noHashOID
         9: .line 220
            iload 2 /* noHashOID */
            aload 1 /* hash */
            aload 1 /* hash */
            arraylength
        10: .line 221
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.messageDigestAlgorithm:Ljava/lang/String;
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
            invokevirtual sun.security.mscapi.CPrivateKey.getHCryptProvider:()J
        11: .line 222
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.privateKey:Lsun/security/mscapi/CPrivateKey;
            invokevirtual sun.security.mscapi.CPrivateKey.getHCryptKey:()J
        12: .line 220
            invokestatic sun.security.mscapi.CSignature.signHash:(Z[BILjava/lang/String;JJ)[B
            astore 3 /* result */
        start local 3 // byte[] result
        13: .line 225
            aload 3 /* result */
            invokestatic sun.security.mscapi.CSignature.convertEndianArray:([B)[B
            areturn
        end local 3 // byte[] result
        end local 2 // boolean noHashOID
        end local 1 // byte[] hash
        end local 0 // sun.security.mscapi.CSignature$RSA this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   14     0       this  Lsun/security/mscapi/CSignature$RSA;
            1   14     1       hash  [B
            9   14     2  noHashOID  Z
           13   14     3     result  [B
    Exceptions:
      throws java.security.SignatureException

  protected boolean engineVerify(byte[]);
    descriptor: ([B)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=11, locals=3, args_size=2
        start local 0 // sun.security.mscapi.CSignature$RSA this
        start local 1 // byte[] sigBytes
         0: .line 244
            aload 0 /* this */
            invokevirtual sun.security.mscapi.CSignature$RSA.getDigestValue:()[B
            astore 2 /* hash */
        start local 2 // byte[] hash
         1: .line 246
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
            invokevirtual sun.security.mscapi.CPublicKey.getHCryptKey:()J
            lconst_0
            lcmp
            ifne 9
         2: .line 248
            iconst_1
            aload 2 /* hash */
            aload 2 /* hash */
            arraylength
         3: .line 249
            aload 1 /* sigBytes */
            aload 1 /* sigBytes */
            arraylength
         4: .line 250
            iconst_0
         5: .line 251
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.messageDigestAlgorithm:Ljava/lang/String;
         6: .line 252
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
            invokevirtual sun.security.mscapi.CPublicKey.getHCryptProvider:()J
         7: .line 253
            lconst_0
         8: .line 247
            invokestatic sun.security.mscapi.CSignature.verifyCngSignedHash:(I[BI[BIILjava/lang/String;JJ)Z
            ireturn
         9: .line 255
      StackMap locals: byte[]
      StackMap stack:
            aload 2 /* hash */
            aload 2 /* hash */
            arraylength
        10: .line 256
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.messageDigestAlgorithm:Ljava/lang/String;
            aload 1 /* sigBytes */
            invokestatic sun.security.mscapi.CSignature.convertEndianArray:([B)[B
        11: .line 257
            aload 1 /* sigBytes */
            arraylength
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
            invokevirtual sun.security.mscapi.CPublicKey.getHCryptProvider:()J
        12: .line 258
            aload 0 /* this */
            getfield sun.security.mscapi.CSignature$RSA.publicKey:Lsun/security/mscapi/CPublicKey;
            invokevirtual sun.security.mscapi.CPublicKey.getHCryptKey:()J
        13: .line 255
            invokestatic sun.security.mscapi.CSignature.verifySignedHash:([BILjava/lang/String;[BIJJ)Z
            ireturn
        end local 2 // byte[] hash
        end local 1 // byte[] sigBytes
        end local 0 // sun.security.mscapi.CSignature$RSA this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   14     0      this  Lsun/security/mscapi/CSignature$RSA;
            0   14     1  sigBytes  [B
            1   14     2      hash  [B
    Exceptions:
      throws java.security.SignatureException
    MethodParameters:
          Name  Flags
      sigBytes  

  static native byte[] generatePublicKeyBlob(int, byte[], byte[]);
    descriptor: (I[B[B)[B
    flags: (0x0108) ACC_STATIC, ACC_NATIVE
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
                Name  Flags
      keyBitLength    
      modulus         
      publicExponent  
}
SourceFile: "CSignature.java"
NestHost: sun.security.mscapi.CSignature
InnerClasses:
  public final NONEwithRSA = sun.security.mscapi.CSignature$NONEwithRSA of sun.security.mscapi.CSignature
  RSA = sun.security.mscapi.CSignature$RSA of sun.security.mscapi.CSignature