示例#1
0
        public byte[] GenerateBinaryKey()
        {
            const string originalLookupIndex = "SecureMemo";

            using var secureRnd = new SecureRandomGenerator();
            MemoryStream ms = new MemoryStream();

            byte[] buffer = secureRnd.GetRandomData(secureRnd.GetRandomInt(29, 221));
            ms.Write(buffer, 0, buffer.Length);

            buffer = GeneralConverters.ConvertStringToByteArray(Encoding.ASCII, originalLookupIndex);
            ms.Write(buffer, 0, buffer.Length);

            buffer = secureRnd.GetRandomData(secureRnd.GetRandomInt(29, 221));
            ms.Write(buffer, 0, buffer.Length);
            buffer = ms.ToArray();

            // ReSharper disable once SuggestVarOrType_Elsewhere

            for (int i = 0; i < secureRnd.GetRandomInt(83, 101); i++)
            {
                // Tick count being tracked by .Net using 32 bit integers for some strange reason when the WIN_API CALL uses ulong and thus not overflowing in 24 days and 20 hours.
                int tickCount = Environment.TickCount;

                // Just inject a small amount of noise for each iteration
                int pos = tickCount % buffer.Length;
                buffer[pos] ^= (byte)(tickCount % byte.MaxValue);
                buffer       = SHA512.GetSHA512HashAsByteArray(buffer);
            }

            buffer = SHA256.GetSHA256HashAsByteArray(buffer);
            return(buffer);
        }
        public bool SaveToFile(string filename, string password)
        {
            try
            {
                //Make a copy of the original file if the original file is above 1 kb
                if (File.Exists(filename) && SystemIOHelper.GetFileSize(filename) > 1024)
                {
                    string copyFilename = GeneralConverters.GetDirectoryNameFromPath(filename, true) + "BookmarksCopy.dat";
                    if (File.Exists(copyFilename))
                    {
                        File.Delete(copyFilename);
                    }
                    File.Copy(filename, copyFilename);
                }

                var  settings       = new StorageManagerSettings(false, Environment.ProcessorCount, true, password);
                var  storageManager = new StorageManager(settings);
                bool successful     = storageManager.SerializeObjectToFile(_bookmarkContainer, filename, null);

                if (successful)
                {
                    IsModified = false;
                }

                return(successful);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "BookmarkManager.SaveToFile(string filename, string password) : " + ex.Message, ex);
                return(false);
            }
        }
