@@ -41,9 +41,6 @@ enum Cli {
4141 sk_hex : String ,
4242 /// Signer kid
4343 kid : CatalystId ,
44- /// provided `sk_hex` key type
45- #[ clap( default_value_t) ]
46- key_type : KeyType ,
4744 } ,
4845 /// Inspects Catalyst Signed Document
4946 Inspect {
@@ -57,17 +54,6 @@ enum Cli {
5754 } ,
5855}
5956
60- /// Type of the ed25519 private signing key
61- #[ derive( clap:: ValueEnum , Default , Clone , strum:: Display ) ]
62- #[ strum( serialize_all = "kebab-case" ) ]
63- enum KeyType {
64- /// A regular ed25519
65- #[ default]
66- Regular ,
67- /// A BIP32 extended ed25519
68- Bip32Extended ,
69- }
70-
7157impl Cli {
7258 fn exec ( self ) -> anyhow:: Result < ( ) > {
7359 match self {
@@ -86,36 +72,26 @@ impl Cli {
8672 println ! ( "report {:?}" , & signed_doc. problem_report( ) ) ;
8773 save_signed_doc ( signed_doc, & output) ?;
8874 } ,
89- Self :: Sign {
90- doc,
91- sk_hex,
92- kid,
93- key_type,
94- } => {
75+ Self :: Sign { doc, sk_hex, kid } => {
9576 let sk_bytes = hex:: decode ( sk_hex) ?;
9677 let cose_bytes = read_bytes_from_file ( & doc) ?;
9778 let signed_doc = signed_doc_from_bytes ( cose_bytes. as_slice ( ) ) ?;
9879
9980 let builder = signed_doc. into_builder ( ) ?;
10081
101- let builder = match key_type {
102- KeyType :: Regular => {
103- let sk =
104- ed25519_dalek:: SigningKey :: from_bytes ( & sk_bytes. try_into ( ) . map_err (
105- |_| anyhow:: anyhow!( "Provided secret key must be 32 bytes long" ) ,
106- ) ?) ;
107- builder. add_signature (
108- |message| sk. sign ( & message) . to_bytes ( ) . to_vec ( ) ,
109- kid. clone ( ) ,
110- ) ?
111- } ,
112- KeyType :: Bip32Extended => {
113- let sk = ed25519_bip32:: XPrv :: from_slice_verified ( & sk_bytes) ?;
114- builder. add_signature (
115- |message| sk. sign :: < ( ) > ( & message) . to_bytes ( ) . to_vec ( ) ,
116- kid. clone ( ) ,
117- ) ?
118- } ,
82+ let builder = if let Ok ( sk) = ed25519_bip32:: XPrv :: from_slice_verified ( & sk_bytes) {
83+ builder. add_signature (
84+ |message| sk. sign :: < ( ) > ( & message) . to_bytes ( ) . to_vec ( ) ,
85+ kid. clone ( ) ,
86+ ) ?
87+ } else {
88+ let sk = ed25519_dalek:: SigningKey :: from_bytes ( & sk_bytes. try_into ( ) . map_err (
89+ |_| anyhow:: anyhow!( "Provided secret key must be 32 bytes long" ) ,
90+ ) ?) ;
91+ builder. add_signature (
92+ |message| sk. sign ( & message) . to_bytes ( ) . to_vec ( ) ,
93+ kid. clone ( ) ,
94+ ) ?
11995 } ;
12096
12197 let new_signed_doc = builder. build ( ) ?;
0 commit comments