/NaCl.Core

🔑 NaCl.Core, a cryptography library for .NET

Primary LanguageC#MIT LicenseMIT

NaCl.Core, a cryptography library for .NET

Build Status Build status Build Status Dependabot Status Maintenance contributions welcome

Introduction

NaCl.Core is a managed-only cryptography library for .NET which provides modern cryptographic primitives.

Currently supported:

Crypto Description
ChaCha20 A high-speed stream cipher based on Salsa20
XChaCha20 Based on ChaCha20 IETF with extended nonce (192-bit instead of 96-bit)
Poly1305 A state-of-the-art secret-key message-authentication code (MAC) based on RFC8439
ChaCha20Poly1305 An Authenticated Encryption with Associated Data (AEAD) algorithm; IETF variant as defined in RFC8439 and in its predecessor RFC7539
XChaCha20Poly1305 A variant of ChaCha20-Poly1305 that utilizes the XChaCha20 construction in place of ChaCha20; as defined in the RFC Draft

Installation

NuGet MyGet

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

dotnet add package NaCl.Core

or from the NuGet package manager:

Install-Package NaCl.Core

Or alternatively, you can add the NaCl.Core package from within Visual Studio's NuGet package manager.

Daily NuGet builds of the project are also available in the MyGet feed:

https://www.myget.org/F/nacl-core/api/v3/index.json

Usage

Symmetric Key Encryption

// Create the primitive
var aead = new ChaCha20Poly1305(key);

// Use the primitive to encrypt a plaintext
var ciphertext = aead.Encrypt(plaintext, aad, nonce);

// ... or to decrypt a ciphertext
var output = aead.Decrypt(ciphertext, aad, nonce);

MAC (Message Authentication Code)

// Use the primitive to compute a tag
var tag = Poly1305.ComputeMac(key, data);

// ... or to verify a tag
Poly1305.VerifyMac(key, data, tag);

Test Coverage

Azure DevOps tests Azure DevOps coverage

  • Includes the mandatory RFC test vectors.
  • Project Wycheproof by members of Google Security Team, for testing against known attacks (when applicable).

Learn More

License