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// }