diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-12-21 15:56:16 -0800 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-12-22 13:10:55 -0800 |
commit | 051ccb1e878be5451603c8ea2a3820e759281724 (patch) | |
tree | df6ed1235105899491eb14f67d2f705c446255bc /unit | |
parent | a38b6ca525b392c7ad7e04368abd48ddc64b2142 (diff) | |
download | bluez-051ccb1e878be5451603c8ea2a3820e759281724.tar.gz |
test-crypto: Add /crypto/sef test
This adds test /crypto/sef which validas the implementation of
bt_crypto_sef using the sample data from CSIS[1] spec:
A.2. sef SIRK Encryption Function
> unit/test-crypto -s "/crypto/sef"
SIRK:
cd cc 72 dd 86 8c cd ce 22 fd a1 21 09 7d 7d 45 ..r....."..!.}}E
K:
d9 ce e5 3c 22 c6 1e 06 6f 69 48 d4 9b 1b 6e 67 ...<"...oiH...ng
Expected:
46 d3 5f f2 d5 62 25 7e a0 24 35 e1 35 38 0a 17 F._..b%~.$5.58..
Result:
46 d3 5f f2 d5 62 25 7e a0 24 35 e1 35 38 0a 17 F._..b%~.$5.58..
[1]https://www.bluetooth.com/specifications/csis-1-0-1/
Diffstat (limited to 'unit')
-rw-r--r-- | unit/test-crypto.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/unit/test-crypto.c b/unit/test-crypto.c index b5404d542..8fd7bec8e 100644 --- a/unit/test-crypto.c +++ b/unit/test-crypto.c @@ -311,6 +311,44 @@ static void test_verify_sign(gconstpointer data) tester_test_passed(); } +static void test_sef(const void *data) +{ + const uint8_t sirk[16] = { + 0xcd, 0xcc, 0x72, 0xdd, 0x86, 0x8c, 0xcd, 0xce, + 0x22, 0xfd, 0xa1, 0x21, 0x09, 0x7d, 0x7d, 0x45 }; + const uint8_t k[16] = { + 0xd9, 0xce, 0xe5, 0x3c, 0x22, 0xc6, 0x1e, 0x06, + 0x6f, 0x69, 0x48, 0xd4, 0x9b, 0x1b, 0x6e, 0x67 }; + const uint8_t exp[16] = { + 0x46, 0xd3, 0x5f, 0xf2, 0xd5, 0x62, 0x25, 0x7e, + 0xa0, 0x24, 0x35, 0xe1, 0x35, 0x38, 0x0a, 0x17 }; + uint8_t res[16]; + + tester_debug("SIRK:"); + util_hexdump(' ', sirk, 16, print_debug, NULL); + + tester_debug("K:"); + util_hexdump(' ', k, 16, print_debug, NULL); + + if (!bt_crypto_sef(crypto, k, sirk, res)) { + tester_test_failed(); + return; + } + + tester_debug("Expected:"); + util_hexdump(' ', exp, 16, print_debug, NULL); + + tester_debug("Result:"); + util_hexdump(' ', res, 16, print_debug, NULL); + + if (memcmp(res, exp, 16)) { + tester_test_failed(); + return; + } + + tester_test_passed(); +} + static void test_sih(const void *data) { const uint8_t k[16] = { @@ -371,6 +409,7 @@ int main(int argc, char *argv[]) NULL, test_verify_sign, NULL); tester_add("/crypto/verify_sign_too_short", &verify_sign_too_short_data, NULL, test_verify_sign, NULL); + tester_add("/crypto/sef", NULL, NULL, test_sef, NULL); tester_add("/crypto/sih", NULL, NULL, test_sih, NULL); exit_status = tester_run(); |