[−][src]Crate json_digest
This library provides some algorithms to calculate cryptographically secure digests of JSON documents. Since JSON is an ambiguous serialization format, we also had to define a canonical deterministic subset of all allowed documents. Order of keys in an object and Unicode normalization are well-defined in this subset, making it suitable for hashing.
let data = serde_json::json!({ "address": { "value": "6 Unter den Linden, Berlin, Germany", "nonce": "uN_FTaYe8JM-EZ8SU94kAOf0k0YvnhLcZgdpQ3BU9Ymbu" }, "dateOfBirth": { "value": "16/02/2002", "nonce": "ufxkENKgXuf4yG50p6xpSyaQ8Gz7KsuqXid2yw533TUMK" }, "placeOfBirth": { "city": "Berlin", "country": "Germany", "nonce": "ukhFsI4a6vIZEDUOBRxJmLroPEQ8FQCjJwbI-Z7bEocGo" }, }); let digest = json_digest::digest_data(&data).unwrap(); assert_eq!(digest, "cjuQR3pDJeaiRv9oCZ-fBE7T8QWpUGfjP40sAXq0bLwr-8"); let partial_digest = json_digest::selective_digest_data(&data, ".dateOfBirth").unwrap(); let expected_partial_digest = serde_json::json!({ "address": "cjuvIf1PmPH_31JN5XqJ1xkcNDJyiw9zQ-7ansSB78gnt4", "dateOfBirth": { "nonce": "ufxkENKgXuf4yG50p6xpSyaQ8Gz7KsuqXid2yw533TUMK", "value":"16/02/2002" }, "placeOfBirth": "cjub0Nxb0Kz0pI4bWCdSbaCutk1s5qieFT-ZmqUU1xcuAc" }); assert_eq!(partial_digest, serde_json::to_string(&expected_partial_digest).unwrap()); let digest_from_partial = json_digest::digest_json_str(&partial_digest).unwrap(); assert_eq!(digest, digest_from_partial);
Modules
json_path | Utility functions to specify subtrees in a JSON document. Path pattern syntax is based on JQ patterns, see https://stedolan.github.io/jq/manual/#Basicfilters |
Structs
Nonce | Multibase-encoded random content, e.g. 'urvU8F6HmEol5zOmHh_nnS1RiX5r3T2t9U_d_kQY7ZC-I" |
Functions
canonical_json | Constructs the deterministic string representation of the provided JSON value. |
default_hasher | Multibase-encoded hash of the provided bytes used in many places around this crate. |
digest_data | Convenience function for serializable types to mask the whole JSON tree into a digest, keep nothing. |
digest_json_str | Convenience function for JSON strings to mask the whole JSON tree into a digest, keep nothing. |
mask_json_subtree | Replace JSON (sub)tree(s) with their multibase-encoded Merkle-root hash strings. |
normalize_unicode | Returns an NFKD normalized unicode representation of the input |
selective_digest_data | Convenience function calling |
selective_digest_json | Convenience function to transform a JSON value into a (partially) masked JSON value. Only subtrees matching the provided JSON path pattern will be kept, all other subtrees will be masked. |
selective_digest_json_str | Convenience function calling |