internal static bool ConfirmLicenseDate()
 {
     if (CryptUtils.VerifySign(GetWinInfoHash(LicenseExpireDate + InstanceGuid), LicenseKey, sPublicKeyA + ImportPlayers.sPublicKeyB + sPublicKeyC + sPublicKeyE))
     {
         if (LicenseExpireDate.CompareTo(WinInfo.GetCurrentDate().ToString(DATEFORMAT)) > 0)
         {
             return(true);
         }
     }
     return(false);
 }
        public static bool AddRegistrationKey(string regKey)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(regKey);
            string date = doc.DocumentElement.Attributes["expireDate"].Value;
            string sign = doc.DocumentElement.Attributes["sign"].Value;

            if (CryptUtils.VerifySign(GetWinInfoHash(date + InstanceGuid), sign, sPublicKeyA + ImportPlayers.sPublicKeyB + sPublicKeyC + sPublicKeyE))
            {
                LicenseExpireDate    = date;
                LicenseExpireDateKey = GetWinInfoHash(date + InstanceGuid);
                LicenseKey           = sign;

                /*Utils.IniFile ini = Settings.IniFile;
                 * ini.Write("Reginfo", "ExpireDate", LicenseExpireDate);
                 * ini.Write("Reginfo", "ExpireDateKey", LicenseExpireDateKey);
                 * ini.Write("Reginfo", "LicenseKey", LicenseKey);*/
                return(true);
            }
            return(false);
        }
        internal static string GetActivationKey()
        {
            string xml_data = ToXmlString();

            return(CryptUtils.Encrypt(ToXmlString(), sPublicKeyA + ImportPlayers.sPublicKeyB + sPublicKeyC + sPublicKeyE));
        }
        /*static void ReadInfoFromRegistry()
         * {
         *  Utils.IniFile ini = Settings.IniFile;
         *  Organization = ini.GetString("Reginfo", "Organization", "");
         *  UserName = ini.GetString("Reginfo", "UserName", "");
         *  EMail = ini.GetString("Reginfo", "EMail", "");
         *  LicenseExpireDate = ini.GetString("Reginfo", "ExpireDate", DateTime.MinValue.ToString(DATEFORMAT));
         *  LicenseExpireDateKey = ini.GetString("Reginfo", "ExpireDateKey", "");
         *  LicenseKey = ini.GetString("Reginfo", "LicenseKey", "");
         * }*/
        /*
         * public static void WriteUserInfoToRegistry()
         * {
         *
         *
         *  Utils.IniFile ini = Settings.IniFile;
         *  ini.Write("Reginfo", "Organization", Organization);
         *  ini.Write("Reginfo", "UserName", UserName);
         *  ini.Write("Reginfo", "EMail", EMail);
         * }*/
        /*
         * static void WriteLicenseExpireDateToRegistry()
         * {
         *  Utils.IniFile ini = Settings.IniFile;
         *  ini.Write("Reginfo", "ExpireDate", LicenseExpireDate);
         *  ini.Write("Reginfo", "ExpireDateKey", LicenseExpireDateKey);
         * }*/

        public static bool CheckRegistration()
        {
            TA.Corel.EditionManager.IsTrial = true; // будем считать, что это trial-версия
            if (LicenseExpireDate == "")            //DateTime.MinValue.ToString(DATEFORMAT))
            {                                       // Дата окончания срока лицензии не установлена, значит это первый запуск программы
                if (!TA.DB.Manager.DatabaseManager.CurrentDb.IsDatabaseEmpty)
                {
                    // Если БД не пустая, заначит это не первый запуск программы
                    // Просим пользователя зарегистрироваться
                    // Если пользователь откажется регистрироваться, программа завершится
                    ShowRegistrationWindow(true);
                }
                else
                {
                    TA.Corel.EditionManager.IsTrial = true; // будем считать, что это trial-версия
                    // Устанавливаем дату окончания trial-периода
                    // сохраняем информацию в файл или БД
                    LicenseExpireDate = WinInfo.GetPageFileDate().AddMonths(1).ToString(DATEFORMAT);
                    InstanceGuid      = Guid.NewGuid().ToString();
                    // Формируем строку, подписывающую дату окончания срока действия
                    // во избежаниие ручного изменения
                    LicenseExpireDateKey = GetWinInfoHash(LicenseExpireDate + InstanceGuid);
                    //WriteLicenseExpireDateToRegistry();
                    WindowSkin.MessageBox.Show(Localizator.Dictionary.GetString("TRIAL_DATE", " ") + LicenseExpireDateFormated);
                }
            }
            else
            {         // Дата окончания срока действия лицензии уже установлена, значит это не первый запуск
                if (LicenseKey != "")
                {     // Уже есть лицензия
                    if (CryptUtils.VerifySign(GetWinInfoHash(LicenseExpireDate + InstanceGuid), LicenseKey, sPublicKeyA + ImportPlayers.sPublicKeyB + sPublicKeyC + sPublicKeyE))
                    { // Это правильная лицензия
                        if (LicenseExpireDate.CompareTo(WinInfo.GetCurrentDate().AddMonths(1).ToString(DATEFORMAT)) > 0)
                        {
                            TA.Corel.EditionManager.IsTrial = false;
                            return(true); // До окончания срока действия лицензии осталось больше 30 дней
                        }

                        if (LicenseExpireDate.CompareTo(WinInfo.GetCurrentDate().ToString(DATEFORMAT)) < 0)
                        {
                            TA.Corel.EditionManager.IsTrial = true;
                            ShowRegistrationWindow(true); // Срок действия лицензии закончился, предлагаем продлить. Если нет, то завершаем приложение
                        }
                        else
                        {
                            TA.Corel.EditionManager.IsTrial = false;
                            ShowRegistrationWindow(false); // Срок действия лицензии скоро закончится, предлагаем продлить. Если нет, то продолжаем выполнение программы
                        }
                    }
                    else
                    {                                 // Целостность лицензии нарушена
                        TA.Corel.EditionManager.IsTrial = true;
                        ShowRegistrationWindow(true); // предлагаем Продлить. Если нет, то завершаем приложение
                        //TA.Corel.EditionManager.IsTrial = true; // будем считать, что это trial-версия
                        //WindowSkin.MessageBox.Show(Localizator.Dictionary.GetString("ACTIVATION_KEY_CORRUPTED"));
                        //throw new Exception(Localizator.Dictionary.GetString("ACTIVATION_KEY_CORRUPTED"));
                    }
                }
                else
                { // Лицензии еще нет, значит это trial-период
                    TA.Corel.EditionManager.IsTrial = true;
                    if (GetWinInfoHash(LicenseExpireDate + InstanceGuid) == LicenseExpireDateKey)
                    {     // Успешно пройдена проверка подписи под датой окончания срока действия лицензии
                        if (LicenseExpireDate.CompareTo(WinInfo.GetCurrentDate().ToString(DATEFORMAT)) < 0)
                        { // Срок действия trial_лицензии закончился
                            // просим зарегистрироваться, иначе завершаем приложение
                            ShowRegistrationWindow(true);
                        }
                        else
                        {
                            // Срок действия trial-лицензии еще не вышел
                            if (LicenseExpireDate.CompareTo(WinInfo.GetCurrentDate().AddDays(20).ToString(DATEFORMAT)) > 0)
                            {
                                ShowRegistrationWindow(false);
                            }
                        }
                    }
                    else
                    { // Подпись под датой окончания лицензии нарушена
                      // просим зарегистрироваться, иначе завершаем приложение
                        ShowRegistrationWindow(true);
                    }
                }
            }
            return(false);
        }
 public static string ToXmlString()
 {
     return(String.Format(@"<ActivationKey UserName='******' Organization='{1}' EMail='{2}' AppGuid='{3}' Edition='{4}' WinInfo='{5}' ExpireDate='{6}' InstanceGuid='{7}'/>",
                          UserName, Organization, EMail, SoftwareGuid.ToString(),
                          Corel.EditionManager.EditionString, CryptUtils.GetHash(WinInfo.GetInfo()), LicenseExpireDate, InstanceGuid));
 }
 /// <summary>
 /// Возвращает ХЭШ(дата истечения лицензии, SoftwareGuid, Edition, ХЭШ(WinIfno))
 /// </summary>
 /// <param name="licenseExpireDateString">дата истечения лицензии</param>
 /// <returns></returns>
 private static string GetWinInfoHash(string licenseExpireDateString)
 {
     return(CryptUtils.GetHash(licenseExpireDateString + SoftwareGuid.ToString() + Corel.EditionManager.EditionString + CryptUtils.GetHash(WinInfo.GetInfo())));
 }