1313
1414#define KEY_ID_FWENC_APPLICATION_GEN1 0x40022000
1515
16+ #define ENC_INFO_DEFAULT_INIT { \
17+ .enc_alg_id = suit_cose_aes256_gcm, \
18+ .IV = { \
19+ .value = iv_direct, \
20+ .len = sizeof(iv_direct), \
21+ }, \
22+ .aad = { \
23+ .value = aad, \
24+ .len = strlen(aad), \
25+ }, \
26+ .kw_alg_id = suit_cose_direct, \
27+ .kw_key.direct = {.key_id = {.value = cek_key_id_cbor, \
28+ .len = sizeof(cek_key_id_cbor)},} \
29+ }
30+
1631/**
1732 * Encryption without wrapping CEK achieved by running:
1833 *
@@ -46,6 +61,9 @@ static const suit_manifest_class_id_t sample_class_id = {
4661 0x36 }
4762};
4863
64+ static const uint8_t cek_key_id_cbor [] = {
65+ 0x1A , 0x40 , 0x02 , 0x20 , 0x00 ,
66+ };
4967
5068struct suit_decrypt_filter_tests_fixture {
5169 char dummy ; //nothing for now
@@ -59,7 +77,8 @@ static const char aad[] = {
5977 "sample aad"
6078};
6179
62- static struct stream_sink dec_sink = {0 };
80+ static struct stream_sink dec_sink ;
81+ static struct stream_sink ram_sink ;
6382
6483static void get_cbor_key_id (psa_key_id_t const key_id , uint8_t * const cbor_key_id , size_t const cbor_key_id_len )
6584{
@@ -75,25 +94,32 @@ static void get_cbor_key_id(psa_key_id_t const key_id, uint8_t * const cbor_key_
7594
7695static suit_plat_err_t write_ram (void * ctx , const uint8_t * buf , size_t size )
7796{
97+ // dummy write interface function for the decrypted data output sink
98+
7899 (void )ctx ;
79100 (void )buf ;
80101 (void )size ;
81102
82- // dummy write interface function for the decrypted data output sink
103+ return 0 ;
83104}
84105
85106static suit_plat_err_t used_storage (void * ctx , size_t * size )
86107{
108+ // dummy used_storage interface function for the decrypted data output sink
109+
87110 (void )ctx ;
88111 (void )size ;
89112
90- // dummy used_storage interface function for the decrypted data output sink
113+ return 0 ;
91114}
92115
93116static void * test_suite_setup (void )
94117{
95118 static struct suit_decrypt_filter_tests_fixture fixture = {0 };
96119
120+ ram_sink .write = write_ram ;
121+ ram_sink .used_storage = used_storage ;
122+
97123 return & fixture ;
98124}
99125
@@ -112,7 +138,6 @@ static void test_before(void *data)
112138
113139 if (dec_sink .release && dec_sink .ctx )
114140 {
115- printf ("realese me!\n" );
116141 dec_sink .release (dec_sink .ctx );
117142 memset (& dec_sink , 0 , sizeof (dec_sink ));
118143 }
@@ -122,37 +147,16 @@ ZTEST_SUITE(suit_decrypt_filter_tests, NULL, test_suite_setup, test_before, NULL
122147
123148ZTEST_F (suit_decrypt_filter_tests , test_key_id_validation_fail )
124149{
125- struct stream_sink ram_sink = {0 };
126- uint8_t cek_key_id_cbor [] = {
127- 0x1A , 0x00 , 0x00 , 0x00 , 0x00 ,
128- };
150+ struct suit_encryption_info enc_info = ENC_INFO_DEFAULT_INIT ;
129151
130- get_cbor_key_id (KEY_ID_FWENC_APPLICATION_GEN1 , cek_key_id_cbor , sizeof (cek_key_id_cbor ));
131-
132- struct suit_encryption_info enc_info = {
133- .enc_alg_id = suit_cose_aes256_gcm ,
134- .IV = {
135- .value = iv_direct ,
136- .len = sizeof (iv_direct ),
137- },
138- .aad = {
139- .value = aad ,
140- .len = strlen (aad ),
141- },
142- .kw_alg_id = suit_cose_direct ,
143- .kw_key .direct = {.key_id = {.value = cek_key_id_cbor ,
144- .len = sizeof (cek_key_id_cbor )},}
145- };
146-
147- ram_sink .write = write_ram ;
148152 suit_mci_fw_encryption_key_id_validate_fake .return_val = MCI_ERR_WRONGKEYID ;
149153 suit_plat_decode_key_id_fake .return_val = SUIT_PLAT_SUCCESS ;
150154
151155 suit_plat_err_t err = suit_decrypt_filter_get (& dec_sink , & enc_info , & sample_class_id , & ram_sink );
152156 zassert_equal (err , SUIT_PLAT_ERR_AUTHENTICATION ,
153157 "Incorrect error code when getting decrypt filter" );
154158
155- zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
159+ zassert_equal (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
156160 "Invalid number of calls to suit_mci_fw_encryption_key_id_validate" );
157161 zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .arg0_val , & sample_class_id ,
158162 "Invalid class ID passed to suit_mci_fw_encryption_key_id_validate" );
@@ -164,35 +168,14 @@ ZTEST_F(suit_decrypt_filter_tests, test_key_id_validation_fail)
164168 "Invalid number of calls to psa_aead_update_ad" );
165169 zassert_equal (psa_aead_abort_fake .call_count , 0 ,
166170 "Invalid number of calls to psa_aead_abort" );
167- zassert_equal (dec_sink .ctx , NULL ,
171+ zassert_equal_ptr (dec_sink .ctx , NULL ,
168172 "Invalid dec_sink.ctx value" );
169173}
170174
171175ZTEST_F (suit_decrypt_filter_tests , test_decryption_setup_fail )
172176{
173- struct stream_sink ram_sink = {0 };
174- uint8_t cek_key_id_cbor [] = {
175- 0x1A , 0x00 , 0x00 , 0x00 , 0x00 ,
176- };
177+ struct suit_encryption_info enc_info = ENC_INFO_DEFAULT_INIT ;
177178
178- get_cbor_key_id (KEY_ID_FWENC_APPLICATION_GEN1 , cek_key_id_cbor , sizeof (cek_key_id_cbor ));
179-
180- struct suit_encryption_info enc_info = {
181- .enc_alg_id = suit_cose_aes256_gcm ,
182- .IV = {
183- .value = iv_direct ,
184- .len = sizeof (iv_direct ),
185- },
186- .aad = {
187- .value = aad ,
188- .len = strlen (aad ),
189- },
190- .kw_alg_id = suit_cose_direct ,
191- .kw_key .direct = {.key_id = {.value = cek_key_id_cbor ,
192- .len = sizeof (cek_key_id_cbor )},}
193- };
194-
195- ram_sink .write = write_ram ;
196179 suit_mci_fw_encryption_key_id_validate_fake .return_val = SUIT_PLAT_SUCCESS ;
197180 suit_plat_decode_key_id_fake .return_val = SUIT_PLAT_SUCCESS ;
198181 psa_aead_decrypt_setup_fake .return_val = PSA_ERROR_GENERIC_ERROR ;
@@ -201,7 +184,7 @@ ZTEST_F(suit_decrypt_filter_tests, test_decryption_setup_fail)
201184 zassert_equal (err , SUIT_PLAT_ERR_CRASH ,
202185 "Incorrect error code when getting decrypt filter" );
203186
204- zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
187+ zassert_equal (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
205188 "Invalid number of calls to suit_mci_fw_encryption_key_id_validate" );
206189 zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .arg0_val , & sample_class_id ,
207190 "Invalid class ID passed to suit_mci_fw_encryption_key_id_validate" );
@@ -213,35 +196,14 @@ ZTEST_F(suit_decrypt_filter_tests, test_decryption_setup_fail)
213196 "Invalid number of calls to psa_aead_update_ad" );
214197 zassert_equal (psa_aead_abort_fake .call_count , 1 ,
215198 "Invalid number of calls to psa_aead_abort" );
216- zassert_equal (dec_sink .ctx , NULL ,
199+ zassert_equal_ptr (dec_sink .ctx , NULL ,
217200 "Invalid dec_sink.ctx value" );
218201}
219202
220203ZTEST_F (suit_decrypt_filter_tests , test_decryption_set_nonce_fail )
221204{
222- struct stream_sink ram_sink = {0 };
223- uint8_t cek_key_id_cbor [] = {
224- 0x1A , 0x00 , 0x00 , 0x00 , 0x00 ,
225- };
205+ struct suit_encryption_info enc_info = ENC_INFO_DEFAULT_INIT ;
226206
227- get_cbor_key_id (KEY_ID_FWENC_APPLICATION_GEN1 , cek_key_id_cbor , sizeof (cek_key_id_cbor ));
228-
229- struct suit_encryption_info enc_info = {
230- .enc_alg_id = suit_cose_aes256_gcm ,
231- .IV = {
232- .value = iv_direct ,
233- .len = sizeof (iv_direct ),
234- },
235- .aad = {
236- .value = aad ,
237- .len = strlen (aad ),
238- },
239- .kw_alg_id = suit_cose_direct ,
240- .kw_key .direct = {.key_id = {.value = cek_key_id_cbor ,
241- .len = sizeof (cek_key_id_cbor )},}
242- };
243-
244- ram_sink .write = write_ram ;
245207 suit_mci_fw_encryption_key_id_validate_fake .return_val = SUIT_PLAT_SUCCESS ;
246208 suit_plat_decode_key_id_fake .return_val = SUIT_PLAT_SUCCESS ;
247209 psa_aead_decrypt_setup_fake .return_val = PSA_SUCCESS ;
@@ -251,51 +213,30 @@ ZTEST_F(suit_decrypt_filter_tests, test_decryption_set_nonce_fail)
251213 zassert_equal (err , SUIT_PLAT_ERR_CRASH ,
252214 "Incorrect error code when getting decrypt filter" );
253215
254- zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
216+ zassert_equal (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
255217 "Invalid number of calls to suit_mci_fw_encryption_key_id_validate" );
256218 zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .arg0_val , & sample_class_id ,
257219 "Invalid class ID passed to suit_mci_fw_encryption_key_id_validate" );
258220 zassert_equal (psa_aead_decrypt_setup_fake .call_count , 1 ,
259221 "Invalid number of calls to psa_aead_decrypt_setup" );
260222 zassert_equal_ptr (psa_aead_set_nonce_fake .arg1_val , iv_direct ,
261223 "Invalid IV passed to psa_aead_set_nonce" );
262- zassert_equal_ptr (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
224+ zassert_equal (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
263225 "Invalid IV length passed to psa_aead_set_nonce" );
264226 zassert_equal (psa_aead_set_nonce_fake .call_count , 1 ,
265227 "Invalid number of calls to psa_aead_set_nonce" );
266228 zassert_equal (psa_aead_update_ad_fake .call_count , 0 ,
267229 "Invalid number of calls to psa_aead_update_ad" );
268230 zassert_equal (psa_aead_abort_fake .call_count , 1 ,
269231 "Invalid number of calls to psa_aead_abort" );
270- zassert_equal (dec_sink .ctx , NULL ,
232+ zassert_equal_ptr (dec_sink .ctx , NULL ,
271233 "Invalid dec_sink.ctx value" );
272234}
273235
274236ZTEST_F (suit_decrypt_filter_tests , test_decryption_update_ad_fail )
275237{
276- struct stream_sink ram_sink = {0 };
277- uint8_t cek_key_id_cbor [] = {
278- 0x1A , 0x00 , 0x00 , 0x00 , 0x00 ,
279- };
238+ struct suit_encryption_info enc_info = ENC_INFO_DEFAULT_INIT ;
280239
281- get_cbor_key_id (KEY_ID_FWENC_APPLICATION_GEN1 , cek_key_id_cbor , sizeof (cek_key_id_cbor ));
282-
283- struct suit_encryption_info enc_info = {
284- .enc_alg_id = suit_cose_aes256_gcm ,
285- .IV = {
286- .value = iv_direct ,
287- .len = sizeof (iv_direct ),
288- },
289- .aad = {
290- .value = aad ,
291- .len = strlen (aad ),
292- },
293- .kw_alg_id = suit_cose_direct ,
294- .kw_key .direct = {.key_id = {.value = cek_key_id_cbor ,
295- .len = sizeof (cek_key_id_cbor )},}
296- };
297-
298- ram_sink .write = write_ram ;
299240 suit_mci_fw_encryption_key_id_validate_fake .return_val = SUIT_PLAT_SUCCESS ;
300241 suit_plat_decode_key_id_fake .return_val = SUIT_PLAT_SUCCESS ;
301242 psa_aead_decrypt_setup_fake .return_val = PSA_SUCCESS ;
@@ -306,56 +247,34 @@ ZTEST_F(suit_decrypt_filter_tests, test_decryption_update_ad_fail)
306247 zassert_equal (err , SUIT_PLAT_ERR_CRASH ,
307248 "Incorrect error code when getting decrypt filter" );
308249
309- zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
250+ zassert_equal (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
310251 "Invalid number of calls to suit_mci_fw_encryption_key_id_validate" );
311252 zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .arg0_val , & sample_class_id ,
312253 "Invalid class ID passed to suit_mci_fw_encryption_key_id_validate" );
313254 zassert_equal (psa_aead_decrypt_setup_fake .call_count , 1 ,
314255 "Invalid number of calls to psa_aead_decrypt_setup" );
315256 zassert_equal_ptr (psa_aead_set_nonce_fake .arg1_val , iv_direct ,
316257 "Invalid IV passed to psa_aead_set_nonce" );
317- zassert_equal_ptr (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
258+ zassert_equal (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
318259 "Invalid IV length passed to psa_aead_set_nonce" );
319260 zassert_equal (psa_aead_set_nonce_fake .call_count , 1 ,
320261 "Invalid number of calls to psa_aead_set_nonce" );
321262 zassert_equal (psa_aead_update_ad_fake .call_count , 1 ,
322263 "Invalid number of calls to psa_aead_update_ad" );
323264 zassert_equal_ptr (psa_aead_update_ad_fake .arg1_val , aad ,
324265 "Invalid ad passed to psa_aead_update_ad" );
325- zassert_equal_ptr (psa_aead_update_ad_fake .arg2_val , strlen (aad ),
266+ zassert_equal (psa_aead_update_ad_fake .arg2_val , strlen (aad ),
326267 "Invalid ad length passed to psa_aead_update_ad" );
327268 zassert_equal (psa_aead_abort_fake .call_count , 1 ,
328269 "Invalid number of calls to psa_aead_abort" );
329- zassert_equal (dec_sink .ctx , NULL ,
270+ zassert_equal_ptr (dec_sink .ctx , NULL ,
330271 "Invalid dec_sink.ctx value" );
331272}
332273
333274ZTEST_F (suit_decrypt_filter_tests , test_filter_get_happy_path )
334275{
335- struct stream_sink ram_sink = {0 };
336- uint8_t cek_key_id_cbor [] = {
337- 0x1A , 0x00 , 0x00 , 0x00 , 0x00 ,
338- };
276+ struct suit_encryption_info enc_info = ENC_INFO_DEFAULT_INIT ;
339277
340- get_cbor_key_id (KEY_ID_FWENC_APPLICATION_GEN1 , cek_key_id_cbor , sizeof (cek_key_id_cbor ));
341-
342- struct suit_encryption_info enc_info = {
343- .enc_alg_id = suit_cose_aes256_gcm ,
344- .IV = {
345- .value = iv_direct ,
346- .len = sizeof (iv_direct ),
347- },
348- .aad = {
349- .value = aad ,
350- .len = strlen (aad ),
351- },
352- .kw_alg_id = suit_cose_direct ,
353- .kw_key .direct = {.key_id = {.value = cek_key_id_cbor ,
354- .len = sizeof (cek_key_id_cbor )},}
355- };
356-
357- ram_sink .write = write_ram ;
358- ram_sink .used_storage = used_storage ;
359278 suit_mci_fw_encryption_key_id_validate_fake .return_val = SUIT_PLAT_SUCCESS ;
360279 suit_plat_decode_key_id_fake .return_val = SUIT_PLAT_SUCCESS ;
361280 psa_aead_decrypt_setup_fake .return_val = PSA_SUCCESS ;
@@ -366,23 +285,23 @@ ZTEST_F(suit_decrypt_filter_tests, test_filter_get_happy_path)
366285 zassert_equal (err , SUIT_PLAT_SUCCESS ,
367286 "Incorrect error code when getting decrypt filter" );
368287
369- zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
288+ zassert_equal (suit_mci_fw_encryption_key_id_validate_fake .call_count , 1 ,
370289 "Invalid number of calls to suit_mci_fw_encryption_key_id_validate" );
371290 zassert_equal_ptr (suit_mci_fw_encryption_key_id_validate_fake .arg0_val , & sample_class_id ,
372291 "Invalid class ID passed to suit_mci_fw_encryption_key_id_validate" );
373292 zassert_equal (psa_aead_decrypt_setup_fake .call_count , 1 ,
374293 "Invalid number of calls to psa_aead_decrypt_setup" );
375294 zassert_equal_ptr (psa_aead_set_nonce_fake .arg1_val , iv_direct ,
376295 "Invalid IV passed to psa_aead_set_nonce" );
377- zassert_equal_ptr (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
296+ zassert_equal (psa_aead_set_nonce_fake .arg2_val , sizeof (iv_direct ),
378297 "Invalid IV length passed to psa_aead_set_nonce" );
379298 zassert_equal (psa_aead_set_nonce_fake .call_count , 1 ,
380299 "Invalid number of calls to psa_aead_set_nonce" );
381300 zassert_equal (psa_aead_update_ad_fake .call_count , 1 ,
382301 "Invalid number of calls to psa_aead_update_ad" );
383302 zassert_equal_ptr (psa_aead_update_ad_fake .arg1_val , aad ,
384303 "Invalid ad passed to psa_aead_update_ad" );
385- zassert_equal_ptr (psa_aead_update_ad_fake .arg2_val , strlen (aad ),
304+ zassert_equal (psa_aead_update_ad_fake .arg2_val , strlen (aad ),
386305 "Invalid ad length passed to psa_aead_update_ad" );
387306 zassert_equal (psa_aead_abort_fake .call_count , 0 ,
388307 "Invalid number of calls to psa_aead_abort" );
0 commit comments