@@ -69,7 +69,8 @@ extern "C" {
6969
7070fn get_parsed_options ( i : Argon2Options ) -> ( argon2:: Algorithm , argon2:: Params ) {
7171 let parsed_options: WasmArgon2OptionsIncoming =
72- serde_wasm_bindgen:: from_value ( i. into ( ) ) . unwrap_throw ( ) ;
72+ serde_wasm_bindgen:: from_value ( i. into ( ) )
73+ . expect_throw ( "Options could not be parsed" ) ;
7374
7475 let algorithm = match parsed_options
7576 . algorithm
@@ -94,34 +95,40 @@ fn get_parsed_options(i: Argon2Options) -> (argon2::Algorithm, argon2::Params) {
9495 . unwrap_or ( default_params. p_cost ( ) ) ,
9596 parsed_options. output_length ,
9697 )
97- . expect_throw ( "failed to create params " ) ;
98+ . expect_throw ( "Failed to parse parameters " ) ;
9899
99100 ( algorithm, params)
100101}
101102
102103/// Hash a password using Argon2
103104#[ wasm_bindgen]
104- pub fn hash ( data : String , options : Argon2Options ) -> String {
105+ pub fn hash ( data : String , options : Argon2Options ) -> Result < String , JsError > {
105106 let ( algorithm, parsed_options) = get_parsed_options ( options) ;
106107 let argon2 = Argon2 :: new ( algorithm, Version :: V0x13 , parsed_options. clone ( ) ) ;
107108 let salt = SaltString :: generate ( & mut OsRng ) ;
108109 let data_bytes = data. as_bytes ( ) ;
109- argon2
110+ let hash = argon2
110111 . hash_password ( data_bytes, & salt)
111- . expect ( "hashing failed" )
112- . to_string ( )
112+ . expect_throw ( "Failed to generate hash" )
113+ . to_string ( ) ;
114+ Ok ( hash)
113115}
114116
115117/// Verify a password using Argon2
116118#[ wasm_bindgen]
117- pub fn verify ( data : String , hash : String , options : Argon2Options ) -> bool {
119+ pub fn verify (
120+ data : String ,
121+ hash : String ,
122+ options : Argon2Options ,
123+ ) -> Result < bool , JsError > {
118124 let ( algorithm, parsed_options) = get_parsed_options ( options) ;
119125
120126 let data_bytes = data. as_bytes ( ) ;
121- let parsed_hash = PasswordHash :: new ( & hash) . expect ( "failed to parse hash" ) ;
122- let argon2 = Argon2 :: new ( algorithm, Version :: V0x13 , parsed_options. clone ( ) )
127+ let parsed_hash = PasswordHash :: new ( & hash)
128+ . expect_throw ( "Failed to parse hash, invalid hash provided" ) ;
129+ let is_ok = Argon2 :: new ( algorithm, Version :: V0x13 , parsed_options. clone ( ) )
123130 . verify_password ( data_bytes, & parsed_hash)
124131 . is_ok ( ) ;
125132
126- argon2
133+ Ok ( is_ok )
127134}
0 commit comments