Miqo.license le proporciona todas las herramientas necesarias para emitir, firmar y verificar la autenticidad de una licencia. Los archivos de licencia se firman digitalmente utilizando un algoritmo de firma digital de curva elíptica de última generación (ECDSA) para garantizar que las licencias no sean manipuladas después de la creación.
La biblioteca está disponible para .NET Standard 2.0 y .NET Framework 4.0 y superior. El proyecto de prueba utiliza .NET Core 2.0. Tanto la biblioteca como el paquete Nuget están firmados.
La biblioteca miqo.license facilita:

La biblioteca está disponible como un paquete Nuget firmado.
PM> Install-Package Miqo.License
Antes de firmar un archivo de licencia, necesitará una clave privada y pública. Miqo.license utiliza un algoritmo de firma digital de curva elíptica (ECDSA) para garantizar que los archivos de la licencia no se puedan manipular después de la creación. La clave privada se utiliza para firmar el archivo de licencia, y la clave pública se usa para verificar la autenticidad de la licencia.
Puede usar la herramienta de creación de teclas BUNDLED o crear un nuevo par usando Signer() como este:
var signer = new Miqo . License . ECC . Signer ( ) ;
var privateKey = signer . PrivateKey ;
var publicKey = signer . PublicKey ; Use Signer(privateKeyString) para proporcionar una clave privada previamente generada.
La clave privada debe almacenarse de forma segura y debe ser única para cada uno de sus productos. La clave pública se distribuye con su software. Si desea que su cliente compre una nueva licencia en cada lanzamiento importante, puede crear un par de claves para cada lanzamiento y producto.
Después de generar los pares de claves para su producto, está listo para crear una nueva licencia. La forma más fácil de hacer esto es usar la clase de fluencia.
var license = FluentLicense . CreateLicense ( )
. WithUniqueIdentifier ( Guid . NewGuid ( ) )
. As ( LicenseType . Standard )
. ExpiresAt ( DateTime . Today . AddYears ( 1 ) )
. ForProduct ( "Chewing Gum" )
. LicensedTo ( new Customer {
Name = @"Angus 'Mac' MacGyver" ,
Email = "[email protected]" ,
Company = "Phoenix Foundation"
} )
. SignLicenseWithPrivateKey ( privateKey ) ;La licencia ahora está firmada y está listo para guardarla como un archivo JSON:
license . Save ( "ChewingGum.License" ) ;Si desea almacenar el archivo de licencia en una base de datos u otra moda, puede usar:
var jsonString = license . ToJsonString ( ) ;Cargue la licencia desde un archivo:
var license = License . Load ( "ChewingGum.License" ) ;También puede cargar una licencia desde una cadena:
var license = License . LoadFromString ( jsonString ) ;Ahora puede comenzar a validar la licencia:
using Miqo . License . Validation ;
var validationFailures = license . Validate ( )
. ProductName ( "Chewing Gum" )
. And ( )
. ExpirationDate ( )
. And ( )
. Signature ( publicKey )
. AssertValidLicense ( ) ;Miqo.license no arrojará ninguna excepción cuando falle una validación, sino que más bien devolverá una enumeración de fallas de validación.
Simplemente verifique si hay alguna falla:
if ( validationFailures . Any ( ) ) {
.. .O si desea iterar sobre cada uso de falla:
foreach ( var failure in validationFailures ) {
Console . WriteLine ( $ " { failure . GetType ( ) . Name } : { failure . Message } - { failure . HowToResolve } " ) ;
} Usar validationFailures.ToList(); antes de intentar usar el resultado varias veces.
byte[] y string hexadecimal Tenga en cuenta que miqo.license usa byte[] para las claves privadas y públicas. Puede usar la clase de extensión HexExtensions para convertir rápidamente entre la string byte[] y hex.
byte [ ] publicKey = ECC . HexExtensions . ToHex ( publicKeyHexString ) ;
string hex = ECC . HexExtensions . HexToBytes ( publicKey ) El archivo de licencia se guarda en formato JSON estándar.
{
"license" : {
"id" : " 39bca166-e7ad-471a-955c-873673a9115d " ,
"createdAt" : " 2018-07-24T19:36:57.1917491Z " ,
"product" : " Chewing Gum " ,
"licenseType" : " Standard " ,
"customer" : {
"name" : " Angus 'Mac' MacGyver " ,
"company" : " Phoenix Foundation " ,
"email" : " [email protected] "
},
"expiresAt" : " 2019-07-24T00:00:00+02:00 "
},
"signature" : " ee9wYUeADZUlP7+Q+3PdrtBXqb4ricPlebTBbkMmYEdsPt/D3f6vVwlKQ4jrN1pGECaCTmljMOWWfDUNknLGdA== "
}Puede usar la herramienta de creación de teclas BUNDLED para generar rápidamente un nuevo par de claves en formato de cadena HEX.

Miqo.license se inspiró en Portable.licensing (por Daniel Nauck, Nauck It) y utiliza parte del código de validación.
También se usan otras dos bibliotecas para la parte ECDSA.
Miqo.license está disponible bajo la licencia MIT.