Exemple #1
0
        public static ProviderHandle GetProviderHandle(string providerName, ProviderType.Ids providerTypeId, Scope scope)
        {
            var acFlags = CryptAcquireContextFlags.NULL;

            if (scope == Scope.Machine)
            {
                acFlags |= CryptAcquireContextFlags.CRYPT_MACHINE_KEYSET;
            }

            ProviderHandle providerHandle;

            if (CryptAcquireContext(out providerHandle, null, providerName, providerTypeId, acFlags) == false)
            {
                throw new Win32Exception();
            }

            return(providerHandle);
        }
Exemple #2
0
        public static Provider GetDefaultProvider(ProviderType.Ids providerTypeId, Scope scope)
        {
            var gdpFlags = scope == Scope.Machine ? CryptGetDefaultProviderFlags.CRYPT_MACHINE_DEFAULT : CryptGetDefaultProviderFlags.CRYPT_USER_DEFAULT;
            var defaultProviderNameLength_Bytes = 0;

            if (CryptGetDefaultProvider(providerTypeId, IntPtr.Zero, gdpFlags, null, ref defaultProviderNameLength_Bytes) == false)
            {
                throw new Win32Exception();
            }

            var defaultProviderName = new StringBuilder(defaultProviderNameLength_Bytes);

            if (CryptGetDefaultProvider(providerTypeId, IntPtr.Zero, gdpFlags, defaultProviderName, ref defaultProviderNameLength_Bytes) == false)
            {
                throw new Win32Exception();
            }

            var providerTypes = ProviderType.GetProviderTypes();

            return(new Provider(defaultProviderName.ToString(), providerTypes[providerTypeId]));
        }
Exemple #3
0
 static extern bool CryptAcquireContext(out ProviderHandle hProv, string pszContainer, string pszProvider, ProviderType.Ids dwProvType, CryptAcquireContextFlags dwFlags);
Exemple #4
0
        static ProviderHandle GetProviderHandle(string containerName, string providerName, ProviderType.Ids providerTypeId, CryptAcquireContextFlags acFlags)
        {
            ProviderHandle providerHandle;

            if (CryptAcquireContext(out providerHandle, containerName, providerName, providerTypeId, acFlags) == false)
            {
                throw new Win32Exception();
            }

            return(providerHandle);
        }
Exemple #5
0
        public static IEnumerable <Container> EnumerateContainers(string providerName, ProviderType.Ids providerTypeId, Scope scope)
        {
            var acFlags = CryptAcquireContextFlags.CRYPT_VERIFYCONTEXT;

            if (scope == Scope.Machine)
            {
                acFlags |= CryptAcquireContextFlags.CRYPT_MACHINE_KEYSET;
            }

            var providerHandle = GetProviderHandle(null, providerName, providerTypeId, acFlags);

            var containerNameMaxLength_Bytes = 0;

            if (CryptEnumerateContainerNames(providerHandle, null, ref containerNameMaxLength_Bytes, EnumerationFlags.CRYPT_FIRST) == false)
            {
                throw new Win32Exception();
            }

            var providerTypes = ProviderType.GetProviderTypes();

            var containerName = new byte[containerNameMaxLength_Bytes];
            var gppFlags      = EnumerationFlags.CRYPT_FIRST;

            while (CryptEnumerateContainerNames(providerHandle, containerName, ref containerNameMaxLength_Bytes, gppFlags))
            {
                yield return
                    (new Container(
                         Encoding.ASCII.GetString(containerName).TrimEnd('\0'),
                         new Provider(
                             GetProviderName(providerHandle),
                             providerTypes[providerTypeId]
                             ),
                         scope
                         ));

                Array.Clear(containerName, 0, containerName.Length);
                gppFlags = EnumerationFlags.CRYPT_NEXT;
            }

            providerHandle.Dispose();
        }
Exemple #6
0
 public static IEnumerable <Container> EnumerateContainers(ProviderType.Ids providerTypeId, Scope scope)
 {
     return(EnumerateContainers(null, providerTypeId, scope));
 }
Exemple #7
0
 static extern bool CryptGetDefaultProvider(ProviderType.Ids dwProvType, IntPtr pdwReserved, CryptGetDefaultProviderFlags dwFlags, StringBuilder pszProvName, ref int ProvName);
Exemple #8
0
 static extern bool CryptEnumProviders(int dwIndex, IntPtr pdwReserved, int dwFlags, ref ProviderType.Ids pdwProvType, StringBuilder pszProvName, ref int pcbProvName);