示例#3
0
        public bool HasAccessToDirectory(string directory)
        {
            if (_directoryAccessDictionary.ContainsKey(directory))
            {
                return(_directoryAccessDictionary[directory]);
            }

            string volume = GeneralConverters.GetVolumeLabelFromPath(directory);
            var    drives = DriveInfo.GetDrives().ToList();

            if (drives.Any(d => d.IsReady && d.Name.Equals(volume, StringComparison.CurrentCultureIgnoreCase)))
            {
                try
                {
                    var directoryInfo = new DirectoryInfo(directory);
                    directoryInfo.EnumerateFiles();
                    _directoryAccessDictionary.Add(directory, true);
                    return(true);
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            _directoryAccessDictionary.Add(directory, false);
            return(false);
        }
        private void UpdateInformationLabels()
        {
            lblCurrentDbSize.Text = GeneralConverters.FormatFileSizeToString(_thumbnailService.GetThumbnailDbSize());
            int thumbnailItems = _thumbnailService.GetNumberOfCachedThumbnails();

            lblCachedItems.Text = thumbnailItems > 0 ? _thumbnailService.GetNumberOfCachedThumbnails().ToString() : "n/a";
        }
示例#5
0
        public string GenerateKey()
        {
            const string originalLookupIndex = "SecureMemo";
            string       key;

            using var secureRnd = new SecureRandomGenerator();
            string tmp = secureRnd.GetPasswordString(secureRnd.GetRandomInt(29, 221)) + originalLookupIndex + secureRnd.GetPasswordString(secureRnd.GetRandomInt(29, 221));

            // ReSharper disable once SuggestVarOrType_Elsewhere
            byte[] buffer = GeneralConverters.ConvertStringToByteArray(Encoding.ASCII, tmp);
            for (int i = 0; i < secureRnd.GetRandomInt(83, 101); i++)
            {
                // Tick count being tracked by .Net using 32 bit integers for some strange reason when the WIN_API CALL uses ulong and thus not overflowing in 24 days and 20 hours.
                int tickCount = Environment.TickCount;

                // Just inject a small amount of noise for each iteration
                int pos = tickCount % buffer.Length;
                buffer[pos] ^= (byte)(tickCount % byte.MaxValue);
                buffer       = SHA512.GetSHA512HashAsByteArray(buffer);
            }

            buffer = SHA256.GetSHA256HashAsByteArray(buffer);
            key    = Convert.ToBase64String(buffer, 0, buffer.Length, Base64FormattingOptions.None).Trim("=".ToCharArray());

            return(key);
        }
示例#6
0
        public static string GetCRC326HashAsHexString(byte[] data)
        {
            var crc32Implementation = new CRC32();

            byte[] hashData = crc32Implementation.ComputeHash(data);
            return(GeneralConverters.ByteArrayToHexString(hashData));
        }
示例#7
0
        private void LoadNewImageFile(string imagePath)
        {
            try
            {
                pictureBox1.SizeMode = (PictureBoxSizeMode)_applicationSettingsService.Settings.PrimaryImageSizeMode;


                if (_applicationSettingsService.Settings.NextImageAnimation == ImageViewApplicationSettings.ChangeImageAnimation.None)
                {
                    _changeImageAnimation = ImageViewApplicationSettings.ChangeImageAnimation.None;
                }

                _pictureBoxAnimation.ImageLocation = null;

                if (pictureBox1.Image != null && _changeImageAnimation != ImageViewApplicationSettings.ChangeImageAnimation.None)
                {
                    _pictureBoxAnimation.Image = _imageCacheService.GetImageFromCache(imagePath);
                    _pictureBoxAnimation.Refresh();
                }
                else
                {
                    pictureBox1.Image = _imageCacheService.GetImageFromCache(imagePath);
                    pictureBox1.Refresh();
                }

                Text = _windowTitle + @" | " + GeneralConverters.GetFileNameFromPath(imagePath);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "FormMain.LoadNewImageFile(string imagePath) Error when trying to load file: {imagePath} : {Message}", imagePath, ex.Message);
            }
        }
示例#8
0
        public static string GetMD5HashAsHexString(byte[] data)
        {
            var md5Implementation = System.Security.Cryptography.MD5.Create();

            byte[] hashData = md5Implementation.ComputeHash(data);
            return(GeneralConverters.ByteArrayToHexString(hashData));
        }
示例#9
0
 private void UpdateHashTextField(object sender, EventArgs e)
 {
     if (hashBytes != null)
     {
         currentHashOutputTextBox.Text = GeneralConverters.ByteArrayToHexString(hashBytes);
     }
 }
示例#10
0
        public static string GetSHA512HashAsHexString(byte[] data)
        {
            System.Security.Cryptography.SHA256 sha512Implementation = System.Security.Cryptography.SHA256.Create();
            var hashData = sha512Implementation.ComputeHash(data);

            return(GeneralConverters.ByteArrayToHexString(hashData));
        }
示例#11
0
 public void EnablePasswordProtectBookmarks(string verifiedPassword)
 {
     if (verifiedPassword != null)
     {
         PasswordProtectBookmarks = true;
         PasswordDerivedString    = GeneralConverters.GeneratePasswordDerivedString(verifiedPassword);
     }
 }
示例#12
0
        public bool SaveSettings(string filename, string password)
        {
            if (_otpSettings == null)
            {
                return(false);
            }

            FileStream fs = null;

            try
            {
                if (File.Exists(filename))
                {
                    File.Delete(filename);
                }

                fs = File.OpenWrite(filename);

                fs.Seek(4, 0);

                fs.Write(_otpSettings.Salt1, 0, _otpSettings.Salt1.Length);
                fs.Write(_otpSettings.Salt2, 0, _otpSettings.Salt2.Length);

                byte[] passwordBytes = GeneralConverters.GetByteArrayFromString(password);
                string passwordHash  = CreatePasswordHash(_otpSettings.Salt1, _otpSettings.Salt2, passwordBytes);
                passwordBytes = GeneralConverters.GetByteArrayFromString(passwordHash);

                fs.Write(passwordBytes, 0, passwordBytes.Length);

                byte[] encodedBytes     = _otpSettings.Encode(password);
                int    encodedBlockSize = encodedBytes.Length;
                byte[] buffer           = BitConverter.GetBytes(encodedBlockSize);

                fs.Write(buffer, 0, buffer.Length);
                fs.Write(encodedBytes, 0, encodedBytes.Length);

                // Write configOffsetBytes
                fs.Seek(0, SeekOrigin.Begin);
                int configOffsetBytes = _otpSettings.Salt1.Length + _otpSettings.Salt2.Length + passwordBytes.Length;
                buffer = BitConverter.GetBytes(configOffsetBytes);
                fs.Write(buffer, 0, buffer.Length);
                fs.Seek(0, SeekOrigin.End);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Exception in SaveSettings()");
                if (File.Exists(filename))
                {
                    File.Delete(filename);
                }
            }
            finally
            {
                fs?.Close();
            }

            return(true);
        }
        private string CreateRegistrationKey(byte[] licenceBytes)
        {
            string regKeyData = GeneralConverters.ByteArrayToBase64(licenceBytes);

            regKeyData = SerialNumbersSettings.ProtectedApplications.SaltData.GeneralToolkit + regKeyData + SerialNumbersSettings.ProtectedApplications.SaltData.GeneralToolkit + _app;
            byte[] buffer = null;
            EncryptionManager.EncodeString(ref buffer, regKeyData, "064lMPnLyjI6sqfXm5KhSE4R0FDU0AchClDyxpAWKkJgFyih59IkhX598sveO7vdbuEKgbEQjDRcLtx0FbcJtASEqHZE8bLX2CIq2LwYZC4OWZGWzx7dv0dxp1h6dcck");
            return(ConvertToBase32SerialNumber(buffer));
        }
示例#14
0
        private void createMD5FileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (FileListDataGridView.SelectedRows.Count == 0)
            {
                return;
            }
            var fileSystemFileWrapper = (FileListDataGridView.SelectedRows[0].DataBoundItem as FileSystemFileWrapper);

            if (fileSystemFileWrapper == null)
            {
                MessageBox.Show("Unexprected error in createMD5File. DataBoundItem is " + FileListDataGridView.SelectedRows[0].DataBoundItem.GetType());
                return;
            }

            // Root folder?
            string sfvFilename            = fileSystemFileWrapper.FilePath ?? _currentFileSystemDrive.DriveLetter + fileSystemFileWrapper.Name;
            int    fileExtensionDelimiter = sfvFilename.LastIndexOf('.');

            if (fileExtensionDelimiter > 0)
            {
                sfvFilename = sfvFilename.Substring(0, fileExtensionDelimiter) + ".md5";
            }
            else
            {
                sfvFilename += ".md5";
            }


            LoadAndSaveProgressBar.Visible      = true;
            ChecksumFileGenerationLabel.Visible = true;
            Action <ChecksumProgress> checksumProgressLamdaFunction = progress =>
            {
                ChecksumFileGenerationLabel.Text = GeneralConverters.GetFileNameFromPath(progress.Text).PadLeft(5);
                LoadAndSaveProgressBar.Value     = progress.TotalProgress;

                if (progress.Completed)
                {
                    LoadAndSaveProgressBar.Visible      = false;
                    ChecksumFileGenerationLabel.Visible = false;
                    MessageBox.Show("Successfully created MD5 file");
                }
            };

            var checksumFileGenerator = new ChecksumFileGenerator(Application.ProductName + " " + Application.ProductVersion, new Progress <ChecksumProgress>(checksumProgressLamdaFunction));
            var paths = new StringCollection();

            foreach (DataGridViewRow selectedRow in FileListDataGridView.SelectedRows)
            {
                var selectedFile = selectedRow.DataBoundItem as FileSystemFileWrapper;
                if (selectedFile != null && selectedFile.FilePath != null)
                {
                    paths.Add(selectedFile.FilePath);
                }
            }

            checksumFileGenerator.GenrateMD5FileAsync(paths, sfvFilename);
        }
        private string CreateRegistrationKey(byte[] licenseBytes)
        {
            string regKeyData = GeneralConverters.ByteArrayToBase64(licenseBytes);

            regKeyData = LicenseGeneratorStaticData.SaltData.GeneralToolkit + regKeyData + LicenseGeneratorStaticData.SaltData.GeneralToolkit + this._app;
            byte[] buffer = new byte[0];
            EncryptionManager.EncodeString(ref buffer, regKeyData, regKeyData);
            return(this.ConvertToBase32SerialNumber(buffer));
        }
