CyberDot.SignedJson
1.0.0
dotnet add package CyberDot.SignedJson --version 1.0.0
NuGet\Install-Package CyberDot.SignedJson -Version 1.0.0
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="CyberDot.SignedJson" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add CyberDot.SignedJson --version 1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: CyberDot.SignedJson, 1.0.0"
#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 CyberDot.SignedJson as a Cake Addin #addin nuget:?package=CyberDot.SignedJson&version=1.0.0 // Install CyberDot.SignedJson as a Cake Tool #tool nuget:?package=CyberDot.SignedJson&version=1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Signed JSON
Signs JSON objects with ED25519 signatures
Inspired by python-signedjson
Features
- More than one entity can sign the same object.
- Each entity can sign the object with more than one key making it easier to rotate keys
- ED25519 can be replaced with a different algorithm.
- Unprotected data can be added to the object under the
"unsigned"
key.
Installing
dotnet add package CyberDot.SignedJson
Using
Sign JSON
using CyberDot.SignedJson.Crypto;
using CyberDot.SignedJson.Signing;
using Newtonsoft.Json.Linq;
namespace CyberDot.SignedJson.Example
{
public class SignJsonExample
{
public void Sign()
{
var cryptoAlg = new Ed25519Alg();
var signer = new Signer(cryptoAlg);
var json = JObject.Parse("{}");
var privateKeyAsBase64 = "YJDBA9Xnr2sVqXD9Vj7XVUnmFZcZrlw8Md7kMW+3XA1";
var signingKey = new SigningKey(cryptoAlg.Alg, version: 1, privateKeyAsBase64);
var entityName = "domain";
var signedJson = signer.SignJson(json, entityName, signingKey);
}
}
}
Verify signed JSON
using System;
using CyberDot.SignedJson.Crypto;
using CyberDot.SignedJson.Verifying;
using Newtonsoft.Json.Linq;
namespace CyberDot.SignedJson.Example
{
public class VerifyJsonExample
{
public void Verify()
{
var cryptoAlg = new Ed25519Alg();
var verifier = new Verifier(cryptoAlg);
var json = JObject.Parse(@"{
""signatures"": {
""domain"": {
""ed25519:1"": ""K8280/U9SSy9IVtjBuVeLr+HpOB4BQFWbg+UZaADMtTdGYI7Geitb76LTrr5QV/7Xg4ahLwYGYZzuHGZKM5ZAQ""
}
}
}");
var privateKeyAsBase64 = "YJDBA9Xnr2sVqXD9Vj7XVUnmFZcZrlw8Md7kMW+3XA1=";
var publicKeyBase64 = cryptoAlg.DerivePublicKey(Convert.FromBase64String(privateKeyAsBase64));
var verifyKey = new VerifyKey(cryptoAlg.Alg, version: 1, publicKeyBase64);
const string entityName = "domain";
verifier.VerifySignedJson(json, entityName, verifyKey);
}
}
}
Format
{
"<protected_name>": "<protected_value>",
"signatures": {
"<entity_name>": {
"ed25519:<key_id>": "<unpadded_base64_signature>"
}
},
"unsigned": {
"<unprotected_name>": "<unprotected_value>",
}
}
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 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. |
.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.
-
.NETStandard 2.0
- Newtonsoft.Json (>= 13.0.1)
- Portable.BouncyCastle (>= 1.8.10)
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.0.0 | 426 | 6/19/2021 |