/// <summary>
        /// Decrypt data that was encrypted with the Private Key.  NOTE:  This method
        /// uses the PaddingProvider for message decoding.  To create signature
        /// hashes, please use the SignData and VerifyData methods.  If no PaddingProvider is set, the default
        /// padding provider of OAEP will be assumed.  To specify a different padding algorithm, make sure
        /// you set the PaddingProvider property.
        /// </summary>
        /// <param name="encryptedBytes">Encrypted bytes</param>
        /// <returns>Decrypted bytes</returns>
        public byte[] DecryptPublic(byte[] encryptedBytes)
        {
            if (m_isBusy == true)
            {
                throw new CryptographicException("Operation cannot be performed while a current key generation operation is in progress.");
            }

            if (m_KeyLoaded == false)
            {
                throw new CryptographicException("No key has been loaded.  You must import a key or make a call to GenerateKeys() before performing data operations.");
            }

            byte[] bytEM = DoDecryptPublic(ref encryptedBytes);
            return(m_PaddingProvider.DecodeMessage(bytEM, m_RSAParams));
        }