qs-format 0.1.0

CBOR signature format for Quantum-Sign - The Digital Notary Stamp
Documentation
#![forbid(unsafe_code)]

use qs_format::{QSig, Signer, Transparency};
use serde_bytes::ByteBuf;

#[test]
fn claims_cbor_bytes_roundtrip_is_stable() {
    let claims_bytes = {
        let mut buf = Vec::new();
        let claims = [1u8, 2u8, 3u8];
        ciborium::ser::into_writer(&claims, &mut buf).unwrap();
        buf
    };

    let qsig = QSig {
        version: 1,
        alg: "mldsa-87".into(),
        digest: vec![0xAA; 32],
        sig: vec![0xBB; 2424],
        co_sig: vec![ByteBuf::from(vec![0xCC; 16])],
        tst: None,
        tlog: Some(Transparency {
            root: vec![0xDD; 32],
            proof: vec![0xEE; 32],
        }),
        signer: Signer {
            kid: "kid-1234".into(),
            claims: claims_bytes.clone(),
        },
        time_unix: 1_700_000_000,
        domain_sep: "quantum-sign-v1".into(),
        meta: Some(ByteBuf::from(vec![0x01, 0x02])),
    };

    let encoded1 = {
        let mut buf = Vec::new();
        ciborium::ser::into_writer(&qsig, &mut buf).unwrap();
        buf
    };
    let decoded: QSig = ciborium::de::from_reader(encoded1.as_slice()).unwrap();
    let encoded2 = {
        let mut buf = Vec::new();
        ciborium::ser::into_writer(&decoded, &mut buf).unwrap();
        buf
    };

    assert_eq!(encoded1, encoded2);
    assert_eq!(decoded.signer.claims, claims_bytes);
}