Exemple #1
0
        // Create an instance using the specified CSP
        public CapiContext(CspParameters csp)
        {
            providerHandle = IntPtr.Zero;
            if (csp == null)
            {
                // default parameters
                cspParams = new CspParameters();
            }
            else
            {
                // keep of copy of the parameters
                cspParams           = new CspParameters(csp.ProviderType, csp.ProviderName, csp.KeyContainerName);
                cspParams.KeyNumber = csp.KeyNumber;
                cspParams.Flags     = csp.Flags;
            }

            // do not show user interface (CRYPT_SILENT) -  if UI is required then the function fails.
            uint flags = CryptoAPI.CRYPT_SILENT;

            if ((cspParams.Flags & CspProviderFlags.UseMachineKeyStore) == CspProviderFlags.UseMachineKeyStore)
            {
                flags |= CryptoAPI.CRYPT_MACHINE_KEYSET;
            }

            lastResult = CryptoAPI.CryptAcquireContext(ref providerHandle, cspParams.KeyContainerName,
                                                       cspParams.ProviderName, cspParams.ProviderType, flags);
            if (!lastResult)
            {
                // key container may not exist
                flags     |= CryptoAPI.CRYPT_NEWKEYSET;
                lastResult = CryptoAPI.CryptAcquireContext(ref providerHandle, cspParams.KeyContainerName,
                                                           cspParams.ProviderName, cspParams.ProviderType, flags);
            }
        }