summaryrefslogtreecommitdiff
path: root/attrib/att.c
diff options
context:
space:
mode:
authorLukasz Rymanowski <lukasz.rymanowski@tieto.com>2014-05-29 15:49:37 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2014-05-30 13:26:14 +0300
commit514e224641d79b33cc2cf082dff55b311dfe6721 (patch)
treeec0c7667c6d0ce9745dfecd0ad9a6adc88da535b /attrib/att.c
parent26304dcc445016e00fd497e8d5e8c68979759eab (diff)
downloadbluez-514e224641d79b33cc2cf082dff55b311dfe6721.tar.gz
android/gatt: Fix signed write command encoding
As per spec (BT spec 4.1 Vol[3], Part F, chapter 3.4.5.4) we need to take opcode, handle and parameters to generate signature. In order to support it signing is moved to att.c, place where pdu is encoded
Diffstat (limited to 'attrib/att.c')
-rw-r--r--attrib/att.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/attrib/att.c b/attrib/att.c
index e7d568241..268045824 100644
--- a/attrib/att.c
+++ b/attrib/att.c
@@ -561,9 +561,10 @@ uint16_t dec_write_cmd(const uint8_t *pdu, size_t len, uint16_t *handle,
return len;
}
-uint16_t enc_signed_write_cmd(uint16_t handle,
- const uint8_t *value, size_t vlen,
- const uint8_t signature[12],
+uint16_t enc_signed_write_cmd(uint16_t handle, const uint8_t *value,
+ size_t vlen, struct bt_crypto *crypto,
+ const uint8_t csrk[16],
+ uint32_t sign_cnt,
uint8_t *pdu, size_t len)
{
const uint16_t hdr_len = sizeof(pdu[0]) + sizeof(handle);
@@ -581,7 +582,9 @@ uint16_t enc_signed_write_cmd(uint16_t handle,
if (vlen > 0)
memcpy(&pdu[hdr_len], value, vlen);
- memcpy(&pdu[hdr_len + vlen], signature, ATT_SIGNATURE_LEN);
+ if (!bt_crypto_sign_att(crypto, csrk, pdu, hdr_len + vlen, sign_cnt,
+ &pdu[hdr_len + vlen]))
+ return 0;
return min_len + vlen;
}