KeyNub.LicenseDongle
1.1.1
dotnet add package KeyNub.LicenseDongle --version 1.1.1
NuGet\Install-Package KeyNub.LicenseDongle -Version 1.1.1
<PackageReference Include="KeyNub.LicenseDongle" Version="1.1.1" />
<PackageVersion Include="KeyNub.LicenseDongle" Version="1.1.1" />
<PackageReference Include="KeyNub.LicenseDongle" />
paket add KeyNub.LicenseDongle --version 1.1.1
#r "nuget: KeyNub.LicenseDongle, 1.1.1"
#:package KeyNub.LicenseDongle@1.1.1
#addin nuget:?package=KeyNub.LicenseDongle&version=1.1.1
#tool nuget:?package=KeyNub.LicenseDongle&version=1.1.1
KeyNub License Dongle — .NET binding
KeyNub.LicenseDongle is a thin, idiomatic .NET wrapper over the native
keynub_licdongle core. It carries no protocol or crypto logic of its own — it
marshals to the C ABI and maps status codes to exceptions. Targets net8.0
and netstandard2.0 (the latter covers .NET Framework 4.8 and 32-bit Windows).
Install
dotnet add package KeyNub.LicenseDongle
Native binaries ship inside the package under runtimes/<rid>/native/ for
win-x86, win-x64, win-arm64, linux-x64, linux-arm64, and osx. On
net8.0+ the host selects the right one automatically; on .NET Framework the
bundled MSBuild targets copy it next to your app and the binding pre-loads it.
No driver install on any platform (Linux needs the shipped udev rule).
Shape
using KeyNub.LicenseDongle;
using var ctx = LicenseDongleContext.Create();
using Dongle dongle = ctx.Open(); // first attached dongle (or by serial)
GenuineResult id = dongle.VerifyGenuine(); // cert chain + live challenge-response
Console.WriteLine($"genuine={id.IsGenuine} serial={id.Serial}");
using Session session = dongle.OpenSession(); // ECDH → HKDF → AES-256-GCM
byte[] license = session.ReadRecord("license"); // read role
// Developer/provisioning tools elevate to the write role with the master key:
session.AuthorizeWrite(masterKeyDer);
session.WriteRecord("license", newBytes);
// App-data envelope encryption — data unusable without a genuine dongle:
byte[] sealed = session.AppEncrypt(Scope.Device, plaintext);
byte[] plain = session.AppDecrypt(sealed);
LicenseDongleContext— thread-safe entry point: enumerate / open / logging.Dongle— one connection:GetInfo,GetSerial,VerifyGenuine,OpenSession.Session— the session-scoped operations: records, counters, app-crypto,AuthorizeWrite.- Failures throw
LicenseDongleException(with aLicdStatus); common cases have subclasses (NotGenuineException,WriteAuthorizationRequiredException, …).
Security
Read docs/integration-security.md before
writing your licensing check. VerifyGenuine() proves a genuine dongle is attached;
it cannot stop an attacker from patching your application or substituting a fake
native library. Branch on a boolean and you will be bypassed — put dongle-derived
data (AppEncrypt/AppDecrypt) on the path your application actually needs.
License
Apache-2.0 — see LICENSE, NOTICE, and
THIRD-PARTY-NOTICES.txt (all three ship inside the
NuGet package). The bundled natives statically link Mbed TLS (Apache-2.0 elected) and
hidapi (BSD-style elected); no GPL terms apply.
Links
- KeyNub License Dongle for .NET: the product, and how to order one
- Source, samples and issue tracker on GitHub
- Native library for your platform
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.1 | 40 | 9/12/2026 |