mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 18:11:10 +00:00
Add CryptoStore::ecdsa_sign_prehashed() (#8838)
* Pair::sign_prehashed() * add CryptoStore::ecdsa_sign_prehashed() * add test for testing keystore * address review comments
This commit is contained in:
@@ -531,6 +531,12 @@ impl Pair {
|
||||
Self::from_seed(&padded_seed)
|
||||
})
|
||||
}
|
||||
|
||||
/// Sign a pre-hashed message
|
||||
pub fn sign_prehashed(&self, message: &[u8; 32]) -> Signature {
|
||||
let message = secp256k1::Message::parse(message);
|
||||
secp256k1::sign(&message, &self.secret).into()
|
||||
}
|
||||
}
|
||||
|
||||
impl CryptoType for Public {
|
||||
@@ -552,7 +558,7 @@ impl CryptoType for Pair {
|
||||
mod test {
|
||||
use super::*;
|
||||
use hex_literal::hex;
|
||||
use crate::crypto::{DEV_PHRASE, set_default_ss58_version};
|
||||
use crate::{crypto::{DEV_PHRASE, set_default_ss58_version}, keccak_256};
|
||||
use serde_json;
|
||||
use crate::crypto::PublicError;
|
||||
|
||||
@@ -761,4 +767,28 @@ mod test {
|
||||
// Poorly-sized
|
||||
assert!(deserialize_signature("\"abc123\"").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sign_prehashed_works() {
|
||||
let (pair, _, _) = Pair::generate_with_phrase(Some("password"));
|
||||
|
||||
// `msg` shouldn't be mangled
|
||||
let msg = [0u8; 32];
|
||||
let sig1 = pair.sign_prehashed(&msg);
|
||||
let sig2: Signature = secp256k1::sign(&secp256k1::Message::parse(&msg), &pair.secret).into();
|
||||
|
||||
assert_eq!(sig1, sig2);
|
||||
|
||||
// signature is actually different
|
||||
let sig2 = pair.sign(&msg);
|
||||
|
||||
assert_ne!(sig1, sig2);
|
||||
|
||||
// using pre-hashed `msg` works
|
||||
let msg = keccak_256(b"this should be hashed");
|
||||
let sig1 = pair.sign_prehashed(&msg);
|
||||
let sig2: Signature = secp256k1::sign(&secp256k1::Message::parse(&msg), &pair.secret).into();
|
||||
|
||||
assert_eq!(sig1, sig2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user