@@ -6,6 +6,7 @@ use std::{
66 fs:: { read_to_string, File } ,
77 io:: { Read , Write } ,
88 path:: PathBuf ,
9+ str:: FromStr ,
910} ;
1011
1112use clap:: Parser ;
@@ -14,7 +15,7 @@ use ed25519_dalek::{
1415 ed25519:: signature:: Signer ,
1516 pkcs8:: { DecodePrivateKey , DecodePublicKey } ,
1617} ;
17- use signed_doc:: { DocumentRef , Metadata , UuidV7 } ;
18+ use signed_doc:: { DocumentRef , Kid , Metadata , UuidV7 } ;
1819
1920fn main ( ) {
2021 if let Err ( err) = Cli :: parse ( ) . exec ( ) {
@@ -132,9 +133,13 @@ impl Cli {
132133 store_cose_file ( cose, & doc) ?;
133134 } ,
134135 Self :: Verify { pk, doc, schema } => {
135- let pk = load_public_key_from_file ( & pk) ?;
136- let schema = load_schema_from_file ( & schema) ?;
137- let cose = load_cose_from_file ( & doc) ?;
136+ let pk = load_public_key_from_file ( & pk)
137+ . map_err ( |e| anyhow:: anyhow!( "Failed to load public key from file: {e}" ) ) ?;
138+ let schema = load_schema_from_file ( & schema) . map_err ( |e| {
139+ anyhow:: anyhow!( "Failed to load document schema from file: {e}" )
140+ } ) ?;
141+ let cose = load_cose_from_file ( & doc)
142+ . map_err ( |e| anyhow:: anyhow!( "Failed to load COSE SIGN from file: {e}" ) ) ?;
138143 validate_cose ( & cose, & pk, & schema) ?;
139144 println ! ( "Document is valid." ) ;
140145 } ,
@@ -294,11 +299,15 @@ fn validate_cose(
294299 validate_json ( & json_doc, schema) ?;
295300
296301 for sign in & cose. signatures {
302+ let key_id = sign. protected . header . key_id . clone ( ) ;
297303 anyhow:: ensure!(
298- !sign . protected . header . key_id. is_empty( ) ,
304+ !key_id. is_empty( ) ,
299305 "COSE missing signature protected header `kid` field "
300306 ) ;
301307
308+ let kid_str = String :: from_utf8_lossy ( & key_id) ;
309+ let kid = Kid :: from_str ( & kid_str) ?;
310+ println ! ( "Signature Key ID: {kid}" ) ;
302311 let data_to_sign = cose. tbs_data ( & [ ] , sign) ;
303312 let signature_bytes = sign. signature . as_slice ( ) . try_into ( ) . map_err ( |_| {
304313 anyhow:: anyhow!(
@@ -307,6 +316,11 @@ fn validate_cose(
307316 sign. signature. len( )
308317 )
309318 } ) ?;
319+ println ! (
320+ "Verifying Key Len({}): 0x{}" ,
321+ pk. as_bytes( ) . len( ) ,
322+ hex:: encode( pk. as_bytes( ) )
323+ ) ;
310324 let signature = ed25519_dalek:: Signature :: from_bytes ( signature_bytes) ;
311325 pk. verify_strict ( & data_to_sign, & signature) ?;
312326 }
0 commit comments