Crates.io | serde_json_canonicalizer |
lib.rs | serde_json_canonicalizer |
version | 0.3.0 |
source | src |
created_at | 2023-05-22 16:45:37.254535 |
updated_at | 2024-09-17 18:10:32.886769 |
description | JSON Canonicalization Scheme (JCS - RFC 8785) implementation |
homepage | |
repository | https://github.com/evik42/serde-json-canonicalizer |
max_upload_size | |
id | 870848 |
size | 57,044 |
An RFC 8785 compatible JSON Canonicalization Scheme output for serde_json.
JSON Canonicalization Scheme RFC-8785 defines a JSON serialization scheme to allow using JSON data in cryptographic operations that rely on byte level reproduction of data. It can be used instead of storing the serialized format as a BASE64 encoded string or similar packaging, allowing easier handling of JSON formatted data that can be canonicalized before feeding it to a cryptographic function.
use serde_json_canonicalizer::{to_string, to_vec};
#[derive(serde::Serialize)]
struct Data {
c: isize,
b: bool,
a: String,
}
let data = Data { c: 120, b: false, a: "Hello!".to_string() };
let expected = r#"{"a":"Hello!","b":false,"c":120}"#;
// serlialize to string or bytes, drop-in replacement for serde_json
let json_string = to_string(&data).unwrap();
let json_bytes = to_vec(&data).unwrap();
assert_eq!(json_string, expected);
assert_eq!(json_bytes, expected.as_bytes());
Licensed under MIT license (LICENSE or https://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.
I created this crate because serde_jcs
seems to be abandoned and the issues in that repository list a few things where it differs from the RFC. This crate aims to be 100% compatible with the RFC to be a suitable implementation in a multi-language environment.