/// <summary>
        /// DescriptorExists
        /// </summary>
        /// <param name="sercure_name"></param>
        /// <param name="store"></param>
        /// <param name="crypto"></param>
        /// <returns></returns>
        public static bool DescriptorExists(string sercure_name, IStorage store, CryptographyLib.ICryptography crypto)
        {
            string sub_dir_name        = StoragePath.GetDirectory(sercure_name);
            string secure_sub_dir_name = SecureStorageUtility.GetSecureName(sub_dir_name, crypto.Key);

            return(store.Exists(secure_sub_dir_name));
        }
Esempio n. 2
0
        /// <summary>
        /// DeleteDirectory
        /// </summary>
        /// <param name="name">the name of the directory to delete</param>
        public void DeleteDirectory(string name)
        {
            // delete file
            string secure_name = GetSecureName(name);

            // is this dir empty
            XmlDocument me_doc  = GetDirectoryDocument(secure_name);
            XmlNodeList me_node = me_doc.SelectNodes("/root/file | /root/directory");

            if (me_node.Count > 0)
            {
                //BKP delete all
                throw new SecureStorageException("Directory is not empty.");
            }

            Store.Delete(secure_name);

            // decrypt xml dir file
            string      dir_name        = StoragePath.GetDirectory(name);
            string      secure_dir_name = GetSecureName(dir_name);
            XmlDocument doc             = GetDirectoryDocument(secure_dir_name);

            RemoveNameXml(doc, name);

            // delete old dir file
            Store.Delete(secure_dir_name);
            // create new dir file
            string xml = doc.OuterXml;

            byte[] data  = Encoding.UTF8.GetBytes(xml);
            byte[] crypt = crypto.Encrypt(data);
            Store.Create(secure_dir_name, crypt, FileMode.Append);
        }
Esempio n. 3
0
        /// <summary>
        /// Copy
        /// </summary>
        /// <param name="src_name">the plain text source</param>
        /// <param name="dst_name">the plain test destination</param>
        public void Copy(string src_name, string dst_name)
        {
            // get secure names
            string secure_src_name     = GetSecureName(src_name);
            string dir_src_name        = StoragePath.GetDirectory(src_name);
            string secure_dir_src_name = GetSecureName(dir_src_name);

            string secure_dst_name     = GetSecureName(dst_name);
            string dir_dst_name        = StoragePath.GetDirectory(dst_name);
            string secure_dir_dst_name = GetSecureName(dir_dst_name);

            // create copy on storage
            Store.Copy(secure_src_name, secure_dst_name);

            // create/append xml file node to xml directory node
            XmlDocument src_doc = GetDirectoryDocument(secure_dir_src_name);
            string      hash    = ReadFileSignatureXml(src_doc, src_name); // get hash from doc

            XmlDocument dst_doc = GetDirectoryDocument(secure_dir_dst_name);

            AppendFileXml(dst_doc, dst_name, hash);
            // delete old directory file
            Store.Delete(secure_dir_dst_name);
            // create new directory file
            string xml = dst_doc.OuterXml;

            byte[] data           = Encoding.UTF8.GetBytes(xml);
            byte[] encrypted_data = crypto.Encrypt(data);
            Store.Create(secure_dir_dst_name, encrypted_data, FileMode.Append);
        }
Esempio n. 4
0
        /// <summary>
        /// CreateFile
        /// </summary>
        /// <param name="name">name of file</param>
        /// <param name="data">file data</param>
        public void CreateFile(string name, byte[] data)
        {
            // get all names
            string secure_name     = GetSecureName(name);
            string dir_name        = StoragePath.GetDirectory(name);
            string secure_dir_name = GetSecureName(dir_name);

            // encrypt file to upload
            byte[] encrypted_data = crypto.Encrypt(data);
            // upload file
            CreateAppendFragment(secure_name, encrypted_data);

            // create/append xml file node to xml directory node
            XmlDocument doc  = GetDirectoryDocument(secure_dir_name);
            string      hash = null;

            byte[] sha256 = SecureStorageUtility.SHA256(data);
            hash = Convert.ToBase64String(sha256);
            AppendFileXml(doc, name, hash);

            // delete old directory file
            Store.Delete(secure_dir_name);
            // create new directory file
            string xml = doc.OuterXml;

            data           = Encoding.UTF8.GetBytes(xml);
            encrypted_data = crypto.Encrypt(data);
            Store.Create(secure_dir_name, encrypted_data, FileMode.Append);
        }
Esempio n. 5
0
        /// <summary>
        /// DeleteFile
        /// </summary>
        /// <param name="name">the name of file to delete</param>
        public void DeleteFile(string name)
        {
            string secure_name = GetSecureName(name);

            Store.Delete(secure_name);

            // decrypt xml dir file
            string      dir_name        = StoragePath.GetDirectory(name);
            string      secure_dir_name = GetSecureName(dir_name);
            XmlDocument doc             = GetDirectoryDocument(secure_dir_name);

            RemoveNameXml(doc, name);

            // delete old dir file
            Store.Delete(secure_dir_name);
            // create new dir file
            string xml = doc.OuterXml;

            byte[] data  = Encoding.UTF8.GetBytes(xml);
            byte[] crypt = crypto.Encrypt(data);
            Store.Create(secure_dir_name, crypt, FileMode.Append);
        }
Esempio n. 6
0
        /// <summary>
        /// CreateDirectory
        /// </summary>
        /// <param name="name"></param>
        public void CreateDirectory(string name)
        {
            // get all names
            string secure_name     = GetSecureName(name);
            string dir_name        = StoragePath.GetDirectory(name);
            string secure_dir_name = GetSecureName(dir_name);

            // create descriptor file
            CreateDescriptorFile(name);

            // create/append xml file node to xml directory node
            XmlDocument doc = GetDirectoryDocument(secure_dir_name);

            AppendDirectoryXml(doc, name);

            // delete old dir file
            Store.Delete(secure_dir_name);
            // create new dir file
            string xml = doc.OuterXml;

            byte[] data           = Encoding.UTF8.GetBytes(xml);
            byte[] encrypted_data = crypto.Encrypt(data);
            Store.Create(secure_dir_name, encrypted_data, FileMode.Append);
        }