public void InvalidLicenseText()
        {
            LicenseDetails license = new LicenseDetails
            {
                Id = 1001,
                ExpiryDate = new DateTime(2016, 12, 27, 0, 0, 0, DateTimeKind.Utc),
                Type = LicenseType.Test
            };

            string licenseText = "";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 26, 0, 0, 0, DateTimeKind.Utc)), "License text is empty.");

            licenseText = "1002";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 26, 0, 0, 0, DateTimeKind.Utc)), "Specified license text is invalid.");

            licenseText = "1003-N8/Xc2RXpYddnHEH881tBKyb4itL4Wiyh3VL3HMQP3phVElppL3GNeSqYDQQcxSz34lXOHfWTrKEdAw2oNcyohMkXTKjlr5T7kASfLHaHPV3mUrFJPFlWhwfEzJ/+Fie0HT0chcXJnxFu50hJT++IfVYtcYwc+gNHzvQc2E2mRt7IklkIjoxMDAyLCJFeHBpcnlEYXRlIjoiMjExNi0xMi0yN1QwMDowMDowMFoiLCJUeXBlIjoiVGVzdCJ9";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 26, 0, 0, 0, DateTimeKind.Utc)), "License ID does not match signature license ID.");

            licenseText = "PIES-N8/Xc2RXpYddnHEH881tBKyb4itL4Wiyh3VL3HMQP3phVElppL3GNeSqYDQQcxSz34lXOHfWTrKEdAw2oNcyohMkXTKjlr5T7kASfLHaHPV3mUrFJPFlWhwfEzJ/+Fie0HT0chcXJnxFu50hJT++IfVYtcYwc+gNHzvQc2E2mRt7IklkIjoxMDAyLCJFeHBpcnlEYXRlIjoiMjExNi0xMi0yN1QwMDowMDowMFoiLCJUeXBlIjoiVGVzdCJ9";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 26, 0, 0, 0, DateTimeKind.Utc)), "Specified license text is invalid.");

            licenseText = "1002-!!/Xc2RXpYddnHEH881tBKyb4itL4Wiyh3VL3HMQP3phVElppL3GNeSqYDQQcxSz34lXOHfWTrKEdAw2oNcyohMkXTKjlr5T7kASfLHaHPV3mUrFJPFlWhwfEzJ/+Fie0HT0chcXJnxFu50hJT++IfVYtcYwc+gNHzvQc2E2mRt7IklkIjoxMDAyLCJFeHBpcnlEYXRlIjoiMjExNi0xMi0yN1QwMDowMDowMFoiLCJUeXBlIjoiVGVzdCJ9";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 27, 0, 0, 0, DateTimeKind.Utc)), "Specified license text is invalid.");

            licenseText = "1001-" + Convert.ToBase64String(Encoding.UTF8.GetBytes("Hello world"));
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 28, 0, 0, 0, DateTimeKind.Utc)), "Specified license text is invalid.");
        }
