|
@@ -191,16 +191,13 @@ int smp_generate_rpa(struct hci_dev *hdev, u8 irk[16], bdaddr_t *rpa)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
|
|
|
- u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat, bdaddr_t *ra,
|
|
|
- u8 res[16])
|
|
|
+static int smp_c1(struct crypto_blkcipher *tfm_aes, u8 k[16], u8 r[16],
|
|
|
+ u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia, u8 _rat,
|
|
|
+ bdaddr_t *ra, u8 res[16])
|
|
|
{
|
|
|
- struct hci_dev *hdev = smp->conn->hcon->hdev;
|
|
|
u8 p1[16], p2[16];
|
|
|
int err;
|
|
|
|
|
|
- BT_DBG("%s", hdev->name);
|
|
|
-
|
|
|
memset(p1, 0, 16);
|
|
|
|
|
|
/* p1 = pres || preq || _rat || _iat */
|
|
@@ -218,7 +215,7 @@ static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
|
|
|
u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
|
|
|
|
|
|
/* res = e(k, res) */
|
|
|
- err = smp_e(smp->tfm_aes, k, res);
|
|
|
+ err = smp_e(tfm_aes, k, res);
|
|
|
if (err) {
|
|
|
BT_ERR("Encrypt data error");
|
|
|
return err;
|
|
@@ -228,26 +225,23 @@ static int smp_c1(struct smp_chan *smp, u8 k[16], u8 r[16], u8 preq[7],
|
|
|
u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
|
|
|
|
|
|
/* res = e(k, res) */
|
|
|
- err = smp_e(smp->tfm_aes, k, res);
|
|
|
+ err = smp_e(tfm_aes, k, res);
|
|
|
if (err)
|
|
|
BT_ERR("Encrypt data error");
|
|
|
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int smp_s1(struct smp_chan *smp, u8 k[16], u8 r1[16], u8 r2[16],
|
|
|
- u8 _r[16])
|
|
|
+static int smp_s1(struct crypto_blkcipher *tfm_aes, u8 k[16], u8 r1[16],
|
|
|
+ u8 r2[16], u8 _r[16])
|
|
|
{
|
|
|
- struct hci_dev *hdev = smp->conn->hcon->hdev;
|
|
|
int err;
|
|
|
|
|
|
- BT_DBG("%s", hdev->name);
|
|
|
-
|
|
|
/* Just least significant octets from r1 and r2 are considered */
|
|
|
memcpy(_r, r2, 8);
|
|
|
memcpy(_r + 8, r1, 8);
|
|
|
|
|
|
- err = smp_e(smp->tfm_aes, k, _r);
|
|
|
+ err = smp_e(tfm_aes, k, _r);
|
|
|
if (err)
|
|
|
BT_ERR("Encrypt data error");
|
|
|
|
|
@@ -547,7 +541,7 @@ static u8 smp_confirm(struct smp_chan *smp)
|
|
|
|
|
|
BT_DBG("conn %p", conn);
|
|
|
|
|
|
- ret = smp_c1(smp, smp->tk, smp->prnd, smp->preq, smp->prsp,
|
|
|
+ ret = smp_c1(smp->tfm_aes, smp->tk, smp->prnd, smp->preq, smp->prsp,
|
|
|
conn->hcon->init_addr_type, &conn->hcon->init_addr,
|
|
|
conn->hcon->resp_addr_type, &conn->hcon->resp_addr,
|
|
|
cp.confirm_val);
|
|
@@ -578,7 +572,7 @@ static u8 smp_random(struct smp_chan *smp)
|
|
|
|
|
|
BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
|
|
|
|
|
|
- ret = smp_c1(smp, smp->tk, smp->rrnd, smp->preq, smp->prsp,
|
|
|
+ ret = smp_c1(smp->tfm_aes, smp->tk, smp->rrnd, smp->preq, smp->prsp,
|
|
|
hcon->init_addr_type, &hcon->init_addr,
|
|
|
hcon->resp_addr_type, &hcon->resp_addr, confirm);
|
|
|
if (ret)
|
|
@@ -594,7 +588,7 @@ static u8 smp_random(struct smp_chan *smp)
|
|
|
__le64 rand = 0;
|
|
|
__le16 ediv = 0;
|
|
|
|
|
|
- smp_s1(smp, smp->tk, smp->rrnd, smp->prnd, stk);
|
|
|
+ smp_s1(smp->tfm_aes, smp->tk, smp->rrnd, smp->prnd, stk);
|
|
|
|
|
|
memset(stk + smp->enc_key_size, 0,
|
|
|
SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
|
|
@@ -613,7 +607,7 @@ static u8 smp_random(struct smp_chan *smp)
|
|
|
smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
|
|
|
smp->prnd);
|
|
|
|
|
|
- smp_s1(smp, smp->tk, smp->prnd, smp->rrnd, stk);
|
|
|
+ smp_s1(smp->tfm_aes, smp->tk, smp->prnd, smp->rrnd, stk);
|
|
|
|
|
|
memset(stk + smp->enc_key_size, 0,
|
|
|
SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
|