Skip to content

Commit e987fcf

Browse files
authored
Merge pull request #75 from EthanYuan/fix-jwt-request-sig-format
fix: jwt request sig format
2 parents 973de19 + e9283b8 commit e987fcf

File tree

3 files changed

+50
-5
lines changed

3 files changed

+50
-5
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mutiny-core/src/authclient.rs

+48-3
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl MutinyAuthClient {
111111
let hashed_msg = sha256::Hash::hash(challenge.as_bytes());
112112
let (sig, pubkey) = self.auth.sign(hashed_msg.as_ref())?;
113113

114-
let sig_hex = format!("{:x}", sig.serialize_compact().as_hex());
114+
let sig_hex = format!("{:x}", sig.serialize_der().as_hex());
115115
let pubkey_hex = format!("{:x}", pubkey.serialize().as_hex());
116116

117117
let response = self
@@ -309,15 +309,15 @@ mod tests {
309309

310310
// hex
311311
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());
313313

314314
// verify
315315
let signature_bytes = Vec::from_hex(&sig_hex).unwrap();
316316
let public_key_bytes = Vec::from_hex(&pubkey_hex).unwrap();
317317

318318
let secp = Secp256k1::verification_only();
319319
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();
321321

322322
// Hash the message before verifying (because the signature was created using the hashed message)
323323
let hashed_message = sha256::Hash::hash(challenge.as_bytes());
@@ -343,4 +343,49 @@ mod tests {
343343
"037ff12d3f50e36df10d8a5d5bfcf678e6fa891ae87dc526026922f7b47ae8e2a7"
344344
);
345345
}
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+
}
346391
}

mutiny-wasm/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cargo-features = ["per-package-target"]
22

33
[package]
44
name = "mutiny-wasm"
5-
version = "1.10.23"
5+
version = "1.10.24"
66
edition = "2021"
77
authors = ["utxostack"]
88
forced-target = "wasm32-unknown-unknown"

0 commit comments

Comments
 (0)