private void btnValidateLicense_Click(object sender, EventArgs e) { LicenseInformation info = LicenseEncryption.Decrypt(txtLicense.Text, txtPublicKey.Text); txtProduct.Text = info.Product; txtExpiration.Text = info.Expiration.HasValue ? info.Expiration.Value.ToString("yyyy-MM-dd HH:mm:ss") : "never"; txtIsValid.Text = info.IsValid.ToString(); }
internal static LicenseInformation Decrypt(string license, string publicKey) { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp = false; rsa.FromXmlString(publicKey); var doc = XDocument.Parse(license); if (doc.Root.Name != "license") { throw new Exception("Invalid XML root: " + doc.Root.Name); } string product = doc.Root.Attribute("product").Value; string expirationString = doc.Root.Attribute("expires").Value; string signatureText = doc.Root.Attribute("signature").Value; byte[] signature = Convert.FromBase64String(signatureText); DateTime?expiration; if (expirationString == "never") { expiration = null; } else { expiration = DateTime.Parse(expirationString); } LicenseInformation info = new LicenseInformation { Product = product, Expiration = expiration }; byte[] sourceBytes = GetSourceBytes(product, expiration); info.IsValid = rsa.VerifyData(sourceBytes, CryptoConfig.MapNameToOID("SHA512"), signature); return(info); } }