Using : ESP32 and Nuki Bluetooth API with Nuki firmware : 1.7.3
I succeeded in the first step of pairing (got a User, a AuthID, a SharedKy, all get during pairing step…)
Now trying to run Unlock sketch.
When I send the first request (Request Data + Challenge), I got an answer in 220 chars (from BLE readData).
In the first 30 chars I found a nonce, an authID different than the one I sent, & a 66 chars length data.
My Decrypt function return an error, unless I checked 20 times the datas to decrypt buffer built with the 16 x 0 Bytes first (required by crypto_secretbox_open()) followed by the 66 encrypted chars…
I saw that the message length 2 Bytes are switch in your exemple (low byte first, hi byte seconde).
I also check my decrypt function with the datas of your exemple with success.
Thank you for your help.
I guess that my error comes from the fact I try to get Nuki answer with a pRemoteCharacteristic.readValue() while I don’t get any notifications for indication on the USDIO characteristic… I tried to but it doesn’t work. I use pRemoteCharacteristic->registerForNotify(notifyCallback, false) for registry… it works well with the GDIO a92ee201-5501-11e4-916c-0800200c9a66, not with USDIO a92ee202-5501-11e4-916c-0800200c9a66…
I’m still freeze at the same step. I really need some help.
Here are some added informations about :
-
using : // The remote service & characteristic AFTER pairing step
static BLEUUID serviceUUIDPaired(“a92ee200-5501-11e4-916c-0800200c9a66”);//Nuki Keyturner Service
static BLEUUID charUSDIO (“a92ee202-5501-11e4-916c-0800200c9a66”);// USDIO characteristic -
register for indications :
pRemoteCharacteristic->registerForNotify(notifyCallback, false); //false = indication, true = notification
_____ datas :
SharedKey :E4C954A2F53F9F5E03352B1C44664B8BE61F38E62BA352859026910E8C2A2093
authorizationID : 100C0000
_____ Challenge command
Unencrypted : 0100C00000100040091E4
Encrypted : aData : 0E1072ADE09E7D13A78CD32EEBFA912E88D83A22AF55AC9E100C00001A00
pData : 8B2F276FA893222A48CADFA0A4FDD45D06A1D147C25A04AE3CB3
____ std::string value = pRemoteCharacteristic->readValue(); → 150 chars string
1E00BB206CDD7A3CB711884453F489D00ECAB5253AD71083
13E29E1A678944EB74C90000
00000A54707042696F556E6C6F636B000000000000000000
000000000000000000000051F539B1F6542E20555C676C14
B4930815EF92E31C693433CBDD1A9684B3CE66C2C8000000
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000
if I check the encrypted length in this answer (pos 28/29) = 6789 → length of decrypted read in aData: 35175
I found the issue. For getting registered for indications with the USDIO char, you need to add the true parameter when you call pRemoteCharacteristic->writeValue(message, sizeofmessage, true); !!! hope this can help others… it took me so long time to find it
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.