示例#16
0
        public bool ValidatePassword(string password)
        {
            if (_otpSettings == null)
            {
                throw new InvalidOperationException("OTPConfigService must be Initialized before password validation");
            }

            byte[] passwordBytes = GeneralConverters.GetByteArrayFromString(password);
            return(CreatePasswordHash(_otpSettings.Salt1, _otpSettings.Salt2, passwordBytes) == PasswordHash);
        }
示例#17
0
        private static string CreateApplicationSalt()
        {
            var randomBytes = new byte[512];

            using (RandomNumberGenerator random = RandomNumberGenerator.Create())
            {
                random.GetBytes(randomBytes);
                return(GeneralConverters.ByteArrayToHexString(randomBytes));
            }
        }
示例#18
0
        public bool Decode(byte[] data, string password)
        {
            var msEncoded = new MemoryStream(data);

            byte[] buffer = new byte[4];

            msEncoded.Read(buffer, 0, 4);
            int encodedBytes = BitConverter.ToInt32(buffer, 0);

            buffer = new byte[encodedBytes];
            msEncoded.Read(buffer, 0, buffer.Length);
            byte[] decodedBytes = EncryptionManager.DecryptData(buffer, password);

            msEncoded.Read(buffer, 0, 4);
            int hashByteLength = BitConverter.ToInt32(buffer, 0);

            if (hashByteLength > 512)
            {
                return(false);
            }

            byte[] hashBytesFromData = new byte[hashByteLength];
            msEncoded.Read(hashBytesFromData, 0, hashBytesFromData.Length);
            byte[] hashBytesFromDecodedDataBytes = SHA512.Create().ComputeHash(decodedBytes, 0, decodedBytes.Length);

            bool hashCompareResult = GeneralConverters.ByteArrayToBase64(hashBytesFromData) == GeneralConverters.ByteArrayToBase64(hashBytesFromDecodedDataBytes);

            if (!hashCompareResult)
            {
                return(false);
            }

            var msDecoded = new MemoryStream(decodedBytes);

            buffer = new byte[4];

            msDecoded.Read(buffer, 0, buffer.Length);
            int leftPaddingLength = BitConverter.ToInt32(buffer, 0);

            msDecoded.Read(buffer, 0, buffer.Length);
            int rightPaddingLength = BitConverter.ToInt32(buffer, 0);

            msDecoded.Read(buffer, 0, buffer.Length);
            int totalLength = BitConverter.ToInt32(buffer, 0);

            byte[] decodedDataBlock = new byte[totalLength];
            msDecoded.Read(decodedDataBlock, 0, decodedDataBlock.Length);

            byte[] sharedSecretBytes = new byte[totalLength - leftPaddingLength - rightPaddingLength];
            Buffer.BlockCopy(decodedDataBlock, leftPaddingLength, sharedSecretBytes, 0, sharedSecretBytes.Length);

            SharedSecret = GeneralConverters.GetStringFromByteArray(sharedSecretBytes);

            return(true);
        }
        public bool SynchronizeTime()
        {
            TcpClient tcpClient = new TcpClient();
            long      ticks     = DateTime.Now.Ticks;

            try
            {
                tcpClient.Connect(TimeServerUrl, 37);
            }
            catch (Exception ex)
            {
                LogWriter.WriteLog("Connection to time server failed - " + ex.Message);
                return(false);
            }

            if (!tcpClient.Connected)
            {
                tcpClient.Close();
                return(false);
            }

            NetworkStream ns = tcpClient.GetStream();

            byte[] bTime     = new byte[8];
            int    bytesRead = ns.Read(bTime, 0, 8);

            tcpClient.Close();
            if (bytesRead != 4)
            {
                return(false);
            }

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bTime);
            }

            UInt32   u32Time     = BitConverter.ToUInt32(bTime, 4);
            DateTime presentDate = GeneralConverters.GetDateTimeFromUInt(u32Time);

            UpdateSystemClock.SystemTime updatedTime = new UpdateSystemClock.SystemTime
            {
                Year        = Convert.ToUInt16(presentDate.Year),
                Month       = Convert.ToUInt16(presentDate.Month),
                Day         = Convert.ToUInt16(presentDate.Day),
                DayOfWeek   = Convert.ToUInt16(presentDate.DayOfWeek),
                Hour        = Convert.ToUInt16(presentDate.Hour),
                Minute      = Convert.ToUInt16(presentDate.Minute),
                Second      = Convert.ToUInt16(presentDate.Second),
                Millisecond = 0
            };

            return(UpdateSystemClock.Win32SetSystemTime(ref updatedTime));
        }
