@@ -22,15 +22,15 @@ pub(super) fn root_hash(data: &[u8]) -> sha256::Hash {
22
22
engine. input ( record. as_ref ( ) ) ;
23
23
}
24
24
}
25
- let nonce_tag = sha256:: Hash :: from_engine ( engine) ;
26
- let leaf_tag = sha256:: Hash :: hash ( "LnLeaf" . as_bytes ( ) ) ;
27
- let branch_tag = sha256:: Hash :: hash ( "LnBranch" . as_bytes ( ) ) ;
25
+ let nonce_tag = tagged_hash_engine ( sha256:: Hash :: from_engine ( engine) ) ;
26
+ let leaf_tag = tagged_hash_engine ( sha256:: Hash :: hash ( "LnLeaf" . as_bytes ( ) ) ) ;
27
+ let branch_tag = tagged_hash_engine ( sha256:: Hash :: hash ( "LnBranch" . as_bytes ( ) ) ) ;
28
28
29
29
let mut leaves = Vec :: new ( ) ;
30
30
for record in TlvStream :: new ( & data[ ..] ) {
31
31
if !SIGNATURE_TYPES . contains ( & record. r#type . 0 ) {
32
- leaves. push ( tagged_hash ( leaf_tag, & record) ) ;
33
- leaves. push ( tagged_hash ( nonce_tag, & record) ) ;
32
+ leaves. push ( tagged_hash_from_engine ( leaf_tag. clone ( ) , & record) ) ;
33
+ leaves. push ( tagged_hash_from_engine ( nonce_tag. clone ( ) , & record) ) ;
34
34
}
35
35
}
36
36
@@ -43,7 +43,7 @@ pub(super) fn root_hash(data: &[u8]) -> sha256::Hash {
43
43
}
44
44
45
45
for ( i, j) in ( 0 ..num_leaves) . step_by ( step) . zip ( ( offset..num_leaves) . step_by ( step) ) {
46
- leaves[ i] = tagged_branch_hash ( branch_tag, leaves[ i] , leaves[ j] ) ;
46
+ leaves[ i] = tagged_branch_hash_from_engine ( branch_tag. clone ( ) , leaves[ i] , leaves[ j] ) ;
47
47
}
48
48
}
49
49
@@ -52,17 +52,25 @@ pub(super) fn root_hash(data: &[u8]) -> sha256::Hash {
52
52
}
53
53
54
54
pub ( super ) fn tagged_hash < T : AsRef < [ u8 ] > > ( tag : sha256:: Hash , msg : T ) -> sha256:: Hash {
55
+ let engine = tagged_hash_engine ( tag) ;
56
+ tagged_hash_from_engine ( engine, msg)
57
+ }
58
+
59
+ fn tagged_hash_engine ( tag : sha256:: Hash ) -> sha256:: HashEngine {
55
60
let mut engine = sha256:: Hash :: engine ( ) ;
56
61
engine. input ( tag. as_ref ( ) ) ;
57
62
engine. input ( tag. as_ref ( ) ) ;
63
+ engine
64
+ }
65
+
66
+ fn tagged_hash_from_engine < T : AsRef < [ u8 ] > > ( mut engine : sha256:: HashEngine , msg : T ) -> sha256:: Hash {
58
67
engine. input ( msg. as_ref ( ) ) ;
59
68
sha256:: Hash :: from_engine ( engine)
60
69
}
61
70
62
- fn tagged_branch_hash ( tag : sha256:: Hash , leaf1 : sha256:: Hash , leaf2 : sha256:: Hash ) -> sha256:: Hash {
63
- let mut engine = sha256:: Hash :: engine ( ) ;
64
- engine. input ( tag. as_ref ( ) ) ;
65
- engine. input ( tag. as_ref ( ) ) ;
71
+ fn tagged_branch_hash_from_engine (
72
+ mut engine : sha256:: HashEngine , leaf1 : sha256:: Hash , leaf2 : sha256:: Hash ,
73
+ ) -> sha256:: Hash {
66
74
if leaf1 < leaf2 {
67
75
engine. input ( leaf1. as_ref ( ) ) ;
68
76
engine. input ( leaf2. as_ref ( ) ) ;
0 commit comments