Paseto.Core 1.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Paseto.Core --version 1.2.1                
NuGet\Install-Package Paseto.Core -Version 1.2.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="Paseto.Core" Version="1.2.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Paseto.Core --version 1.2.1                
#r "nuget: Paseto.Core, 1.2.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.
// Install Paseto.Core as a Cake Addin
#addin nuget:?package=Paseto.Core&version=1.2.1

// Install Paseto.Core as a Cake Tool
#tool nuget:?package=Paseto.Core&version=1.2.1                

Paseto.NET, a Paseto (Platform-Agnostic Security Tokens) implementation for .NET

CI Maintenance contributions welcome

Features

PASETO protocols

purpose v1 v2 v3 v4
local
public

PASERK extension

type support
lid
local
seal
local-wrap
local-pw
sid
public
pid
secret
secret-wrap
secret-pw

Installation

NuGet

Install the Paseto.Core NuGet package from the .NET CLI using:

dotnet add package Paseto.Core

or from the NuGet package manager:

Install-Package Paseto.Core

Usage

alternate text is missing from this package README image

PASETO

The library exposes a Fluent API with several method overloads found in Use(), WithKey(), AddClaim(), AddFooter() and so on to provide the flexibility needed for encoding and decoding PASETO tokens and also for generating the required symmetric or asymmetric key pairs. However, you can use the Protocols and Handlers directly if you like.

Below are a couple of examples for the most common use cases:

Generating a crypto random Symmetric Key
var pasetoKey = new PasetoBuilder().Use(version, Purpose.Local)
                                   .GenerateSymmetricKey();
Generating an Asymmetric Key Pair
var pasetoKey = new PasetoBuilder().Use(version, Purpose.Public)
                                   .GenerateAsymmetricKeyPair(seed);

NOTE: A seed is not required for protocol v1.

Generating a Token
var token = new PasetoBuilder().Use(version, purpose)
                               .WithKey(key)
                               .AddClaim("data", "this is a secret message")
                               .Issuer("https://github.com/daviddesmet/paseto-dotnet")
                               .Subject(Guid.NewGuid().ToString())
                               .Audience("https://paseto.io")
                               .NotBefore(DateTime.UtcNow.AddMinutes(5))
                               .IssuedAt(DateTime.UtcNow)
                               .Expiration(DateTime.UtcNow.AddHours(1))
                               .TokenIdentifier("123456ABCD")
                               .AddFooter("arbitrary-string-that-isn't-json")
                               .Encode();
Decoding a Token
var result = new PasetoBuilder().Use(version, purpose)
                                .WithKey(key)
                                .Decode(token);

Or validate the token's payload while decoding (the header and signature is always validated):

var valParams = new PasetoTokenValidationParameters
{
    ValidateLifetime = true,
    ValidateAudience = true,
    ValidateIssuer = true,
    ValidAudience = "https://paseto.io",
    ValidIssuer = "https://github.com/daviddesmet/paseto-dotnet"
};

var result = new PasetoBuilder().Use(version, purpose)
                                .WithKey(key)
                                .Decode(token, valParams);

PASERK

The library also provides the PASERK extension for encoding and decoding a key.

A serialized key in PASERK has the format:

k[version].[type].[data]
Encoding a Key
var paserk = Paserk.Encode(pasetoKey, type);
Decoding a Key
var key = Paserk.Decode(paserk);

Roadmap

  • Add support for remaining PASERK types and its operations.
  • Add support for version detection when decoding.
  • Add support for custom payload validation rules.
  • Improve documentation.

Test Coverage

codecov

  • Includes the mandatory test vectors for PASETO and PASERK.

Cryptography

  • Uses Ed25519 (EdDSA over Curve25519) algorithm from CodesInChaos Chaos.NaCl cryptography library.
  • Uses Blake2b cryptographic hash function from Konscious.Security.Cryptography repository.
  • Uses AES-256-CTR, ECDSA over P-384 algorithms from Bouncy Castle cryptography library.
  • Uses XChaCha20-Poly1305 AEAD from NaCl.Core repository.

Learn More

License

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

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Paseto.Core:

Package Downloads
PasetoBearer.Authentication

A simple implementation for securing the API by public PASETO access tokens.

FAPIServer

Core logic for FAPI Server

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Paseto.Core:

Repository Stars
EpinelPS/EpinelPS
A private server for another anime game
Version Downloads Last updated
1.3.0 7,677 7/15/2024
1.2.1 1,939 6/23/2024
1.1.1 3,997 5/16/2024
1.1.0 25,754 4/20/2023
1.0.7 70,218 8/24/2022
1.0.6 18,638 5/24/2022
1.0.5 151 5/11/2022
1.0.4 2,497 4/28/2022
1.0.3 228 4/16/2022
0.7.2 84,565 7/9/2019
0.7.1 819 2/5/2019
0.7.0 2,279 11/27/2018
0.6.1 1,285 4/6/2018
0.6.0 1,041 3/30/2018
0.5.5 1,123 3/20/2018
0.5.4 950 3/19/2018
0.5.3 945 3/16/2018