@@ -1001,18 +1001,12 @@ macro_rules! find_all_extract {
10011001#[ allow( missing_docs) ]
10021002impl RawBolt11Invoice {
10031003 /// Hash the HRP (as bytes) and signatureless data part (as Fe32 iterator)
1004- fn hash_from_parts_iter < ' s > ( hrp_bytes : & [ u8 ] , data_without_signature_iter : Box < dyn Iterator < Item = Fe32 > + ' s > ) -> [ u8 ; 32 ] {
1005- let data_part_signature = data_without_signature_iter. collect :: < Vec < Fe32 > > ( ) ;
1006- Self :: hash_from_parts ( hrp_bytes, & data_part_signature[ ..] )
1007- }
1008-
1009- /// Hash the HRP as bytes and signatureless data part.
1010- fn hash_from_parts ( hrp_bytes : & [ u8 ] , data_without_signature : & [ Fe32 ] ) -> [ u8 ; 32 ] {
1004+ fn hash_from_parts < ' s > ( hrp_bytes : & [ u8 ] , data_without_signature : Box < dyn Iterator < Item = Fe32 > + ' s > ) -> [ u8 ; 32 ] {
10111005 use crate :: de:: FromBase32 ;
10121006
1013- let mut preimage = Vec :: < u8 > :: from ( hrp_bytes ) ;
1007+ let mut data_part = data_without_signature . collect :: < Vec < Fe32 > > ( ) ;
10141008
1015- let mut data_part = Vec :: from ( data_without_signature ) ;
1009+ // Need to pad before from_base32 conversion
10161010 let overhang = ( data_part. len ( ) * 5 ) % 8 ;
10171011 if overhang > 0 {
10181012 // add padding if data does not end at a byte boundary
@@ -1024,6 +1018,7 @@ impl RawBolt11Invoice {
10241018 }
10251019 }
10261020
1021+ let mut preimage = Vec :: < u8 > :: from ( hrp_bytes) ;
10271022 preimage. extend_from_slice ( & Vec :: < u8 > :: from_base32 ( & data_part)
10281023 . expect ( "No padding error may occur due to appended zero above." ) ) ;
10291024
@@ -1036,7 +1031,7 @@ impl RawBolt11Invoice {
10361031 pub fn signable_hash ( & self ) -> [ u8 ; 32 ] {
10371032 use crate :: ser:: Base32Iterable ;
10381033
1039- RawBolt11Invoice :: hash_from_parts_iter (
1034+ Self :: hash_from_parts (
10401035 self . hrp . to_string ( ) . as_bytes ( ) ,
10411036 self . data . fe_iter ( ) ,
10421037 )
0 commit comments