示例#20
0
 private void UpdateFileHashStatus(object sender, FileHashEventArgs e)
 {
     lblFileHashesRunning.Text = Math.Max(0, _hashComputeCount).ToString();
     if (e.FileName == null)
     {
         lblFileHashInfo.Text = "";
     }
     else
     {
         lblFileHashInfo.Text = GeneralConverters.GetFileNameFromPath(e.FileName) + " - " + GeneralConverters.FormatFileSizeToString(e.FileSize);
     }
 }
 private void HandleOkClick()
 {
     if (this.UseDerivedPassword && this.PasswordDerivedString != GeneralConverters.GeneratePasswordDerivedString(this.txtPassword.Text))
     {
         MessageBox.Show(this, "Invalid password");
         return;
     }
     this.PasswordString   = this.txtPassword.Text;
     this.PasswordVerified = true;
     DialogResult          = DialogResult.OK;
     this.Close();
 }
 private void HandleOkClick()
 {
     if (UsePasswordValidation && PasswordDerivedString != GeneralConverters.GeneratePasswordDerivedString(PasswordSalt + txtPassword.Text + PasswordSalt))
     {
         MessageBox.Show(this, "Invalid password");
         return;
     }
     PasswordString   = txtPassword.Text;
     PasswordVerified = true;
     DialogResult     = DialogResult.OK;
     Close();
 }
