tiny_multihash/
multihash_impl.rs1use tiny_multihash_derive::Multihash;
2
3#[derive(Copy, Clone, Debug, Eq, Multihash, PartialEq)]
10#[mh(alloc_size = crate::U64)]
11pub enum Code {
12 #[cfg(feature = "sha1")]
14 #[mh(code = 0x11, hasher = crate::Sha1, digest = crate::Sha1Digest<crate::U20>)]
15 Sha1,
16 #[cfg(feature = "sha2")]
18 #[mh(code = 0x12, hasher = crate::Sha2_256, digest = crate::Sha2Digest<crate::U32>)]
19 Sha2_256,
20 #[cfg(feature = "sha2")]
22 #[mh(code = 0x13, hasher = crate::Sha2_512, digest = crate::Sha2Digest<crate::U64>)]
23 Sha2_512,
24 #[cfg(feature = "sha3")]
26 #[mh(code = 0x17, hasher = crate::Sha3_224, digest = crate::Sha3Digest<crate::U28>)]
27 Sha3_224,
28 #[cfg(feature = "sha3")]
30 #[mh(code = 0x16, hasher = crate::Sha3_256, digest = crate::Sha3Digest<crate::U32>)]
31 Sha3_256,
32 #[cfg(feature = "sha3")]
34 #[mh(code = 0x15, hasher = crate::Sha3_384, digest = crate::Sha3Digest<crate::U48>)]
35 Sha3_384,
36 #[cfg(feature = "sha3")]
38 #[mh(code = 0x14, hasher = crate::Sha3_512, digest = crate::Sha3Digest<crate::U64>)]
39 Sha3_512,
40 #[cfg(feature = "sha3")]
42 #[mh(code = 0x1a, hasher = crate::Keccak224, digest = crate::KeccakDigest<crate::U28>)]
43 Keccak224,
44 #[cfg(feature = "sha3")]
46 #[mh(code = 0x1b, hasher = crate::Keccak256, digest = crate::KeccakDigest<crate::U32>)]
47 Keccak256,
48 #[cfg(feature = "sha3")]
50 #[mh(code = 0x1c, hasher = crate::Keccak384, digest = crate::KeccakDigest<crate::U48>)]
51 Keccak384,
52 #[cfg(feature = "sha3")]
54 #[mh(code = 0x1d, hasher = crate::Keccak512, digest = crate::KeccakDigest<crate::U64>)]
55 Keccak512,
56 #[cfg(feature = "blake2b")]
58 #[mh(code = 0xb220, hasher = crate::Blake2b256, digest = crate::Blake2bDigest<crate::U32>)]
59 Blake2b256,
60 #[cfg(feature = "blake2b")]
62 #[mh(code = 0xb240, hasher = crate::Blake2b512, digest = crate::Blake2bDigest<crate::U64>)]
63 Blake2b512,
64 #[cfg(feature = "blake2s")]
66 #[mh(code = 0xb250, hasher = crate::Blake2s128, digest = crate::Blake2sDigest<crate::U16>)]
67 Blake2s128,
68 #[cfg(feature = "blake2s")]
70 #[mh(code = 0xb260, hasher = crate::Blake2s256, digest = crate::Blake2sDigest<crate::U32>)]
71 Blake2s256,
72 #[cfg(feature = "blake3")]
74 #[mh(code = 0x1e, hasher = crate::Blake3_256, digest = crate::Blake3Digest<crate::U32>)]
75 Blake3_256,
76}
77
78#[cfg(test)]
79mod tests {
80 use super::*;
81 use crate::hasher::Hasher;
82 use crate::hasher_impl::sha3::{Sha3_256, Sha3_512};
83 use crate::multihash::MultihashCode;
84
85 #[test]
86 fn test_hasher_256() {
87 let digest = Sha3_256::digest(b"hello world");
88 let hash = Code::multihash_from_digest(&digest);
89 let hash2 = Code::Sha3_256.digest(b"hello world");
90 assert_eq!(hash.code(), u64::from(Code::Sha3_256));
91 assert_eq!(hash.size(), 32);
92 assert_eq!(hash.digest(), &digest.as_ref()[..]);
93 assert_eq!(hash, hash2);
94 }
95
96 #[test]
97 fn test_hasher_512() {
98 let digest = Sha3_512::digest(b"hello world");
99 let hash = Code::multihash_from_digest(&digest);
100 let hash2 = Code::Sha3_512.digest(b"hello world");
101 assert_eq!(hash.code(), u64::from(Code::Sha3_512));
102 assert_eq!(hash.size(), 64);
103 assert_eq!(hash.digest(), &digest.as_ref()[..]);
104 assert_eq!(hash, hash2);
105 }
106}