/* * 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 License { 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 = 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); } } } }