private void Save(CodeSnippetCollection collection, string fileName) { SecureString usbKeyPW = null; SecureString _pw = null; FileEncyptionMode _encryptmode = FileEncyptionMode.DefaultEncryption; if (!string.IsNullOrEmpty(_passwordHelper.UsbKeyId)) { bool _canceled = false; byte[] _key = _passwordHelper.GetUsbKey(_passwordHelper.UsbKeyId, false, out _canceled); if (_canceled) { return; } usbKeyPW = StringCipher.ToSecureString(Utils.ByteArrayToString(_key)); } if (_passwordHelper.Password != null) { _pw = _passwordHelper.Password; _encryptmode = FileEncyptionMode.PasswordEncryption; } if (usbKeyPW != null) { _pw = usbKeyPW; _encryptmode = FileEncyptionMode.UsbKEYEncryption; } EncryptedBinaryFile <CodeSnippetCollection, FileHeader> _writer = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(fileName, _pw); FileHeader _header = new FileHeader() { Version = Config.CurrentVersion().ToString(), FileEncyptionMode = _encryptmode, UsbKeyId = _passwordHelper.UsbKeyId }; try { _writer.Save(_header, collection); CodeLib.Instance.Changed = false; } catch (UnauthorizedAccessException) { MessageBox.Show(_mainform, $"Access to file '{fileName}' denied!.", "File error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } catch (Exception) { return; } }
public CodeSnippetCollection ReadCollection(string filename, out FileReadResult readResult) { SecureString password = _passwordHelper.Password; string usbKeyId = null; readResult = FileReadResult.Succes; string _fileData = string.Empty; SecureString _usbKeyPassword = null; VersionNumber _minimalVersion = new VersionNumber(3, 0, 0, 0); CodeSnippetCollection _resultCollection = new CodeSnippetCollection(); FileHeader _header = null; try { EncryptedBinaryFile <CodeSnippetCollection, FileHeader> _readHeader = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(filename, null); _header = _readHeader.ReadHeader(); if (!_header.Identifier.Equals(Constants.FILEHEADERIDENTIFIER)) { readResult = FileReadResult.ErrorUnknownIdentifier; return(null); } VersionNumber _fileVersion = new VersionNumber(_header.Version); if (_fileVersion < _minimalVersion) { readResult = FileReadResult.ErrorVersionToOld; return(null); } } catch { readResult = FileReadResult.ErrorReadingFile; return(null); } EncryptedBinaryFile <CodeSnippetCollection, FileHeader> _reader = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(filename, null); switch (_header.FileEncyptionMode) { case FileEncyptionMode.DefaultEncryption: _reader = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(filename, null); try { _passwordHelper.ClearPassWord(); _resultCollection = _reader.Read(); return(_resultCollection); // SUCCES } catch { readResult = FileReadResult.ErrorReadingFile; return(null); } case FileEncyptionMode.PasswordEncryption: retryPassword: _reader = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(filename, password); try { _resultCollection = _reader.Read(); _passwordHelper.Password = password; _passwordHelper.UsbKeyId = null; _passwordHelper.ShowKey(); return(_resultCollection); // SUCCES } catch (FileLoadException) { _passwordHelper.ClearPassWord(); readResult = FileReadResult.ErrorReadingFile; return(null); } catch (FileNotFoundException) { _passwordHelper.ClearPassWord(); readResult = FileReadResult.ErrorReadingFile; return(null); } catch (Exception) { goto setPassword; } setPassword: FormSetPassword _formSet = new FormSetPassword(); DialogResult _dg = _formSet.ShowDialog(); if (_dg == DialogResult.OK) { password = _formSet.Password; goto retryPassword; } else { readResult = FileReadResult.OpenCanceled; return(null); } case FileEncyptionMode.UsbKEYEncryption: bool _canceled; usbKeyId = _header.UsbKeyId; byte[] _key = _passwordHelper.GetUsbKey(_header.UsbKeyId, false, out _canceled); if (_canceled) { readResult = FileReadResult.OpenCanceled; return(null); } _usbKeyPassword = StringCipher.ToSecureString(Utils.ByteArrayToString(_key)); _reader = new EncryptedBinaryFile <CodeSnippetCollection, FileHeader>(filename, _usbKeyPassword); try { _resultCollection = _reader.Read(); _passwordHelper.Password = null; _passwordHelper.UsbKeyId = _header.UsbKeyId; _passwordHelper.ShowKey(); return(_resultCollection); // SUCCES } catch { _passwordHelper.ClearPassWord(); readResult = FileReadResult.ErrorReadingFile; return(null); } } _passwordHelper.ClearPassWord(); readResult = FileReadResult.ErrorReadingFile; return(null); }