Ok, here is some simplified C# source code explaining how the signature is verified.
RSAParameters RSAParam = new RSAParameters(); // Need to recover this yourself
Guid DivisionID = new Guid("{00000000-1111-2222-3333-444444444444}"); // Need to recover this yourself
string HWModelNumber = "DSOX1234A";
string HWSerialNumber = "AB12345678";
Guid LicenseId = new Guid("{00000000-1111-2222-3333-444444444444}");
string FeatureName = "dummy";
string FeatureVersion = "1";
DateTime? ExpirationDate = new System.DateTime(2011, 3, 30);
string ProductNumber = "DSOXDMY";
string Signature = "OZrKwpbZq3Oxp8eXebGo190UAYvLMFeyNvs7xCA0oAwDmPP3aV2azu+XFTViLzdYlazEETTJE9knLD7wJJovot3b+iQPgeTk0i8f5IpAdx21ncdJIDjIvi+Ail/mQggRKZLaBZeWF3JWSJ/OTA3jmpti/Qg1sNg3iTdroYzHfbI=";
string s = string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}{3}{4}{5:R}{6:yyyyMMdd}{7}",
new object[] { DivisionID, HWModelNumber, HWSerialNumber, LicenseId, FeatureName, FeatureVersion, ExpirationDate, ProductNumber});
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
using (SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider())
{
RSA.ImportParameters(RSAParam);
if (RSA.VerifyData( Encoding.UTF8.GetBytes(s), SHA1, Convert.FromBase64String(Signature) ))
{
MessageBox.Show("Jep! :)");
}
else
{
MessageBox.Show("Nope");
}
}
}
The RSA paramaters & DivisionID are missing on purpose, you need to recover them yourself. Please don’t ask me how to use this code for something else or what the missing variables are, I won’t help. My goal always is to check if it can be done, not to share a solution ready to go for everyone. If you need something for work -> BUY IT!
Remember that you can forget about warranty & support if things go wrong.