diff --git a/crates/claims/crates/cose/src/lib.rs b/crates/claims/crates/cose/src/lib.rs index bb3803883..da6cf3fe4 100644 --- a/crates/claims/crates/cose/src/lib.rs +++ b/crates/claims/crates/cose/src/lib.rs @@ -152,6 +152,12 @@ pub trait CosePayload { } } +impl CosePayload for [u8] { + fn payload_bytes(&self) -> Cow<[u8]> { + Cow::Borrowed(self) + } +} + pub const TYP_LABEL: Label = Label::Int(16); /// COSE payload type. diff --git a/crates/claims/crates/cose/src/signature.rs b/crates/claims/crates/cose/src/signature.rs index 9fc01d400..fc90f0e26 100644 --- a/crates/claims/crates/cose/src/signature.rs +++ b/crates/claims/crates/cose/src/signature.rs @@ -90,3 +90,68 @@ impl<'a, T: CoseSigner> CoseSigner for &'a T { T::sign(*self, payload, additional_data, tagged).await } } + +#[cfg(test)] +mod tests { + use crate::{key::CoseKeyGenerate, CosePayload, DecodedCoseSign1}; + use coset::CoseKey; + use ssi_claims_core::VerificationParameters; + + async fn sign_with(key: &CoseKey, tagged: bool) { + let bytes = b"PAYLOAD".sign(key, tagged).await.unwrap(); + let decoded: DecodedCoseSign1 = bytes.decode(tagged).unwrap(); + + assert_eq!(decoded.signing_bytes.payload.as_bytes(), b"PAYLOAD"); + + let params = VerificationParameters::from_resolver(key); + assert_eq!(decoded.verify(params).await.unwrap(), Ok(())); + } + + #[cfg(feature = "ed25519")] + #[async_std::test] + async fn sign_ed25519() { + sign_with(&CoseKey::generate_ed25519(), false).await + } + + #[cfg(feature = "ed25519")] + #[async_std::test] + async fn sign_ed25519_tagged() { + sign_with(&CoseKey::generate_ed25519(), true).await + } + + #[cfg(feature = "secp256k1")] + #[async_std::test] + async fn sign_secp256k1() { + sign_with(&CoseKey::generate_secp256k1(), false).await + } + + #[cfg(feature = "secp256k1")] + #[async_std::test] + async fn sign_secp256k1_tagged() { + sign_with(&CoseKey::generate_secp256k1(), true).await + } + + #[cfg(feature = "secp256r1")] + #[async_std::test] + async fn sign_p256() { + sign_with(&CoseKey::generate_p256(), false).await + } + + #[cfg(feature = "secp256r1")] + #[async_std::test] + async fn sign_p256_tagged() { + sign_with(&CoseKey::generate_p256(), true).await + } + + #[cfg(feature = "secp384r1")] + #[async_std::test] + async fn sign_p384() { + sign_with(&CoseKey::generate_p384(), false).await + } + + #[cfg(feature = "secp384r1")] + #[async_std::test] + async fn sign_p384_tagged() { + sign_with(&CoseKey::generate_p384(), true).await + } +} diff --git a/crates/claims/crates/cose/src/verification.rs b/crates/claims/crates/cose/src/verification.rs index 95eaf6c16..b627394ca 100644 --- a/crates/claims/crates/cose/src/verification.rs +++ b/crates/claims/crates/cose/src/verification.rs @@ -46,6 +46,8 @@ pub trait ValidateCoseHeader
{ } } +impl
ValidateCoseHeader
for () {}
+
impl