示例#2
0
 private static void SetRegisteredLicense(LicenseDetails license)
 {
     _registeredLicense = license;
     if (_resetTimer != null)
     {
         _resetTimer.Dispose();
         _resetTimer = null;
     }
 }
        public void LicenseValidation()
        {
            LicenseDetails license = new LicenseDetails
            {
                Id = 1001,
                ExpiryDate = new DateTime(2016, 12, 27, 0, 0, 0, DateTimeKind.Utc),
                Type = LicenseType.Test
            };

            string licenseText = "1001-N70qM5lisTgmXINQXrhM7jfbLxMs0Rkq8nF5V10yf4OMjSZQyI/IR8Oz9hfIyEs5hSzI8eX8dFb1KcKsMySTuQ/wHU6EKX6SzsBHzbOSxHhjR5XuBFUznGM+u1FyK7hGOxsyRZgBDS2rClcD/9bfn7SgitQU4nd1fGXnnQK1s5h7IklkIjoxMDAxLCJFeHBpcnlEYXRlIjoiMjAxNi0xMi0yN1QwMDowMDowMFoiLCJUeXBlIjoiVGVzdCJ9";

            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 26, 0, 0, 0, DateTimeKind.Utc)), "Specified license is for testing only.");
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 27, 0, 0, 0, DateTimeKind.Utc)), "Specified license is for testing only.");
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 28, 0, 0, 0, DateTimeKind.Utc)), "License is not valid for this version of Json.NET Schema. License expired on 2016-12-27. This version of Json.NET Schema was released on 2016-12-28.");

            licenseText = "1001-BADqM5lisTgmXINQXrhM7jfbLxMs0Rkq8nF5V10yf4OMjSZQyI/IR8Oz9hfIyEs5hSzI8eX8dFb1KcKsMySTuQ/wHU6EKX6SzsBHzbOSxHhjR5XuBFUznGM+u1FyK7hGOxsyRZgBDS2rClcD/9bfn7SgitQU4nd1fGXnnQK1s5h7IklkIjoxMDAxLCJFeHBpcnlEYXRlIjoiMjAxNi0xMi0yN1QwMDowMDowMFoiLCJUeXBlIjoiVGVzdCJ9";
            ExceptionAssert.Throws<JSchemaException>(() => LicenseHelpers.RegisterLicense(licenseText, new DateTime(2016, 12, 27, 0, 0, 0, DateTimeKind.Utc)), "License text does not match signature.");
        }
示例#4
0
        internal static void RegisterLicense(string license, DateTime releaseDate)
        {
            string licenseBase64;
            int    licenseId;

            SplitLicense(license, out licenseBase64, out licenseId);

            lock (Lock)
            {
                if (_registeredLicense != null && _registeredLicense.Id == licenseId)
                {
                    return;
                }

                LicenseDetails deserializedLicense = ReadLicenseData(releaseDate, licenseBase64, licenseId);

                SetRegisteredLicense(deserializedLicense);
            }
        }
示例#5
0
        internal static void RegisterLicense(string license, DateTime releaseDate)
        {
            if (string.IsNullOrWhiteSpace(license))
            {
                throw new JsonException("License text is empty.");
            }

            string[] licenseParts = license.Trim().Split('-');
            if (licenseParts.Length != 2)
            {
                throw new JsonException("Specified license text is invalid.");
            }

            int licenseId;

            if (!int.TryParse(licenseParts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out licenseId))
            {
                throw new JsonException("Specified license text is invalid.");
            }

            byte[] licenseData;

            try
            {
                licenseData = Convert.FromBase64String(licenseParts[1]);
            }
            catch
            {
                throw new JsonException("Specified license text is invalid.");
            }

            if (licenseData.Length <= 128)
            {
                throw new JsonException("Specified license text is invalid.");
            }

            MemoryStream   ms         = new MemoryStream(licenseData, 128, licenseData.Length - 128);
            JsonSerializer serializer = new JsonSerializer();

            LicenseDetails deserializedLicense = serializer.Deserialize <LicenseDetails>(new JsonTextReader(new StreamReader(ms)));

            byte[] data      = deserializedLicense.GetSignificateData();
            byte[] signature = SubArray(licenseData, 0, 128);

            if (!CryptographyHelpers.ValidateData(data, signature))
            {
                throw new JsonException("License text does not match signature.");
            }

            if (deserializedLicense.Id != licenseId)
            {
                throw new JsonException("License ID does not match signature license ID.");
            }

            if (deserializedLicense.ExpiryDate < releaseDate)
            {
                string message = "License is not valid for this version of Json.NET Schema. License expired on {0}. This version of Json.NET Schema was released on {1}.".FormatWith(
                    CultureInfo.InvariantCulture,
                    deserializedLicense.ExpiryDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture),
                    releaseDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));

                throw new JsonException(message);
            }

            if (deserializedLicense.Type == LicenseType.Test)
            {
                throw new JsonException("Specified license is for testing only.");
            }

            SetRegisteredLicense(deserializedLicense);
        }