#![allow(missing_docs)]
use wolfcose::{
to_vec, Algorithm, ByteStr, CborSerialize, CborSerializer, CoseMac0Message, HeaderLabel,
HeaderMap, HeaderValue,
};
fn main() -> wolfcose::Result<()> {
let mut protected = HeaderMap::new();
protected.insert(
HeaderLabel::Algorithm,
HeaderValue::Algorithm(Algorithm::HMAC256),
);
let protected = to_vec(&protected)?;
let mut unprotected = HeaderMap::new();
unprotected.insert(HeaderLabel::Kid, HeaderValue::Bytes(b"device-a".to_vec()));
unprotected.insert(
HeaderLabel::Text("vendor".to_owned()),
HeaderValue::Text("wolfSSL".to_owned()),
);
let mut out = [0u8; 256];
let mut serializer = CborSerializer::new(&mut out);
serializer.tag(wolfcose::raw::WOLFCOSE_TAG_MAC0 as u64)?;
serializer.array(4)?;
ByteStr(&protected).serialize(&mut serializer)?;
unprotected.serialize(&mut serializer)?;
ByteStr(b"payload").serialize(&mut serializer)?;
ByteStr(b"tag bytes").serialize(&mut serializer)?;
let message = CoseMac0Message::parse(serializer.as_written())?;
println!(
"alg={:?} kid={:?} attached={}",
message.protected().algorithm(),
message.unprotected().kid(),
message.payload_attached()
);
Ok(())
}