Beispiel #1
0
        private static ICipherParameters GetPrivateParameters(IKey privateKey, AsymmetricRsaKey.Usage rsaUsage)
        {
            if (privateKey is KeyWithRandom)
            {
                KeyWithRandom k = (KeyWithRandom)privateKey;

                return(new ParametersWithRandom(GetPrivateKeyParameters((AsymmetricRsaPrivateKey)k.Key, rsaUsage), k.Random));
            }
            else
            {
                return(new ParametersWithRandom(GetPrivateKeyParameters((AsymmetricRsaPrivateKey)privateKey, rsaUsage), CryptoServicesRegistrar.GetSecureRandom()));
            }
        }
Beispiel #2
0
 private static void CheckKeyUsage(AsymmetricRsaKey key, AsymmetricRsaKey.Usage usage)
 {
     // FSM_STATE:5.12,"RSA KEY USAGE CHECK", "The module verifies recent usage of an RSA key is consistent with requested usage"
     // FSM_TRANS:5.RSAK.0,"CONDITIONAL TEST", "RSA KEY USAGE CHECK", "Invoke RSA key usage check"
     if (!key.CanBeUsed(usage))
     {
         // FSM_TRANS:5.RSAK.2,"RSA KEY USAGE CHECK", "USER COMMAND REJECTED", "RSA key usage check failed"
         if (usage == AsymmetricRsaKey.Usage.SignOrVerify)
         {
             throw new IllegalKeyException("attempt to sign/verify with RSA modulus already used for encrypt/decrypt");
         }
         else
         {
             throw new IllegalKeyException("attempt to encrypt/decrypt with RSA modulus already used for sign/verify");
         }
     }
     // FSM_TRANS:5.RSAK.1,"RSA KEY USAGE CHECK", "CONDITIONAL TEST", "RSA key usage check successful"
 }
Beispiel #3
0
        internal static RsaKeyParameters GetPrivateKeyParameters(AsymmetricRsaPrivateKey k, AsymmetricRsaKey.Usage usage)
        {
            CheckKeyUsage(k, usage);

            if (k.PublicExponent.Equals(BigInteger.Zero))
            {
                return(new RsaKeyParameters(true, k.Modulus, k.PrivateExponent));
            }
            else
            {
                return(new RsaPrivateCrtKeyParameters(k.Modulus, k.PublicExponent, k.PrivateExponent, k.P, k.Q, k.DP, k.DQ, k.QInv));
            }
        }
Beispiel #4
0
        internal static RsaKeyParameters GetPublicKeyParameters(AsymmetricRsaPublicKey k, AsymmetricRsaKey.Usage usage)
        {
            CheckKeyUsage(k, usage);

            return(new RsaKeyParameters(false, k.Modulus, k.PublicExponent));
        }