コード例 #1
0
ファイル: KeyVaultHelper.cs プロジェクト: M1kep/PSAdmin
        public static bool NewItem(string Id, string VaultName, string Location, string VaultURI, bool SoftDeleteEnabled, string[] Tags)
        {
            bool ItemExists = KeyVaultHelper.ItemExists(null, VaultName, true);
            if (ItemExists)
            {
                return false;
            }

            // Generate Vault Key
            byte[] VaultKey = new byte[32];
            RNGCryptoServiceProvider.Create().GetBytes(VaultKey);

            Hashtable table = new Hashtable {
                {"Id",                  Id},
                {"VaultName",           VaultName },
                {"Location",            Location },
                {"VaultURI",            VaultURI },
                {"SoftDeleteEnabled",   SoftDeleteEnabled },
                {"VaultKey",            VaultKey}

            };

            if (Tags != null)
                table.Add("Tags",                 String.Join(";", Tags));

            return SQLiteDB.CreateRow("PSAdminKeyVault", table);
        }
コード例 #2
0
ファイル: KeyVaultSecretHelper.cs プロジェクト: M1kep/PSAdmin
        // (string Id, string VaultName, string Name, string Version, string Enabled, Nullable<DateTime> Expires, Nullable<DateTime> NotBefore, Nullable<DateTime> Created, Nullable<DateTime> Updated, string ContentType, string[] Tags, string SecretValue)
        #region New
        public static bool NewItem(string Id, string VaultName, string Name, string Version, string Enabled, Nullable <DateTime> Expires, Nullable <DateTime> NotBefore, string ContentType, string[] Tags, string SecretValue)
        {
            bool ItemExists = KeyVaultSecretHelper.ItemExists(null, VaultName, Name, null, false, true);

            if (ItemExists)
            {
                return(false);
            }

            // Create Item
            byte[]    Key   = KeyVaultHelper.GetVaultKey(VaultName);
            Hashtable table = new Hashtable {
                { "Id", Id },
                { "VaultName", VaultName },
                { "Name", Name },
                { "Version", Version },
                { "Enabled", Enabled },
                { "Expires", Expires },
                { "NotBefore", NotBefore },
                { "Created", DateTime.UtcNow },
                { "Updated", DateTime.UtcNow },
                { "ContentType", ContentType },
                { "SecretValue", Crypto.ConvertToKeyVaultSecret(SecretValue, Key) }
            };

            if (Tags != null)
            {
                table.Add("Tags", string.Join(";", Tags));
            }

            return(SQLiteDB.CreateRow(TableName, table));
        }
コード例 #3
0
ファイル: KeyVaultHelper.cs プロジェクト: M1kep/PSAdmin
        internal static bool NewItemThrow(string Id, string VaultName, string Location, string VaultURI, bool SoftDeleteEnabled, string[] Tags)
        {
            KeyVaultHelper.ThrowIfItemExists(null, VaultName, true);

            bool IsSuccessful = NewItem(Id, VaultName, Location, VaultURI, SoftDeleteEnabled, Tags);
            if (!IsSuccessful)
            {
                throw new PSAdminException(PSAdminExceptionType.RowCreate);
            }
            return true;
        }
コード例 #4
0
ファイル: KeyVaultSecretHelper.cs プロジェクト: M1kep/PSAdmin
        public static bool SetItemsThrow(string Id, string VaultName, string Name, string Version, string Enabled, Nullable <DateTime> Expires, Nullable <DateTime> NotBefore, string ContentType, string[] Tags, string SecretValue, bool Exact)
        {
            KeyVaultHelper.GetItemThrow(null, VaultName, true);
            bool issuccessful = SetItems(Id, VaultName, Name, Version, Enabled, Expires, NotBefore, ContentType, Tags, SecretValue, Exact);

            if (!issuccessful)
            {
                throw new PSAdminException(PSAdminExceptionType.RowUpdate);
            }
            return(true);
        }
コード例 #5
0
ファイル: KeyVaultSecretHelper.cs プロジェクト: M1kep/PSAdmin
        public static bool NewItemThrow(string Id, string VaultName, string Name, string Version, string Enabled, Nullable <DateTime> Expires, Nullable <DateTime> NotBefore, string ContentType, string[] Tags, string SecretValue)
        {
            KeyVaultHelper.ThrowIfItemNotExists(null, VaultName, true);
            ThrowIfItemExists(null, VaultName, Name, null, false, true);

            bool IsSuccessful = NewItem(Id, VaultName, Name, Version, Enabled, Expires, NotBefore, ContentType, Tags, SecretValue);

            if (!IsSuccessful)
            {
                throw new PSAdminException(PSAdminExceptionType.RowCreate);
            }
            return(true);
        }
