Crate coset

source ·
Expand description

Set of types for supporting CBOR Object Signing and Encryption (COSE).

Builds on the ciborium crate for underlying CBOR support.

Usage

use coset::{iana, CborSerializable};

// Inputs.
let pt = b"This is the content";
let aad = b"this is additional data";

// Build a `CoseSign1` object.
let protected = coset::HeaderBuilder::new()
    .algorithm(iana::Algorithm::ES256)
    .key_id(b"11".to_vec())
    .build();
let sign1 = coset::CoseSign1Builder::new()
    .protected(protected)
    .payload(pt.to_vec())
    .create_signature(aad, |pt| signer.sign(pt)) // closure to do sign operation
    .build();

// Serialize to bytes.
let sign1_data = sign1.to_vec().unwrap();
println!(
    "'{}' + '{}' => {}",
    String::from_utf8_lossy(pt),
    String::from_utf8_lossy(aad),
    hex::encode(&sign1_data)
);

// At the receiving end, deserialize the bytes back to a `CoseSign1` object.
let mut sign1 = coset::CoseSign1::from_slice(&sign1_data).unwrap();

// At this point, real code would validate the protected headers.

// Check the signature, which needs to have the same `aad` provided, by
// providing a closure that can do the verify operation.
let result = sign1.verify_signature(aad, |sig, data| verifier.verify(sig, data));
println!("Signature verified: {:?}.", result);
assert!(result.is_ok());

// Changing an unprotected header leaves the signature valid.
sign1.unprotected.content_type = Some(coset::ContentType::Text("text/plain".to_owned()));
assert!(sign1
    .verify_signature(aad, |sig, data| verifier.verify(sig, data))
    .is_ok());

// Providing a different `aad` means the signature won't validate.
assert!(sign1
    .verify_signature(b"not aad", |sig, data| verifier.verify(sig, data))
    .is_err());

// Changing a protected header invalidates the signature.
sign1.protected.original_data = None;
sign1.protected.header.content_type = Some(coset::ContentType::Text("text/plain".to_owned()));
assert!(sign1
    .verify_signature(aad, |sig, data| verifier.verify(sig, data))
    .is_err());

Re-exports

  • pub use ciborium as cbor;

Modules

  • CBOR Web Token functionality.
  • Enumerations for IANA-managed values.

Structs

Enums

  • Error type for failures in encoding or decoding COSE types.
  • Possible encryption contexts.
  • A COSE label may be either a signed integer value or a string.
  • Possible MAC contexts.
  • A nonce value.
  • A COSE label which can be either a signed integer value or a string, but where the allowed integer values are governed by IANA.
  • A COSE label which can be either a signed integer value or a string, and where the allowed integer values are governed by IANA but include a private use range.
  • Possible signature contexts.

Traits

Functions

Type Definitions