void GenerateKeys()
        {
            // generate the key container to put the key in
            if (!CryptAcquireContext(out keyContainer,
                                     keyContainerName,
                                     null,
                                     ProviderType.RsaSecureChannel,
                                     ContextFlags.NewKeySet | ContextFlags.Silent))
            {
                int error = Marshal.GetLastWin32Error();
                Utility.CloseInvalidOutSafeHandle(keyContainer);
                keyContainer = null;
                PeerExceptionHelper.ThrowInvalidOperation_PeerCertGenFailure(new Win32Exception(error));
            }

            // generate the key
            if (!CryptGenKey(keyContainer,
                             AlgorithmType.KeyExchange,
                             KeyFlags.Exportable2k,
                             out key))
            {
                int error = Marshal.GetLastWin32Error();
                Utility.CloseInvalidOutSafeHandle(key);
                key = null;
                PeerExceptionHelper.ThrowInvalidOperation_PeerCertGenFailure(new Win32Exception(error));
            }
        }
 extern static CertificateHandle CertCreateSelfSignCertificate(
     KeyContainerHandle hProv,
     CryptoApiBlob.InteropHelper pSubjectIssuerBlob,
     SelfSignFlags dwFlags,
     IntPtr pKeyProvInfo,
     IntPtr pSignatureAlgorithm,
     [In] ref SystemTime pStartTime,
     [In] ref SystemTime pEndTime,
     IntPtr pExtensions);
 extern static bool CryptGenKey(
                                             KeyContainerHandle hProv,
                                             AlgorithmType algId,
                                             KeyFlags dwFlags,
                                             [Out]out KeyHandle phKey);
 extern static CertificateHandle CertCreateSelfSignCertificate(
                                             KeyContainerHandle hProv,
                                             CryptoApiBlob.InteropHelper pSubjectIssuerBlob,
                                             SelfSignFlags dwFlags,
                                             IntPtr pKeyProvInfo,
                                             IntPtr pSignatureAlgorithm,
                                             [In] ref SystemTime pStartTime,
                                             [In] ref SystemTime pEndTime,
                                             IntPtr pExtensions);
        void GenerateKeys()
        {
            // generate the key container to put the key in
            if (!CryptAcquireContext(out keyContainer,
                                        keyContainerName,
                                        null,
                                        ProviderType.RsaSecureChannel,
                                        ContextFlags.NewKeySet | ContextFlags.Silent))
            {
                int error = Marshal.GetLastWin32Error();
                Utility.CloseInvalidOutSafeHandle(keyContainer);
                keyContainer = null;
                PeerExceptionHelper.ThrowInvalidOperation_PeerCertGenFailure(new Win32Exception(error));
            }

            // generate the key
            if (!CryptGenKey(keyContainer,
                                AlgorithmType.KeyExchange,
                                KeyFlags.Exportable2k,
                                out key))
            {
                int error = Marshal.GetLastWin32Error();
                Utility.CloseInvalidOutSafeHandle(key);
                key = null;
                PeerExceptionHelper.ThrowInvalidOperation_PeerCertGenFailure(new Win32Exception(error));
            }
        }
 extern static bool CryptGenKey(
     KeyContainerHandle hProv,
     AlgorithmType algId,
     KeyFlags dwFlags,
     [Out] out KeyHandle phKey);
 extern static bool CryptAcquireContext(
     [Out] out KeyContainerHandle phProv,
     string pszContainer,
     string pszProvider,
     ProviderType dwProvType,
     ContextFlags dwFlags);
 private static extern bool CryptGenKey(KeyContainerHandle hProv, AlgorithmType algId, KeyFlags dwFlags, out KeyHandle phKey);
 private static extern bool CryptGenKey(KeyContainerHandle hProv, AlgorithmType algId, KeyFlags dwFlags, out KeyHandle phKey);
 private static extern bool CryptAcquireContext(out KeyContainerHandle phProv, string pszContainer, string pszProvider, ProviderType dwProvType, ContextFlags dwFlags);