/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }