@@ -111,7 +111,7 @@ impl MutinyAuthClient {
111
111
let hashed_msg = sha256:: Hash :: hash ( challenge. as_bytes ( ) ) ;
112
112
let ( sig, pubkey) = self . auth . sign ( hashed_msg. as_ref ( ) ) ?;
113
113
114
- let sig_hex = format ! ( "{:x}" , sig. serialize_compact ( ) . as_hex( ) ) ;
114
+ let sig_hex = format ! ( "{:x}" , sig. serialize_der ( ) . as_hex( ) ) ;
115
115
let pubkey_hex = format ! ( "{:x}" , pubkey. serialize( ) . as_hex( ) ) ;
116
116
117
117
let response = self
@@ -309,15 +309,15 @@ mod tests {
309
309
310
310
// hex
311
311
let pubkey_hex = format ! ( "{:x}" , pubkey. serialize( ) . as_hex( ) ) ;
312
- let sig_hex = format ! ( "{:x}" , sig. serialize_compact ( ) . as_hex( ) ) ;
312
+ let sig_hex = format ! ( "{:x}" , sig. serialize_der ( ) . as_hex( ) ) ;
313
313
314
314
// verify
315
315
let signature_bytes = Vec :: from_hex ( & sig_hex) . unwrap ( ) ;
316
316
let public_key_bytes = Vec :: from_hex ( & pubkey_hex) . unwrap ( ) ;
317
317
318
318
let secp = Secp256k1 :: verification_only ( ) ;
319
319
let pubkey = PublicKey :: from_slice ( & public_key_bytes) . unwrap ( ) ;
320
- let signature = Signature :: from_compact ( & signature_bytes) . unwrap ( ) ;
320
+ let signature = Signature :: from_der ( & signature_bytes) . unwrap ( ) ;
321
321
322
322
// Hash the message before verifying (because the signature was created using the hashed message)
323
323
let hashed_message = sha256:: Hash :: hash ( challenge. as_bytes ( ) ) ;
@@ -343,4 +343,49 @@ mod tests {
343
343
"037ff12d3f50e36df10d8a5d5bfcf678e6fa891ae87dc526026922f7b47ae8e2a7"
344
344
) ;
345
345
}
346
+
347
+ #[ tokio:: test]
348
+ async fn test_auth_manager_sign ( ) {
349
+ let mnemonic_str =
350
+ "earn stem rate film cat mesh hold violin elite usage maze crane robot fan market sing pepper web collect spice decorate turn creek owner" ;
351
+ let mnemonic = Mnemonic :: from_str ( mnemonic_str) . unwrap ( ) ;
352
+
353
+ let seed = mnemonic. to_seed ( "" ) ;
354
+ let xprivkey = Xpriv :: new_master ( Network :: Testnet , & seed) . unwrap ( ) ;
355
+ let auth = AuthManager :: new ( xprivkey) . unwrap ( ) ;
356
+ let pubkey_hex = format ! ( "{:x}" , auth. pubkey( ) . serialize( ) . as_hex( ) ) ;
357
+ assert_eq ! (
358
+ pubkey_hex,
359
+ "037474ffe18d09f9a65030f8c01899eec41e1d4ee3dead23556c1a0f7863931e29"
360
+ ) ;
361
+ println ! ( "pubkey_hex: {}" , pubkey_hex) ;
362
+
363
+ let timestamp = utils:: now ( ) . as_secs ( ) - 1 ;
364
+ let random_data: u64 = thread_rng ( ) . gen_range ( u32:: MAX as u64 ..u64:: MAX ) ;
365
+ let challenge = format ! ( "{}-{}" , timestamp, random_data) ;
366
+
367
+ let hashed_msg = sha256:: Hash :: hash ( challenge. as_bytes ( ) ) ;
368
+ let ( sig, pubkey) = auth. sign ( hashed_msg. as_ref ( ) ) . unwrap ( ) ;
369
+ assert_eq ! ( format!( "{:x}" , pubkey. serialize( ) . as_hex( ) ) , pubkey_hex) ;
370
+
371
+ let sig_hex = format ! ( "{:x}" , sig. serialize_der( ) . as_hex( ) ) ;
372
+ println ! ( "sig_hex: {}" , sig_hex) ;
373
+ println ! ( "pubkey_hex2: {}" , pubkey_hex) ;
374
+
375
+ // verify
376
+ let signature_bytes = Vec :: from_hex ( & sig_hex) . unwrap ( ) ;
377
+ let public_key_bytes = Vec :: from_hex ( & pubkey_hex) . unwrap ( ) ;
378
+
379
+ let secp = Secp256k1 :: verification_only ( ) ;
380
+ let pubkey = PublicKey :: from_slice ( & public_key_bytes) . unwrap ( ) ;
381
+ let signature = Signature :: from_der ( & signature_bytes) . unwrap ( ) ;
382
+
383
+ // Hash the message before verifying (because the signature was created using the hashed message)
384
+ let hashed_message = sha256:: Hash :: hash ( challenge. as_bytes ( ) ) ;
385
+ let msg = Message :: from_digest_slice ( hashed_message. as_ref ( ) ) . unwrap ( ) ;
386
+
387
+ let ret = secp. verify_ecdsa ( & msg, & signature, & pubkey) ;
388
+
389
+ assert ! ( ret. is_ok( ) ) ;
390
+ }
346
391
}
0 commit comments