示例#23
0
 private void Initialize()
 {
     settingsFilePath      = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + Assembly.GetExecutingAssembly().GetName().Name + "\\SecureChatAppSettings.dat";
     settingsDirectoryPath = GeneralConverters.GetDirectoryNameFromPath(settingsFilePath);
     try
     {
         if (!Directory.Exists(settingsDirectoryPath))
         {
             Directory.CreateDirectory(settingsDirectoryPath);
         }
     }
     catch (Exception ex)
     {
         LogWriter.WriteLog(ex.Message);
     }
 }
示例#24
0
        /// <summary>
        ///     Create a new instance of otpSettings
        /// </summary>
        /// <param name="password"></param>
        /// <returns>Password hash</returns>
        public string Create(string password, Authenticator.SecretKeyLength keyLength)
        {
            using (var randomNumberGenerator = RandomNumberGenerator.Create())
            {
                byte[] salt1Bytes    = new byte[SaltByteLength];
                byte[] salt2Bytes    = new byte[SaltByteLength];
                byte[] passwordBytes = GeneralConverters.GetByteArrayFromString(password);

                randomNumberGenerator.GetBytes(salt1Bytes);
                randomNumberGenerator.GetBytes(salt2Bytes);

                PasswordHash = CreatePasswordHash(salt1Bytes, salt2Bytes, passwordBytes);
                _otpSettings = new OTPSettings(Authenticator.GenerateKey(keyLength), salt1Bytes, salt2Bytes);
                Initialized  = true;
                return(PasswordHash);
            }
        }
        public void TestPasswordDerivates()
        {
            RandomNumberGenerator rng = RandomNumberGenerator.Create();

            byte[] salt = new byte[32];
            rng.GetBytes(salt);

            string password = SHA256.GetSHA256HashAsHexString(GeneralConverters.StringToByteArray("MartinDahl"));

            Rfc2898DeriveBytes pDeriveBytes  = new Rfc2898DeriveBytes(password, salt, 1000);
            Rfc2898DeriveBytes pDeriveBytes2 = new Rfc2898DeriveBytes(password, salt, 1000);

            string a1 = GeneralConverters.ByteArrayToHexString(pDeriveBytes.GetBytes(16));
            string a2 = GeneralConverters.ByteArrayToHexString(pDeriveBytes2.GetBytes(16));

            Assert.IsTrue(a1 == a2, "Passwords derived was not correct");
        }
        private string GetDriveInfoListItemText(DriveInfo driveInfo)
        {
            string driveInfoText = driveInfo.VolumeLabel ?? "";

            if (!string.IsNullOrEmpty(driveInfo.Name))
            {
                driveInfoText += string.Format(" ({0}) ", driveInfo.Name.Replace("\\", ""));
            }
            else
            {
                driveInfoText += " [" + driveInfo.VolumeLabel + "]";
            }

            driveInfoText += string.Format("{0} free of {1} [{2}, {3}]", GeneralConverters.FormatFileSizeToString(driveInfo.TotalFreeSpace), GeneralConverters.FormatFileSizeToString(driveInfo.TotalSize),
                                           driveInfo.DriveType, driveInfo.DriveFormat);

            return(driveInfoText);
        }
