Error should be responded if no previous attribute of the same type was
read (added to response buffer). In case if previous attributes were
added to buffer no error should be responded and read initiator should
perform read by type with increased start handle.
Change-Id: I31c4469e172a496890f049d9304a03673506c5f3
Signed-off-by: Grzegorz Kolodziejczyk <grzegorz.kolodziejczyk@tieto.com>
If local IO capabilities allow MITM and LE SC is enabled then
FIPS level is reachable.
Change-Id: Icfb32fbffa0355117b6723d641a6d3db38feb87d
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If P256 key is present then authenticated link has FIPS security level.
Change-Id: Iaf50b83ac6973bbd40e5ef57bf1e6375eedf6b12
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This runs smp_g2 function with test vectors from Core
Specification 4.2.
Change-Id: I96ef51e9133182a38c3fd007764bdd633d8f9e3f
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This patch allows user to confirm or reject passkey. If passkey was
confirmed we proceed with pairing (depending on SMP state). If
passkey isn't confirmed pairing is cancelled.
Change-Id: I7a286b51957bee1064342625f2bc3f04124a82de
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This add support for generating Passkey for confirmation.
Change-Id: I3b66675a5410292ebe05c66d77e7b4c7a95a2896
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This allows to request user to confirm displayed passkey with remote
device. This allows to have authenticated LE SC link resulting in FIPS
security level.
Change-Id: I5b6c1666e3d1687cc04c5d66529372db090dd000
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
The attribute protocol Read By Type is used to perform
Read Using Characteristic UUID procedure. This procedure
is used to read characteristic value if Characteristic Value UUID
is known, while handle is not known.
Errors received from application like Insufficient Encryption
Key Size must be send as a response to Read By Type Request
> ACL Data RX: Handle 64 flags 0x02 dlen 11 [hci0] 94382.244804
ATT: Read By Type Request (0x08) len 6
Handle range: 0x0003-0x0003
Attribute type: Unknown (0xaa51)
< ACL Data TX: Handle 64 flags 0x00 dlen 9 [hci0] 94382.255987
ATT: Error Response (0x01) len 4
Read By Type Request (0x08)
Handle: 0x0003
Error: Insufficient Encryption Key Size (0x0c)
With this patch we can pass TC_GAR_SR_BI_11_C test.
Change-Id: Id47109f673cb725b2edd9cc0e154cc055fc8d0ef
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
In smp_f6 local and remote random was in wrong order in
bt_smp_dhkey_ready.
Change-Id: Iba6ee6595c1d8e873d72571d1e4fb3d0c0b9717e
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This patch fixes checking permissions and sending response to read by
type request. If multiple (or if one is found) attributess are found
within handle range and first of them don't have read permission,
error should be send. If any of attribute don't have read permission
but isn't first in set, the attributes before this attribute should
be returned.
Change-Id: I532a8701521505c02845de5db62c94f7edc9d567
Signed-off-by: Grzegorz Kolodziejczyk <grzegorz.kolodziejczyk@tieto.com>
SMP timer should be restarted every time SMP PDU is send. To avoid
such issues in new code provide smp_send() helper that will always
restart timer. Only exceptions are Security Request and Pairing Failed
commands as those don't restart timer.
Change-Id: I96a7cd72b2249d25d1c3f9e8b3fbf1e74dc76222
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
There is no point in going with pairing any further regardless of when
bt_smp_dhkey_ready was called.
Change-Id: I0e0c71e91ecf36f74b429d9455a2f21161939069
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
smp_reset is always called after Pairing Failed was sent so just
move it inside this function. This makes sure that new code won't
be missing reset after error. Also rename send_err_rsp to smp_error
as it now accept smp context instead of conn.
Change-Id: I25cdca066817f79f6c2f83d9f9bd0876b7909085
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If Pairing Failed was send we should reset SMP context to be able to
restart pairing if needed.
Change-Id: Iea524ccf841ceba8a1194d94ead9c7256331ad14
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This flag means that DHKey check should be generated and send on
next event.
Change-Id: I0dc9aa3713ad17ceabc4f5f890afa32f538f714f
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
Don't generate error response for invalid offset or invalid
attribute value during queued write requests.
According to BT SIG specification such response needs to be done when
execute write request is performed.
Change-Id: If480228dc98f5713891b45b3f5ca31990cf5c633
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
request_tk is called only for legacy pairing. Due to this pairing
method must be selected in pairing request or response handler to
cover LE SC case. But it must be selected only after it is known if
pairing is legacy or LE SC.
Change-Id: I0418a679b73c199acff12795157389d5969adb05
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If both sides have KeyboardDisplay capabilities Passkey Confirmation
should be used.
Change-Id: I69d0909831cab0340ecbb418f035414b18e8c0c0
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
Both of the br_init() functions should be checking for BR/EDR support
before issuing the commands. To not have to code the check twice, do
it in hci_init() before calling br_init().
Change-Id: I2de3aa3c2e85322257b27b1c716b37c326d5bae7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Uses dedicated initializing routine to start getting controller's
internal buffer capabilities. At first initialize ACL packet length
(MTU) with max value controller can accept.
Change-Id: If90dd16ebb5c0751fb65555b06c9fb18ed394a54
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Defines instance for controller specific information.
Prepare room for max ACL packet length controller can get.
Change-Id: I5fb5f83b3f7383337b6b86683dff05b675815b98
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Moves initialization of bt_dev.le.pkts_sem object to handlers reading
controller buffer capabilities. Therefore no need to keep anymore
bt_dev.le.pkts member.
Change-Id: I126cb1d9ad9feed9c11f35b26c44055075734685
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This removes extra zero buffer and reuses l as initial zero buffer.
This reduces stack usage from:
rx stack (real size 1024): unused 96 usage 896 / 992 (90 %)
to
rx stack (real size 1024): unused 112 usage 880 / 992 (88 %)
when using LE SC.
Change-Id: I961e4270f7b86b6d2615e23d6ace9cc81026eaf7
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
Follow unix convention of foo(dst, src, len). This makes code
easier to read.
Change-Id: I1f8a2638e87d060dcf84f5a7074e0b734d4ea4f0
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If P256 key is present use it to start encryption instead of starting
new pairing.
Change-Id: I7c8541359a785e6e22e63cdab5a92a402db83db3
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
If LE SC P256 key is available use it to encrypt link.
Change-Id: I21790d6641748f34aba4058beb424bd56793713c
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This run smp_f6 function with test vectors from Core Specification 4.2.
Change-Id: I6a29be3c8f90ca787d90c957cb6667853e823002
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This implements LE SC f6 function use to calculate DH Key checks
values. Calculated value is compared to value received from remote
party and if match encryption is enabled.
Change-Id: Iee66cbd19c0aa6d83edc6482dfb87943e4e45069
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
When remote Public Key is received issue HCI command to calculate
DH Key.
Change-Id: I46ce03d6a8aafebaad2656ccf66cbb636ceb748a
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This run smp_f5 function with test vectors from Core Specification 4.2.
Change-Id: I1ef0ddf54c058bd7a9b7cc635fd785267a1bafd8
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This implementes f5 function and use it to generate LTK and
MacKey.
Change-Id: I86d9a958d5009796ea04f2447e1bad9eb63981ce
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This run smp_f4 function with test vectors from Core Specification 4.2.
Change-Id: If083d8c9c81b98af97ed900db2004482b3e886e3
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This adds initial pieces for LE SC support including pairing method
selection, authentication field updates, confirmation generation and
public key sending.
Change-Id: I91dcd0058c8f45ea19df89c2336142d927b08235
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This is needed for LE Secure Connection when tinycrypt is not used.
Change-Id: Ia0419da882d48d9d298b6674803b2e4987e6aa0c
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
We don't use "Bluetooth Smart" anywhere, so we shouldn't use
"Bluetooth Classic" either. Instead, stick to the more technical "LE"
and "BR/EDR" terms.
Change-Id: Iadfc1c090205e0f417081d63ebe43172c5708a18
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Indicate to the user that the debug support is no longer LE-specific
but generic for Bluetooth subsystem.
Change-Id: I1a1c39fd03bf857ba673fbb5d15fa50ffba02afa
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This allows to store LE SC keys. Since LE SC and legacy
pairing are mutually exlusive there is no need for additional
storage space as keys.ltk can be used for it.
Change-Id: I784e670684e9047b4b90b8cb8505d9b581c47b50
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This will be used to determine if controller supports
"LE Read Local P-256 Public Key" and LE Generate DH Key" commands.
Change-Id: Ib2bf7cfa99a20c07af0d3043ac9f9c2e0a6c2fcb
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This patch adds missing return call. Destroy was called early,
on read params. This could result in memory violation.
Another thing that has been fixed is assignment of bt_gatt_read
return value which can be negative to uint8_t type.
Change-Id: I1ddfea03038538efd70ad8ac68bd8df308a4ee3c
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
This allows to disable events not required by application. In future
this can be extended to enable events that are not enabled by default.
< HCI Command: LE Set Event Mask (0x08|0x0001) plen 8 24.018392
Mask: 0x000000000000001f
LE Connection Complete
LE Advertising Report
LE Connection Update Complete
LE Read Remote Used Features Complete
LE Long Term Key Request
> HCI Event: Command Complete (0x0e) plen 4 24.019215
LE Set Event Mask (0x08|0x0001) ncmd 1
Status: Success (0x00)
Change-Id: I29bfaa0743ac9e604a637f51503ff28a9b2074c2
Signed-off-by: Szymon Janc <ext.szymon.janc@tieto.com>
This adds support to receive LE Credits from the remote updating the
tx endpoint.
Change-Id: I0bf565370d50128cb34ffa3ee5f306bc48d56b3f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
The CID should be taken from rx endpoint not tx endpoint as the credits
are in fact updated in rx.credits.
Change-Id: I43aed2a08b6fd978244c02c43640a3226d897e45
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Some controller may actually generate more than 6 events simultaneously
as it seems to be tied with the number of buffers increase it to 8
whenever BLUETOOTH_CONN is selected otherwise default to 4.
Change-Id: I907847f56c2eb2d756513da171ff780aeb544259
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>