提交 0a2b0f04 编写于 作者: J Johan Hedberg 提交者: Marcel Holtmann

Bluetooth: Add skeleton for SMP self-tests

This patch adds the initial skeleton and kernel config option for SMP
self-tests.
Signed-off-by: NJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
上级 0b6415b6
...@@ -84,4 +84,11 @@ config BT_SELFTEST_ECDH ...@@ -84,4 +84,11 @@ config BT_SELFTEST_ECDH
Run test cases for ECDH cryptographic functionality used by the Run test cases for ECDH cryptographic functionality used by the
Bluetooth Low Energy Secure Connections feature. Bluetooth Low Energy Secure Connections feature.
config BT_SELFTEST_SMP
bool "SMP test cases"
depends on BT_LE && BT_SELFTEST
help
Run test cases for SMP cryptographic functionality, including both
legacy SMP as well as the Secure Connections features.
source "drivers/bluetooth/Kconfig" source "drivers/bluetooth/Kconfig"
...@@ -22,8 +22,10 @@ ...@@ -22,8 +22,10 @@
*/ */
#include <net/bluetooth/bluetooth.h> #include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include "ecc.h" #include "ecc.h"
#include "smp.h"
#include "selftest.h" #include "selftest.h"
#if IS_ENABLED(CONFIG_BT_SELFTEST_ECDH) #if IS_ENABLED(CONFIG_BT_SELFTEST_ECDH)
...@@ -195,7 +197,12 @@ static int __init run_selftest(void) ...@@ -195,7 +197,12 @@ static int __init run_selftest(void)
BT_INFO("Starting self testing"); BT_INFO("Starting self testing");
err = test_ecdh(); err = test_ecdh();
if (err)
goto done;
err = bt_selftest_smp();
done:
BT_INFO("Finished self testing"); BT_INFO("Finished self testing");
return err; return err;
......
...@@ -3022,3 +3022,42 @@ void smp_unregister(struct hci_dev *hdev) ...@@ -3022,3 +3022,42 @@ void smp_unregister(struct hci_dev *hdev)
smp_del_chan(chan); smp_del_chan(chan);
} }
} }
#if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
static int __init run_selftests(struct crypto_blkcipher *tfm_aes,
struct crypto_hash *tfm_cmac)
{
BT_INFO("SMP test passed");
return 0;
}
int __init bt_selftest_smp(void)
{
struct crypto_blkcipher *tfm_aes;
struct crypto_hash *tfm_cmac;
int err;
tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
if (IS_ERR(tfm_aes)) {
BT_ERR("Unable to create ECB crypto context");
return PTR_ERR(tfm_aes);
}
tfm_cmac = crypto_alloc_hash("cmac(aes)", 0, CRYPTO_ALG_ASYNC);
if (IS_ERR(tfm_cmac)) {
BT_ERR("Unable to create CMAC crypto context");
crypto_free_blkcipher(tfm_aes);
return PTR_ERR(tfm_cmac);
}
err = run_selftests(tfm_aes, tfm_cmac);
crypto_free_hash(tfm_cmac);
crypto_free_blkcipher(tfm_aes);
return err;
}
#endif
...@@ -192,4 +192,17 @@ int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa); ...@@ -192,4 +192,17 @@ int smp_generate_rpa(struct hci_dev *hdev, const u8 irk[16], bdaddr_t *rpa);
int smp_register(struct hci_dev *hdev); int smp_register(struct hci_dev *hdev);
void smp_unregister(struct hci_dev *hdev); void smp_unregister(struct hci_dev *hdev);
#if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
int bt_selftest_smp(void);
#else
static inline int bt_selftest_smp(void)
{
return 0;
}
#endif
#endif /* __SMP_H */ #endif /* __SMP_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册