/// <summary>
        /// Open an existing RSA CSP
        /// </summary>
        /// <param name="providerName">Name of the provider</param>
        /// <param name="containerName">Name of container</param>
        /// <exception cref="Win32Exception"/>
        /// <returns>Handle to the crypt provider</returns>
        private CryptoApiMethods.SafeCryptProviderHandle OpenRSAProvider(string providerName, string containerName)
        {
            CryptoApiMethods.SafeCryptProviderHandle hCryptProv;

            if (!CryptoApiMethods.CryptAcquireContext(out hCryptProv, containerName, providerName, CryptoApiMethods.Providers.PROV_RSA_FULL, 0))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }

            if (hCryptProv == null)
            {
                throw new CryptographicException();
            }

            return(hCryptProv);
        }