Skip to content

Commit 6e24a87

Browse files
COSE verification improvements + API changes (#7768)
Co-authored-by: Amaury Chamayou <amaury@xargs.fr>
1 parent fe8a08b commit 6e24a87

17 files changed

Lines changed: 1385 additions & 115 deletions

File tree

3rdparty/internal/cose-openssl/src/cose.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,49 @@ mod tests {
560560
);
561561
}
562562

563+
#[test]
564+
fn cose_sign_verify_with_pem_imported_key() {
565+
let original = EvpKey::new(KeyType::EC(WhichEC::P256)).unwrap();
566+
567+
let priv_pem = original.to_pem_private().unwrap();
568+
let signing_key = EvpKey::from_pem_private(&priv_pem).unwrap();
569+
570+
let pub_pem = original.to_pem_public().unwrap();
571+
let verification_key = EvpKey::from_pem_public(&pub_pem).unwrap();
572+
573+
let phdr_bytes = hex_decode(TEST_PHDR);
574+
let phdr = CborValue::from_bytes(&phdr_bytes).unwrap();
575+
let uhdr = CborValue::Map(vec![]);
576+
let payload = b"signed with PEM-imported key";
577+
578+
let envelope =
579+
cose_sign1(&signing_key, phdr, uhdr, payload, false).unwrap();
580+
581+
let parsed = CborValue::from_bytes(&envelope).unwrap();
582+
let inner = match parsed {
583+
CborValue::Tagged { payload, .. } => *payload,
584+
_ => panic!("not tagged"),
585+
};
586+
let items = match inner {
587+
CborValue::Array(v) => v,
588+
_ => panic!("not array"),
589+
};
590+
let phdr_raw = match &items[0] {
591+
CborValue::ByteString(b) => b.clone(),
592+
_ => panic!("phdr not bstr"),
593+
};
594+
let sig_raw = match &items[3] {
595+
CborValue::ByteString(b) => b.clone(),
596+
_ => panic!("sig not bstr"),
597+
};
598+
599+
let alg = cose_alg(&verification_key).unwrap();
600+
assert!(
601+
cose_verify1(&verification_key, alg, &phdr_raw, payload, &sig_raw)
602+
.unwrap()
603+
);
604+
}
605+
563606
#[cfg(feature = "pqc")]
564607
mod pqc_tests {
565608
use super::*;

0 commit comments

Comments
 (0)