@@ -5,7 +5,7 @@ use sha1::Sha1 as Sha1Hasher;
5
5
use sha2:: { Sha256 , Sha512 } ;
6
6
use tiny_keccak:: { Hasher , Keccak , Sha3 } ;
7
7
8
- use crate :: digests:: { wrap, Multihash , MultihashDigest } ;
8
+ use crate :: digests:: { wrap, DynMultihashDigest , Multihash , MultihashDigest } ;
9
9
10
10
#[ derive( Clone , Debug , PartialEq ) ]
11
11
pub enum Code {
@@ -84,6 +84,40 @@ impl Code {
84
84
_ => Code :: Custom ( code) ,
85
85
}
86
86
}
87
+
88
+ /// Return the hasher that is used to create a hash with this code.
89
+ ///
90
+ /// If a custom code is used, `None` is returned.
91
+ pub fn hasher ( & self ) -> Option < Box < dyn DynMultihashDigest > > {
92
+ match * self {
93
+ Self :: Custom ( _) => None ,
94
+ Self :: Implemented ( code) => Some ( code. hasher ( ) ) ,
95
+ }
96
+ }
97
+ }
98
+
99
+ impl ImplementedCode {
100
+ /// Return the Multihash implementation that does the actual hashing
101
+ fn hasher ( self ) -> Box < dyn DynMultihashDigest > {
102
+ match self {
103
+ ImplementedCode :: Identity => Box :: new ( Identity ) ,
104
+ ImplementedCode :: Sha1 => Box :: new ( Sha1 ) ,
105
+ ImplementedCode :: Sha2_256 => Box :: new ( Sha2_256 ) ,
106
+ ImplementedCode :: Sha2_512 => Box :: new ( Sha2_512 ) ,
107
+ ImplementedCode :: Sha3_224 => Box :: new ( Sha3_224 ) ,
108
+ ImplementedCode :: Sha3_256 => Box :: new ( Sha3_256 ) ,
109
+ ImplementedCode :: Sha3_384 => Box :: new ( Sha3_384 ) ,
110
+ ImplementedCode :: Sha3_512 => Box :: new ( Sha3_512 ) ,
111
+ ImplementedCode :: Keccak224 => Box :: new ( Keccak224 ) ,
112
+ ImplementedCode :: Keccak256 => Box :: new ( Keccak256 ) ,
113
+ ImplementedCode :: Keccak384 => Box :: new ( Keccak384 ) ,
114
+ ImplementedCode :: Keccak512 => Box :: new ( Keccak512 ) ,
115
+ ImplementedCode :: Blake2b256 => Box :: new ( Blake2b256 ) ,
116
+ ImplementedCode :: Blake2b512 => Box :: new ( Blake2b512 ) ,
117
+ ImplementedCode :: Blake2s128 => Box :: new ( Blake2s128 ) ,
118
+ ImplementedCode :: Blake2s256 => Box :: new ( Blake2s256 ) ,
119
+ }
120
+ }
87
121
}
88
122
89
123
#[ derive( Clone , Debug ) ]
0 commit comments