4242 Decompressed ,
4343 DynamicDict ,
4444 ProtectedStreamId ,
45+ RandomBytes ,
4546 Reparsed ,
4647 TwoFishPayload ,
4748 Unprotect ,
@@ -67,7 +68,7 @@ def compute_transformed(context):
6768 password = context ._ ._ .password ,
6869 keyfile = context ._ ._ .keyfile
6970 )
70- kdf_parameters = context ._ .header .value . dynamic_header .kdf_parameters .data .dict
71+ kdf_parameters = context ._ .header .dynamic_header .kdf_parameters .data .dict
7172
7273 if context ._ ._ .transformed_key is not None :
7374 transformed_key = context ._ ._ .transformed_key
@@ -106,12 +107,12 @@ def compute_header_hmac_hash(context):
106107 hashlib .sha512 (
107108 b'\xff ' * 8 +
108109 hashlib .sha512 (
109- context ._ .header .value . dynamic_header .master_seed .data +
110+ context ._ .header .dynamic_header .master_seed .data +
110111 context .transformed_key +
111112 b'\x01 '
112113 ).digest ()
113114 ).digest (),
114- context ._ .header .data ,
115+ context ._ .header ._data ,
115116 hashlib .sha256
116117 ).digest ()
117118
@@ -173,6 +174,8 @@ def compute_header_hmac_hash(context):
173174 this .id ,
174175 {'compression_flags' : CompressionFlags ,
175176 'kdf_parameters' : VariantDictionary ,
177+ 'master_seed' : RandomBytes (32 ),
178+ 'encryption_iv' : RandomBytes (12 ),
176179 'cipher_id' : CipherId
177180 },
178181 default = GreedyBytes
@@ -198,7 +201,7 @@ def compute_payload_block_hash(this):
198201 hashlib .sha512 (
199202 struct .pack ('<Q' , this ._index ) +
200203 hashlib .sha512 (
201- this ._ ._ .header .value . dynamic_header .master_seed .data +
204+ this ._ ._ .header .dynamic_header .master_seed .data +
202205 this ._ .transformed_key + b'\x01 '
203206 ).digest ()
204207 ).digest (),
@@ -233,7 +236,7 @@ def compute_payload_block_hash(this):
233236))
234237
235238DecryptedPayload = Switch (
236- this ._ .header .value . dynamic_header .cipher_id .data ,
239+ this ._ .header .dynamic_header .cipher_id .data ,
237240 {'aes256' : AES256Payload (EncryptedPayload ),
238241 'chacha20' : ChaCha20Payload (EncryptedPayload ),
239242 'twofish' : TwoFishPayload (EncryptedPayload )
@@ -289,7 +292,7 @@ def compute_payload_block_hash(this):
289292 "sha256" / Checksum (
290293 Bytes (32 ),
291294 lambda data : hashlib .sha256 (data ).digest (),
292- this ._ .header .data ,
295+ this ._ .header ._data ,
293296 # exception=HeaderChecksumError,
294297 ),
295298 "cred_check" / If (this ._ ._ .decrypt ,
@@ -303,7 +306,7 @@ def compute_payload_block_hash(this):
303306 "payload" / If (this ._ ._ .decrypt ,
304307 UnpackedPayload (
305308 IfThenElse (
306- this ._ .header .value . dynamic_header .compression_flags .data .compression ,
309+ this ._ .header .dynamic_header .compression_flags .data .compression ,
307310 Decompressed (DecryptedPayload ),
308311 DecryptedPayload
309312 )
0 commit comments