Skip to content

Commit

Permalink
Change serde tests to check serialized output
Browse files Browse the repository at this point in the history
  • Loading branch information
d-sonuga committed Feb 28, 2025
1 parent effb492 commit 7ebe917
Showing 1 changed file with 56 additions and 21 deletions.
77 changes: 56 additions & 21 deletions tests/serde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,61 +11,96 @@ use bls12_381_bls::{
};
use rand::rngs::StdRng;
use rand::SeedableRng;
use serde::Serialize;

fn assert_canonical_json<T>(
input: &T,
expected: &str,
) -> Result<String, Box<dyn std::error::Error>>
where
T: ?Sized + Serialize,
{
let serialized = serde_json::to_string(input)?;
let input_canonical: serde_json::Value = serialized.parse()?;
let expected_canonical: serde_json::Value = expected.parse()?;
assert_eq!(input_canonical, expected_canonical);
Ok(serialized)
}

#[test]
fn public_key() {
fn serde_public_key() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(0xbeef);
let pk = PublicKey::from(&SecretKey::random(&mut rng));
let ser = serde_json::to_string(&pk);
let deser = serde_json::from_str(&ser.unwrap());
assert_eq!(pk, deser.unwrap());
let ser = assert_canonical_json(
&pk,
"\"shUGhHy4u1NiQY8uzHpTDagQJEqYrDJuAfgjDUVK5uBxbNi2D4aeHmCVaLvebvR4SGv5tJqGsg1KLRmeJu9RH2ANVELqvDU4Tr2zVBkTot47d1Gpj7N7UUMB1QF4aY3Vd96\""
)?;
let deser: PublicKey = serde_json::from_str(&ser)?;
assert_eq!(pk, deser);
Ok(())
}

#[test]
fn multisig_public_key() {
fn serde_multisig_public_key() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(0xbeef);
let pk = MultisigPublicKey::aggregate(&[PublicKey::from(
&SecretKey::random(&mut rng),
)])
.unwrap();
let ser = serde_json::to_string(&pk);
let deser = serde_json::from_str(&ser.unwrap());
assert_eq!(pk, deser.unwrap());
let ser = assert_canonical_json(
&pk,
"\"25kghHWDNorWmBuDUTfXvKseTHzDvDnAN6jSsP44ptZ7C1apiarwVqwJ4quxx3Yax5TicNXTZsauZVwjHbzFyvxZAjGMEGcPAhrvzji5mxaiF445mTep3g9BJFeTbtv9sDR3\""
)?;
let deser = serde_json::from_str(&ser)?;
assert_eq!(pk, deser);
Ok(())
}

#[test]
fn signature() {
fn serde_signature() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(0xbeef);
let sk = SecretKey::random(&mut rng);
let signature = sk.sign(b"a message");
let ser = serde_json::to_string(&signature).unwrap();
let deser = serde_json::from_str(&ser).unwrap();
let ser = assert_canonical_json(
&signature,
"\"6UxktyK2QmZA6PsB15iTAiwYns3QLBrZmsBJPR1smfp4MNU3CnoqKLRbiUS1h76HW9\""
)?;
let deser = serde_json::from_str(&ser)?;
assert_eq!(signature, deser);
Ok(())
}

#[test]
fn multisig_signature() {
fn serde_multisig_signature() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(0xbeef);
let sk = SecretKey::random(&mut rng);
let pk = PublicKey::from(&sk);
let signature = sk.sign_multisig(&pk, b"a message");
let ser = serde_json::to_string(&signature).unwrap();
let deser = serde_json::from_str(&ser).unwrap();
let ser = assert_canonical_json(
&signature,
"\"79PPAVxpdTbHhK81p5oTGkEqb6EVkAkxEb39emBdzffLHwyTnfSbN6AmAiv3SdZMci\""
)?;
let deser = serde_json::from_str(&ser)?;
assert_eq!(signature, deser);
Ok(())
}

#[test]
fn secret_key() {
fn serde_secret_key() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = StdRng::seed_from_u64(0xbeef);
let sk = SecretKey::random(&mut rng);
let ser = serde_json::to_string(&sk).unwrap();
let deser = serde_json::from_str(&ser).unwrap();
let ser = assert_canonical_json(
&sk,
"\"J96A6LyxZL3JdymeEHL4bNhf5MmcmgSLkd6Umh5ELrPt\"",
)?;
let deser = serde_json::from_str(&ser)?;
assert_eq!(sk, deser);
Ok(())
}

#[test]
fn wrong_encoded() {
let wrong_encoded = "wrong-encoded";
fn serde_wrong_encoded() {
let wrong_encoded = "\"wrong-encoded\"";
let public_key: Result<PublicKey, _> = serde_json::from_str(&wrong_encoded);
assert!(public_key.is_err());

Expand All @@ -85,7 +120,7 @@ fn wrong_encoded() {
}

#[test]
fn too_long_encoded() {
fn serde_too_long_encoded() {
let length_33_enc = "\"yaujE5CNg7SRYuf3Vw7G8QQdM7267QxJtfqGUEjLbxyCC\"";
let length_49_enc= "\"RCR6kPYZDuew8ovT9MoxVv7mKRsbygumf2UTjvzs6AJhnukLj3BiFvjaE45Q41tKqdA\"";
let length_97_enc = "\"7a5RpCdtr1aaXvaR3AofnEnVRh7kpzyqE8eYJpCBVLKLLpXVeN9UrXGRTZyq2upTVaJT5QnPQwZCGXW1oxrEAzrPvQ4vbWFwiHMJijZMzrPsTjQJFju1H4shrajuqUG4fYFpC\"";
Expand All @@ -109,7 +144,7 @@ fn too_long_encoded() {
}

#[test]
fn too_short_encoded() {
fn serde_too_short_encoded() {
let length_31_enc = "\"3uTp29S3e2HQBekFYvVwsmoeEzk4uVWwQUjvJPwWKwU\"";
let length_47_enc =
"\"2F3DDEDEuxrszs3JfzFq51tnGNm3ZtrHwa7sAA4pkeo1JkqGTEYudnBZLNAkCohAd\"";
Expand Down

0 comments on commit 7ebe917

Please sign in to comment.