Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

cyphera-labs/cyphera-dotnet

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cyphera

CI Security NuGet NuGet Downloads License

Data protection SDK for .NET — format-preserving encryption (FF1/FF3), data masking, and hashing.

dotnet add package Cyphera

Usage

using Cyphera;

// Auto-discover: checks CYPHERA_CONFIG_FILE env, ./cyphera.json, /etc/cyphera/cyphera.json
var c = Cyphera.Load();

// Or load from a specific file
var c = Cyphera.FromFile("./config/cyphera.json");

// Or inline config
var json = JsonDocument.Parse(@"{
  ""configurations"": {
    ""ssn"": { ""engine"": ""ff1"", ""key_ref"": ""my-key"", ""header"": ""T01"" }
  },
  ""keys"": {
    ""my-key"": { ""material"": ""2B7E151628AED2A6ABF7158809CF4F3C"" }
  }
}");
var c = Cyphera.FromConfig(json.RootElement);

// Protect
var encrypted = c.Protect("123-45-6789", "ssn");
// → "T01i6J-xF-07pX" (DPH-prefixed, dashes preserved)

// Access — the SDK uses the header to figure out the configuration
var decrypted = c.Access(encrypted);
// → "123-45-6789"

Engines

Engine Reversible Description
ff1 Yes NIST SP 800-38G FF1 format-preserving encryption
ff3 Yes NIST SP 800-38G Rev 1 FF3-1 format-preserving encryption
mask No Simple pattern masking (last4, first1, full, etc.)
hash No SHA-256/384/512, HMAC when key provided

Configuration File (cyphera.json)

{
  "configurations": {
    "ssn": { "engine": "ff1", "key_ref": "my-key", "header": "T01" },
    "cc": { "engine": "ff1", "key_ref": "my-key", "header": "T02" },
    "ssn_mask": { "engine": "mask", "pattern": "last4", "header_enabled": false }
  },
  "keys": {
    "my-key": { "material": "2B7E151628AED2A6ABF7158809CF4F3C" }
  }
}

The header (Data Protection Header, DPH) is a short prefix prepended to protected output that identifies the configuration used. It lets Access() reverse a value without the caller naming the configuration.

Cross-Language Compatible

All SDKs produce identical output for the same inputs:

Input:       123-45-6789
Java:        T01i6J-xF-07pX
Rust:        T01i6J-xF-07pX
Node:        T01i6J-xF-07pX
Python:      T01i6J-xF-07pX
Go:          T01i6J-xF-07pX
.NET:        T01i6J-xF-07pX

Status

Alpha. API is unstable. Cross-language test vectors validated against Java, Rust, Node, Python, and Go implementations.

License

Apache 2.0 — Copyright 2026 Horizon Digital Engineering LLC

About

Data protection SDK for .NET — format-preserving encryption (FF1/FF3), data masking, and hashing.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.