| 
						
						
						
					 | 
					 | 
					@ -1,9 +1,12 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use crate::{Error, Error::*, Result}; | 
					 | 
					 | 
					 | 
					use crate::{Error, Error::*, Result}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use crypto::{digest::Digest, md5::Md5, sha2::Sha256, sha2::Sha512Trunc256}; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use std::fmt; | 
					 | 
					 | 
					 | 
					use std::fmt; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use std::fmt::{Display, Formatter}; | 
					 | 
					 | 
					 | 
					use std::fmt::{Display, Formatter}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use std::str::FromStr; | 
					 | 
					 | 
					 | 
					use std::str::FromStr; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					use digest::{Digest, DynDigest}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					use md5::Md5; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					use sha2::{Sha256, Sha512Trunc256}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					/// Algorithm type
 | 
					 | 
					 | 
					 | 
					/// Algorithm type
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[derive(Debug, PartialEq, Clone, Copy)] | 
					 | 
					 | 
					 | 
					#[derive(Debug, PartialEq, Clone, Copy)] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#[allow(non_camel_case_types)] | 
					 | 
					 | 
					 | 
					#[allow(non_camel_case_types)] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -27,19 +30,19 @@ impl Algorithm { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /// Calculate a hash of bytes using the selected algorithm
 | 
					 | 
					 | 
					 | 
					    /// Calculate a hash of bytes using the selected algorithm
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pub fn hash(&self, bytes: &[u8]) -> String { | 
					 | 
					 | 
					 | 
					    pub fn hash(self, bytes: &[u8]) -> String { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        let mut hash: Box<dyn Digest> = match self.algo { | 
					 | 
					 | 
					 | 
					        let mut hash: Box<dyn DynDigest> = match self.algo { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            AlgorithmType::MD5 => Box::new(Md5::new()), | 
					 | 
					 | 
					 | 
					            AlgorithmType::MD5 => Box::new(Md5::new()), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            AlgorithmType::SHA2_256 => Box::new(Sha256::new()), | 
					 | 
					 | 
					 | 
					            AlgorithmType::SHA2_256 => Box::new(Sha256::new()), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            AlgorithmType::SHA2_512_256 => Box::new(Sha512Trunc256::new()), | 
					 | 
					 | 
					 | 
					            AlgorithmType::SHA2_512_256 => Box::new(Sha512Trunc256::new()), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }; | 
					 | 
					 | 
					 | 
					        }; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        hash.input(bytes); | 
					 | 
					 | 
					 | 
					        hash.input(bytes); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        hash.result_str() | 
					 | 
					 | 
					 | 
					        hex::encode(hash.result()) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    /// Calculate a hash of string's bytes using the selected algorithm
 | 
					 | 
					 | 
					 | 
					    /// Calculate a hash of string's bytes using the selected algorithm
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pub fn hash_str(&self, bytes: &str) -> String { | 
					 | 
					 | 
					 | 
					    pub fn hash_str(self, bytes: &str) -> String { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.hash(bytes.as_bytes()) | 
					 | 
					 | 
					 | 
					        self.hash(bytes.as_bytes()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |