To use this example in your C# application, simply create new class and paste following code.
You can also download this example.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Reflection;
using TreeksLicensingLibrary;
/// <summary>
/// Contains functions to work with TLL
/// </summary>
/// <remarks></remarks>
public class TLLInterface
{
//Just paste from toolbox
private const string MyPublicKey = "Put your PUBLIC key XML here.";
private const string MyLicenseXML = "Put your license from us here";
private LicenseVerification verification = new LicenseVerification(MyPublicKey);
/// <summary>
/// Call this function to verify user's license. Optionally supply string and License object to get more information (error message, license details)
/// </summary>
/// <param name="ErrorMessage">Gives you more information if license validation failed</param>
/// <param name="LicenseObject">Contains license details</param>
/// <returns>Bool: True if license was successfully verified</returns>
/// <remarks></remarks>
public bool IsLicenseValid(ref string ErrorMessage, ref TreeksLicensingLibrary.License LicenseObject)
{
string LicenseFilePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\registration.lic";
if (ValidateLicensingLibrary())
{
if (File.Exists(LicenseFilePath))
{
if (verification.VerifyLicenseFile(LicenseFilePath, ref ErrorMessage, ref LicenseObject))
{
return true;
}
else
{
return false;
}
}
else
{
ErrorMessage = "License file not present.";
return false;
}
}
else
{
ErrorMessage = "Library integrity check failed.";
return false;
}
}
/// <summary>
/// Return actual hardware ID
/// </summary>
/// <returns>String: Actual hardware ID</returns>
/// <remarks></remarks>
public string GetAactualHardwareID()
{
return HardwareID.ActualHardwareID;
}
/// <summary>
/// Validates if TLL was not modified by unathorized user
/// </summary>
/// <returns>Bool: True if file was not modified</returns>
/// <remarks></remarks>
private bool ValidateLicensingLibrary()
{
SHA1 sha = new SHA1();
string path = LibraryDLLPath();
string current_hash = sha.hashOfFile(path);
string valid_hash = "7e4b6c0c073853205dbb92bf0798e977a36dbf75";
if (valid_hash == current_hash)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// Disables TLL demo message
/// </summary>
/// <remarks></remarks>
private void SetLicenseInformation()
{
TreeksLicensingLibrary.DeveloperLicense.LicenseXML = MyLicenseXML;
}
/// <summary>
/// Returns path of TLL to verify integrity
/// </summary>
/// <returns>String: Treek's Licensing Library DLL path</returns>
/// <remarks></remarks>
private string LibraryDLLPath()
{
string dirpath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (!dirpath.EndsWith("\\"))
dirpath += "\\";
string path = dirpath + "TreeksLicensingLibrary.dll";
return path;
}
}
/// <summary>
/// Contains interface to work with SHA1
/// </summary>
/// <remarks></remarks>
public class SHA1
{
/// <summary>
/// Returns SHA1 hash of file
/// </summary>
/// <param name="fileToHash">Filesystem path to hashed file</param>
/// <returns>String</returns>
/// <remarks></remarks>
public string hashOfFile(string fileToHash)
{
FileStream rdr = default(FileStream);
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
byte[] bytes = null;
string rtn = "";
if (File.Exists(fileToHash))
{
rdr = new FileStream(fileToHash, FileMode.Open, FileAccess.Read);
bytes = sha.ComputeHash(rdr);
rtn = ByteArrayToString(bytes);
}
return rtn;
}
/// <summary>
/// Returns SHA1 hash of string
/// </summary>
/// <param name="stringToHash">String to be hashed</param>
/// <returns>String</returns>
/// <remarks></remarks>
public string hashOfString(string stringToHash)
{
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
byte[] bytesToHash = System.Text.Encoding.ASCII.GetBytes(stringToHash);
bytesToHash = sha.ComputeHash(bytesToHash);
string strResult = "";
foreach (byte b in bytesToHash)
{
strResult += b.ToString("x2");
}
return strResult;
}
private string ByteArrayToString(byte[] arrInput)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(arrInput.Length * 2);
for (int i = 0; i <= arrInput.Length - 1; i++)
{
sb.Append(arrInput[i].ToString("X2"));
}
return sb.ToString().ToLower();
}
}