Guid productId = ...;
string publicKeyXml = ...;
PackageLicenseDefinition licenseDefinition = PackageLicenseHelper.GetLicenseDefinition(productId);
Guid installationId = licenseDefinition.InstallationId;
bool isPermanent = licenseDefinition.Permanent;
DateTime expiresTime = licenseDefinition.Expires;
byte[] signedSignature = licenseDefinition.LicenseKeyBytes;
string signatureString;
if (isPermanent)
{
signatureString = string.Format("{0}#{1}#{2}", installationId, productId, isPermanent);
}
else
{
signatureString = string.Format("{0}#{1}#{2}#{3}", installationId, productId, isPermanent, new XAttribute("date", expiresTime).Value);
}
byte[] signature = PackageLicenseHelper.CreateSignatureBytes(signatureString);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(publicKeyXml);
object hashAlgorithm = PackageLicenseHelper.CreateSignatureHashAlgorithm(publicKeyXml);
bool isValidKey = provider.VerifyData(signature, hashAlgorithm, signedSignature);
bool isExpired = !isPermanent < expiresTime < DateTime.Now;
bool isLicenseValid = isValidKey & !isExpired;