-
Notifications
You must be signed in to change notification settings - Fork 122
/
hash_tests.rs
100 lines (88 loc) · 3.2 KB
/
hash_tests.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright (c) 2022, Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0
use crate::hash::{
Blake2b256, Blake3, EllipticCurveMultisetHash, HashFunction, Keccak256, MultisetHash, Sha256,
Sha3_256, Sha512,
};
#[test]
fn test_sha256() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Sha256::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("2196d60feda3cd3787885c10a905e11fae911c32a0eb67fd290ade5df7eab140").unwrap()
);
}
#[test]
fn test_sha3_256() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Sha3_256::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("8fa965f6b63464045e1a8a80e3175fec4e5468d2904f6d7338cf83a65528a8f5").unwrap()
);
}
#[test]
fn test_sha512() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Sha512::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("cbd83ff929e1b4a72e144b5533e59edba3a90f761e188bd809f994137d67ecd8b87e4c250d461f7f4c64c22f10e9f5c598849f2685f5b828b501e38d2b252d12").unwrap()
);
}
#[test]
fn test_keccak_256() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Keccak256::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("efecd3c9e52abd231ce0ce9548f0f9083fe040b291de26a3baa698956a847156").unwrap()
);
}
#[test]
fn test_blake2b_256() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Blake2b256::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("cc4e83cd4f030b0aabe27cf65a3ff92d0b5445f6466282e6b83a529b66094ebb").unwrap()
);
}
#[test]
fn test_blake3() {
let data =
hex::decode("301d56460954541aab6dd7ddc0dd08f8cb3ebd884784a0e797905107533cae62").unwrap();
let digest = Blake3::digest(data);
assert_eq!(
digest.as_ref(),
hex::decode("1b6d57a5017077b00cc9ce0641fb8ddcc136fbdb83325b31597fbe9441d9b269").unwrap()
);
}
#[test]
fn test_accumulator() {
let mut accumulator = EllipticCurveMultisetHash::default();
// Two different multisets should give different hashes
accumulator.insert(b"Hello");
let check1 = accumulator.clone();
accumulator.insert(b"World");
assert_ne!(check1, accumulator);
// Hashing the same elements should give the same hash
let mut accumulator2 = EllipticCurveMultisetHash::default();
accumulator2.insert_all([b"Hello", b"World"]);
assert_eq!(accumulator, accumulator2);
// The order doesn't matter
let mut accumulator3 = EllipticCurveMultisetHash::default();
accumulator3.insert_all([b"World", b"Hello"]);
assert_eq!(accumulator, accumulator3);
// The union of two accumulators should be equal to if all elements were inserted into a single accumulator
let mut accumulator3 = EllipticCurveMultisetHash::default();
accumulator3.insert(b"World");
accumulator3.union(&check1);
assert_eq!(accumulator, accumulator3);
}