示例#27
0
        private void UpdateCacheStats()
        {
            long       cacheSize  = _selectedCacheSize;
            long       cacheUsage = _imageCacheService.CacheSize;
            const long maxSize    = ImageCacheService.MaxCacheSize;
            const long minSize    = ImageCacheService.MinCacheSize;

            pbarPercentUsed.Maximum = (int)cacheSize;

            lblCacheItems.Text    = _imageCacheService.CachedImages.ToString();
            lblUsedSpace.Text     = GeneralConverters.FormatFileSizeToString(cacheUsage, 2);
            lblFreeSpace.Text     = GeneralConverters.FormatFileSizeToString(cacheSize - cacheUsage);
            pbarPercentUsed.Value = Convert.ToInt32((double)cacheUsage / cacheSize * 100);

            trackBarCacheSize.Minimum = Convert.ToInt32(minSize / TrackbarDivider);
            trackBarCacheSize.Maximum = Convert.ToInt32(maxSize / TrackbarDivider);
            trackBarCacheSize.Value   = Convert.ToInt32(cacheSize / TrackbarDivider);
            UpdateCacheSizeLabel();
        }
示例#28
0
        public T DeserializeObjectFromString(string data, StringSerializationFormat format, bool useProtobuffer)
        {
            byte[] byteData = null;
            switch (format)
            {
            case StringSerializationFormat.Base64:
                byteData = Convert.FromBase64String(data);
                break;

            case StringSerializationFormat.Hex:
                byteData = GeneralConverters.HexStringToByteArray(data);
                break;

            default:
                throw new ArgumentOutOfRangeException("format");
            }

            return(useProtobuffer ? this.DeserializeProtoBufferObjectDataInternal(byteData) : this.DeserializeBinaryFormatterObjectDataInternal(byteData));
        }
示例#29
0
        public void SaveConfigFile(string path)
        {
            try
            {
                if (!GeneralConverters.GetFileNameFromPath(path).EndsWith(".ini"))
                {
                    throw new ArgumentException("Invalid filename. Filename must end with .ini");
                }

                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                FileStream fs = File.Create(path);
                TextWriter tw = new StreamWriter(fs);

                foreach (string rootItemName in _iniFileData.ConfigItems.AllKeys)
                {
                    tw.WriteLine(rootItemName + "=" + _iniFileData.ConfigItems[rootItemName]);
                }

                foreach (string sectionName in _iniFileData.ConfigSections.Keys)
                {
                    IniConfigFileSection section = _iniFileData.ConfigSections[sectionName];
                    tw.WriteLine("[" + sectionName + "]");

                    foreach (string itemName in section.ConfigItems.AllKeys)
                    {
                        tw.WriteLine(itemName + "=" + section.ConfigItems[itemName]);
                    }
                }
                tw.Flush();
                fs.Flush();

                fs.Close();
            }
            catch (Exception ex)
            {
                Log.Error(ex, "IniConfigFileManager->SaveConfigFile");
            }
        }
        private SerialNumberGenerator CreateSerialNumberGenerator()
        {
            var rsaPublicKeyIdentity = new RsaKeySetIdentity(null, RSAKeys.PublicKeys.GetKeyString());
            RsaAsymetricEncryption rsaAsymmetricEncryption = new RsaAsymetricEncryption();
            RSAParameters          pubKeyParams            = rsaAsymmetricEncryption.ParseRsaPublicKeyOnlyInfo(rsaPublicKeyIdentity);

            SerialNumberGenerator serialNumberGenerator = new SerialNumberGenerator(pubKeyParams, SerialNumbersSettings.ProtectedApp.SecureMemo);

            RegistrationDataModel registrationData = new RegistrationDataModel
            {
                Company     = "Doe",
                Salt        = GeneralConverters.GetRandomHexValue(256),
                ValidTo     = DateTime.Now.AddYears(1),
                VersionName = LicenseGeneratorStaticData.SecureMemo.Versions.First()
            };

            serialNumberGenerator.LicenseData.RegistrationData = registrationData;

            return(serialNumberGenerator);
        }