JunkieKeySystem.CSharp 2.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package JunkieKeySystem.CSharp --version 2.0.1
                    
NuGet\Install-Package JunkieKeySystem.CSharp -Version 2.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JunkieKeySystem.CSharp" Version="2.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="JunkieKeySystem.CSharp" Version="2.0.1" />
                    
Directory.Packages.props
<PackageReference Include="JunkieKeySystem.CSharp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add JunkieKeySystem.CSharp --version 2.0.1
                    
#r "nuget: JunkieKeySystem.CSharp, 2.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package JunkieKeySystem.CSharp@2.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=JunkieKeySystem.CSharp&version=2.0.1
                    
Install as a Cake Addin
#tool nuget:?package=JunkieKeySystem.CSharp&version=2.0.1
                    
Install as a Cake Tool

JunkieKeySystem.CSharp

Official C# SDK for the Junkie Development Key System.
Handles key verification, hardware fingerprinting, and key-link generation in a single package.

Installation

dotnet add package JunkieKeySystem.CSharp

Or via Package Manager:

Install-Package JunkieKeySystem.CSharp

Requirements

  • .NET Standard 2.0+ (works with .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5/6/7/8+)
  • API Key from the Junkie Development Dashboard

Quick Start

Verify a Key

bool valid = await JunkieKeySystem.VerifyKeyAsync(
    apiKey:     "your-api-key",
    identifier: 1,              // your user ID
    key:        "KEY_-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    service:    "MyService"
);

if (valid)
    Console.WriteLine("Access granted.");

Verify with Details

var result = await JunkieKeySystem.VerifyKeyDetailedAsync(
    apiKey:     "your-api-key",
    identifier: 1,
    key:        "KEY_-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    service:    "MyService"
);

if (result.Valid)
{
    Console.WriteLine($"Expires: {result.ExpiresAt?.ToString("yyyy-MM-dd") ?? "lifetime"}");
    Console.WriteLine($"Premium: {result.IsPremium}");
    Console.WriteLine($"Discord: {result.DiscordUsername}");
}
else
{
    Console.WriteLine($"Denied: {result.Message}");
}

Returns a URL the end-user can open to complete the key flow:

string? link = await JunkieKeySystem.GetKeyLinkAsync(
    apiKey:     "your-api-key",
    identifier: 1,
    service:    "MyService",
    provider:   "Mixed"
);

if (link != null)
    Console.WriteLine($"Open this link: {link}");

Hardware Fingerprint

The SDK auto-generates a hardware fingerprint when verifying keys.
You can also retrieve it manually:

string hwid = JunkieKeySystem.GenerateHardwareId();

To pass a custom fingerprint instead:

var result = await JunkieKeySystem.VerifyKeyDetailedAsync(
    apiKey:      "your-api-key",
    identifier:  1,
    key:         "KEY_-...",
    service:     "MyService",
    fingerprint: "custom-fingerprint-value"
);

API Reference

JunkieKeySystem (static)

Method Returns Description
VerifyKeyAsync(...) Task<bool> Verify a key — true if valid
VerifyKeyDetailedAsync(...) Task<SignatureVerifyResult> Verify with full metadata
GetKeyLinkAsync(...) Task<string?> Get a key-flow URL for the user
GenerateHardwareId() string Get the local hardware fingerprint

SignatureVerifyResult

Property Type Description
Valid bool Whether the key passed verification
Message string Status message (KEY_VALID, KEYLESS, or error)
Error string? Error details (only when Valid = false)
IsKeyless bool true if keyless mode is active for this service
IsPremium bool true if the key/service has premium status
ExpiresAt DateTime? Expiration date (UTC), null for lifetime keys
CreatedAt DateTime? Creation date (UTC)
DiscordId string? Discord User ID tied to the key
DiscordUsername string? Discord username tied to the key

Parameters

All verify methods share these parameters:

Parameter Required Default Description
apiKey yes Your API key from the dashboard
identifier yes Your user ID (service owner)
key yes The key to verify
service yes Name of your service
application no "CSharp-NuGet" Application identifier (analytics)
fingerprint no auto-generated Hardware fingerprint override

Compatibility

Platform Supported
.NET 8 / 9
.NET 6 / 7
.NET Framework 4.6.1+
.NET Core 2.0+
Unity (Mono)

License

MIT — see LICENSE for details.

Product 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
2.0.3 103 3/23/2026
2.0.2 98 3/23/2026
2.0.1 114 2/28/2026
2.0.0 107 2/24/2026
1.0.1 191 10/6/2025