first real commit
This commit is contained in:
159
LicenseFile.cs
Normal file
159
LicenseFile.cs
Normal file
@@ -0,0 +1,159 @@
|
||||
#define PROD_
|
||||
/*
|
||||
* Created by SharpDevelop.
|
||||
* User: Doug.Macintosh
|
||||
* Date: 2023-02-05
|
||||
* Time: 9:52 AM
|
||||
*
|
||||
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Runtime.ConstrainedExecution;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
|
||||
namespace cdrtool
|
||||
{
|
||||
class LicenseFile
|
||||
{
|
||||
private class Lic
|
||||
{
|
||||
public string Company { get; set; }
|
||||
public string Product { get; set; }
|
||||
public string Version { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string ValidTo { get; set; }
|
||||
public bool Perpetual { get; set; }
|
||||
}
|
||||
|
||||
#if !PROD_
|
||||
//LicenseFile.makeLicenseFile(licfile, "Support", 5, false);
|
||||
public static void makeLicenseFile(string filename, string lictype, int licyears, bool eoy)
|
||||
{
|
||||
|
||||
string secretKey;
|
||||
string KeyExpiration;
|
||||
|
||||
if (eoy)
|
||||
{
|
||||
//KeyExpiration = String.Format("{0}-12-31", DateTime.Now.Year + licyears - 1);
|
||||
//KeyExpiration = String.Format("{0}-12-31", DateTime.Now.Year); // MFA beta 1
|
||||
KeyExpiration = String.Format("2030-12-31"); // MFA beta 1
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyExpiration = DateTime.Now.AddYears(licyears).ToString("yyyy-MM-dd");
|
||||
}
|
||||
|
||||
cdrtool.company = "Hydro Ottawa Limited 4596";
|
||||
Lic mylicense = new Lic
|
||||
{
|
||||
Company = cdrtool.company,
|
||||
Product = cdrtool.product,
|
||||
Version = cdrtool.version.Substring(0, 3),
|
||||
Type = lictype,
|
||||
ValidTo = KeyExpiration,
|
||||
Perpetual = (licyears >= 5)
|
||||
//Perpetual = true
|
||||
};
|
||||
Console.WriteLine("c:{0} p:{1} v:{2}", cdrtool.company, cdrtool.product, cdrtool.version);
|
||||
|
||||
secretKey = _makeHash(cdrtool.company + cdrtool.product + cdrtool.version.Substring(0, 3)).Substring(0, 32);
|
||||
Console.WriteLine("sk:{0}", secretKey);
|
||||
|
||||
string clearText = JsonConvert.SerializeObject(mylicense, Formatting.Indented);
|
||||
Console.WriteLine(clearText);
|
||||
|
||||
string encryptedKey = Encrypt(clearText, secretKey);
|
||||
|
||||
File.WriteAllText(filename, encryptedKey);
|
||||
}
|
||||
|
||||
private static string Encrypt(string clearText, string secretKey)
|
||||
{
|
||||
byte[] clearTextBytes = Encoding.UTF8.GetBytes(clearText);
|
||||
using (Aes aes = Aes.Create())
|
||||
{
|
||||
aes.Key = Encoding.UTF8.GetBytes(secretKey);
|
||||
aes.GenerateIV();
|
||||
|
||||
using (ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
|
||||
{
|
||||
byte[] encryptedBytes = encryptor.TransformFinalBlock(clearTextBytes, 0, clearTextBytes.Length);
|
||||
byte[] combinedBytes = new byte[aes.IV.Length + encryptedBytes.Length];
|
||||
aes.IV.CopyTo(combinedBytes, 0);
|
||||
encryptedBytes.CopyTo(combinedBytes, aes.IV.Length);
|
||||
return Convert.ToBase64String(combinedBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
public static string validate(string filename)
|
||||
{
|
||||
string license;
|
||||
|
||||
if ((!File.Exists(filename)) || (new FileInfo(filename).Length == 0))
|
||||
throw new FileNotFoundException("License file missing or corrupt.");
|
||||
|
||||
if (cdrtool.company.Length < 6)
|
||||
throw new InvalidDataException("User account missing or corrupt.");
|
||||
|
||||
try
|
||||
{
|
||||
license = _getLicense(filename, _makeHash(cdrtool.company + cdrtool.product + cdrtool.version.Substring(0, 3)).Substring(0, 32));
|
||||
Logger.Log(5, "Decrypted License Key: {0}", license);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw new InvalidDataException("Unable to decrypt license file, please contact Support.");
|
||||
}
|
||||
|
||||
return license;
|
||||
|
||||
}
|
||||
|
||||
private static string _getLicense(string filename, string secretKey)
|
||||
{
|
||||
return _Decrypt(File.ReadAllText(filename), secretKey);
|
||||
}
|
||||
|
||||
private static string _Decrypt(string encryptedText, string secretKey)
|
||||
{
|
||||
byte[] encryptedTextBytes = Convert.FromBase64String(encryptedText);
|
||||
using (Aes aes = Aes.Create())
|
||||
{
|
||||
aes.Key = Encoding.UTF8.GetBytes(secretKey);
|
||||
byte[] iv = new byte[aes.BlockSize / 8];
|
||||
byte[] encrypted = new byte[encryptedTextBytes.Length - iv.Length];
|
||||
|
||||
Array.Copy(encryptedTextBytes, 0, iv, 0, iv.Length);
|
||||
Array.Copy(encryptedTextBytes, iv.Length, encrypted, 0, encrypted.Length);
|
||||
|
||||
aes.IV = iv;
|
||||
|
||||
using (ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV))
|
||||
{
|
||||
byte[] decryptedBytes = decryptor.TransformFinalBlock(encrypted, 0, encrypted.Length);
|
||||
return Encoding.UTF8.GetString(decryptedBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string _makeHash(string InputString)
|
||||
{
|
||||
using (SHA256 sha256Hash = SHA256.Create())
|
||||
{
|
||||
byte[] bytes = sha256Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(InputString));
|
||||
return Convert.ToBase64String(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user