@matter/thread-br-client 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -0
- package/dist/cjs/coap/CoapClient.d.ts +33 -0
- package/dist/cjs/coap/CoapClient.d.ts.map +1 -0
- package/dist/cjs/coap/CoapClient.js +281 -0
- package/dist/cjs/coap/CoapClient.js.map +6 -0
- package/dist/cjs/coap/CoapMessage.d.ts +23 -0
- package/dist/cjs/coap/CoapMessage.d.ts.map +1 -0
- package/dist/cjs/coap/CoapMessage.js +182 -0
- package/dist/cjs/coap/CoapMessage.js.map +6 -0
- package/dist/cjs/coap/index.d.ts +8 -0
- package/dist/cjs/coap/index.d.ts.map +1 -0
- package/dist/cjs/coap/index.js +31 -0
- package/dist/cjs/coap/index.js.map +6 -0
- package/dist/cjs/commissioner/Commissioner.d.ts +89 -0
- package/dist/cjs/commissioner/Commissioner.d.ts.map +1 -0
- package/dist/cjs/commissioner/Commissioner.js +188 -0
- package/dist/cjs/commissioner/Commissioner.js.map +6 -0
- package/dist/cjs/commissioner/LeadKa.d.ts +17 -0
- package/dist/cjs/commissioner/LeadKa.d.ts.map +1 -0
- package/dist/cjs/commissioner/LeadKa.js +63 -0
- package/dist/cjs/commissioner/LeadKa.js.map +6 -0
- package/dist/cjs/commissioner/LeadPet.d.ts +14 -0
- package/dist/cjs/commissioner/LeadPet.d.ts.map +1 -0
- package/dist/cjs/commissioner/LeadPet.js +66 -0
- package/dist/cjs/commissioner/LeadPet.js.map +6 -0
- package/dist/cjs/commissioner/index.d.ts +12 -0
- package/dist/cjs/commissioner/index.d.ts.map +1 -0
- package/dist/cjs/commissioner/index.js +38 -0
- package/dist/cjs/commissioner/index.js.map +6 -0
- package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts +50 -0
- package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts.map +1 -0
- package/dist/cjs/credentials/ThreadCredentialsRegistry.js +119 -0
- package/dist/cjs/credentials/ThreadCredentialsRegistry.js.map +6 -0
- package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts +26 -0
- package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts.map +1 -0
- package/dist/cjs/credentials/ThreadNetworkCredentials.js +22 -0
- package/dist/cjs/credentials/ThreadNetworkCredentials.js.map +6 -0
- package/dist/cjs/credentials/index.d.ts +8 -0
- package/dist/cjs/credentials/index.d.ts.map +1 -0
- package/dist/cjs/credentials/index.js +30 -0
- package/dist/cjs/credentials/index.js.map +6 -0
- package/dist/cjs/crypto/AesCmacPrf128.d.ts +24 -0
- package/dist/cjs/crypto/AesCmacPrf128.d.ts.map +1 -0
- package/dist/cjs/crypto/AesCmacPrf128.js +107 -0
- package/dist/cjs/crypto/AesCmacPrf128.js.map +6 -0
- package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts +18 -0
- package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts.map +1 -0
- package/dist/cjs/crypto/Pbkdf2AesCmac.js +62 -0
- package/dist/cjs/crypto/Pbkdf2AesCmac.js.map +6 -0
- package/dist/cjs/crypto/Pskc.d.ts +21 -0
- package/dist/cjs/crypto/Pskc.d.ts.map +1 -0
- package/dist/cjs/crypto/Pskc.js +69 -0
- package/dist/cjs/crypto/Pskc.js.map +6 -0
- package/dist/cjs/crypto/index.d.ts +9 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +35 -0
- package/dist/cjs/crypto/index.js.map +6 -0
- package/dist/cjs/dataset/OperationalDataset.d.ts +74 -0
- package/dist/cjs/dataset/OperationalDataset.d.ts.map +1 -0
- package/dist/cjs/dataset/OperationalDataset.js +244 -0
- package/dist/cjs/dataset/OperationalDataset.js.map +6 -0
- package/dist/cjs/dataset/SecurityPolicy.d.ts +22 -0
- package/dist/cjs/dataset/SecurityPolicy.d.ts.map +1 -0
- package/dist/cjs/dataset/SecurityPolicy.js +59 -0
- package/dist/cjs/dataset/SecurityPolicy.js.map +6 -0
- package/dist/cjs/dataset/errors.d.ts +10 -0
- package/dist/cjs/dataset/errors.d.ts.map +1 -0
- package/dist/cjs/dataset/errors.js +32 -0
- package/dist/cjs/dataset/errors.js.map +6 -0
- package/dist/cjs/dataset/index.d.ts +9 -0
- package/dist/cjs/dataset/index.d.ts.map +1 -0
- package/dist/cjs/dataset/index.js +36 -0
- package/dist/cjs/dataset/index.js.map +6 -0
- package/dist/cjs/dataset/meshcopTlvTypes.d.ts +61 -0
- package/dist/cjs/dataset/meshcopTlvTypes.d.ts.map +1 -0
- package/dist/cjs/dataset/meshcopTlvTypes.js +82 -0
- package/dist/cjs/dataset/meshcopTlvTypes.js.map +6 -0
- package/dist/cjs/diagnostic/DefaultTlvSet.d.ts +8 -0
- package/dist/cjs/diagnostic/DefaultTlvSet.d.ts.map +1 -0
- package/dist/cjs/diagnostic/DefaultTlvSet.js +52 -0
- package/dist/cjs/diagnostic/DefaultTlvSet.js.map +6 -0
- package/dist/cjs/diagnostic/DiagnosticResponse.d.ts +47 -0
- package/dist/cjs/diagnostic/DiagnosticResponse.d.ts.map +1 -0
- package/dist/cjs/diagnostic/DiagnosticResponse.js +22 -0
- package/dist/cjs/diagnostic/DiagnosticResponse.js.map +6 -0
- package/dist/cjs/diagnostic/DiagnosticSource.d.ts +64 -0
- package/dist/cjs/diagnostic/DiagnosticSource.d.ts.map +1 -0
- package/dist/cjs/diagnostic/DiagnosticSource.js +34 -0
- package/dist/cjs/diagnostic/DiagnosticSource.js.map +6 -0
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts +78 -0
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -0
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js +654 -0
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js.map +6 -0
- package/dist/cjs/diagnostic/connectMeshcop.d.ts +38 -0
- package/dist/cjs/diagnostic/connectMeshcop.d.ts.map +1 -0
- package/dist/cjs/diagnostic/connectMeshcop.js +100 -0
- package/dist/cjs/diagnostic/connectMeshcop.js.map +6 -0
- package/dist/cjs/diagnostic/errors.d.ts +10 -0
- package/dist/cjs/diagnostic/errors.d.ts.map +1 -0
- package/dist/cjs/diagnostic/errors.js +32 -0
- package/dist/cjs/diagnostic/errors.js.map +6 -0
- package/dist/cjs/diagnostic/index.d.ts +13 -0
- package/dist/cjs/diagnostic/index.d.ts.map +1 -0
- package/dist/cjs/diagnostic/index.js +35 -0
- package/dist/cjs/diagnostic/index.js.map +6 -0
- package/dist/cjs/discovery/BorderRouterEntry.d.ts +54 -0
- package/dist/cjs/discovery/BorderRouterEntry.d.ts.map +1 -0
- package/dist/cjs/discovery/BorderRouterEntry.js +22 -0
- package/dist/cjs/discovery/BorderRouterEntry.js.map +6 -0
- package/dist/cjs/discovery/BorderRouterRegistry.d.ts +36 -0
- package/dist/cjs/discovery/BorderRouterRegistry.d.ts.map +1 -0
- package/dist/cjs/discovery/BorderRouterRegistry.js +522 -0
- package/dist/cjs/discovery/BorderRouterRegistry.js.map +6 -0
- package/dist/cjs/discovery/DnssdLikeTypes.d.ts +50 -0
- package/dist/cjs/discovery/DnssdLikeTypes.d.ts.map +1 -0
- package/dist/cjs/discovery/DnssdLikeTypes.js +22 -0
- package/dist/cjs/discovery/DnssdLikeTypes.js.map +6 -0
- package/dist/cjs/discovery/index.d.ts +8 -0
- package/dist/cjs/discovery/index.d.ts.map +1 -0
- package/dist/cjs/discovery/index.js +30 -0
- package/dist/cjs/discovery/index.js.map +6 -0
- package/dist/cjs/dtls/channel/DtlsChannel.d.ts +39 -0
- package/dist/cjs/dtls/channel/DtlsChannel.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/DtlsChannel.js +32 -0
- package/dist/cjs/dtls/channel/DtlsChannel.js.map +6 -0
- package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts +38 -0
- package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/DtlsConnectOpts.js +22 -0
- package/dist/cjs/dtls/channel/DtlsConnectOpts.js.map +6 -0
- package/dist/cjs/dtls/channel/DtlsRetransmitTimer.d.ts +43 -0
- package/dist/cjs/dtls/channel/DtlsRetransmitTimer.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/DtlsRetransmitTimer.js +97 -0
- package/dist/cjs/dtls/channel/DtlsRetransmitTimer.js.map +6 -0
- package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts +35 -0
- package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/NobleDtlsChannel.js +440 -0
- package/dist/cjs/dtls/channel/NobleDtlsChannel.js.map +6 -0
- package/dist/cjs/dtls/channel/connectDtls.d.ts +15 -0
- package/dist/cjs/dtls/channel/connectDtls.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/connectDtls.js +41 -0
- package/dist/cjs/dtls/channel/connectDtls.js.map +6 -0
- package/dist/cjs/dtls/channel/index.d.ts +14 -0
- package/dist/cjs/dtls/channel/index.d.ts.map +1 -0
- package/dist/cjs/dtls/channel/index.js +32 -0
- package/dist/cjs/dtls/channel/index.js.map +6 -0
- package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts +35 -0
- package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts.map +1 -0
- package/dist/cjs/dtls/ecjpake/EcJpakePms.js +61 -0
- package/dist/cjs/dtls/ecjpake/EcJpakePms.js.map +6 -0
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts +119 -0
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -0
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.js +248 -0
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.js.map +6 -0
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts +60 -0
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -0
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.js +162 -0
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.js.map +6 -0
- package/dist/cjs/dtls/ecjpake/index.d.ts +28 -0
- package/dist/cjs/dtls/ecjpake/index.d.ts.map +1 -0
- package/dist/cjs/dtls/ecjpake/index.js +34 -0
- package/dist/cjs/dtls/ecjpake/index.js.map +6 -0
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts +23 -0
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.js +41 -0
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.js.map +6 -0
- package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts +34 -0
- package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ClientHelloMessage.js +117 -0
- package/dist/cjs/dtls/handshake/ClientHelloMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts +22 -0
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js +35 -0
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/DtlsClient.d.ts +57 -0
- package/dist/cjs/dtls/handshake/DtlsClient.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/DtlsClient.js +502 -0
- package/dist/cjs/dtls/handshake/DtlsClient.js.map +6 -0
- package/dist/cjs/dtls/handshake/FinishedMessage.d.ts +13 -0
- package/dist/cjs/dtls/handshake/FinishedMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/FinishedMessage.js +48 -0
- package/dist/cjs/dtls/handshake/FinishedMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts +58 -0
- package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/HandshakeMessage.js +117 -0
- package/dist/cjs/dtls/handshake/HandshakeMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/HandshakeType.d.ts +29 -0
- package/dist/cjs/dtls/handshake/HandshakeType.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/HandshakeType.js +45 -0
- package/dist/cjs/dtls/handshake/HandshakeType.js.map +6 -0
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts +11 -0
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js +49 -0
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts +14 -0
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js +37 -0
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts +15 -0
- package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ServerHelloMessage.js +113 -0
- package/dist/cjs/dtls/handshake/ServerHelloMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts +24 -0
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js +35 -0
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js.map +6 -0
- package/dist/cjs/dtls/handshake/index.d.ts +14 -0
- package/dist/cjs/dtls/handshake/index.d.ts.map +1 -0
- package/dist/cjs/dtls/handshake/index.js +30 -0
- package/dist/cjs/dtls/handshake/index.js.map +6 -0
- package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts +36 -0
- package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts.map +1 -0
- package/dist/cjs/dtls/prf/HandshakeTranscript.js +55 -0
- package/dist/cjs/dtls/prf/HandshakeTranscript.js.map +6 -0
- package/dist/cjs/dtls/prf/TlsPrf.d.ts +82 -0
- package/dist/cjs/dtls/prf/TlsPrf.d.ts.map +1 -0
- package/dist/cjs/dtls/prf/TlsPrf.js +121 -0
- package/dist/cjs/dtls/prf/TlsPrf.js.map +6 -0
- package/dist/cjs/dtls/prf/index.d.ts +13 -0
- package/dist/cjs/dtls/prf/index.d.ts.map +1 -0
- package/dist/cjs/dtls/prf/index.js +32 -0
- package/dist/cjs/dtls/prf/index.js.map +6 -0
- package/dist/cjs/dtls/record/AesCcm8.d.ts +32 -0
- package/dist/cjs/dtls/record/AesCcm8.d.ts.map +1 -0
- package/dist/cjs/dtls/record/AesCcm8.js +78 -0
- package/dist/cjs/dtls/record/AesCcm8.js.map +6 -0
- package/dist/cjs/dtls/record/AntiReplayWindow.d.ts +38 -0
- package/dist/cjs/dtls/record/AntiReplayWindow.d.ts.map +1 -0
- package/dist/cjs/dtls/record/AntiReplayWindow.js +84 -0
- package/dist/cjs/dtls/record/AntiReplayWindow.js.map +6 -0
- package/dist/cjs/dtls/record/ContentType.d.ts +19 -0
- package/dist/cjs/dtls/record/ContentType.d.ts.map +1 -0
- package/dist/cjs/dtls/record/ContentType.js +39 -0
- package/dist/cjs/dtls/record/ContentType.js.map +6 -0
- package/dist/cjs/dtls/record/DtlsCipherState.d.ts +79 -0
- package/dist/cjs/dtls/record/DtlsCipherState.d.ts.map +1 -0
- package/dist/cjs/dtls/record/DtlsCipherState.js +173 -0
- package/dist/cjs/dtls/record/DtlsCipherState.js.map +6 -0
- package/dist/cjs/dtls/record/DtlsRecord.d.ts +89 -0
- package/dist/cjs/dtls/record/DtlsRecord.d.ts.map +1 -0
- package/dist/cjs/dtls/record/DtlsRecord.js +195 -0
- package/dist/cjs/dtls/record/DtlsRecord.js.map +6 -0
- package/dist/cjs/dtls/record/index.d.ts +15 -0
- package/dist/cjs/dtls/record/index.d.ts.map +1 -0
- package/dist/cjs/dtls/record/index.js +42 -0
- package/dist/cjs/dtls/record/index.js.map +6 -0
- package/dist/cjs/index.d.ts +32 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +77 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts +22 -0
- package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/OtbrRestCapability.js +22 -0
- package/dist/cjs/otbr-rest/OtbrRestCapability.js.map +6 -0
- package/dist/cjs/otbr-rest/OtbrRestClient.d.ts +257 -0
- package/dist/cjs/otbr-rest/OtbrRestClient.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/OtbrRestClient.js +544 -0
- package/dist/cjs/otbr-rest/OtbrRestClient.js.map +6 -0
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts +88 -0
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js +156 -0
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js.map +6 -0
- package/dist/cjs/otbr-rest/OtbrRestError.d.ts +18 -0
- package/dist/cjs/otbr-rest/OtbrRestError.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/OtbrRestError.js +42 -0
- package/dist/cjs/otbr-rest/OtbrRestError.js.map +6 -0
- package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts +17 -0
- package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/OtbrRestProbe.js +96 -0
- package/dist/cjs/otbr-rest/OtbrRestProbe.js.map +6 -0
- package/dist/cjs/otbr-rest/caseNormalizer.d.ts +12 -0
- package/dist/cjs/otbr-rest/caseNormalizer.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/caseNormalizer.js +59 -0
- package/dist/cjs/otbr-rest/caseNormalizer.js.map +6 -0
- package/dist/cjs/otbr-rest/index.d.ts +15 -0
- package/dist/cjs/otbr-rest/index.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/index.js +40 -0
- package/dist/cjs/otbr-rest/index.js.map +6 -0
- package/dist/cjs/otbr-rest/translation.d.ts +24 -0
- package/dist/cjs/otbr-rest/translation.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/translation.js +301 -0
- package/dist/cjs/otbr-rest/translation.js.map +6 -0
- package/dist/cjs/package.json +6 -0
- package/dist/cjs/selection/index.d.ts +11 -0
- package/dist/cjs/selection/index.d.ts.map +1 -0
- package/dist/cjs/selection/index.js +36 -0
- package/dist/cjs/selection/index.js.map +6 -0
- package/dist/cjs/selection/selectBr.d.ts +37 -0
- package/dist/cjs/selection/selectBr.d.ts.map +1 -0
- package/dist/cjs/selection/selectBr.js +66 -0
- package/dist/cjs/selection/selectBr.js.map +6 -0
- package/dist/cjs/selection/selectSource.d.ts +32 -0
- package/dist/cjs/selection/selectSource.d.ts.map +1 -0
- package/dist/cjs/selection/selectSource.js +43 -0
- package/dist/cjs/selection/selectSource.js.map +6 -0
- package/dist/cjs/selection/withExtPanIdLock.d.ts +23 -0
- package/dist/cjs/selection/withExtPanIdLock.d.ts.map +1 -0
- package/dist/cjs/selection/withExtPanIdLock.js +50 -0
- package/dist/cjs/selection/withExtPanIdLock.js.map +6 -0
- package/dist/cjs/tlv/BasicTlvCodec.d.ts +22 -0
- package/dist/cjs/tlv/BasicTlvCodec.d.ts.map +1 -0
- package/dist/cjs/tlv/BasicTlvCodec.js +97 -0
- package/dist/cjs/tlv/BasicTlvCodec.js.map +6 -0
- package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts +30 -0
- package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts.map +1 -0
- package/dist/cjs/tlv/NetworkDiagnosticTlv.js +41 -0
- package/dist/cjs/tlv/NetworkDiagnosticTlv.js.map +6 -0
- package/dist/cjs/tlv/TypeListTlv.d.ts +23 -0
- package/dist/cjs/tlv/TypeListTlv.d.ts.map +1 -0
- package/dist/cjs/tlv/TypeListTlv.js +49 -0
- package/dist/cjs/tlv/TypeListTlv.js.map +6 -0
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts +22 -0
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.js +48 -0
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.js.map +6 -0
- package/dist/cjs/tlv/diag/ChildTable.d.ts +29 -0
- package/dist/cjs/tlv/diag/ChildTable.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/ChildTable.js +91 -0
- package/dist/cjs/tlv/diag/ChildTable.js.map +6 -0
- package/dist/cjs/tlv/diag/Connectivity.d.ts +45 -0
- package/dist/cjs/tlv/diag/Connectivity.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Connectivity.js +99 -0
- package/dist/cjs/tlv/diag/Connectivity.js.map +6 -0
- package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts +21 -0
- package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Ipv6AddressList.js +61 -0
- package/dist/cjs/tlv/diag/Ipv6AddressList.js.map +6 -0
- package/dist/cjs/tlv/diag/LeaderData.d.ts +28 -0
- package/dist/cjs/tlv/diag/LeaderData.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/LeaderData.js +64 -0
- package/dist/cjs/tlv/diag/LeaderData.js.map +6 -0
- package/dist/cjs/tlv/diag/MacCounters.d.ts +28 -0
- package/dist/cjs/tlv/diag/MacCounters.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/MacCounters.js +85 -0
- package/dist/cjs/tlv/diag/MacCounters.js.map +6 -0
- package/dist/cjs/tlv/diag/MleCounters.d.ts +41 -0
- package/dist/cjs/tlv/diag/MleCounters.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/MleCounters.js +118 -0
- package/dist/cjs/tlv/diag/MleCounters.js.map +6 -0
- package/dist/cjs/tlv/diag/Mode.d.ts +26 -0
- package/dist/cjs/tlv/diag/Mode.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Mode.js +57 -0
- package/dist/cjs/tlv/diag/Mode.js.map +6 -0
- package/dist/cjs/tlv/diag/NetworkData.d.ts +93 -0
- package/dist/cjs/tlv/diag/NetworkData.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/NetworkData.js +157 -0
- package/dist/cjs/tlv/diag/NetworkData.js.map +6 -0
- package/dist/cjs/tlv/diag/Primitives.d.ts +34 -0
- package/dist/cjs/tlv/diag/Primitives.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Primitives.js +163 -0
- package/dist/cjs/tlv/diag/Primitives.js.map +6 -0
- package/dist/cjs/tlv/diag/Route64.d.ts +42 -0
- package/dist/cjs/tlv/diag/Route64.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Route64.js +98 -0
- package/dist/cjs/tlv/diag/Route64.js.map +6 -0
- package/dist/cjs/tlv/diag/RouterNeighbor.d.ts +46 -0
- package/dist/cjs/tlv/diag/RouterNeighbor.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/RouterNeighbor.js +65 -0
- package/dist/cjs/tlv/diag/RouterNeighbor.js.map +6 -0
- package/dist/cjs/tlv/diag/Timeout.d.ts +17 -0
- package/dist/cjs/tlv/diag/Timeout.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/Timeout.js +53 -0
- package/dist/cjs/tlv/diag/Timeout.js.map +6 -0
- package/dist/cjs/tlv/diag/VendorInfo.d.ts +35 -0
- package/dist/cjs/tlv/diag/VendorInfo.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/VendorInfo.js +130 -0
- package/dist/cjs/tlv/diag/VendorInfo.js.map +6 -0
- package/dist/cjs/tlv/diag/index.d.ts +26 -0
- package/dist/cjs/tlv/diag/index.d.ts.map +1 -0
- package/dist/cjs/tlv/diag/index.js +67 -0
- package/dist/cjs/tlv/diag/index.js.map +6 -0
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts +21 -0
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -0
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js +48 -0
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js.map +6 -0
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts +27 -0
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -0
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js +62 -0
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js.map +6 -0
- package/dist/cjs/tlv/networkDiagTlvTypes.d.ts +59 -0
- package/dist/cjs/tlv/networkDiagTlvTypes.d.ts.map +1 -0
- package/dist/cjs/tlv/networkDiagTlvTypes.js +76 -0
- package/dist/cjs/tlv/networkDiagTlvTypes.js.map +6 -0
- package/dist/cjs/util/meshLocalAddr.d.ts +27 -0
- package/dist/cjs/util/meshLocalAddr.d.ts.map +1 -0
- package/dist/cjs/util/meshLocalAddr.js +67 -0
- package/dist/cjs/util/meshLocalAddr.js.map +6 -0
- package/dist/esm/coap/CoapClient.d.ts +33 -0
- package/dist/esm/coap/CoapClient.d.ts.map +1 -0
- package/dist/esm/coap/CoapClient.js +270 -0
- package/dist/esm/coap/CoapClient.js.map +6 -0
- package/dist/esm/coap/CoapMessage.d.ts +23 -0
- package/dist/esm/coap/CoapMessage.d.ts.map +1 -0
- package/dist/esm/coap/CoapMessage.js +162 -0
- package/dist/esm/coap/CoapMessage.js.map +6 -0
- package/dist/esm/coap/index.d.ts +8 -0
- package/dist/esm/coap/index.d.ts.map +1 -0
- package/dist/esm/coap/index.js +11 -0
- package/dist/esm/coap/index.js.map +6 -0
- package/dist/esm/commissioner/Commissioner.d.ts +89 -0
- package/dist/esm/commissioner/Commissioner.d.ts.map +1 -0
- package/dist/esm/commissioner/Commissioner.js +168 -0
- package/dist/esm/commissioner/Commissioner.js.map +6 -0
- package/dist/esm/commissioner/LeadKa.d.ts +17 -0
- package/dist/esm/commissioner/LeadKa.d.ts.map +1 -0
- package/dist/esm/commissioner/LeadKa.js +43 -0
- package/dist/esm/commissioner/LeadKa.js.map +6 -0
- package/dist/esm/commissioner/LeadPet.d.ts +14 -0
- package/dist/esm/commissioner/LeadPet.d.ts.map +1 -0
- package/dist/esm/commissioner/LeadPet.js +46 -0
- package/dist/esm/commissioner/LeadPet.js.map +6 -0
- package/dist/esm/commissioner/index.d.ts +12 -0
- package/dist/esm/commissioner/index.d.ts.map +1 -0
- package/dist/esm/commissioner/index.js +23 -0
- package/dist/esm/commissioner/index.js.map +6 -0
- package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts +50 -0
- package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts.map +1 -0
- package/dist/esm/credentials/ThreadCredentialsRegistry.js +99 -0
- package/dist/esm/credentials/ThreadCredentialsRegistry.js.map +6 -0
- package/dist/esm/credentials/ThreadNetworkCredentials.d.ts +26 -0
- package/dist/esm/credentials/ThreadNetworkCredentials.d.ts.map +1 -0
- package/dist/esm/credentials/ThreadNetworkCredentials.js +6 -0
- package/dist/esm/credentials/ThreadNetworkCredentials.js.map +6 -0
- package/dist/esm/credentials/index.d.ts +8 -0
- package/dist/esm/credentials/index.d.ts.map +1 -0
- package/dist/esm/credentials/index.js +10 -0
- package/dist/esm/credentials/index.js.map +6 -0
- package/dist/esm/crypto/AesCmacPrf128.d.ts +24 -0
- package/dist/esm/crypto/AesCmacPrf128.d.ts.map +1 -0
- package/dist/esm/crypto/AesCmacPrf128.js +87 -0
- package/dist/esm/crypto/AesCmacPrf128.js.map +6 -0
- package/dist/esm/crypto/Pbkdf2AesCmac.d.ts +18 -0
- package/dist/esm/crypto/Pbkdf2AesCmac.d.ts.map +1 -0
- package/dist/esm/crypto/Pbkdf2AesCmac.js +42 -0
- package/dist/esm/crypto/Pbkdf2AesCmac.js.map +6 -0
- package/dist/esm/crypto/Pskc.d.ts +21 -0
- package/dist/esm/crypto/Pskc.d.ts.map +1 -0
- package/dist/esm/crypto/Pskc.js +49 -0
- package/dist/esm/crypto/Pskc.js.map +6 -0
- package/dist/esm/crypto/index.d.ts +9 -0
- package/dist/esm/crypto/index.d.ts.map +1 -0
- package/dist/esm/crypto/index.js +15 -0
- package/dist/esm/crypto/index.js.map +6 -0
- package/dist/esm/dataset/OperationalDataset.d.ts +74 -0
- package/dist/esm/dataset/OperationalDataset.d.ts.map +1 -0
- package/dist/esm/dataset/OperationalDataset.js +224 -0
- package/dist/esm/dataset/OperationalDataset.js.map +6 -0
- package/dist/esm/dataset/SecurityPolicy.d.ts +22 -0
- package/dist/esm/dataset/SecurityPolicy.d.ts.map +1 -0
- package/dist/esm/dataset/SecurityPolicy.js +39 -0
- package/dist/esm/dataset/SecurityPolicy.js.map +6 -0
- package/dist/esm/dataset/errors.d.ts +10 -0
- package/dist/esm/dataset/errors.d.ts.map +1 -0
- package/dist/esm/dataset/errors.js +12 -0
- package/dist/esm/dataset/errors.js.map +6 -0
- package/dist/esm/dataset/index.d.ts +9 -0
- package/dist/esm/dataset/index.d.ts.map +1 -0
- package/dist/esm/dataset/index.js +16 -0
- package/dist/esm/dataset/index.js.map +6 -0
- package/dist/esm/dataset/meshcopTlvTypes.d.ts +61 -0
- package/dist/esm/dataset/meshcopTlvTypes.d.ts.map +1 -0
- package/dist/esm/dataset/meshcopTlvTypes.js +62 -0
- package/dist/esm/dataset/meshcopTlvTypes.js.map +6 -0
- package/dist/esm/diagnostic/DefaultTlvSet.d.ts +8 -0
- package/dist/esm/diagnostic/DefaultTlvSet.d.ts.map +1 -0
- package/dist/esm/diagnostic/DefaultTlvSet.js +32 -0
- package/dist/esm/diagnostic/DefaultTlvSet.js.map +6 -0
- package/dist/esm/diagnostic/DiagnosticResponse.d.ts +47 -0
- package/dist/esm/diagnostic/DiagnosticResponse.d.ts.map +1 -0
- package/dist/esm/diagnostic/DiagnosticResponse.js +6 -0
- package/dist/esm/diagnostic/DiagnosticResponse.js.map +6 -0
- package/dist/esm/diagnostic/DiagnosticSource.d.ts +64 -0
- package/dist/esm/diagnostic/DiagnosticSource.d.ts.map +1 -0
- package/dist/esm/diagnostic/DiagnosticSource.js +14 -0
- package/dist/esm/diagnostic/DiagnosticSource.js.map +6 -0
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts +78 -0
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -0
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.js +663 -0
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.js.map +6 -0
- package/dist/esm/diagnostic/connectMeshcop.d.ts +38 -0
- package/dist/esm/diagnostic/connectMeshcop.d.ts.map +1 -0
- package/dist/esm/diagnostic/connectMeshcop.js +80 -0
- package/dist/esm/diagnostic/connectMeshcop.js.map +6 -0
- package/dist/esm/diagnostic/errors.d.ts +10 -0
- package/dist/esm/diagnostic/errors.d.ts.map +1 -0
- package/dist/esm/diagnostic/errors.js +12 -0
- package/dist/esm/diagnostic/errors.js.map +6 -0
- package/dist/esm/diagnostic/index.d.ts +13 -0
- package/dist/esm/diagnostic/index.d.ts.map +1 -0
- package/dist/esm/diagnostic/index.js +15 -0
- package/dist/esm/diagnostic/index.js.map +6 -0
- package/dist/esm/discovery/BorderRouterEntry.d.ts +54 -0
- package/dist/esm/discovery/BorderRouterEntry.d.ts.map +1 -0
- package/dist/esm/discovery/BorderRouterEntry.js +6 -0
- package/dist/esm/discovery/BorderRouterEntry.js.map +6 -0
- package/dist/esm/discovery/BorderRouterRegistry.d.ts +36 -0
- package/dist/esm/discovery/BorderRouterRegistry.d.ts.map +1 -0
- package/dist/esm/discovery/BorderRouterRegistry.js +508 -0
- package/dist/esm/discovery/BorderRouterRegistry.js.map +6 -0
- package/dist/esm/discovery/DnssdLikeTypes.d.ts +50 -0
- package/dist/esm/discovery/DnssdLikeTypes.d.ts.map +1 -0
- package/dist/esm/discovery/DnssdLikeTypes.js +6 -0
- package/dist/esm/discovery/DnssdLikeTypes.js.map +6 -0
- package/dist/esm/discovery/index.d.ts +8 -0
- package/dist/esm/discovery/index.d.ts.map +1 -0
- package/dist/esm/discovery/index.js +10 -0
- package/dist/esm/discovery/index.js.map +6 -0
- package/dist/esm/dtls/channel/DtlsChannel.d.ts +39 -0
- package/dist/esm/dtls/channel/DtlsChannel.d.ts.map +1 -0
- package/dist/esm/dtls/channel/DtlsChannel.js +12 -0
- package/dist/esm/dtls/channel/DtlsChannel.js.map +6 -0
- package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts +38 -0
- package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts.map +1 -0
- package/dist/esm/dtls/channel/DtlsConnectOpts.js +6 -0
- package/dist/esm/dtls/channel/DtlsConnectOpts.js.map +6 -0
- package/dist/esm/dtls/channel/DtlsRetransmitTimer.d.ts +43 -0
- package/dist/esm/dtls/channel/DtlsRetransmitTimer.d.ts.map +1 -0
- package/dist/esm/dtls/channel/DtlsRetransmitTimer.js +77 -0
- package/dist/esm/dtls/channel/DtlsRetransmitTimer.js.map +6 -0
- package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts +35 -0
- package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts.map +1 -0
- package/dist/esm/dtls/channel/NobleDtlsChannel.js +432 -0
- package/dist/esm/dtls/channel/NobleDtlsChannel.js.map +6 -0
- package/dist/esm/dtls/channel/connectDtls.d.ts +15 -0
- package/dist/esm/dtls/channel/connectDtls.d.ts.map +1 -0
- package/dist/esm/dtls/channel/connectDtls.js +21 -0
- package/dist/esm/dtls/channel/connectDtls.js.map +6 -0
- package/dist/esm/dtls/channel/index.d.ts +14 -0
- package/dist/esm/dtls/channel/index.d.ts.map +1 -0
- package/dist/esm/dtls/channel/index.js +12 -0
- package/dist/esm/dtls/channel/index.js.map +6 -0
- package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts +35 -0
- package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts.map +1 -0
- package/dist/esm/dtls/ecjpake/EcJpakePms.js +41 -0
- package/dist/esm/dtls/ecjpake/EcJpakePms.js.map +6 -0
- package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts +119 -0
- package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -0
- package/dist/esm/dtls/ecjpake/EcJpakeRound.js +228 -0
- package/dist/esm/dtls/ecjpake/EcJpakeRound.js.map +6 -0
- package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts +60 -0
- package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -0
- package/dist/esm/dtls/ecjpake/SchnorrZkp.js +142 -0
- package/dist/esm/dtls/ecjpake/SchnorrZkp.js.map +6 -0
- package/dist/esm/dtls/ecjpake/index.d.ts +28 -0
- package/dist/esm/dtls/ecjpake/index.d.ts.map +1 -0
- package/dist/esm/dtls/ecjpake/index.js +14 -0
- package/dist/esm/dtls/ecjpake/index.js.map +6 -0
- package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts +23 -0
- package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ChangeCipherSpec.js +21 -0
- package/dist/esm/dtls/handshake/ChangeCipherSpec.js.map +6 -0
- package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts +34 -0
- package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ClientHelloMessage.js +97 -0
- package/dist/esm/dtls/handshake/ClientHelloMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts +22 -0
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js +15 -0
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/DtlsClient.d.ts +57 -0
- package/dist/esm/dtls/handshake/DtlsClient.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/DtlsClient.js +482 -0
- package/dist/esm/dtls/handshake/DtlsClient.js.map +6 -0
- package/dist/esm/dtls/handshake/FinishedMessage.d.ts +13 -0
- package/dist/esm/dtls/handshake/FinishedMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/FinishedMessage.js +28 -0
- package/dist/esm/dtls/handshake/FinishedMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/HandshakeMessage.d.ts +58 -0
- package/dist/esm/dtls/handshake/HandshakeMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/HandshakeMessage.js +97 -0
- package/dist/esm/dtls/handshake/HandshakeMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/HandshakeType.d.ts +29 -0
- package/dist/esm/dtls/handshake/HandshakeType.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/HandshakeType.js +25 -0
- package/dist/esm/dtls/handshake/HandshakeType.js.map +6 -0
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts +11 -0
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js +29 -0
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts +14 -0
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js +17 -0
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts +15 -0
- package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ServerHelloMessage.js +93 -0
- package/dist/esm/dtls/handshake/ServerHelloMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts +24 -0
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js +15 -0
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js.map +6 -0
- package/dist/esm/dtls/handshake/index.d.ts +14 -0
- package/dist/esm/dtls/handshake/index.d.ts.map +1 -0
- package/dist/esm/dtls/handshake/index.js +10 -0
- package/dist/esm/dtls/handshake/index.js.map +6 -0
- package/dist/esm/dtls/prf/HandshakeTranscript.d.ts +36 -0
- package/dist/esm/dtls/prf/HandshakeTranscript.d.ts.map +1 -0
- package/dist/esm/dtls/prf/HandshakeTranscript.js +35 -0
- package/dist/esm/dtls/prf/HandshakeTranscript.js.map +6 -0
- package/dist/esm/dtls/prf/TlsPrf.d.ts +82 -0
- package/dist/esm/dtls/prf/TlsPrf.d.ts.map +1 -0
- package/dist/esm/dtls/prf/TlsPrf.js +101 -0
- package/dist/esm/dtls/prf/TlsPrf.js.map +6 -0
- package/dist/esm/dtls/prf/index.d.ts +13 -0
- package/dist/esm/dtls/prf/index.d.ts.map +1 -0
- package/dist/esm/dtls/prf/index.js +12 -0
- package/dist/esm/dtls/prf/index.js.map +6 -0
- package/dist/esm/dtls/record/AesCcm8.d.ts +32 -0
- package/dist/esm/dtls/record/AesCcm8.d.ts.map +1 -0
- package/dist/esm/dtls/record/AesCcm8.js +58 -0
- package/dist/esm/dtls/record/AesCcm8.js.map +6 -0
- package/dist/esm/dtls/record/AntiReplayWindow.d.ts +38 -0
- package/dist/esm/dtls/record/AntiReplayWindow.d.ts.map +1 -0
- package/dist/esm/dtls/record/AntiReplayWindow.js +64 -0
- package/dist/esm/dtls/record/AntiReplayWindow.js.map +6 -0
- package/dist/esm/dtls/record/ContentType.d.ts +19 -0
- package/dist/esm/dtls/record/ContentType.d.ts.map +1 -0
- package/dist/esm/dtls/record/ContentType.js +19 -0
- package/dist/esm/dtls/record/ContentType.js.map +6 -0
- package/dist/esm/dtls/record/DtlsCipherState.d.ts +79 -0
- package/dist/esm/dtls/record/DtlsCipherState.d.ts.map +1 -0
- package/dist/esm/dtls/record/DtlsCipherState.js +153 -0
- package/dist/esm/dtls/record/DtlsCipherState.js.map +6 -0
- package/dist/esm/dtls/record/DtlsRecord.d.ts +89 -0
- package/dist/esm/dtls/record/DtlsRecord.d.ts.map +1 -0
- package/dist/esm/dtls/record/DtlsRecord.js +175 -0
- package/dist/esm/dtls/record/DtlsRecord.js.map +6 -0
- package/dist/esm/dtls/record/index.d.ts +15 -0
- package/dist/esm/dtls/record/index.d.ts.map +1 -0
- package/dist/esm/dtls/record/index.js +29 -0
- package/dist/esm/dtls/record/index.js.map +6 -0
- package/dist/esm/index.d.ts +32 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +74 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/otbr-rest/OtbrRestCapability.d.ts +22 -0
- package/dist/esm/otbr-rest/OtbrRestCapability.d.ts.map +1 -0
- package/dist/esm/otbr-rest/OtbrRestCapability.js +6 -0
- package/dist/esm/otbr-rest/OtbrRestCapability.js.map +6 -0
- package/dist/esm/otbr-rest/OtbrRestClient.d.ts +257 -0
- package/dist/esm/otbr-rest/OtbrRestClient.d.ts.map +1 -0
- package/dist/esm/otbr-rest/OtbrRestClient.js +524 -0
- package/dist/esm/otbr-rest/OtbrRestClient.js.map +6 -0
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts +88 -0
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -0
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js +136 -0
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js.map +6 -0
- package/dist/esm/otbr-rest/OtbrRestError.d.ts +18 -0
- package/dist/esm/otbr-rest/OtbrRestError.d.ts.map +1 -0
- package/dist/esm/otbr-rest/OtbrRestError.js +22 -0
- package/dist/esm/otbr-rest/OtbrRestError.js.map +6 -0
- package/dist/esm/otbr-rest/OtbrRestProbe.d.ts +17 -0
- package/dist/esm/otbr-rest/OtbrRestProbe.d.ts.map +1 -0
- package/dist/esm/otbr-rest/OtbrRestProbe.js +76 -0
- package/dist/esm/otbr-rest/OtbrRestProbe.js.map +6 -0
- package/dist/esm/otbr-rest/caseNormalizer.d.ts +12 -0
- package/dist/esm/otbr-rest/caseNormalizer.d.ts.map +1 -0
- package/dist/esm/otbr-rest/caseNormalizer.js +39 -0
- package/dist/esm/otbr-rest/caseNormalizer.js.map +6 -0
- package/dist/esm/otbr-rest/index.d.ts +15 -0
- package/dist/esm/otbr-rest/index.d.ts.map +1 -0
- package/dist/esm/otbr-rest/index.js +20 -0
- package/dist/esm/otbr-rest/index.js.map +6 -0
- package/dist/esm/otbr-rest/translation.d.ts +24 -0
- package/dist/esm/otbr-rest/translation.d.ts.map +1 -0
- package/dist/esm/otbr-rest/translation.js +281 -0
- package/dist/esm/otbr-rest/translation.js.map +6 -0
- package/dist/esm/package.json +6 -0
- package/dist/esm/selection/index.d.ts +11 -0
- package/dist/esm/selection/index.d.ts.map +1 -0
- package/dist/esm/selection/index.js +16 -0
- package/dist/esm/selection/index.js.map +6 -0
- package/dist/esm/selection/selectBr.d.ts +37 -0
- package/dist/esm/selection/selectBr.d.ts.map +1 -0
- package/dist/esm/selection/selectBr.js +46 -0
- package/dist/esm/selection/selectBr.js.map +6 -0
- package/dist/esm/selection/selectSource.d.ts +32 -0
- package/dist/esm/selection/selectSource.d.ts.map +1 -0
- package/dist/esm/selection/selectSource.js +23 -0
- package/dist/esm/selection/selectSource.js.map +6 -0
- package/dist/esm/selection/withExtPanIdLock.d.ts +23 -0
- package/dist/esm/selection/withExtPanIdLock.d.ts.map +1 -0
- package/dist/esm/selection/withExtPanIdLock.js +30 -0
- package/dist/esm/selection/withExtPanIdLock.js.map +6 -0
- package/dist/esm/tlv/BasicTlvCodec.d.ts +22 -0
- package/dist/esm/tlv/BasicTlvCodec.d.ts.map +1 -0
- package/dist/esm/tlv/BasicTlvCodec.js +77 -0
- package/dist/esm/tlv/BasicTlvCodec.js.map +6 -0
- package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts +30 -0
- package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts.map +1 -0
- package/dist/esm/tlv/NetworkDiagnosticTlv.js +21 -0
- package/dist/esm/tlv/NetworkDiagnosticTlv.js.map +6 -0
- package/dist/esm/tlv/TypeListTlv.d.ts +23 -0
- package/dist/esm/tlv/TypeListTlv.d.ts.map +1 -0
- package/dist/esm/tlv/TypeListTlv.js +29 -0
- package/dist/esm/tlv/TypeListTlv.js.map +6 -0
- package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts +22 -0
- package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -0
- package/dist/esm/tlv/diag/ChildIpv6AddressList.js +28 -0
- package/dist/esm/tlv/diag/ChildIpv6AddressList.js.map +6 -0
- package/dist/esm/tlv/diag/ChildTable.d.ts +29 -0
- package/dist/esm/tlv/diag/ChildTable.d.ts.map +1 -0
- package/dist/esm/tlv/diag/ChildTable.js +71 -0
- package/dist/esm/tlv/diag/ChildTable.js.map +6 -0
- package/dist/esm/tlv/diag/Connectivity.d.ts +45 -0
- package/dist/esm/tlv/diag/Connectivity.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Connectivity.js +79 -0
- package/dist/esm/tlv/diag/Connectivity.js.map +6 -0
- package/dist/esm/tlv/diag/Ipv6AddressList.d.ts +21 -0
- package/dist/esm/tlv/diag/Ipv6AddressList.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Ipv6AddressList.js +41 -0
- package/dist/esm/tlv/diag/Ipv6AddressList.js.map +6 -0
- package/dist/esm/tlv/diag/LeaderData.d.ts +28 -0
- package/dist/esm/tlv/diag/LeaderData.d.ts.map +1 -0
- package/dist/esm/tlv/diag/LeaderData.js +44 -0
- package/dist/esm/tlv/diag/LeaderData.js.map +6 -0
- package/dist/esm/tlv/diag/MacCounters.d.ts +28 -0
- package/dist/esm/tlv/diag/MacCounters.d.ts.map +1 -0
- package/dist/esm/tlv/diag/MacCounters.js +65 -0
- package/dist/esm/tlv/diag/MacCounters.js.map +6 -0
- package/dist/esm/tlv/diag/MleCounters.d.ts +41 -0
- package/dist/esm/tlv/diag/MleCounters.d.ts.map +1 -0
- package/dist/esm/tlv/diag/MleCounters.js +98 -0
- package/dist/esm/tlv/diag/MleCounters.js.map +6 -0
- package/dist/esm/tlv/diag/Mode.d.ts +26 -0
- package/dist/esm/tlv/diag/Mode.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Mode.js +37 -0
- package/dist/esm/tlv/diag/Mode.js.map +6 -0
- package/dist/esm/tlv/diag/NetworkData.d.ts +93 -0
- package/dist/esm/tlv/diag/NetworkData.d.ts.map +1 -0
- package/dist/esm/tlv/diag/NetworkData.js +137 -0
- package/dist/esm/tlv/diag/NetworkData.js.map +6 -0
- package/dist/esm/tlv/diag/Primitives.d.ts +34 -0
- package/dist/esm/tlv/diag/Primitives.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Primitives.js +143 -0
- package/dist/esm/tlv/diag/Primitives.js.map +6 -0
- package/dist/esm/tlv/diag/Route64.d.ts +42 -0
- package/dist/esm/tlv/diag/Route64.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Route64.js +78 -0
- package/dist/esm/tlv/diag/Route64.js.map +6 -0
- package/dist/esm/tlv/diag/RouterNeighbor.d.ts +46 -0
- package/dist/esm/tlv/diag/RouterNeighbor.d.ts.map +1 -0
- package/dist/esm/tlv/diag/RouterNeighbor.js +45 -0
- package/dist/esm/tlv/diag/RouterNeighbor.js.map +6 -0
- package/dist/esm/tlv/diag/Timeout.d.ts +17 -0
- package/dist/esm/tlv/diag/Timeout.d.ts.map +1 -0
- package/dist/esm/tlv/diag/Timeout.js +33 -0
- package/dist/esm/tlv/diag/Timeout.js.map +6 -0
- package/dist/esm/tlv/diag/VendorInfo.d.ts +35 -0
- package/dist/esm/tlv/diag/VendorInfo.d.ts.map +1 -0
- package/dist/esm/tlv/diag/VendorInfo.js +110 -0
- package/dist/esm/tlv/diag/VendorInfo.js.map +6 -0
- package/dist/esm/tlv/diag/index.d.ts +26 -0
- package/dist/esm/tlv/diag/index.d.ts.map +1 -0
- package/dist/esm/tlv/diag/index.js +55 -0
- package/dist/esm/tlv/diag/index.js.map +6 -0
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts +21 -0
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -0
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.js +28 -0
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.js.map +6 -0
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts +27 -0
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -0
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js +42 -0
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js.map +6 -0
- package/dist/esm/tlv/networkDiagTlvTypes.d.ts +59 -0
- package/dist/esm/tlv/networkDiagTlvTypes.d.ts.map +1 -0
- package/dist/esm/tlv/networkDiagTlvTypes.js +56 -0
- package/dist/esm/tlv/networkDiagTlvTypes.js.map +6 -0
- package/dist/esm/util/meshLocalAddr.d.ts +27 -0
- package/dist/esm/util/meshLocalAddr.d.ts.map +1 -0
- package/dist/esm/util/meshLocalAddr.js +47 -0
- package/dist/esm/util/meshLocalAddr.js.map +6 -0
- package/package.json +73 -0
- package/src/coap/CoapClient.ts +355 -0
- package/src/coap/CoapMessage.ts +190 -0
- package/src/coap/index.ts +8 -0
- package/src/commissioner/Commissioner.ts +205 -0
- package/src/commissioner/LeadKa.ts +48 -0
- package/src/commissioner/LeadPet.ts +53 -0
- package/src/commissioner/index.ts +17 -0
- package/src/credentials/ThreadCredentialsRegistry.ts +117 -0
- package/src/credentials/ThreadNetworkCredentials.ts +26 -0
- package/src/credentials/index.ts +8 -0
- package/src/crypto/AesCmacPrf128.ts +101 -0
- package/src/crypto/Pbkdf2AesCmac.ts +57 -0
- package/src/crypto/Pskc.ts +57 -0
- package/src/crypto/index.ts +9 -0
- package/src/dataset/OperationalDataset.ts +326 -0
- package/src/dataset/SecurityPolicy.ts +48 -0
- package/src/dataset/errors.ts +10 -0
- package/src/dataset/index.ts +9 -0
- package/src/dataset/meshcopTlvTypes.ts +69 -0
- package/src/diagnostic/DefaultTlvSet.ts +31 -0
- package/src/diagnostic/DiagnosticResponse.ts +45 -0
- package/src/diagnostic/DiagnosticSource.ts +66 -0
- package/src/diagnostic/MeshCopDiagnosticSource.ts +808 -0
- package/src/diagnostic/connectMeshcop.ts +122 -0
- package/src/diagnostic/errors.ts +10 -0
- package/src/diagnostic/index.ts +13 -0
- package/src/discovery/BorderRouterEntry.ts +54 -0
- package/src/discovery/BorderRouterRegistry.ts +645 -0
- package/src/discovery/DnssdLikeTypes.ts +51 -0
- package/src/discovery/index.ts +8 -0
- package/src/dtls/channel/DtlsChannel.ts +42 -0
- package/src/dtls/channel/DtlsConnectOpts.ts +50 -0
- package/src/dtls/channel/DtlsRetransmitTimer.ts +107 -0
- package/src/dtls/channel/NobleDtlsChannel.ts +519 -0
- package/src/dtls/channel/connectDtls.ts +26 -0
- package/src/dtls/channel/index.ts +15 -0
- package/src/dtls/ecjpake/EcJpakePms.ts +65 -0
- package/src/dtls/ecjpake/EcJpakeRound.ts +279 -0
- package/src/dtls/ecjpake/SchnorrZkp.ts +193 -0
- package/src/dtls/ecjpake/index.ts +29 -0
- package/src/dtls/handshake/ChangeCipherSpec.ts +32 -0
- package/src/dtls/handshake/ClientHelloMessage.ts +150 -0
- package/src/dtls/handshake/ClientKeyExchangeMessage.ts +25 -0
- package/src/dtls/handshake/DtlsClient.ts +610 -0
- package/src/dtls/handshake/FinishedMessage.ts +36 -0
- package/src/dtls/handshake/HandshakeMessage.ts +144 -0
- package/src/dtls/handshake/HandshakeType.ts +35 -0
- package/src/dtls/handshake/HelloVerifyRequestMessage.ts +47 -0
- package/src/dtls/handshake/ServerHelloDoneMessage.ts +20 -0
- package/src/dtls/handshake/ServerHelloMessage.ts +129 -0
- package/src/dtls/handshake/ServerKeyExchangeMessage.ts +31 -0
- package/src/dtls/handshake/index.ts +15 -0
- package/src/dtls/prf/HandshakeTranscript.ts +52 -0
- package/src/dtls/prf/TlsPrf.ts +173 -0
- package/src/dtls/prf/index.ts +14 -0
- package/src/dtls/record/AesCcm8.ts +83 -0
- package/src/dtls/record/AntiReplayWindow.ts +87 -0
- package/src/dtls/record/ContentType.ts +23 -0
- package/src/dtls/record/DtlsCipherState.ts +202 -0
- package/src/dtls/record/DtlsRecord.ts +249 -0
- package/src/dtls/record/index.ts +26 -0
- package/src/index.ts +93 -0
- package/src/otbr-rest/OtbrRestCapability.ts +22 -0
- package/src/otbr-rest/OtbrRestClient.ts +644 -0
- package/src/otbr-rest/OtbrRestDiagnosticSource.ts +172 -0
- package/src/otbr-rest/OtbrRestError.ts +29 -0
- package/src/otbr-rest/OtbrRestProbe.ts +85 -0
- package/src/otbr-rest/caseNormalizer.ts +49 -0
- package/src/otbr-rest/index.ts +21 -0
- package/src/otbr-rest/translation.ts +344 -0
- package/src/selection/index.ts +11 -0
- package/src/selection/selectBr.ts +77 -0
- package/src/selection/selectSource.ts +51 -0
- package/src/selection/withExtPanIdLock.ts +40 -0
- package/src/tlv/BasicTlvCodec.ts +83 -0
- package/src/tlv/NetworkDiagnosticTlv.ts +37 -0
- package/src/tlv/TypeListTlv.ts +38 -0
- package/src/tlv/diag/ChildIpv6AddressList.ts +41 -0
- package/src/tlv/diag/ChildTable.ts +92 -0
- package/src/tlv/diag/Connectivity.ts +115 -0
- package/src/tlv/diag/Ipv6AddressList.ts +47 -0
- package/src/tlv/diag/LeaderData.ts +59 -0
- package/src/tlv/diag/MacCounters.ts +84 -0
- package/src/tlv/diag/MleCounters.ts +147 -0
- package/src/tlv/diag/Mode.ts +52 -0
- package/src/tlv/diag/NetworkData.ts +241 -0
- package/src/tlv/diag/Primitives.ts +146 -0
- package/src/tlv/diag/Route64.ts +118 -0
- package/src/tlv/diag/RouterNeighbor.ts +85 -0
- package/src/tlv/diag/Timeout.ts +36 -0
- package/src/tlv/diag/VendorInfo.ts +113 -0
- package/src/tlv/diag/index.ts +59 -0
- package/src/tlv/meshcop/Ip6AddressTlv.ts +36 -0
- package/src/tlv/meshcop/UdpEncapsulationTlv.ts +57 -0
- package/src/tlv/networkDiagTlvTypes.ts +69 -0
- package/src/tsconfig.json +21 -0
- package/src/util/meshLocalAddr.ts +63 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { InternalError } from "@matter/general";
|
|
8
|
+
import { createCipheriv, createDecipheriv } from "node:crypto";
|
|
9
|
+
import { DtlsError } from "../channel/DtlsChannel.js";
|
|
10
|
+
|
|
11
|
+
const KEY_LEN = 16;
|
|
12
|
+
const TAG_LEN = 8;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* AES-128-CCM with an 8-octet authentication tag, the AEAD primitive used by the
|
|
16
|
+
* `TLS_ECJPAKE_WITH_AES_128_CCM_8` cipher suite (RFC 6655 §3, RFC 3610).
|
|
17
|
+
*
|
|
18
|
+
* Wraps Node's `aes-128-ccm` with a fixed 8-byte tag length and returns
|
|
19
|
+
* `ciphertext || tag` to match the wire layout expected by the DTLS record layer.
|
|
20
|
+
*
|
|
21
|
+
* The 12-byte nonce length implies CCM L=3 (15 - 12), giving a 2^24 byte payload
|
|
22
|
+
* limit per record — well above the DTLS 16 KiB record cap.
|
|
23
|
+
*/
|
|
24
|
+
export namespace AesCcm8 {
|
|
25
|
+
export interface EncryptArgs {
|
|
26
|
+
key: Uint8Array;
|
|
27
|
+
nonce: Uint8Array;
|
|
28
|
+
aad: Uint8Array;
|
|
29
|
+
plaintext: Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface DecryptArgs {
|
|
33
|
+
key: Uint8Array;
|
|
34
|
+
nonce: Uint8Array;
|
|
35
|
+
aad: Uint8Array;
|
|
36
|
+
ciphertextWithTag: Uint8Array;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function encrypt({ key, nonce, aad, plaintext }: EncryptArgs): Uint8Array {
|
|
40
|
+
if (key.length !== KEY_LEN) {
|
|
41
|
+
throw new InternalError(`AES-128-CCM-8 key must be ${KEY_LEN} bytes, got ${key.length}`);
|
|
42
|
+
}
|
|
43
|
+
const cipher = createCipheriv("aes-128-ccm", key, nonce, { authTagLength: TAG_LEN });
|
|
44
|
+
cipher.setAAD(aad, { plaintextLength: plaintext.length });
|
|
45
|
+
const body = cipher.update(plaintext);
|
|
46
|
+
const tail = cipher.final();
|
|
47
|
+
const tag = cipher.getAuthTag();
|
|
48
|
+
|
|
49
|
+
const out = new Uint8Array(plaintext.length + TAG_LEN);
|
|
50
|
+
out.set(body, 0);
|
|
51
|
+
if (tail.length > 0) {
|
|
52
|
+
out.set(tail, body.length);
|
|
53
|
+
}
|
|
54
|
+
out.set(tag, plaintext.length);
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function decrypt({ key, nonce, aad, ciphertextWithTag }: DecryptArgs): Uint8Array {
|
|
59
|
+
if (key.length !== KEY_LEN) {
|
|
60
|
+
throw new InternalError(`AES-128-CCM-8 key must be ${KEY_LEN} bytes, got ${key.length}`);
|
|
61
|
+
}
|
|
62
|
+
if (ciphertextWithTag.length < TAG_LEN) {
|
|
63
|
+
throw new DtlsError(`AES-128-CCM-8 input shorter than ${TAG_LEN}-byte tag`);
|
|
64
|
+
}
|
|
65
|
+
const ctLen = ciphertextWithTag.length - TAG_LEN;
|
|
66
|
+
const ct = ciphertextWithTag.subarray(0, ctLen);
|
|
67
|
+
const tag = ciphertextWithTag.subarray(ctLen);
|
|
68
|
+
|
|
69
|
+
const decipher = createDecipheriv("aes-128-ccm", key, nonce, { authTagLength: TAG_LEN });
|
|
70
|
+
decipher.setAAD(aad, { plaintextLength: ctLen });
|
|
71
|
+
decipher.setAuthTag(tag);
|
|
72
|
+
const body = decipher.update(ct);
|
|
73
|
+
// CCM .final() throws on tag mismatch; bubble up unchanged.
|
|
74
|
+
const tail = decipher.final();
|
|
75
|
+
|
|
76
|
+
const out = new Uint8Array(ctLen);
|
|
77
|
+
out.set(body, 0);
|
|
78
|
+
if (tail.length > 0) {
|
|
79
|
+
out.set(tail, body.length);
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { InternalError } from "@matter/general";
|
|
8
|
+
|
|
9
|
+
const WINDOW_SIZE = 64n;
|
|
10
|
+
const WINDOW_MASK = (1n << WINDOW_SIZE) - 1n;
|
|
11
|
+
const MAX_SEQ = (1n << 48n) - 1n;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* DTLS 1.2 sliding-window anti-replay tracker (RFC 6347 §4.1.2.6).
|
|
15
|
+
*
|
|
16
|
+
* Maintains the rightmost (highest) accepted sequence number and a 64-bit
|
|
17
|
+
* bitmap of which prior numbers within the window have been seen. `check`
|
|
18
|
+
* combines the "is this in-window?" / "is this fresh?" / "mark as seen" steps
|
|
19
|
+
* into a single atomic update so callers can use it as a guard:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* if (!window.check(seqNum)) {
|
|
23
|
+
* // discard or alert
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Per the RFC, the window is initialised empty (no sequence numbers seen yet)
|
|
28
|
+
* and the first valid record sets the rightmost edge.
|
|
29
|
+
*/
|
|
30
|
+
export class AntiReplayWindow {
|
|
31
|
+
/** Highest sequence number observed so far, or `-1n` if none. */
|
|
32
|
+
#rightmost = -1n;
|
|
33
|
+
/**
|
|
34
|
+
* Bitmap of accepted sequence numbers in the closed range [rightmost-63, rightmost].
|
|
35
|
+
* Bit 0 represents `rightmost`, bit 1 represents `rightmost-1`, etc.
|
|
36
|
+
*/
|
|
37
|
+
#window = 0n;
|
|
38
|
+
|
|
39
|
+
/** Window size as defined by RFC 6347 §4.1.2.6 (typically 32 or 64; we use 64). */
|
|
40
|
+
static readonly WINDOW_SIZE = Number(WINDOW_SIZE);
|
|
41
|
+
|
|
42
|
+
/** Highest sequence number recorded so far, or `-1n` before the first acceptance. */
|
|
43
|
+
get rightmost(): bigint {
|
|
44
|
+
return this.#rightmost;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Test+mark a sequence number. Returns `true` and records it on first sight,
|
|
49
|
+
* `false` if the number is a replay or older than the trailing edge.
|
|
50
|
+
*
|
|
51
|
+
* Throws on a negative or out-of-48-bit input — DTLS sequence numbers are
|
|
52
|
+
* 48-bit unsigned by construction; anything else is a programming error.
|
|
53
|
+
*/
|
|
54
|
+
check(seqNum: bigint): boolean {
|
|
55
|
+
if (seqNum < 0n || seqNum > MAX_SEQ) {
|
|
56
|
+
throw new InternalError(`AntiReplayWindow: seqNum ${seqNum} out of 48-bit range`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (seqNum > this.#rightmost) {
|
|
60
|
+
// Slide the window forward by `shift` positions and record the new rightmost.
|
|
61
|
+
if (this.#rightmost >= 0n) {
|
|
62
|
+
const shift = seqNum - this.#rightmost;
|
|
63
|
+
if (shift >= WINDOW_SIZE) {
|
|
64
|
+
this.#window = 1n;
|
|
65
|
+
} else {
|
|
66
|
+
this.#window = ((this.#window << shift) | 1n) & WINDOW_MASK;
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
this.#window = 1n;
|
|
70
|
+
}
|
|
71
|
+
this.#rightmost = seqNum;
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const offset = this.#rightmost - seqNum;
|
|
76
|
+
if (offset >= WINDOW_SIZE) {
|
|
77
|
+
// Older than the trailing edge — RFC 6347 mandates discard.
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const bit = 1n << offset;
|
|
81
|
+
if ((this.#window & bit) !== 0n) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
this.#window |= bit;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* DTLS 1.2 ContentType values (RFC 6347 §4.1, RFC 5246 §6.2.1).
|
|
9
|
+
* The four values listed below are the only ones we encode or accept on the wire;
|
|
10
|
+
* any other byte triggers a decode error.
|
|
11
|
+
*/
|
|
12
|
+
export const ContentType = {
|
|
13
|
+
CHANGE_CIPHER_SPEC: 20,
|
|
14
|
+
ALERT: 21,
|
|
15
|
+
HANDSHAKE: 22,
|
|
16
|
+
APPLICATION_DATA: 23,
|
|
17
|
+
} as const;
|
|
18
|
+
|
|
19
|
+
export type ContentType = (typeof ContentType)[keyof typeof ContentType];
|
|
20
|
+
|
|
21
|
+
export function isContentType(value: number): value is ContentType {
|
|
22
|
+
return value === 20 || value === 21 || value === 22 || value === 23;
|
|
23
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { InternalError } from "@matter/general";
|
|
8
|
+
import { AntiReplayWindow } from "./AntiReplayWindow.js";
|
|
9
|
+
import { ContentType } from "./ContentType.js";
|
|
10
|
+
import { DTLS_1_2_VERSION, type DtlsRecordCipherState } from "./DtlsRecord.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Materials a TLS 1.2 key block produces for `*_WITH_AES_128_CCM_8` (RFC 6655 §3,
|
|
14
|
+
* RFC 5246 §6.3): two AES-128 keys (`{client,server}_write_key`) and two 4-byte
|
|
15
|
+
* implicit-IV salts (`{client,server}_write_IV`). The PRF that derives them lands
|
|
16
|
+
* in sub-batch 4; sub-batch 2 only consumes the four byte arrays.
|
|
17
|
+
*/
|
|
18
|
+
export interface DtlsCipherStateInputs {
|
|
19
|
+
/** 16-byte AES key the client uses to encrypt outbound records. */
|
|
20
|
+
clientWriteKey: Uint8Array;
|
|
21
|
+
/** 16-byte AES key the server uses to encrypt outbound records. */
|
|
22
|
+
serverWriteKey: Uint8Array;
|
|
23
|
+
/** 4-byte client implicit-IV salt (`client_write_IV`). */
|
|
24
|
+
clientWriteSalt: Uint8Array;
|
|
25
|
+
/** 4-byte server implicit-IV salt (`server_write_IV`). */
|
|
26
|
+
serverWriteSalt: Uint8Array;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const KEY_LEN = 16;
|
|
30
|
+
const SALT_LEN = 4;
|
|
31
|
+
const NONCE_LEN = 12;
|
|
32
|
+
const AAD_LEN = 13;
|
|
33
|
+
const MAX_EPOCH = 0xffff;
|
|
34
|
+
const MAX_SEQ = (1n << 48n) - 1n;
|
|
35
|
+
|
|
36
|
+
function copyExpect(name: string, value: Uint8Array, expectedLen: number): Uint8Array {
|
|
37
|
+
if (value.length !== expectedLen) {
|
|
38
|
+
throw new InternalError(`DtlsCipherState ${name} must be ${expectedLen} bytes, got ${value.length}`);
|
|
39
|
+
}
|
|
40
|
+
return new Uint8Array(value);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Per-connection DTLS 1.2 record-layer cipher state for `TLS_ECJPAKE_WITH_AES_128_CCM_8`.
|
|
45
|
+
*
|
|
46
|
+
* Holds:
|
|
47
|
+
* - the four key-block byte arrays,
|
|
48
|
+
* - the local role (controls which write key/salt is used for encrypt vs decrypt),
|
|
49
|
+
* - per-direction epoch and sequence counters,
|
|
50
|
+
* - and a per-read-epoch {@link AntiReplayWindow} (RFC 6347 §4.1.2.6).
|
|
51
|
+
*
|
|
52
|
+
* Both epochs start at 0 (plaintext handshake records). After ChangeCipherSpec the
|
|
53
|
+
* sender bumps its own epoch and resets its sequence counter to 0; the handshake
|
|
54
|
+
* layer drives that via {@link advanceWriteEpoch} / {@link advanceReadEpoch}. The
|
|
55
|
+
* read window is allocated lazily for any epoch > 0 because plaintext records carry
|
|
56
|
+
* no AEAD tag and therefore cannot meaningfully participate in anti-replay.
|
|
57
|
+
*/
|
|
58
|
+
export class DtlsCipherState implements DtlsRecordCipherState {
|
|
59
|
+
readonly role: "client" | "server";
|
|
60
|
+
readonly #clientWriteKey: Uint8Array;
|
|
61
|
+
readonly #serverWriteKey: Uint8Array;
|
|
62
|
+
readonly #clientWriteSalt: Uint8Array;
|
|
63
|
+
readonly #serverWriteSalt: Uint8Array;
|
|
64
|
+
#writeEpoch = 0;
|
|
65
|
+
#writeSeq = 0n;
|
|
66
|
+
#readEpoch = 0;
|
|
67
|
+
#readWindow: AntiReplayWindow | undefined;
|
|
68
|
+
|
|
69
|
+
constructor(role: "client" | "server", inputs: DtlsCipherStateInputs) {
|
|
70
|
+
this.role = role;
|
|
71
|
+
this.#clientWriteKey = copyExpect("clientWriteKey", inputs.clientWriteKey, KEY_LEN);
|
|
72
|
+
this.#serverWriteKey = copyExpect("serverWriteKey", inputs.serverWriteKey, KEY_LEN);
|
|
73
|
+
this.#clientWriteSalt = copyExpect("clientWriteSalt", inputs.clientWriteSalt, SALT_LEN);
|
|
74
|
+
this.#serverWriteSalt = copyExpect("serverWriteSalt", inputs.serverWriteSalt, SALT_LEN);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
get writeEpoch(): number {
|
|
78
|
+
return this.#writeEpoch;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get readEpoch(): number {
|
|
82
|
+
return this.#readEpoch;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Most recently allocated outbound seq, or `-1n` before the first allocation in the current epoch. */
|
|
86
|
+
get lastWriteSeq(): bigint {
|
|
87
|
+
return this.#writeSeq - 1n;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Allocate the next outbound sequence number for the current write epoch and bump
|
|
92
|
+
* the counter. Throws if the 48-bit space is exhausted within an epoch.
|
|
93
|
+
*/
|
|
94
|
+
nextWriteSeq(): bigint {
|
|
95
|
+
if (this.#writeSeq > MAX_SEQ) {
|
|
96
|
+
throw new InternalError(
|
|
97
|
+
`DtlsCipherState write sequence_number space exhausted at epoch ${this.#writeEpoch}`,
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const seq = this.#writeSeq;
|
|
101
|
+
this.#writeSeq += 1n;
|
|
102
|
+
return seq;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Increment the outbound epoch (called once after sending ChangeCipherSpec) and reset
|
|
107
|
+
* the seq counter to 0 (RFC 6347 §4.1.2.5).
|
|
108
|
+
*/
|
|
109
|
+
advanceWriteEpoch(): void {
|
|
110
|
+
if (this.#writeEpoch >= MAX_EPOCH) {
|
|
111
|
+
throw new InternalError(`DtlsCipherState write epoch overflow`);
|
|
112
|
+
}
|
|
113
|
+
this.#writeEpoch += 1;
|
|
114
|
+
this.#writeSeq = 0n;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Increment the inbound epoch (called once after receiving ChangeCipherSpec) and
|
|
119
|
+
* reset the read-side anti-replay window for the new epoch.
|
|
120
|
+
*/
|
|
121
|
+
advanceReadEpoch(): void {
|
|
122
|
+
if (this.#readEpoch >= MAX_EPOCH) {
|
|
123
|
+
throw new InternalError(`DtlsCipherState read epoch overflow`);
|
|
124
|
+
}
|
|
125
|
+
this.#readEpoch += 1;
|
|
126
|
+
this.#readWindow = new AntiReplayWindow();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Test+mark an inbound (epoch, seqNum) pair. Returns false on replay or wrong epoch
|
|
131
|
+
* so callers can drop the record per RFC 6347 §4.1.2.6. Plaintext epoch=0 records
|
|
132
|
+
* are accepted unconditionally — they carry no MAC and replay is meaningless.
|
|
133
|
+
*/
|
|
134
|
+
acceptIncoming(epoch: number, seqNum: bigint): boolean {
|
|
135
|
+
if (epoch !== this.#readEpoch) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
if (epoch === 0) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
if (this.#readWindow === undefined) {
|
|
142
|
+
this.#readWindow = new AntiReplayWindow();
|
|
143
|
+
}
|
|
144
|
+
return this.#readWindow.check(seqNum);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
encryptParams(): { key: Uint8Array; salt: Uint8Array } {
|
|
148
|
+
return this.role === "client"
|
|
149
|
+
? { key: this.#clientWriteKey, salt: this.#clientWriteSalt }
|
|
150
|
+
: { key: this.#serverWriteKey, salt: this.#serverWriteSalt };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
decryptParams(): { key: Uint8Array; salt: Uint8Array } {
|
|
154
|
+
return this.role === "client"
|
|
155
|
+
? { key: this.#serverWriteKey, salt: this.#serverWriteSalt }
|
|
156
|
+
: { key: this.#clientWriteKey, salt: this.#clientWriteSalt };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
nonceFor(salt: Uint8Array, epoch: number, seqNum: bigint): Uint8Array {
|
|
160
|
+
if (salt.length !== SALT_LEN) {
|
|
161
|
+
throw new InternalError(`DtlsCipherState nonceFor: salt must be ${SALT_LEN} bytes, got ${salt.length}`);
|
|
162
|
+
}
|
|
163
|
+
if (epoch < 0 || epoch > MAX_EPOCH) {
|
|
164
|
+
throw new InternalError(`DtlsCipherState nonceFor: epoch ${epoch} out of range`);
|
|
165
|
+
}
|
|
166
|
+
if (seqNum < 0n || seqNum > MAX_SEQ) {
|
|
167
|
+
throw new InternalError(`DtlsCipherState nonceFor: seqNum ${seqNum} out of range`);
|
|
168
|
+
}
|
|
169
|
+
const out = new Uint8Array(NONCE_LEN);
|
|
170
|
+
out.set(salt, 0);
|
|
171
|
+
out[4] = (epoch >>> 8) & 0xff;
|
|
172
|
+
out[5] = epoch & 0xff;
|
|
173
|
+
for (let i = 0; i < 6; i++) {
|
|
174
|
+
out[6 + i] = Number((seqNum >> BigInt((5 - i) * 8)) & 0xffn);
|
|
175
|
+
}
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
aadFor(type: ContentType, epoch: number, seqNum: bigint, plaintextLen: number): Uint8Array {
|
|
180
|
+
if (epoch < 0 || epoch > MAX_EPOCH) {
|
|
181
|
+
throw new InternalError(`DtlsCipherState aadFor: epoch ${epoch} out of range`);
|
|
182
|
+
}
|
|
183
|
+
if (seqNum < 0n || seqNum > MAX_SEQ) {
|
|
184
|
+
throw new InternalError(`DtlsCipherState aadFor: seqNum ${seqNum} out of range`);
|
|
185
|
+
}
|
|
186
|
+
if (plaintextLen < 0 || plaintextLen > 0xffff) {
|
|
187
|
+
throw new InternalError(`DtlsCipherState aadFor: plaintextLen ${plaintextLen} out of range`);
|
|
188
|
+
}
|
|
189
|
+
const out = new Uint8Array(AAD_LEN);
|
|
190
|
+
out[0] = (epoch >>> 8) & 0xff;
|
|
191
|
+
out[1] = epoch & 0xff;
|
|
192
|
+
for (let i = 0; i < 6; i++) {
|
|
193
|
+
out[2 + i] = Number((seqNum >> BigInt((5 - i) * 8)) & 0xffn);
|
|
194
|
+
}
|
|
195
|
+
out[8] = type;
|
|
196
|
+
out[9] = DTLS_1_2_VERSION.major;
|
|
197
|
+
out[10] = DTLS_1_2_VERSION.minor;
|
|
198
|
+
out[11] = (plaintextLen >>> 8) & 0xff;
|
|
199
|
+
out[12] = plaintextLen & 0xff;
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { InternalError, MatterError } from "@matter/general";
|
|
8
|
+
import { DtlsError } from "../channel/DtlsChannel.js";
|
|
9
|
+
import { AesCcm8 } from "./AesCcm8.js";
|
|
10
|
+
import { ContentType, isContentType } from "./ContentType.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* DTLS 1.2 protocol version on the wire is `{ major: 0xfe, minor: 0xfd }`,
|
|
14
|
+
* the 1's-complement convention TLS uses (RFC 6347 §4.1).
|
|
15
|
+
*/
|
|
16
|
+
export const DTLS_1_2_VERSION = Object.freeze({ major: 0xfe, minor: 0xfd });
|
|
17
|
+
|
|
18
|
+
/** Maximum length of the DTLSCiphertext.fragment field (RFC 6347 §4.1). */
|
|
19
|
+
export const DTLS_MAX_FRAGMENT_LEN = 1 << 14;
|
|
20
|
+
|
|
21
|
+
/** 8-byte explicit AEAD nonce + 8-byte CCM-8 tag overhead per RFC 6655 §3. */
|
|
22
|
+
export const DTLS_AEAD_OVERHEAD = 16;
|
|
23
|
+
|
|
24
|
+
/** Length of the DTLS record header (RFC 6347 §4.1). */
|
|
25
|
+
export const DTLS_HEADER_LEN = 13;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Minimal cipher-state surface the record codec needs. The full {@link DtlsCipherState}
|
|
29
|
+
* class implements this and adds key-block bookkeeping; this interface lets the codec
|
|
30
|
+
* accept either the class or a stand-in test double without forcing a circular import.
|
|
31
|
+
*
|
|
32
|
+
* `acceptIncoming`, when present, is invoked after a successful AEAD decrypt to apply
|
|
33
|
+
* the RFC 6347 §4.1.2.6 anti-replay window. Returning `false` causes the codec to throw
|
|
34
|
+
* a {@link DtlsReplayError}.
|
|
35
|
+
*/
|
|
36
|
+
export interface DtlsRecordCipherState {
|
|
37
|
+
/** AES key + 4-byte salt to use for outbound (encrypt) records. */
|
|
38
|
+
encryptParams(): { key: Uint8Array; salt: Uint8Array };
|
|
39
|
+
/** AES key + 4-byte salt to use for inbound (decrypt) records. */
|
|
40
|
+
decryptParams(): { key: Uint8Array; salt: Uint8Array };
|
|
41
|
+
/** Build the 12-byte CCM nonce: salt(4) || epoch(2) || seq(6). */
|
|
42
|
+
nonceFor(salt: Uint8Array, epoch: number, seqNum: bigint): Uint8Array;
|
|
43
|
+
/** Build the 13-byte DTLS AAD: epoch||seq(8) || type(1) || version(2) || plaintextLen(2). */
|
|
44
|
+
aadFor(type: ContentType, epoch: number, seqNum: bigint, plaintextLen: number): Uint8Array;
|
|
45
|
+
/** Optional read-side replay-window check; absent on test doubles or pre-handshake states. */
|
|
46
|
+
acceptIncoming?(epoch: number, seqNum: bigint): boolean;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Thrown by {@link DtlsRecord.decode} when a successfully-decrypted record is rejected
|
|
51
|
+
* by the read-side anti-replay window. Distinguishable from AEAD failures so the caller
|
|
52
|
+
* can log/drop without treating the record as a fatal error.
|
|
53
|
+
*/
|
|
54
|
+
export class DtlsReplayError extends MatterError {
|
|
55
|
+
readonly epoch: number;
|
|
56
|
+
readonly sequenceNumber: bigint;
|
|
57
|
+
|
|
58
|
+
constructor(epoch: number, sequenceNumber: bigint) {
|
|
59
|
+
super(`DTLS replay or wrong-epoch record at epoch=${epoch} seq=${sequenceNumber}`);
|
|
60
|
+
this.name = "DtlsReplayError";
|
|
61
|
+
this.epoch = epoch;
|
|
62
|
+
this.sequenceNumber = sequenceNumber;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Decoded DTLS 1.2 record (RFC 6347 §4.1).
|
|
68
|
+
* `fragment` is always the *plaintext* payload — for epoch=0 records it is the wire bytes
|
|
69
|
+
* verbatim, for epoch>0 records it is the AEAD-decrypted body.
|
|
70
|
+
*/
|
|
71
|
+
export interface DtlsRecord {
|
|
72
|
+
type: ContentType;
|
|
73
|
+
epoch: number;
|
|
74
|
+
sequenceNumber: bigint;
|
|
75
|
+
fragment: Uint8Array;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const MAX_EPOCH = 0xffff;
|
|
79
|
+
const MAX_SEQ = (1n << 48n) - 1n;
|
|
80
|
+
|
|
81
|
+
function writeUint16BE(buf: Uint8Array, offset: number, value: number): void {
|
|
82
|
+
buf[offset] = (value >>> 8) & 0xff;
|
|
83
|
+
buf[offset + 1] = value & 0xff;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function readUint16BE(buf: Uint8Array, offset: number): number {
|
|
87
|
+
return (buf[offset] << 8) | buf[offset + 1];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function writeUint48BE(buf: Uint8Array, offset: number, value: bigint): void {
|
|
91
|
+
if (value < 0n || value > MAX_SEQ) {
|
|
92
|
+
throw new InternalError(`DTLS sequence_number out of range: ${value}`);
|
|
93
|
+
}
|
|
94
|
+
buf[offset] = Number((value >> 40n) & 0xffn);
|
|
95
|
+
buf[offset + 1] = Number((value >> 32n) & 0xffn);
|
|
96
|
+
buf[offset + 2] = Number((value >> 24n) & 0xffn);
|
|
97
|
+
buf[offset + 3] = Number((value >> 16n) & 0xffn);
|
|
98
|
+
buf[offset + 4] = Number((value >> 8n) & 0xffn);
|
|
99
|
+
buf[offset + 5] = Number(value & 0xffn);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function readUint48BE(buf: Uint8Array, offset: number): bigint {
|
|
103
|
+
let v = 0n;
|
|
104
|
+
for (let i = 0; i < 6; i++) {
|
|
105
|
+
v = (v << 8n) | BigInt(buf[offset + i]);
|
|
106
|
+
}
|
|
107
|
+
return v;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* DTLS 1.2 record-layer codec.
|
|
112
|
+
*
|
|
113
|
+
* `encode` frames a record as `header(13) || fragment`; for `epoch > 0` the fragment is
|
|
114
|
+
* `explicit_nonce(8) || ciphertext(plaintext_len) || tag(8)` per RFC 6655 §3.
|
|
115
|
+
*
|
|
116
|
+
* `decode` parses one record off the front of the buffer and returns it together with
|
|
117
|
+
* the number of consumed bytes, so a caller can split multiple records concatenated in
|
|
118
|
+
* one UDP datagram. When the supplied state implements {@link DtlsRecordCipherState.acceptIncoming},
|
|
119
|
+
* decode invokes it after AEAD success and throws {@link DtlsReplayError} on rejection.
|
|
120
|
+
*/
|
|
121
|
+
export namespace DtlsRecord {
|
|
122
|
+
export function encode(record: DtlsRecord, state?: DtlsRecordCipherState): Uint8Array {
|
|
123
|
+
if (record.epoch < 0 || record.epoch > MAX_EPOCH) {
|
|
124
|
+
throw new InternalError(`DTLS epoch out of range: ${record.epoch}`);
|
|
125
|
+
}
|
|
126
|
+
if (record.sequenceNumber < 0n || record.sequenceNumber > MAX_SEQ) {
|
|
127
|
+
throw new InternalError(`DTLS sequence_number out of range: ${record.sequenceNumber}`);
|
|
128
|
+
}
|
|
129
|
+
if (!isContentType(record.type)) {
|
|
130
|
+
throw new InternalError(`DTLS unknown ContentType: ${record.type}`);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let fragment: Uint8Array;
|
|
134
|
+
if (record.epoch === 0) {
|
|
135
|
+
if (record.fragment.length > DTLS_MAX_FRAGMENT_LEN) {
|
|
136
|
+
throw new InternalError(
|
|
137
|
+
`DTLS plaintext fragment too large: ${record.fragment.length} > ${DTLS_MAX_FRAGMENT_LEN}`,
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
fragment = record.fragment;
|
|
141
|
+
} else {
|
|
142
|
+
if (state === undefined) {
|
|
143
|
+
throw new InternalError(`DTLS encode at epoch ${record.epoch} requires cipher state`);
|
|
144
|
+
}
|
|
145
|
+
const plaintextLen = record.fragment.length;
|
|
146
|
+
if (plaintextLen + DTLS_AEAD_OVERHEAD > DTLS_MAX_FRAGMENT_LEN) {
|
|
147
|
+
throw new InternalError(
|
|
148
|
+
`DTLS encrypted fragment too large: ${plaintextLen + DTLS_AEAD_OVERHEAD} > ${DTLS_MAX_FRAGMENT_LEN}`,
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
const { key, salt } = state.encryptParams();
|
|
152
|
+
const nonce = state.nonceFor(salt, record.epoch, record.sequenceNumber);
|
|
153
|
+
const aad = state.aadFor(record.type, record.epoch, record.sequenceNumber, plaintextLen);
|
|
154
|
+
const cipherWithTag = AesCcm8.encrypt({ key, nonce, aad, plaintext: record.fragment });
|
|
155
|
+
|
|
156
|
+
fragment = new Uint8Array(8 + cipherWithTag.length);
|
|
157
|
+
// Explicit nonce on the wire mirrors the (epoch || seq) bytes of the AAD/nonce.
|
|
158
|
+
fragment[0] = (record.epoch >>> 8) & 0xff;
|
|
159
|
+
fragment[1] = record.epoch & 0xff;
|
|
160
|
+
writeUint48BE(fragment, 2, record.sequenceNumber);
|
|
161
|
+
fragment.set(cipherWithTag, 8);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const out = new Uint8Array(DTLS_HEADER_LEN + fragment.length);
|
|
165
|
+
out[0] = record.type;
|
|
166
|
+
out[1] = DTLS_1_2_VERSION.major;
|
|
167
|
+
out[2] = DTLS_1_2_VERSION.minor;
|
|
168
|
+
writeUint16BE(out, 3, record.epoch);
|
|
169
|
+
writeUint48BE(out, 5, record.sequenceNumber);
|
|
170
|
+
writeUint16BE(out, 11, fragment.length);
|
|
171
|
+
out.set(fragment, DTLS_HEADER_LEN);
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface DecodeResult {
|
|
176
|
+
record: DtlsRecord;
|
|
177
|
+
consumed: number;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function decode(bytes: Uint8Array, state?: DtlsRecordCipherState): DecodeResult {
|
|
181
|
+
if (bytes.length < DTLS_HEADER_LEN) {
|
|
182
|
+
throw new DtlsError(`DTLS record header truncated: have ${bytes.length}, need ${DTLS_HEADER_LEN}`);
|
|
183
|
+
}
|
|
184
|
+
const type = bytes[0];
|
|
185
|
+
if (!isContentType(type)) {
|
|
186
|
+
throw new DtlsError(`DTLS unknown ContentType: ${type}`);
|
|
187
|
+
}
|
|
188
|
+
const major = bytes[1];
|
|
189
|
+
const minor = bytes[2];
|
|
190
|
+
if (major !== DTLS_1_2_VERSION.major || minor !== DTLS_1_2_VERSION.minor) {
|
|
191
|
+
throw new DtlsError(
|
|
192
|
+
`DTLS unsupported version ${major.toString(16)}.${minor.toString(16)}; only DTLS 1.2 is supported`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
const epoch = readUint16BE(bytes, 3);
|
|
196
|
+
const sequenceNumber = readUint48BE(bytes, 5);
|
|
197
|
+
const length = readUint16BE(bytes, 11);
|
|
198
|
+
if (length > DTLS_MAX_FRAGMENT_LEN) {
|
|
199
|
+
throw new DtlsError(`DTLS fragment length ${length} exceeds limit ${DTLS_MAX_FRAGMENT_LEN}`);
|
|
200
|
+
}
|
|
201
|
+
const total = DTLS_HEADER_LEN + length;
|
|
202
|
+
if (bytes.length < total) {
|
|
203
|
+
throw new DtlsError(`DTLS record truncated: header says ${length}, have ${bytes.length - DTLS_HEADER_LEN}`);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
let fragment: Uint8Array;
|
|
207
|
+
if (epoch === 0) {
|
|
208
|
+
fragment = bytes.slice(DTLS_HEADER_LEN, total);
|
|
209
|
+
} else {
|
|
210
|
+
if (state === undefined) {
|
|
211
|
+
throw new InternalError(`DTLS decode at epoch ${epoch} requires cipher state`);
|
|
212
|
+
}
|
|
213
|
+
if (length < DTLS_AEAD_OVERHEAD) {
|
|
214
|
+
throw new DtlsError(
|
|
215
|
+
`DTLS encrypted fragment ${length} bytes < ${DTLS_AEAD_OVERHEAD}-byte AEAD overhead`,
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
// Wire layout: explicit_nonce(8) || ciphertext(N) || tag(8); plaintext length is N.
|
|
219
|
+
const explicitNonce = bytes.subarray(DTLS_HEADER_LEN, DTLS_HEADER_LEN + 8);
|
|
220
|
+
const cipherWithTag = bytes.subarray(DTLS_HEADER_LEN + 8, total);
|
|
221
|
+
const plaintextLen = cipherWithTag.length - 8;
|
|
222
|
+
|
|
223
|
+
const { key, salt } = state.decryptParams();
|
|
224
|
+
const wireEpoch = (explicitNonce[0] << 8) | explicitNonce[1];
|
|
225
|
+
let wireSeq = 0n;
|
|
226
|
+
for (let i = 2; i < 8; i++) {
|
|
227
|
+
wireSeq = (wireSeq << 8n) | BigInt(explicitNonce[i]);
|
|
228
|
+
}
|
|
229
|
+
if (wireEpoch !== epoch || wireSeq !== sequenceNumber) {
|
|
230
|
+
throw new DtlsError(
|
|
231
|
+
`DTLS explicit nonce ${wireEpoch}/${wireSeq} disagrees with header ${epoch}/${sequenceNumber}`,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
const nonce = state.nonceFor(salt, epoch, sequenceNumber);
|
|
235
|
+
const aad = state.aadFor(type, epoch, sequenceNumber, plaintextLen);
|
|
236
|
+
fragment = AesCcm8.decrypt({ key, nonce, aad, ciphertextWithTag: cipherWithTag });
|
|
237
|
+
// Anti-replay applies only to AEAD-protected records; epoch=0 plaintext has
|
|
238
|
+
// no integrity check that a replay tracker could meaningfully gate.
|
|
239
|
+
if (state.acceptIncoming !== undefined && !state.acceptIncoming(epoch, sequenceNumber)) {
|
|
240
|
+
throw new DtlsReplayError(epoch, sequenceNumber);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
record: { type, epoch, sequenceNumber, fragment },
|
|
246
|
+
consumed: total,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* DTLS 1.2 record layer for `TLS_ECJPAKE_WITH_AES_128_CCM_8`. Internal to `dtls/`;
|
|
9
|
+
* not re-exported from the package public API surface until the {@link DtlsChannel}
|
|
10
|
+
* interface ships in sub-batch 5.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export { AntiReplayWindow } from "./AntiReplayWindow.js";
|
|
14
|
+
export { ContentType, isContentType } from "./ContentType.js";
|
|
15
|
+
export { DtlsCipherState, type DtlsCipherStateInputs } from "./DtlsCipherState.js";
|
|
16
|
+
export {
|
|
17
|
+
DTLS_1_2_VERSION,
|
|
18
|
+
DTLS_AEAD_OVERHEAD,
|
|
19
|
+
DTLS_HEADER_LEN,
|
|
20
|
+
DTLS_MAX_FRAGMENT_LEN,
|
|
21
|
+
DtlsRecord,
|
|
22
|
+
DtlsReplayError,
|
|
23
|
+
type DtlsRecordCipherState,
|
|
24
|
+
} from "./DtlsRecord.js";
|
|
25
|
+
// AesCcm8 is intentionally NOT exported — keep the AEAD primitive internal so the
|
|
26
|
+
// only path to it is through DtlsRecord.encode/decode under a DtlsCipherState.
|