Revision control

Copy as Markdown

Other Tools

//! This crate implements [COSE](https://tools.ietf.org/html/rfc8152) signature
//! parsing. Verification has to be performed by the caller.
//!
//! Example usage: Let `payload` and `cose_signature` be variables holding the
//! signed payload and the COSE signature bytes respectively.
//! Let further `verify_callback` be a function callback that implements
//! signature verification.
//!
//!```rust,ignore
//! use cose::decoder::decode_signature;
//!
//! // Parse the incoming signature.
//! let cose_signatures = decode_signature(cose_signature, &payload);
//! let cose_signatures = match cose_signatures {
//! Ok(signature) => signature,
//! Err(_) => Vec::new(),
//! };
//! if cose_signatures.len() < 1 {
//! return false;
//! }
//!
//! let mut result = true;
//! for cose_signature in cose_signatures {
//! // Call callback to verify the parsed signatures.
//! result &= verify_callback(cose_signature);
//!
//! // We can stop early. The cose_signature is not valid.
//! if !result {
//! return result;
//! }
//! }
//!```
extern crate moz_cbor as cbor;
pub mod decoder;
pub mod util;
/// Errors that can be returned from COSE functions.
#[derive(Debug, PartialEq)]
pub enum CoseError {
DecodingFailure,
LibraryFailure,
MalformedInput,
MissingHeader,
UnexpectedHeaderValue,
UnexpectedTag,
UnexpectedType,
Unimplemented,
VerificationFailed,
UnknownSignatureScheme,
SigningFailed,
InvalidArgument,
}
/// An enum identifying supported signature algorithms.
/// Currently ES256 (ECDSA with P256 and SHA256), ES384 (ECDSA with P384 and SHA384)
/// ES512 (ECDSA with P521 and SHA512), and PS256 (RSASSA-PSS with SHA256)
/// are supported. Note that with PS256, the salt length is defined
/// to be 32 bytes.
#[derive(Debug)]
#[derive(PartialEq)]
pub enum SignatureAlgorithm {
ES256,
ES384,
ES512,
PS256,
}
#[cfg(test)]
mod test_setup;
#[cfg(test)]
mod test_cose;