changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > demo / annotate obj/src/hash.rs

changeset 11: d8f806f1d327
author: ellis <ellis@rwest.io>
date: Sun, 14 May 2023 21:27:04 -0400
permissions: -rw-r--r--
description: obj updates
11
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
1
 //! hash - wrapper for hash algorithms and types
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
3
 pub use blake3::{derive_key, hash, keyed_hash, Hash as B3Hash, Hasher as B3Hasher, OutputReader};
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
4
 pub use hex;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
5
 pub use sha2::Sha512;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
6
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
7
 pub use std::hash::{Hash, Hasher};
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
8
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
9
 pub const KEY_LEN: usize = 32;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
10
 pub const OUT_LEN: usize = 32;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
11
 pub const OUT_LEN_HEX: usize = OUT_LEN * 2;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
12
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
13
 #[cfg(test)]
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
14
 mod tests {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
15
   use crate::*;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
16
   use super::*;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
17
   #[test]
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
18
   fn id_state_hash() {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
19
     let id = id::Id(vec![0; KEY_LEN]);
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
20
     let hash = id.state_hash(&mut B3Hasher::new());
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
21
     assert_eq!(hash, id.state_hash(&mut B3Hasher::new()));
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
22
   }
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
23
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
24
   #[test]
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
25
   fn id_hex() {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
26
     let id = id::Id(vec![255; KEY_LEN]);
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
27
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
28
     assert_eq!(
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
29
       hex::decode("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap(),
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
30
       id.0
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
31
     );
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
32
   }
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
33
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
34
   #[test]
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
35
   fn rand_id() {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
36
     let id = id::Id::rand();
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
37
     let hash = id.state_hash(&mut B3Hasher::new());
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
38
     assert_eq!(hash, id.state_hash(&mut B3Hasher::new()));
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
39
   }
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
40
 
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
41
   #[test]
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
42
   fn random_demon_id_is_valid() {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
43
     use id::PeerId;
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
44
     for _ in 0..5000 {
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
45
       let did = PeerId::rand();
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
46
       let did2 = PeerId::rand();
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
47
       assert_eq!(did, did);
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
48
       assert_ne!(did, did2);
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
49
     }
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
50
   }
d8f806f1d327 obj updates
ellis <ellis@rwest.io>
parents:
diff changeset
51
 }