@@ -6,6 +6,7 @@ use std::{
66
77use byteorder:: { BigEndian , ByteOrder } ;
88use bytes:: Bytes ;
9+ use data_encoding:: HEXUPPER_PERMISSIVE ;
910use futures_util:: future:: IntoStream ;
1011use http:: header:: HeaderValue ;
1112use hyper:: {
@@ -279,20 +280,22 @@ impl SpClient {
279280 let hash_cash_challenge = challenge. evaluate_hashcash_parameters ( ) ;
280281
281282 let ctx = vec ! [ ] ;
282- let prefix = hex:: decode ( & hash_cash_challenge. prefix ) . map_err ( |e| {
283- Error :: failed_precondition ( format ! (
284- "Unable to decode hash cash challenge: {e}"
285- ) )
286- } ) ?;
283+ let prefix = HEXUPPER_PERMISSIVE
284+ . decode ( hash_cash_challenge. prefix . as_bytes ( ) )
285+ . map_err ( |e| {
286+ Error :: failed_precondition ( format ! (
287+ "Unable to decode hash cash challenge: {e}"
288+ ) )
289+ } ) ?;
287290 let length = hash_cash_challenge. length ;
288291
289- let mut suffix = vec ! [ 0 ; 0x10 ] ;
292+ let mut suffix = [ 0u8 ; 0x10 ] ;
290293 let answer = Self :: solve_hash_cash ( & ctx, & prefix, length, & mut suffix) ;
291294
292295 match answer {
293296 Ok ( _) => {
294297 // the suffix must be in uppercase
295- let suffix = hex :: encode ( suffix) . to_uppercase ( ) ;
298+ let suffix = HEXUPPER_PERMISSIVE . encode ( & suffix) ;
296299
297300 let mut answer_message = ClientTokenRequest :: new ( ) ;
298301 answer_message. request_type =
@@ -302,7 +305,7 @@ impl SpClient {
302305 let challenge_answers = answer_message. mut_challenge_answers ( ) ;
303306
304307 let mut challenge_answer = ChallengeAnswer :: new ( ) ;
305- challenge_answer. mut_hash_cash ( ) . suffix = suffix. to_string ( ) ;
308+ challenge_answer. mut_hash_cash ( ) . suffix = suffix;
306309 challenge_answer. ChallengeType =
307310 ChallengeType :: CHALLENGE_HASH_CASH . into ( ) ;
308311
0 commit comments