diff --git a/packages/binding-coap/README.md b/packages/binding-coap/README.md index 1562f44ec..087f7b103 100644 --- a/packages/binding-coap/README.md +++ b/packages/binding-coap/README.md @@ -52,6 +52,78 @@ servient }); ``` +## Using PSK with CoAPs (DTLS) + +The CoAP binding also supports secure communication over `coaps://` using DTLS with Pre-Shared Keys (PSK). + +To use PSK security, define a `psk` security scheme in the Thing Description and provide the credentials when consuming the Thing. + +### Thing Description Example (PSK) + +```json +{ + "title": "SecureThing", + "securityDefinitions": { + "psk_sc": { + "scheme": "psk" + } + }, + "security": ["psk_sc"], + "properties": { + "count": { + "type": "integer", + "forms": [ + { + "href": "coaps://localhost:5684/count" + } + ] + } + } +} +``` + +### Client Example with PSK + +```js +const { Servient } = require("@node-wot/core"); +const { CoapClientFactory } = require("@node-wot/binding-coap"); + +const servient = new Servient(); +servient.addClientFactory(new CoapClientFactory()); + +servient + .start() + .then(async (WoT) => { + try { + const td = await WoT.requestThingDescription("coaps://localhost:5684/secureThing"); + const thing = await WoT.consume(td); + + // configure PSK security + thing.setSecurity( + td.securityDefinitions, + { + identity: "Client_identity", + psk: "secretPSK" + } + ); + + const value = await thing.readProperty("count"); + console.log("count value is:", await value.value()); + } catch (err) { + console.error("Script error:", err); + } + }) + .catch((err) => { + console.error("Start error:", err); + }); +``` + +### Notes + +- The `identity` must match the server configuration. +- The `psk` must match the server's configured secret. +- Currently, only the `psk` security scheme is supported for `coaps://` in this binding. + ### Server Example The server example produces a thing that allows for setting a property `count`. The thing is reachable through CoAP.