Add tests for canonical JSON.
This commit is contained in:
parent
07295b11bb
commit
9a56e2b0a6
102
src/lib.rs
102
src/lib.rs
@ -286,11 +286,11 @@ impl Display for Algorithm {
|
|||||||
mod test {
|
mod test {
|
||||||
use base64::{decode_config, STANDARD_NO_PAD};
|
use base64::{decode_config, STANDARD_NO_PAD};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use serde_json::{from_str, to_string, to_value};
|
use serde_json::{from_str, to_string, to_value, Value};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
sign_json, verify_json, Ed25519KeyPair, Ed25519Verifier, KeyPair, Signature, SignatureMap,
|
sign_json, to_canonical_json, verify_json, Ed25519KeyPair, Ed25519Verifier, KeyPair,
|
||||||
SignatureSet,
|
Signature, SignatureMap, SignatureSet,
|
||||||
};
|
};
|
||||||
|
|
||||||
const PUBLIC_KEY: &str = "XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI";
|
const PUBLIC_KEY: &str = "XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI";
|
||||||
@ -301,6 +301,102 @@ mod test {
|
|||||||
const MINIMAL_JSON_SIGNATURE: &str =
|
const MINIMAL_JSON_SIGNATURE: &str =
|
||||||
"KqmLSbO39/Bzb0QIYE82zqLwsA+PDzYIpIRA2sRQ4sL53+sN6/fpNSoqE7BP7vBZhG6kYdD13EIMJpvhJI+6Bw";
|
"KqmLSbO39/Bzb0QIYE82zqLwsA+PDzYIpIRA2sRQ4sL53+sN6/fpNSoqE7BP7vBZhG6kYdD13EIMJpvhJI+6Bw";
|
||||||
|
|
||||||
|
fn test_canonical_json(input: &str) -> String {
|
||||||
|
let value = from_str::<Value>(input).unwrap();
|
||||||
|
|
||||||
|
to_canonical_json(&value).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonical_json_examples() {
|
||||||
|
assert_eq!(&test_canonical_json("{}"), "{}");
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"one": 1,
|
||||||
|
"two": "Two"
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"one":1,"two":"Two"}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"b": "2",
|
||||||
|
"a": "1"
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"a":"1","b":"2"}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(r#"{"b":"2","a":"1"}"#),
|
||||||
|
r#"{"a":"1","b":"2"}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"auth": {
|
||||||
|
"success": true,
|
||||||
|
"mxid": "@john.doe:example.com",
|
||||||
|
"profile": {
|
||||||
|
"display_name": "John Doe",
|
||||||
|
"three_pids": [
|
||||||
|
{
|
||||||
|
"medium": "email",
|
||||||
|
"address": "john.doe@example.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"medium": "msisdn",
|
||||||
|
"address": "123456789"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"#),
|
||||||
|
r#"{"auth":{"mxid":"@john.doe:example.com","profile":{"display_name":"John Doe","three_pids":[{"address":"john.doe@example.org","medium":"email"},{"address":"123456789","medium":"msisdn"}]},"success":true}}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"a": "日本語"
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"a":"日本語"}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"本": 2,
|
||||||
|
"日": 1
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"日":1,"本":2}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"a": "\u65E5"
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"a":"日"}"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
&test_canonical_json(
|
||||||
|
r#"{
|
||||||
|
"a": null
|
||||||
|
}"#
|
||||||
|
),
|
||||||
|
r#"{"a":null}"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sign_empty_json() {
|
fn sign_empty_json() {
|
||||||
let key_pair = Ed25519KeyPair::new(
|
let key_pair = Ed25519KeyPair::new(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user