1#[cfg(feature = "base64")]
2use crate::Base64EncodeExt;
3use crate::HexEncodeExt;
4
5pub trait MD5Ext {
6 fn md5(&self) -> [u8; 16];
7 fn md5_hex(&self) -> String {
8 self.md5().hex_lower()
9 }
10 #[cfg(feature = "base64")]
11 fn md5_base64(&self) -> String {
12 self.md5().b64_enc()
13 }
14}
15
16impl<T> MD5Ext for T
17where
18 T: AsRef<[u8]>,
19{
20 fn md5(&self) -> [u8; 16] {
21 md5::compute(self.as_ref()).into()
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28 #[test]
29 fn test_md5() {
30 let s = b"hello world";
31 let e = s.md5_hex();
32 assert_eq!(e, "5eb63bbbe01eeed093cb22bb8f5acdc3");
33 #[cfg(feature = "base64")]
34 assert_eq!(s.md5_base64(), "XrY7u+Ae7tCTyyK7j1rNww==");
35 }
36}