ex3_crypto/hash/sha256.rs
1pub fn sha256(data: impl AsRef<[u8]>) -> [u8; 32] {
2 use sha2::{Digest, Sha256};
3 let mut sha = Sha256::new();
4 sha.update(data);
5 sha.finalize().into()
6}
7
8// #[cfg(test)]
9// mod tests {
10// use super::sha256;
11// use bitcoin::consensus::encode;
12// use bitcoin::hashes::{sha256, Hash, HashEngine};
13// use bitcoin::secp256k1::ThirtyTwoByteHash;
14// #[test]
15// fn test_compute_hash() {
16// let data = b"Hello, world!";
17// let hash: [u8; 32] = sha256(data);
18// assert_eq!(
19// hash,
20// [
21// 49, 95, 91, 219, 118, 208, 120, 196, 59, 138, 192, 6, 78, 74, 1, 100, 97, 43, 31,
22// 206, 119, 200, 105, 52, 91, 252, 148, 199, 88, 148, 237, 211
23// ]
24// );
25// }
26// #[test]
27// fn test_compared_with_signed_msg_hash() {
28// let message = "HelloWorld";
29// let prefix = b"\x18Bitcoin Signed Message:\n";
30// let msg_len = encode::VarInt(message.len() as u64);
31// let mut prefixed_message = Vec::with_capacity(prefix.len() + msg_len.len() + message.len());
32// prefixed_message.extend_from_slice(prefix);
33// let _f: [u8; 1] = [0xFD];
34// let msg_len = message.len() as u8;
35// prefixed_message.extend_from_slice(&[msg_len]);
36// prefixed_message.extend_from_slice(message.as_bytes());
37// let mut engine = sha256::Hash::engine();
38// engine.input(&prefixed_message[..]);
39// let sha_1: [u8; 32] = sha256(prefixed_message.as_slice());
40// let sha_2: [u8; 32] = sha256(sha_1.as_slice());
41// let hash_2 = bitcoin::sign_message::signed_msg_hash(message);
42// assert_eq!(hex::encode(sha_2), hex::encode(hash_2.into_32()));
43// }
44// }