sp_multihash/
multihash_impl.rs1pub use sp_multihash_derive::Multihash;
2
3#[derive(Copy, Clone, Debug, Eq, Multihash, PartialEq)]
11#[mh(alloc_size = 64)]
12pub enum Code {
13 #[cfg(feature = "sha2")]
15 #[mh(code = 0x12, hasher = crate::Sha2_256, digest = crate::Sha2Digest<32>)]
16 Sha2_256,
17 #[cfg(feature = "sha2")]
19 #[mh(code = 0x13, hasher = crate::Sha2_512, digest = crate::Sha2Digest<64>)]
20 Sha2_512,
21 #[cfg(feature = "sha3")]
23 #[mh(code = 0x17, hasher = crate::Sha3_224, digest = crate::Sha3Digest<28>)]
24 Sha3_224,
25 #[cfg(feature = "sha3")]
27 #[mh(code = 0x16, hasher = crate::Sha3_256, digest = crate::Sha3Digest<32>)]
28 Sha3_256,
29 #[cfg(feature = "sha3")]
31 #[mh(code = 0x15, hasher = crate::Sha3_384, digest = crate::Sha3Digest<48>)]
32 Sha3_384,
33 #[cfg(feature = "sha3")]
35 #[mh(code = 0x14, hasher = crate::Sha3_512, digest = crate::Sha3Digest<64>)]
36 Sha3_512,
37 #[cfg(feature = "sha3")]
39 #[mh(code = 0x1a, hasher = crate::Keccak224, digest =
40 crate::KeccakDigest<28>)]
41 Keccak224,
42 #[cfg(feature = "sha3")]
44 #[mh(code = 0x1b, hasher = crate::Keccak256, digest =
45 crate::KeccakDigest<32>)]
46 Keccak256,
47 #[cfg(feature = "sha3")]
49 #[mh(code = 0x1c, hasher = crate::Keccak384, digest =
50 crate::KeccakDigest<48>)]
51 Keccak384,
52 #[cfg(feature = "sha3")]
54 #[mh(code = 0x1d, hasher = crate::Keccak512, digest =
55 crate::KeccakDigest<64>)]
56 Keccak512,
57 #[cfg(feature = "blake2b")]
59 #[mh(code = 0xb220, hasher = crate::Blake2b256, digest =
60 crate::Blake2bDigest<32>)]
61 Blake2b256,
62 #[cfg(feature = "blake2b")]
64 #[mh(code = 0xb240, hasher = crate::Blake2b512, digest =
65 crate::Blake2bDigest<64>)]
66 Blake2b512,
67 #[cfg(feature = "blake2s")]
69 #[mh(code = 0xb250, hasher = crate::Blake2s128, digest =
70 crate::Blake2sDigest<16>)]
71 Blake2s128,
72 #[cfg(feature = "blake2s")]
74 #[mh(code = 0xb260, hasher = crate::Blake2s256, digest =
75 crate::Blake2sDigest<32>)]
76 Blake2s256,
77 #[cfg(feature = "blake3")]
79 #[mh(code = 0x1e, hasher = crate::Blake3_256, digest =
80 crate::Blake3Digest<32>)]
81 Blake3_256,
82
83 #[cfg(feature = "identity")]
87 #[mh(code = 0x00, hasher = crate::IdentityHasher::<64>, digest =
88 crate::IdentityDigest<64>)]
89 Identity,
90}
91
92#[cfg(test)]
93mod tests {
94 use super::*;
95 use crate::{
96 hasher::Hasher,
97 hasher_impl::sha3::{
98 Sha3_256,
99 Sha3_512,
100 },
101 multihash::MultihashDigest,
102 };
103
104 #[test]
105 fn test_hasher_256() {
106 let digest = Sha3_256::digest(b"hello world");
107 let hash = Code::multihash_from_digest(&digest);
108 let hash2 = Code::Sha3_256.digest(b"hello world");
109 assert_eq!(hash.code(), u64::from(Code::Sha3_256));
110 assert_eq!(hash.size(), 32);
111 assert_eq!(hash.digest(), digest.as_ref());
112 assert_eq!(hash, hash2);
113 }
114
115 #[test]
116 fn test_hasher_512() {
117 let digest = Sha3_512::digest(b"hello world");
118 let hash = Code::multihash_from_digest(&digest);
119 let hash2 = Code::Sha3_512.digest(b"hello world");
120 assert_eq!(hash.code(), u64::from(Code::Sha3_512));
121 assert_eq!(hash.size(), 64);
122 assert_eq!(hash.digest(), digest.as_ref());
123 assert_eq!(hash, hash2);
124 }
125}