To make (referring to) debugging a bit easer for those who do not have Node.js installed, I’ve set up a RunKit Endpoint for the nice:
I registered to the thing netwok
and NWKSKEY,APPSKEY,DEVADDR is defined next value.
NWKSKEY = 99D58493D1205B43EFF938F0F66C339E APPSKEY = 0A501524F8EA5FCBF9BDB5AD7D126F75 DEVADDR = 260413AE;
LoRa Gate way server was transfered next encrypt data
Can I decrypt this data message?
The online version
does did not check or decrypt anything (right now). So, you’ll need to use the library yourself. Note that the DevAddr is in the non-encrypted part of the message headers.
mkdir my-decoder-test cd my-decoder-test npm install lora-packet node <<END const lorapacket = require('lora-packet'); const nwkSKey = new Buffer('99D58493D1205B43EFF938F0F66C339E', 'hex'); const appSKey = new Buffer('0A501524F8EA5FCBF9BDB5AD7D126F75', 'hex'); const data = new Buffer('QK4TBCaAAAABb4ldmIEHFOMmgpU=', 'base64'); const packet = lorapacket.fromWire(data); console.log(packet.toString()); // When the node's counter has exceeded 65,536, then use a recent FCnt value // to supply its MSB in the call to verifyMIC: // const recentFCnt = 476604; // const msb = new Buffer(2); // msb.writeUInt16LE(recentFCnt >> 16, 0); // const valid = lorapacket.verifyMIC(packet, nwkSKey, null, msb); const valid = lorapacket.verifyMIC(packet, nwkSKey); console.log('MIC: ' + (valid ? 'OK' : 'FAIL')); const payload = lorapacket.decrypt(packet, appSKey, nwkSKey); // Assume plain ASCII text, which is bad, but works for your example... console.log('Payload: ' + payload.toString()); END
Message Type = Data PHYPayload = 40AE130426800000016F895D98810714E3268295 ( PHYPayload = MHDR | MACPayload[..] | MIC ) MHDR = 40 MACPayload = AE130426800000016F895D98810714 MIC = E3268295 ( MACPayload = FHDR | FPort | FRMPayload ) FHDR = AE130426800000 FPort = 01 FRMPayload = 6F895D98810714 ( FHDR = DevAddr | FCtrl | FCnt | FOpts[0..15] ) DevAddr = 260413AE (Big Endian) FCtrl = 80 FCnt = 0000 (Big Endian) FOpts = Message Type = Unconfirmed Data Up Direction = up FCnt = 0 FCtrl.ACK = false FCtrl.ADR = true MIC: OK Payload: abcdefg
(You should keep the session keys secret, as anyone can now send data to your application. Also, you should not send text.)
Thank you for all your help.
Your answer is what I was exactly requiring.
This is great!
Anyone have LoRaWAN 1.1.x version packet decoder?
Please help me…!