Skip to content

Commit b0714dc

Browse files
committed
[pentest] Add markers in pentest framework
In order to reliably find the calls of certain functions for GDB testing, we add markers around them which can be found in the dis file. These markers do influence the pentest code as they are function calls. Signed-off-by: Siemen Dhooghe <[email protected]>
1 parent fc2d73b commit b0714dc

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

sw/device/tests/penetrationtests/firmware/fi/cryptolib_fi_asym_impl.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626

2727
#define MODULE_ID MAKE_MODULE_ID('f', 'a', 'i')
2828

29+
// Markers in the dis file to be able to trace certain functions
30+
#define PENTEST_MARKER_LABEL(name) asm volatile(#name ":" ::: "memory")
31+
2932
// OAEP label for testing.
3033
static const unsigned char kTestLabel[] = "Test label.";
3134
static const size_t kTestLabelLen = sizeof(kTestLabel) - 1;
@@ -403,12 +406,14 @@ status_t cryptolib_fi_rsa_sign_impl(
403406

404407
// Trigger window.
405408
if (uj_input.trigger & kPentestTrigger3) {
409+
PENTEST_MARKER_LABEL(PENTEST_MARKER_RSA_SIGN_START);
406410
pentest_set_trigger_high();
407411
}
408412
TRY(otcrypto_rsa_sign(&private_key, msg_digest, padding_mode, sig_buf));
409413
// Trigger window.
410414
if (uj_input.trigger & kPentestTrigger3) {
411415
pentest_set_trigger_low();
416+
PENTEST_MARKER_LABEL(PENTEST_MARKER_RSA_SIGN_END);
412417
}
413418

414419
// Return data back to host.
@@ -561,13 +566,16 @@ status_t cryptolib_fi_rsa_verify_impl(
561566
hardened_bool_t verification_result;
562567
// Trigger window.
563568
if (uj_input.trigger & kPentestTrigger3) {
569+
PENTEST_MARKER_LABEL(PENTEST_MARKER_RSA_VERIFY_START);
564570
pentest_set_trigger_high();
565571
}
566-
TRY(otcrypto_rsa_verify(&public_key, msg_digest, padding_mode, sig,
567-
&verification_result));
572+
status_t status = otcrypto_rsa_verify(&public_key, msg_digest, padding_mode,
573+
sig, &verification_result);
568574
if (uj_input.trigger & kPentestTrigger3) {
569575
pentest_set_trigger_low();
576+
PENTEST_MARKER_LABEL(PENTEST_MARKER_RSA_VERIFY_END);
570577
}
578+
TRY(status);
571579

572580
// Return data back to host.
573581
uj_output->result = true;
@@ -633,9 +641,11 @@ status_t cryptolib_fi_p256_ecdh_impl(
633641
.keyblob = shared_secretblob,
634642
};
635643

644+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_ECDH_START);
636645
pentest_set_trigger_high();
637646
TRY(otcrypto_ecdh_p256(&private_key, &public_key, &shared_secret));
638647
pentest_set_trigger_low();
648+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_ECDH_END);
639649

640650
uint32_t share0[kPentestP256Words];
641651
uint32_t share1[kPentestP256Words];
@@ -726,13 +736,15 @@ status_t cryptolib_fi_p256_sign_impl(
726736

727737
// Trigger window 1.
728738
if (uj_input.trigger == 1) {
739+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_SIGN_START);
729740
pentest_set_trigger_high();
730741
}
731742
// Sign the message.
732743
TRY(otcrypto_ecdsa_p256_sign_verify(&private_key, &public_key, message_digest,
733744
signature_mut));
734745
if (uj_input.trigger == 1) {
735746
pentest_set_trigger_low();
747+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_SIGN_END);
736748
}
737749

738750
// Return data back to host.
@@ -790,10 +802,12 @@ status_t cryptolib_fi_p256_verify_impl(
790802

791803
hardened_bool_t verification_result = kHardenedBoolFalse;
792804

805+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_VERIFY_START);
793806
pentest_set_trigger_high();
794807
TRY(otcrypto_ecdsa_p256_verify(&public_key, message_digest, signature,
795808
&verification_result));
796809
pentest_set_trigger_low();
810+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P256_VERIFY_END);
797811

798812
// Return data back to host.
799813
uj_output->result = true;
@@ -859,9 +873,11 @@ status_t cryptolib_fi_p384_ecdh_impl(
859873
.keyblob = shared_secretblob,
860874
};
861875

876+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_ECDH_START);
862877
pentest_set_trigger_high();
863878
TRY(otcrypto_ecdh_p384(&private_key, &public_key, &shared_secret));
864879
pentest_set_trigger_low();
880+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_ECDH_END);
865881

