@@ -32,34 +32,40 @@ pub struct VerifiedDigests {
32
32
pub merkle_tree : MKTree < MKTreeStoreInMemory > ,
33
33
}
34
34
35
+ /// Represents the immutable files that were not verified during the digest verification process.
35
36
#[ derive( PartialEq , Debug ) ]
36
- pub ( crate ) struct InvalidImmutableFiles {
37
+ pub ( crate ) struct ImmutableFilesNotVerified {
38
+ /// List of immutable files that were tampered (i.e. their digest does not match the verified digest)
37
39
pub tampered_files : Vec < ImmutableFileName > ,
40
+ /// List of immutable files that could not be verified (i.e., not present in the digests)
38
41
pub non_verifiable_files : Vec < ImmutableFileName > ,
39
42
}
40
43
41
44
impl VerifiedDigests {
42
- pub ( crate ) fn list_tampered_immutable_files (
45
+ pub ( crate ) fn list_immutable_files_not_verified (
43
46
& self ,
44
- computed_digests : & BTreeMap < ImmutableFileName , HexEncodedDigest > ,
45
- ) -> MithrilResult < InvalidImmutableFiles > {
47
+ computed_digests : & BTreeMap < ImmutableFile , HexEncodedDigest > ,
48
+ ) -> ImmutableFilesNotVerified {
46
49
let mut tampered_files = vec ! [ ] ;
47
50
let mut non_verifiable_files = vec ! [ ] ;
48
51
49
- computed_digests. iter ( ) . for_each ( |( immutable_file_name, digest) | {
50
- if let Some ( verified_digest) = self . digests . get ( immutable_file_name) {
51
- if verified_digest != digest {
52
- tampered_files. push ( immutable_file_name. clone ( ) ) ;
52
+ for ( immutable_file, digest) in computed_digests. iter ( ) {
53
+ let immutable_file_name_to_verify = immutable_file. filename . clone ( ) ;
54
+ match self . digests . get ( & immutable_file_name_to_verify) {
55
+ Some ( verified_digest) if verified_digest != digest => {
56
+ tampered_files. push ( immutable_file_name_to_verify) ;
53
57
}
54
- } else {
55
- non_verifiable_files. push ( immutable_file_name. clone ( ) ) ;
58
+ None => {
59
+ non_verifiable_files. push ( immutable_file_name_to_verify) ;
60
+ }
61
+ _ => { }
56
62
}
57
- } ) ;
63
+ }
58
64
59
- Ok ( InvalidImmutableFiles {
65
+ ImmutableFilesNotVerified {
60
66
tampered_files,
61
67
non_verifiable_files,
62
- } )
68
+ }
63
69
}
64
70
}
65
71
@@ -97,7 +103,7 @@ impl InternalArtifactProver {
97
103
Ok ( ( ) )
98
104
}
99
105
100
- ///Download digests and verify its authenticity against the certificate.
106
+ /// Download digests and verify its authenticity against the certificate.
101
107
pub async fn download_and_verify_digests (
102
108
& self ,
103
109
certificate : & CertificateMessage ,
@@ -242,15 +248,23 @@ mod tests {
242
248
243
249
use super :: * ;
244
250
245
- mod list_tampered_immutable_files {
251
+ mod list_immutable_files_not_verified {
246
252
247
253
use super :: * ;
248
254
255
+ fn fake_immutable ( filename : & str ) -> ImmutableFile {
256
+ ImmutableFile {
257
+ path : PathBuf :: from ( "whatever" ) ,
258
+ number : 1 ,
259
+ filename : filename. to_string ( ) ,
260
+ }
261
+ }
262
+
249
263
#[ test]
250
264
fn should_return_empty_list_when_no_tampered_files ( ) {
251
265
let digests_to_verify = BTreeMap :: from ( [
252
- ( "00001.chunk" . to_string ( ) , "digest-1" . to_string ( ) ) ,
253
- ( "00002.chunk" . to_string ( ) , "digest-2" . to_string ( ) ) ,
266
+ ( fake_immutable ( "00001.chunk" ) , "digest-1" . to_string ( ) ) ,
267
+ ( fake_immutable ( "00002.chunk" ) , "digest-2" . to_string ( ) ) ,
254
268
] ) ;
255
269
256
270
let verified_digests = VerifiedDigests {
@@ -261,13 +275,12 @@ mod tests {
261
275
merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
262
276
} ;
263
277
264
- let invalid_files = verified_digests
265
- . list_tampered_immutable_files ( & digests_to_verify)
266
- . unwrap ( ) ;
278
+ let invalid_files =
279
+ verified_digests. list_immutable_files_not_verified ( & digests_to_verify) ;
267
280
268
281
assert_eq ! (
269
282
invalid_files,
270
- InvalidImmutableFiles {
283
+ ImmutableFilesNotVerified {
271
284
tampered_files: vec![ ] ,
272
285
non_verifiable_files: vec![ ] ,
273
286
}
@@ -277,8 +290,8 @@ mod tests {
277
290
#[ test]
278
291
fn should_return_list_with_tampered_files ( ) {
279
292
let digests_to_verify = BTreeMap :: from ( [
280
- ( "00001.chunk" . to_string ( ) , "digest-1" . to_string ( ) ) ,
281
- ( "00002.chunk" . to_string ( ) , "digest-2" . to_string ( ) ) ,
293
+ ( fake_immutable ( "00001.chunk" ) , "digest-1" . to_string ( ) ) ,
294
+ ( fake_immutable ( "00002.chunk" ) , "digest-2" . to_string ( ) ) ,
282
295
] ) ;
283
296
284
297
let verified_digests = VerifiedDigests {
@@ -289,13 +302,12 @@ mod tests {
289
302
merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
290
303
} ;
291
304
292
- let invalid_files = verified_digests
293
- . list_tampered_immutable_files ( & digests_to_verify)
294
- . unwrap ( ) ;
305
+ let invalid_files =
306
+ verified_digests. list_immutable_files_not_verified ( & digests_to_verify) ;
295
307
296
308
assert_eq ! (
297
309
invalid_files,
298
- InvalidImmutableFiles {
310
+ ImmutableFilesNotVerified {
299
311
tampered_files: vec![ "00002.chunk" . to_string( ) ] ,
300
312
non_verifiable_files: vec![ ] ,
301
313
}
@@ -305,22 +317,24 @@ mod tests {
305
317
#[ test]
306
318
fn should_return_list_with_non_verifiable ( ) {
307
319
let digests_to_verify = BTreeMap :: from ( [
308
- ( "00001.chunk" . to_string ( ) , "digest-1" . to_string ( ) ) ,
309
- ( "00002.not.verifiable" . to_string ( ) , "digest-2" . to_string ( ) ) ,
320
+ ( fake_immutable ( "00001.chunk" ) , "digest-1" . to_string ( ) ) ,
321
+ (
322
+ fake_immutable ( "00002.not.verifiable" ) ,
323
+ "digest-2" . to_string ( ) ,
324
+ ) ,
310
325
] ) ;
311
326
312
327
let verified_digests = VerifiedDigests {
313
328
digests : BTreeMap :: from ( [ ( "00001.chunk" . to_string ( ) , "digest-1" . to_string ( ) ) ] ) ,
314
329
merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
315
330
} ;
316
331
317
- let invalid_files = verified_digests
318
- . list_tampered_immutable_files ( & digests_to_verify)
319
- . unwrap ( ) ;
332
+ let invalid_files =
333
+ verified_digests. list_immutable_files_not_verified ( & digests_to_verify) ;
320
334
321
335
assert_eq ! (
322
336
invalid_files,
323
- InvalidImmutableFiles {
337
+ ImmutableFilesNotVerified {
324
338
tampered_files: vec![ ] ,
325
339
non_verifiable_files: vec![ "00002.not.verifiable" . to_string( ) ] ,
326
340
}
0 commit comments