@@ -39,7 +39,7 @@ pub struct AppCheckerSignature<
3939 credential_type : TbfFooterV2CredentialsType ,
4040 credentials : OptionalCell < TbfFooterV2Credentials > ,
4141 binary : OptionalCell < & ' static [ u8 ] > ,
42- active_key_index : Cell < ( usize , usize ) > ,
42+ active_key_index : Cell < ( usize , usize , usize ) > ,
4343}
4444
4545impl <
6767 credential_type,
6868 credentials : OptionalCell :: empty ( ) ,
6969 binary : OptionalCell :: empty ( ) ,
70- active_key_index : Cell :: new ( ( 0 , 0 ) ) ,
70+ active_key_index : Cell :: new ( ( 0 , 0 , 0 ) ) ,
7171 }
7272 }
7373
@@ -154,7 +154,7 @@ impl<
154154 fn get_key_count_done ( & self , count : usize ) {
155155 // We have the hash, we know how many keys, now we need to select the
156156 // first key to check. Activate the first key.
157- self . active_key_index . set ( ( 0 , count) ) ;
157+ self . active_key_index . set ( ( 0 , 0 , count) ) ;
158158 if let Err ( _e) = self . verifier . select_key ( 0 ) {
159159 self . client . map ( |c| {
160160 let binary = self . binary . take ( ) . unwrap ( ) ;
@@ -164,7 +164,7 @@ impl<
164164 }
165165 }
166166
167- fn select_key_done ( & self , _index : usize , error : Result < ( ) , ErrorCode > ) {
167+ fn select_key_done ( & self , _index : usize , metadata : usize , error : Result < ( ) , ErrorCode > ) {
168168 match error {
169169 Err ( e) => {
170170 // Could not switch to the requested key.
@@ -174,7 +174,14 @@ impl<
174174 c. check_done ( Err ( e) , cred, binary)
175175 } ) ;
176176 }
177- Ok ( ( ) ) => self . do_verify ( ) ,
177+ Ok ( ( ) ) => {
178+ // Save the metadata for the newly selected key.
179+ let ( current_key, _, number_keys) = self . active_key_index . get ( ) ;
180+ self . active_key_index
181+ . set ( ( current_key, metadata, number_keys) ) ;
182+
183+ self . do_verify ( )
184+ }
178185 }
179186 }
180187}
@@ -257,7 +264,7 @@ impl<
257264 self . hash . replace ( hash) ;
258265 self . signature . replace ( signature) ;
259266
260- let ( current_key, number_keys) = self . active_key_index . get ( ) ;
267+ let ( current_key, key_metadata , number_keys) = self . active_key_index . get ( ) ;
261268
262269 // Check if the verification was successful. If so, we can issue the
263270 // callback.
@@ -268,7 +275,7 @@ impl<
268275 c. check_done (
269276 Ok ( CheckResult :: Accept ( Some (
270277 kernel:: process_checker:: CheckResultAcceptMetadata {
271- metadata : current_key ,
278+ metadata : key_metadata ,
272279 } ,
273280 ) ) ) ,
274281 cred,
@@ -290,7 +297,7 @@ impl<
290297 } ) ;
291298 } else {
292299 // Activate the next key.
293- self . active_key_index . set ( ( next_key, number_keys) ) ;
300+ self . active_key_index . set ( ( next_key, 0 , number_keys) ) ;
294301 if self . verifier . select_key ( next_key) . is_err ( ) {
295302 self . client . map ( |c| {
296303 let binary = self . binary . take ( ) . unwrap ( ) ;
0 commit comments