866882
uint32_t share0[kPentestP384Words];
867883
uint32_t share1[kPentestP384Words];
@@ -952,12 +968,14 @@ status_t cryptolib_fi_p384_sign_impl(
952968

953969
// Trigger window 1.
954970
if (uj_input.trigger == 1) {
971+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_SIGN_START);
955972
pentest_set_trigger_high();
956973
}
957974
TRY(otcrypto_ecdsa_p384_sign_verify(&private_key, &public_key, message_digest,
958975
signature_mut));
959976
if (uj_input.trigger == 1) {
960977
pentest_set_trigger_low();
978+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_SIGN_END);
961979
}
962980

963981
// Return data back to host.
@@ -1015,10 +1033,12 @@ status_t cryptolib_fi_p384_verify_impl(
10151033

10161034
hardened_bool_t verification_result = kHardenedBoolFalse;
10171035

1036+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_VERIFY_START);
10181037
pentest_set_trigger_high();
10191038
TRY(otcrypto_ecdsa_p384_verify(&public_key, message_digest, signature,
10201039
&verification_result));
10211040
pentest_set_trigger_low();
1041+
PENTEST_MARKER_LABEL(PENTEST_MARKER_P384_VERIFY_END);
10221042

10231043
// Return data back to host.
10241044
uj_output->result = true;

sw/device/tests/penetrationtests/firmware/fi/cryptolib_fi_sym_impl.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222

2323
#define MODULE_ID MAKE_MODULE_ID('c', 'f', 's')
2424

25+
// Markers in the dis file to be able to trace certain functions
26+
#define PENTEST_MARKER_LABEL(name) asm volatile(#name ":" ::: "memory")
27+
2528
status_t cryptolib_fi_aes_impl(cryptolib_fi_sym_aes_in_t uj_input,
2629
cryptolib_fi_sym_aes_out_t *uj_output) {
2730
// Set the AES mode.
@@ -134,9 +137,11 @@ status_t cryptolib_fi_aes_impl(cryptolib_fi_sym_aes_in_t uj_input,
134137
};
135138

136139
// Trigger window.
140+
PENTEST_MARKER_LABEL(PENTEST_MARKER_AES_START);
137141
pentest_set_trigger_high();
138142
TRY(otcrypto_aes(&key, iv, mode, op, input, padding, output));
139143
pentest_set_trigger_low();
144+
PENTEST_MARKER_LABEL(PENTEST_MARKER_AES_END);
140145

141146
// Return data back to host.
142147
uj_output->data_len = padded_len_bytes;
@@ -168,11 +173,13 @@ status_t cryptolib_fi_drbg_generate_impl(
168173

169174
// Trigger window 0.
170175
if (uj_input.trigger & kPentestTrigger2) {
176+
PENTEST_MARKER_LABEL(PENTEST_MARKER_DRBG_GENERATE_START);
171177
pentest_set_trigger_high();
172178
}
173179
TRY(otcrypto_drbg_generate(nonce, output));
174180
if (uj_input.trigger & kPentestTrigger2) {
175181
pentest_set_trigger_low();
182+
PENTEST_MARKER_LABEL(PENTEST_MARKER_DRBG_GENERATE_END);
176183
}
177184

178185
// Return data back to host.
@@ -197,11 +204,13 @@ status_t cryptolib_fi_drbg_reseed_impl(
197204

198205
// Trigger window 0.
199206
if (uj_input.trigger & kPentestTrigger1) {
207+
PENTEST_MARKER_LABEL(PENTEST_MARKER_DRBG_RESEED_START);
200208
pentest_set_trigger_high();
201209
}
202210
TRY(otcrypto_drbg_instantiate(entropy));
203211
if (uj_input.trigger & kPentestTrigger1) {
204212
pentest_set_trigger_low();
213+
PENTEST_MARKER_LABEL(PENTEST_MARKER_DRBG_RESEED_END);
205214
}
206215

207216
// Return data back to host.
@@ -298,10 +307,12 @@ status_t cryptolib_fi_gcm_impl(cryptolib_fi_sym_gcm_in_t uj_input,
298307
}
299308

300309
// Trigger window.
310+
PENTEST_MARKER_LABEL(PENTEST_MARKER_GCM_ENCRYPT_START);
301311
pentest_set_trigger_high();
302312
TRY(otcrypto_aes_gcm_encrypt(&key, plaintext, iv, aad, tag_len,
303313
actual_ciphertext, actual_tag));
304314
pentest_set_trigger_low();
315+
PENTEST_MARKER_LABEL(PENTEST_MARKER_GCM_ENCRYPT_END);
305316

306317
// Return data back to host.
307318
uj_output->cfg = 0;
@@ -385,9 +396,11 @@ status_t cryptolib_fi_hmac_impl(cryptolib_fi_sym_hmac_in_t uj_input,
385396
};
386397

387398
// Trigger window.
399+
PENTEST_MARKER_LABEL(PENTEST_MARKER_HMAC_START);
388400
pentest_set_trigger_high();
389401
TRY(otcrypto_hmac(&key, input_message, tag));
390402
pentest_set_trigger_low();
403+
PENTEST_MARKER_LABEL(PENTEST_MARKER_HMAC_END);
391404

392405
// Return data back to host.
393406
uj_output->data_len = tag_bytes;

0 commit comments

Comments
 (0)