3939) ]
4040//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
4141//! use argon2::{
42- //! password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, phc::SaltString },
42+ //! password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, phc::Salt },
4343//! Argon2
4444//! };
4545//!
4646//! let password = b"hunter42"; // Bad password; don't actually use!
47- //! let salt = SaltString ::generate(); // Note: needs the `getrandom` feature of `argon2` enabled
47+ //! let salt = Salt ::generate(); // Note: needs the `getrandom` feature of `argon2` enabled
4848//!
4949//! // Argon2 with default params (Argon2id v19)
5050//! let argon2 = Argon2::default();
5151//!
5252//! // Hash password to PHC string ($argon2id$v=19$...)
53- //! let password_hash = argon2.hash_password(password, salt.as_ref() )?.to_string();
53+ //! let password_hash = argon2.hash_password(password, & salt)?.to_string();
5454//!
5555//! // Verify password against PHC string.
5656//! //
7373) ]
7474//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
7575//! use argon2::{
76- //! password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, phc::SaltString },
76+ //! password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, phc::Salt },
7777//! Algorithm, Argon2, Params, Version
7878//! };
7979//!
8080//! let password = b"hunter42"; // Bad password; don't actually use!
81- //! let salt = SaltString ::generate(); // Note: needs the `getrandom` feature of `argon2` enabled
81+ //! let salt = Salt ::generate(); // Note: needs the `getrandom` feature of `argon2` enabled
8282//!
8383//! // Argon2 with default params (Argon2id v19) and pepper
8484//! let argon2 = Argon2::new_with_secret(
9090//! .unwrap();
9191//!
9292//! // Hash password to PHC string ($argon2id$v=19$...)
93- //! let password_hash = argon2.hash_password(password, salt.as_ref() )?.to_string();
93+ //! let password_hash = argon2.hash_password(password, & salt)?.to_string();
9494//!
9595//! // Verify password against PHC string.
9696//! //
@@ -623,14 +623,14 @@ impl<'key> Argon2<'key> {
623623impl CustomizedPasswordHasher for Argon2 < ' _ > {
624624 type Params = Params ;
625625
626- fn hash_password_customized < ' a > (
626+ fn hash_password_customized (
627627 & self ,
628628 password : & [ u8 ] ,
629- alg_id : Option < & ' a str > ,
629+ salt : & [ u8 ] ,
630+ alg_id : Option < & str > ,
630631 version : Option < u32 > ,
631632 params : Params ,
632- salt : & ' a str ,
633- ) -> password_hash:: Result < PasswordHash < ' a > > {
633+ ) -> password_hash:: Result < PasswordHash > {
634634 let algorithm = alg_id
635635 . map ( Algorithm :: try_from)
636636 . transpose ( ) ?
@@ -655,22 +655,16 @@ impl CustomizedPasswordHasher for Argon2<'_> {
655655
656656#[ cfg( all( feature = "alloc" , feature = "password-hash" ) ) ]
657657impl PasswordHasher for Argon2 < ' _ > {
658- fn hash_password < ' a > (
659- & self ,
660- password : & [ u8 ] ,
661- salt : & ' a str ,
662- ) -> password_hash:: Result < PasswordHash < ' a > > {
663- let salt = Salt :: from_b64 ( salt) ?;
664- let mut salt_arr = [ 0u8 ; 64 ] ;
665- let salt_bytes = salt. decode_b64 ( & mut salt_arr) ?;
658+ fn hash_password ( & self , password : & [ u8 ] , salt : & [ u8 ] ) -> password_hash:: Result < PasswordHash > {
659+ let salt = Salt :: new ( salt) ?;
666660
667661 let output_len = self
668662 . params
669663 . output_len ( )
670664 . unwrap_or ( Params :: DEFAULT_OUTPUT_LEN ) ;
671665
672666 let output = Output :: init_with ( output_len, |out| {
673- Ok ( self . hash_password_into ( password, salt_bytes , out) ?)
667+ Ok ( self . hash_password_into ( password, & salt , out) ?)
674668 } ) ?;
675669
676670 Ok ( PasswordHash {
@@ -704,17 +698,18 @@ mod tests {
704698 const EXAMPLE_PASSWORD : & [ u8 ] = b"hunter42" ;
705699
706700 /// Example salt value. Don't use a static salt value!!!
707- const EXAMPLE_SALT : & str = "examplesaltvalue ";
701+ const EXAMPLE_SALT : & [ u8 ] = b"example-salt ";
708702
709703 #[ test]
710704 fn decoded_salt_too_short ( ) {
711705 let argon2 = Argon2 :: default ( ) ;
712706
713- // Too short after decoding
714- let salt = "somesalt ";
707+ // Too short: minimum size 8-bytes
708+ let salt = b"weesalt ";
715709
716710 let res =
717- argon2. hash_password_customized ( EXAMPLE_PASSWORD , None , None , Params :: default ( ) , salt) ;
711+ argon2. hash_password_customized ( EXAMPLE_PASSWORD , salt, None , None , Params :: default ( ) ) ;
712+
718713 assert_eq ! (
719714 res,
720715 Err ( password_hash:: Error :: SaltInvalid (
0 commit comments