72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
//! 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;
|