コード例 #6
0
ファイル: KeyVaultSecretHelper.cs プロジェクト: M1kep/PSAdmin
        public static Data.KeyVaultSecret[] GetItems(string Id, string VaultName, string Name, string[] Tags, bool Decrypt, bool Exact)
        {
            string filter;

            Hashtable filterTable = new Hashtable {
                { "Id", Id },
                { "VaultName", VaultName },
                { "Name", Name }
            };

            filter = SQLiteDB.Filter(filterTable, Exact);

            string filterTags = SQLiteDB.Filter("Tags", Tags, false);

            if (!String.IsNullOrEmpty(filterTags))
            {
                filter = String.Format("{0} AND {1}", filter, filterTags);
            }

            Data.KeyVaultSecret[] result = SQLiteDB.ConvertToType <Data.KeyVaultSecret[]>(
                SQLiteDB.GetRow(TableName, filter)
                );

            foreach (Data.KeyVaultSecret i in result)
            {
                //Todo: Remove Version Check
                if (i.Version == "-1")
                {
                    continue;
                }
                byte[] Key = KeyVaultHelper.GetVaultKey(i.VaultName);


                // Decrypt Data to respective content type
                if ((Decrypt) && (i.ContentType == "txt"))
                {
                    i.SecretValue = Crypto.ConvertFromKeyVaultSecret((byte[])i.SecretValue, Key);
                }
                else if (Decrypt)
                {
                    i.SecretValue = Crypto.ConvertFromKeyVaultSecretAsBytes((byte[])i.SecretValue, Key);
                }
                else
                {
                    i.SecretValue = Crypto.ConvertFromKeyVaultSecretAsSecureString((byte[])i.SecretValue, Key);
                }
            }


            return(result);
        }
コード例 #7
0
ファイル: KeyVaultHelper.cs プロジェクト: M1kep/PSAdmin
        internal static byte[] GetVaultKey(string VaultName)
        {
            Data.KeyVault KeyVault = KeyVaultHelper.GetItemThrow(null, VaultName, true);

            if ( String.IsNullOrEmpty(KeyVault.Thumbprint) )
                return KeyVault.VaultKey;

            Data.KeyVaultCertificate Certificate = KeyVaultCertificateHelper.GetItemThrow(null, VaultName, null, KeyVault.Thumbprint, null, true, true);

            // Decrypt the Key
            X509Certificate2 x509 = (X509Certificate2)Certificate.Certificate;

            if ((x509.HasPrivateKey == false) || (x509.PrivateKey == null))
            {
                throw new InvalidOperationException("Certificate does not contain PrivateKey");
            }
            return ((RSACryptoServiceProvider)x509.PrivateKey).Decrypt(KeyVault.VaultKey, true);
        }
コード例 #8
0
ファイル: KeyVaultSecretHelper.cs プロジェクト: M1kep/PSAdmin
        public static bool SetItems(string Id, string VaultName, string Name, string Version, string Enabled, Nullable <DateTime> Expires, Nullable <DateTime> NotBefore, string ContentType, string[] Tags, string SecretValue, bool Exact)
        {
            Data.KeyVault KeyVault = KeyVaultHelper.GetItem(null, VaultName, true);
            if (KeyVault == null)
            {
                return(false);
            }

            // Build the Key
            byte[] Key        = KeyVaultHelper.GetVaultKey(KeyVault.VaultName);
            byte[] SecretData = null;
            if (!String.IsNullOrEmpty(SecretValue))
            {
                SecretData = Crypto.ConvertToKeyVaultSecret(SecretValue, Key);
            }

            Hashtable filter = new Hashtable {
                { "Id", Id },
                { "VaultName", VaultName },
                { "Name", Name }
            };

            Hashtable table = new Hashtable {
                { "Version", Version },
                { "Enabled", Enabled },
                { "Expires", Expires },
                { "NotBefore", NotBefore },
                { "ContentType", ContentType },
                { "Tags", Tags },
                { "SecretValue", SecretData }
            };

            if (Tags != null)
            {
                table.Add("Tags", String.Join(";", Tags));
            }

            return(SQLiteDB.UpdateRow(TableName, table, filter, Exact));
        }