@@ -32,34 +32,40 @@ pub struct VerifiedDigests {
3232 pub merkle_tree : MKTree < MKTreeStoreInMemory > ,
3333}
3434
35+ /// Represents the immutable files that were not verified during the digest verification process.
3536#[ 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)
3739 pub tampered_files : Vec < ImmutableFileName > ,
40+ /// List of immutable files that could not be verified (i.e., not present in the digests)
3841 pub non_verifiable_files : Vec < ImmutableFileName > ,
3942}
4043
4144impl VerifiedDigests {
42- pub ( crate ) fn list_tampered_immutable_files (
45+ pub ( crate ) fn list_immutable_files_not_verified (
4346 & self ,
44- computed_digests : & BTreeMap < ImmutableFileName , HexEncodedDigest > ,
45- ) -> MithrilResult < InvalidImmutableFiles > {
47+ computed_digests : & BTreeMap < ImmutableFile , HexEncodedDigest > ,
48+ ) -> ImmutableFilesNotVerified {
4649 let mut tampered_files = vec ! [ ] ;
4750 let mut non_verifiable_files = vec ! [ ] ;
4851
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) ;
5357 }
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+ _ => { }
5662 }
57- } ) ;
63+ }
5864
59- Ok ( InvalidImmutableFiles {
65+ ImmutableFilesNotVerified {
6066 tampered_files,
6167 non_verifiable_files,
62- } )
68+ }
6369 }
6470}
6571
@@ -97,7 +103,7 @@ impl InternalArtifactProver {
97103 Ok ( ( ) )
98104 }
99105
100- ///Download digests and verify its authenticity against the certificate.
106+ /// Download digests and verify its authenticity against the certificate.
101107 pub async fn download_and_verify_digests (
102108 & self ,
103109 certificate : & CertificateMessage ,
@@ -242,15 +248,23 @@ mod tests {
242248
243249 use super :: * ;
244250
245- mod list_tampered_immutable_files {
251+ mod list_immutable_files_not_verified {
246252
247253 use super :: * ;
248254
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+
249263 #[ test]
250264 fn should_return_empty_list_when_no_tampered_files ( ) {
251265 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 ( ) ) ,
254268 ] ) ;
255269
256270 let verified_digests = VerifiedDigests {
@@ -261,13 +275,12 @@ mod tests {
261275 merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
262276 } ;
263277
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) ;
267280
268281 assert_eq ! (
269282 invalid_files,
270- InvalidImmutableFiles {
283+ ImmutableFilesNotVerified {
271284 tampered_files: vec![ ] ,
272285 non_verifiable_files: vec![ ] ,
273286 }
@@ -277,8 +290,8 @@ mod tests {
277290 #[ test]
278291 fn should_return_list_with_tampered_files ( ) {
279292 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 ( ) ) ,
282295 ] ) ;
283296
284297 let verified_digests = VerifiedDigests {
@@ -289,13 +302,12 @@ mod tests {
289302 merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
290303 } ;
291304
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) ;
295307
296308 assert_eq ! (
297309 invalid_files,
298- InvalidImmutableFiles {
310+ ImmutableFilesNotVerified {
299311 tampered_files: vec![ "00002.chunk" . to_string( ) ] ,
300312 non_verifiable_files: vec![ ] ,
301313 }
@@ -305,22 +317,24 @@ mod tests {
305317 #[ test]
306318 fn should_return_list_with_non_verifiable ( ) {
307319 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+ ) ,
310325 ] ) ;
311326
312327 let verified_digests = VerifiedDigests {
313328 digests : BTreeMap :: from ( [ ( "00001.chunk" . to_string ( ) , "digest-1" . to_string ( ) ) ] ) ,
314329 merkle_tree : MKTree :: new ( & [ "whatever" ] ) . unwrap ( ) ,
315330 } ;
316331
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) ;
320334
321335 assert_eq ! (
322336 invalid_files,
323- InvalidImmutableFiles {
337+ ImmutableFilesNotVerified {
324338 tampered_files: vec![ ] ,
325339 non_verifiable_files: vec![ "00002.not.verifiable" . to_string( ) ] ,
326340 }
0 commit comments