Beispiel #1
0
        public static IStorePal FromSystemStore(string storeName, StoreLocation storeLocation, OpenFlags openFlags)
        {
            StringComparer ordinalIgnoreCase = StringComparer.OrdinalIgnoreCase;

            if (ordinalIgnoreCase.Equals("Root", storeName))
            {
                throw new CryptographicException(
                          SR.Cryptography_X509_StoreNotFound,
                          new PlatformNotSupportedException(SR.Cryptography_X509_Store_RootUnsupported));
            }

            if (storeLocation == StoreLocation.CurrentUser)
            {
                if (ordinalIgnoreCase.Equals("My", storeName))
                {
                    return(AppleKeychainStore.OpenDefaultKeychain(openFlags));
                }
                if (ordinalIgnoreCase.Equals("Disallowed", storeName))
                {
                    return(new UnsupportedDisallowedStore(openFlags));
                }
            }

            if ((openFlags & OpenFlags.OpenExistingOnly) == OpenFlags.OpenExistingOnly)
            {
                throw new CryptographicException(SR.Cryptography_X509_StoreNotFound);
            }

            string message = SR.Format(
                SR.Cryptography_X509_StoreCannotCreate,
                storeName,
                storeLocation);

            throw new CryptographicException(message, new PlatformNotSupportedException(message));
        }
Beispiel #2
0
        public static IStorePal FromSystemStore(string storeName, StoreLocation storeLocation, OpenFlags openFlags)
        {
            StringComparer ordinalIgnoreCase = StringComparer.OrdinalIgnoreCase;

            switch (storeLocation)
            {
            case StoreLocation.CurrentUser:
                if (ordinalIgnoreCase.Equals("My", storeName))
                {
                    return(AppleKeychainStore.OpenDefaultKeychain(openFlags));
                }
                if (ordinalIgnoreCase.Equals("Root", storeName))
                {
                    return(AppleTrustStore.OpenStore(StoreName.Root, storeLocation, openFlags));
                }
                if (ordinalIgnoreCase.Equals("Disallowed", storeName))
                {
                    return(AppleTrustStore.OpenStore(StoreName.Disallowed, storeLocation, openFlags));
                }

                break;

            case StoreLocation.LocalMachine:
                if (ordinalIgnoreCase.Equals("My", storeName))
                {
                    return(AppleKeychainStore.OpenSystemSharedKeychain(openFlags));
                }
                if (ordinalIgnoreCase.Equals("Root", storeName))
                {
                    return(AppleTrustStore.OpenStore(StoreName.Root, storeLocation, openFlags));
                }
                if (ordinalIgnoreCase.Equals("Disallowed", storeName))
                {
                    return(AppleTrustStore.OpenStore(StoreName.Disallowed, storeLocation, openFlags));
                }
                break;
            }

            if ((openFlags & OpenFlags.OpenExistingOnly) == OpenFlags.OpenExistingOnly)
            {
                throw new CryptographicException(SR.Cryptography_X509_StoreNotFound);
            }

            string message = SR.Format(
                SR.Cryptography_X509_StoreCannotCreate,
                storeName,
                storeLocation);

            throw new CryptographicException(message, new PlatformNotSupportedException(message));
        }
        private static IStorePal FromCustomKeychainStore(string storeName, OpenFlags openFlags)
        {
            string storePath;

            if (!IsValidStoreName(storeName))
            {
                throw new CryptographicException(SR.Format(SR.Security_InvalidValue, nameof(storeName)));
            }

            storePath = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                "Library",
                "Keychains",
                storeName.ToLowerInvariant() + ".keychain");

            return(AppleKeychainStore.CreateOrOpenKeychain(storePath, openFlags));
        }