Miqo.licenseは、ライセンスの信頼性を発行、署名、検証するためのすべてのネクタリーツールを提供します。ライセンスファイルは、最先端のElliptic Curve Digital Signature Algorithm(ECDSA)を使用してデジタル署名され、作成後にライセンスを改ざんできないようにします。
ライブラリは、.NET標準2.0および.NETフレームワーク4.0以上で利用できます。テストプロジェクトでは、.NETコア2.0を使用します。ライブラリとNugetパッケージの両方が署名されています。
miqo.licenseライブラリにより、簡単にできます。

ライブラリは、署名されたNugetパッケージとして利用できます。
PM> Install-Package Miqo.License
ライセンスファイルに署名する前に、プライベートキーと公開キーが必要です。 Miqo.licenseは、Elliptic Curve Digital Signature Algorithm(ECDSA)を使用して、ライセンスファイルを作成後に改ざんしないようにします。秘密鍵はライセンスファイルに署名するために使用され、公開キーはライセンスの信頼性を確認するために使用されます。
バンドルされたキー作成ツールを使用したり、このようなSigner()を使用して新しいペアを作成したりできます。
var signer = new Miqo . License . ECC . Signer ( ) ;
var privateKey = signer . PrivateKey ;
var publicKey = signer . PublicKey ; Signer(privateKeyString)を使用して、以前に生成された秘密鍵を提供します。
秘密鍵は安全に保管する必要があり、製品ごとにユニークである必要があります。公開キーはソフトウェアで配布されます。主要なリリースごとに顧客に新しいライセンスを購入してもらいたい場合は、リリースと製品ごとにキーペアを作成できます。
製品のキーペアを生成した後、新しいライセンスを作成する準備ができています。これを行う最も簡単な方法は、Fluentlicenseクラスを使用することです。
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 ) ;ライセンスが署名され、JSONファイルとして保存する準備ができています。
license . Save ( "ChewingGum.License" ) ;ライセンスファイルをデータベースまたはその他の方法で保存する場合は、以下を使用できます。
var jsonString = license . ToJsonString ( ) ;ファイルからライセンスをロードします。
var license = License . Load ( "ChewingGum.License" ) ;文字列からライセンスをロードすることもできます。
var license = License . LoadFromString ( jsonString ) ;これで、ライセンスの検証を開始できます。
using Miqo . License . Validation ;
var validationFailures = license . Validate ( )
. ProductName ( "Chewing Gum" )
. And ( )
. ExpirationDate ( )
. And ( )
. Signature ( publicKey )
. AssertValidLicense ( ) ;Miqo.licenseは、検証が失敗した場合に例外をスローしませんが、検証障害の列挙を返します。
障害があるかどうかを確認するだけです。
if ( validationFailures . Any ( ) ) {
.. .または、各障害の使用を繰り返したい場合:
foreach ( var failure in validationFailures ) {
Console . WriteLine ( $ " { failure . GetType ( ) . Name } : { failure . Message } - { failure . HowToResolve } " ) ;
} validationFailures.ToList();結果を複数回使用しようとする前に。
byte[]とヘックスstring間の変換Miqo.licenseは、プライベートキーおよびパブリックキーにbyte[]を使用していることに注意してください。 HexExtensions拡張機能クラスを使用して、 byte[]とhex string間をすばやく変換できます。
byte [ ] publicKey = ECC . HexExtensions . ToHex ( publicKeyHexString ) ;
string hex = ECC . HexExtensions . HexToBytes ( publicKey ) ライセンスファイルは標準のJSON形式で保存されます。
{
"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== "
}バンドルされたキー作成ツールを使用して、HEX文字列形式で新しいキーペアをすばやく生成できます。

Miqo.licenseは、portable.licensing(Daniel Nauck、nauck it)に触発され、検証コードの一部を使用しています。
ECDSA部品には、他の2つのライブラリも使用されます。
miqo.licenseは、MITライセンスの下で利用可能になります。