wolfcose 0.1.0

Safe Rust API for wolfSSL wolfCOSE.
#![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(())
}