Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
        }