12
12
)
13
13
from .common import (
14
14
aes_kdf , Concatenated , AES256Payload , ChaCha20Payload , TwoFishPayload ,
15
- DynamicDict , compute_key_composite , Reparsed , Decompressed ,
15
+ DynamicDict , RandomBytes , compute_key_composite , Reparsed , Decompressed ,
16
16
compute_master , CompressionFlags , XML , CipherId , ProtectedStreamId , Unprotect
17
17
)
18
18
@@ -34,7 +34,7 @@ def compute_transformed(context):
34
34
password = context ._ ._ .password ,
35
35
keyfile = context ._ ._ .keyfile
36
36
)
37
- kdf_parameters = context ._ .header .value . dynamic_header .kdf_parameters .data .dict
37
+ kdf_parameters = context ._ .header .dynamic_header .kdf_parameters .data .dict
38
38
39
39
if context ._ ._ .transformed_key is not None :
40
40
transformed_key = context ._ ._ .transformed_key
@@ -73,12 +73,12 @@ def compute_header_hmac_hash(context):
73
73
hashlib .sha512 (
74
74
b'\xff ' * 8 +
75
75
hashlib .sha512 (
76
- context ._ .header .value . dynamic_header .master_seed .data +
76
+ context ._ .header .dynamic_header .master_seed .data +
77
77
context .transformed_key +
78
78
b'\x01 '
79
79
).digest ()
80
80
).digest (),
81
- context ._ .header .data ,
81
+ context ._ .header ._data ,
82
82
hashlib .sha256
83
83
).digest ()
84
84
@@ -140,6 +140,7 @@ def compute_header_hmac_hash(context):
140
140
this .id ,
141
141
{'compression_flags' : CompressionFlags ,
142
142
'kdf_parameters' : VariantDictionary ,
143
+ 'master_seed' : RandomBytes (32 ),
143
144
'cipher_id' : CipherId
144
145
},
145
146
default = GreedyBytes
@@ -165,7 +166,7 @@ def compute_payload_block_hash(this):
165
166
hashlib .sha512 (
166
167
struct .pack ('<Q' , this ._index ) +
167
168
hashlib .sha512 (
168
- this ._ ._ .header .value . dynamic_header .master_seed .data +
169
+ this ._ ._ .header .dynamic_header .master_seed .data +
169
170
this ._ .transformed_key + b'\x01 '
170
171
).digest ()
171
172
).digest (),
@@ -200,7 +201,7 @@ def compute_payload_block_hash(this):
200
201
))
201
202
202
203
DecryptedPayload = Switch (
203
- this ._ .header .value . dynamic_header .cipher_id .data ,
204
+ this ._ .header .dynamic_header .cipher_id .data ,
204
205
{'aes256' : AES256Payload (EncryptedPayload ),
205
206
'chacha20' : ChaCha20Payload (EncryptedPayload ),
206
207
'twofish' : TwoFishPayload (EncryptedPayload )
@@ -256,7 +257,7 @@ def compute_payload_block_hash(this):
256
257
"sha256" / Checksum (
257
258
Bytes (32 ),
258
259
lambda data : hashlib .sha256 (data ).digest (),
259
- this ._ .header .data ,
260
+ this ._ .header ._data ,
260
261
# exception=HeaderChecksumError,
261
262
),
262
263
"cred_check" / If (this ._ ._ .decrypt ,
@@ -270,7 +271,7 @@ def compute_payload_block_hash(this):
270
271
"payload" / If (this ._ ._ .decrypt ,
271
272
UnpackedPayload (
272
273
IfThenElse (
273
- this ._ .header .value . dynamic_header .compression_flags .data .compression ,
274
+ this ._ .header .dynamic_header .compression_flags .data .compression ,
274
275
Decompressed (DecryptedPayload ),
275
276
DecryptedPayload
276
277
)
0 commit comments