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."); }
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."); }
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); } }
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); }