@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,279 @@
|
|
|
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 { p256 } from "@noble/curves/nist.js";
|
|
9
|
+
import { DtlsError } from "../channel/DtlsChannel.js";
|
|
10
|
+
import { SchnorrZkp, type SchnorrZkpGenerator } from "./SchnorrZkp.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* One half of an EC-JPAKE round-1 message: an ephemeral public key plus a Schnorr
|
|
14
|
+
* proof of knowledge of its private scalar against the curve generator.
|
|
15
|
+
*
|
|
16
|
+
* Wire (mbedTLS v3.6.6 `ecjpake_kkp_write`):
|
|
17
|
+
* ```
|
|
18
|
+
* uint8 X_len; uint8 X[X_len]; // X_len = 65 for P-256 uncompressed
|
|
19
|
+
* uint8 V_len; uint8 V[V_len]; // V_len = 65 for P-256 uncompressed
|
|
20
|
+
* uint8 r_len; uint8 r[r_len]; // r_len is minimal, leading zeros stripped
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface EcJpakeKeyKP {
|
|
24
|
+
/** SEC1-uncompressed public key `X = x*G`. */
|
|
25
|
+
X: Uint8Array;
|
|
26
|
+
/** Schnorr ZKP proving knowledge of `x`. */
|
|
27
|
+
zkp: SchnorrZkp;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const Point = p256.Point;
|
|
31
|
+
const N = Point.Fn.ORDER;
|
|
32
|
+
const POINT_LEN = 65;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* EC-JPAKE participant identifiers used in the ZKP challenge hash. These are the literal
|
|
36
|
+
* byte strings from mbedTLS `ecjpake_id[]` (mbedtls v3.6.6 `library/ecjpake.c`); the wire
|
|
37
|
+
* value is a hash input on both sides, so the strings must match between client and server.
|
|
38
|
+
*/
|
|
39
|
+
export const ECJPAKE_ID_CLIENT = "client";
|
|
40
|
+
export const ECJPAKE_ID_SERVER = "server";
|
|
41
|
+
|
|
42
|
+
function readU8(bytes: Uint8Array, offset: number): number {
|
|
43
|
+
if (offset >= bytes.length) {
|
|
44
|
+
throw new DtlsError(`unexpected end of buffer at offset ${offset}`);
|
|
45
|
+
}
|
|
46
|
+
return bytes[offset];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function readSlice(bytes: Uint8Array, offset: number, length: number): Uint8Array {
|
|
50
|
+
if (offset + length > bytes.length) {
|
|
51
|
+
throw new DtlsError(
|
|
52
|
+
`buffer too short: need ${length} bytes at offset ${offset}, have ${bytes.length - offset}`,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
// slice (copy) so parse outputs own their bytes; callers can pass subarray views safely.
|
|
56
|
+
return bytes.slice(offset, offset + length);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function validateKeyKP(keyKP: EcJpakeKeyKP): void {
|
|
60
|
+
if (keyKP.X.length !== POINT_LEN || keyKP.X[0] !== 0x04) {
|
|
61
|
+
throw new InternalError("X must be SEC1-uncompressed P-256 (65 bytes, 0x04 prefix)");
|
|
62
|
+
}
|
|
63
|
+
if (keyKP.zkp.V.length !== POINT_LEN || keyKP.zkp.V[0] !== 0x04) {
|
|
64
|
+
throw new InternalError("ZKP.V must be SEC1-uncompressed P-256 (65 bytes, 0x04 prefix)");
|
|
65
|
+
}
|
|
66
|
+
if (keyKP.zkp.r.length === 0 || keyKP.zkp.r.length > 255) {
|
|
67
|
+
throw new InternalError(`ZKP.r length must be 1..255, got ${keyKP.zkp.r.length}`);
|
|
68
|
+
}
|
|
69
|
+
// Minimal-encoding invariant: leading byte must be non-zero (except r === 0,
|
|
70
|
+
// already excluded above). mbedTLS produces the minimal form via mbedtls_mpi_size,
|
|
71
|
+
// so ours must too if we want byte-identical output.
|
|
72
|
+
if (keyKP.zkp.r[0] === 0x00) {
|
|
73
|
+
throw new InternalError("ZKP.r must be minimal big-endian (no leading zero)");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function keyKpEncodedLength(keyKP: EcJpakeKeyKP): number {
|
|
78
|
+
return 1 + POINT_LEN + 1 + POINT_LEN + 1 + keyKP.zkp.r.length;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function writeKeyKP(keyKP: EcJpakeKeyKP, out: Uint8Array, offset: number): number {
|
|
82
|
+
let p = offset;
|
|
83
|
+
out[p++] = POINT_LEN;
|
|
84
|
+
out.set(keyKP.X, p);
|
|
85
|
+
p += POINT_LEN;
|
|
86
|
+
out[p++] = POINT_LEN;
|
|
87
|
+
out.set(keyKP.zkp.V, p);
|
|
88
|
+
p += POINT_LEN;
|
|
89
|
+
out[p++] = keyKP.zkp.r.length;
|
|
90
|
+
out.set(keyKP.zkp.r, p);
|
|
91
|
+
p += keyKP.zkp.r.length;
|
|
92
|
+
return p;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function readKeyKP(bytes: Uint8Array, offset: number): { kp: EcJpakeKeyKP; nextOffset: number } {
|
|
96
|
+
let p = offset;
|
|
97
|
+
const xLen = readU8(bytes, p);
|
|
98
|
+
p += 1;
|
|
99
|
+
if (xLen !== POINT_LEN) {
|
|
100
|
+
throw new DtlsError(`expected P-256 point length ${POINT_LEN}, got ${xLen}`);
|
|
101
|
+
}
|
|
102
|
+
const X = readSlice(bytes, p, xLen);
|
|
103
|
+
p += xLen;
|
|
104
|
+
const vLen = readU8(bytes, p);
|
|
105
|
+
p += 1;
|
|
106
|
+
if (vLen !== POINT_LEN) {
|
|
107
|
+
throw new DtlsError(`expected P-256 ZKP.V length ${POINT_LEN}, got ${vLen}`);
|
|
108
|
+
}
|
|
109
|
+
const V = readSlice(bytes, p, vLen);
|
|
110
|
+
p += vLen;
|
|
111
|
+
const rLen = readU8(bytes, p);
|
|
112
|
+
p += 1;
|
|
113
|
+
if (rLen === 0) {
|
|
114
|
+
throw new DtlsError("ZKP.r length must be > 0");
|
|
115
|
+
}
|
|
116
|
+
const r = readSlice(bytes, p, rLen);
|
|
117
|
+
p += rLen;
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
kp: { X, zkp: { V, r } },
|
|
121
|
+
nextOffset: p,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* EC-JPAKE round 1 codec on top of the wire format that mbedTLS calls
|
|
127
|
+
* `ECJPAKEKeyKPPairList`: two `ECJPAKEKeyKP` structures back-to-back, no separator,
|
|
128
|
+
* no outer length (the carrying TLS extension layer adds the 2-byte length on the wire).
|
|
129
|
+
*
|
|
130
|
+
* Mirrors mbedTLS `ecjpake_kkpp_write` / `ecjpake_kkpp_read`.
|
|
131
|
+
*/
|
|
132
|
+
export const EcJpakeRound = {
|
|
133
|
+
/**
|
|
134
|
+
* Build a round-1 message for one role from two private scalars and two ephemeral
|
|
135
|
+
* scalars (one ephemeral per ZKP). Caller-supplied ephemerals make the output
|
|
136
|
+
* deterministic for testing — production callers must source them from a CSPRNG.
|
|
137
|
+
*
|
|
138
|
+
* `id` is `ECJPAKE_ID_CLIENT` for the joiner and `ECJPAKE_ID_SERVER` for the commissioner.
|
|
139
|
+
*/
|
|
140
|
+
buildRound1(args: { x1: bigint; x2: bigint; v1: bigint; v2: bigint; id: string }): {
|
|
141
|
+
kp1: EcJpakeKeyKP;
|
|
142
|
+
kp2: EcJpakeKeyKP;
|
|
143
|
+
} {
|
|
144
|
+
const { x1, x2, v1, v2, id } = args;
|
|
145
|
+
const X1 = Point.BASE.multiply(x1).toBytes(false);
|
|
146
|
+
const X2 = Point.BASE.multiply(x2).toBytes(false);
|
|
147
|
+
const zkp1 = SchnorrZkp.generate({ privateKey: x1, publicKey: X1, ephemeral: v1, id });
|
|
148
|
+
const zkp2 = SchnorrZkp.generate({ privateKey: x2, publicKey: X2, ephemeral: v2, id });
|
|
149
|
+
return {
|
|
150
|
+
kp1: { X: X1, zkp: zkp1 },
|
|
151
|
+
kp2: { X: X2, zkp: zkp2 },
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
serializeRound1(kp1: EcJpakeKeyKP, kp2: EcJpakeKeyKP): Uint8Array {
|
|
156
|
+
validateKeyKP(kp1);
|
|
157
|
+
validateKeyKP(kp2);
|
|
158
|
+
const out = new Uint8Array(keyKpEncodedLength(kp1) + keyKpEncodedLength(kp2));
|
|
159
|
+
const after1 = writeKeyKP(kp1, out, 0);
|
|
160
|
+
writeKeyKP(kp2, out, after1);
|
|
161
|
+
return out;
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
parseRound1(bytes: Uint8Array): { kp1: EcJpakeKeyKP; kp2: EcJpakeKeyKP } {
|
|
165
|
+
const first = readKeyKP(bytes, 0);
|
|
166
|
+
const second = readKeyKP(bytes, first.nextOffset);
|
|
167
|
+
if (second.nextOffset !== bytes.length) {
|
|
168
|
+
throw new DtlsError(`trailing bytes after round-1 pair: ${bytes.length - second.nextOffset} extra`);
|
|
169
|
+
}
|
|
170
|
+
return { kp1: first.kp, kp2: second.kp };
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Compute the round-2 composite generator `G' = Xp1 + Xp2 + Xm1` (mbedTLS
|
|
175
|
+
* `ecjpake_kkpp_write_round_two` / `ecjpake_kkpp_read_round_two`).
|
|
176
|
+
* Both sides use the same formula by symmetry — for the client `Xp1 = X3`,
|
|
177
|
+
* `Xp2 = X4`, `Xm1 = X1`; for the server `Xp1 = X1`, `Xp2 = X2`, `Xm1 = X3`.
|
|
178
|
+
*/
|
|
179
|
+
composeRound2Generator(args: { Xp1: Uint8Array; Xp2: Uint8Array; Xm1: Uint8Array }): SchnorrZkpGenerator {
|
|
180
|
+
const point = Point.fromBytes(args.Xp1).add(Point.fromBytes(args.Xp2)).add(Point.fromBytes(args.Xm1));
|
|
181
|
+
if (point.is0()) {
|
|
182
|
+
throw new DtlsError("round-2 generator G' must not be the point at infinity");
|
|
183
|
+
}
|
|
184
|
+
return { point, bytes: point.toBytes(false) };
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Build round 2 from the second private scalar `xm2`, the password (as the
|
|
189
|
+
* mbedTLS-style big-endian integer `s`), the composite generator `G'`, and a
|
|
190
|
+
* deterministic ephemeral `v`. Returns `Xm = (xm2 * s) * G'` plus a Schnorr
|
|
191
|
+
* ZKP proving knowledge of `xm = xm2 * s mod n` against `G'`.
|
|
192
|
+
*
|
|
193
|
+
* Caller-supplied `v` makes output deterministic for testing; production
|
|
194
|
+
* callers must source `v` from a CSPRNG.
|
|
195
|
+
*/
|
|
196
|
+
buildRound2(args: { xm2: bigint; s: bigint; v: bigint; id: string; generator: SchnorrZkpGenerator }): EcJpakeKeyKP {
|
|
197
|
+
const { xm2, s, v, id, generator } = args;
|
|
198
|
+
if (xm2 <= 0n || xm2 >= N) {
|
|
199
|
+
throw new InternalError("xm2 must be in [1, n-1]");
|
|
200
|
+
}
|
|
201
|
+
if (s <= 0n) {
|
|
202
|
+
throw new InternalError("s (password as integer) must be positive");
|
|
203
|
+
}
|
|
204
|
+
const xm = (xm2 * s) % N;
|
|
205
|
+
if (xm === 0n) {
|
|
206
|
+
throw new InternalError("xm = xm2*s mod n must be non-zero");
|
|
207
|
+
}
|
|
208
|
+
const Xm = generator.point.multiply(xm);
|
|
209
|
+
const XmBytes = Xm.toBytes(false);
|
|
210
|
+
const zkp = SchnorrZkp.generate({
|
|
211
|
+
privateKey: xm,
|
|
212
|
+
publicKey: XmBytes,
|
|
213
|
+
ephemeral: v,
|
|
214
|
+
id,
|
|
215
|
+
generator,
|
|
216
|
+
});
|
|
217
|
+
return { X: XmBytes, zkp };
|
|
218
|
+
},
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Serialise a round-2 message. When `prependEcParameters` is true the 3-byte
|
|
222
|
+
* `ECParameters{ named_curve, secp256r1 }` header is emitted before the
|
|
223
|
+
* `ECJPAKEKeyKP`. mbedTLS writes it inside `mbedtls_ecjpake_write_round_two`
|
|
224
|
+
* when role=SERVER (consumed by `ssl_write_server_key_exchange`).
|
|
225
|
+
* Server-side messages (ServerKeyExchange) use `true`; client-side
|
|
226
|
+
* (ClientKeyExchange) uses `false`.
|
|
227
|
+
*/
|
|
228
|
+
serializeRound2(kp: EcJpakeKeyKP, options: { prependEcParameters: boolean }): Uint8Array {
|
|
229
|
+
validateKeyKP(kp);
|
|
230
|
+
const headerLen = options.prependEcParameters ? 3 : 0;
|
|
231
|
+
const out = new Uint8Array(headerLen + keyKpEncodedLength(kp));
|
|
232
|
+
let p = 0;
|
|
233
|
+
if (options.prependEcParameters) {
|
|
234
|
+
out[p++] = 0x03;
|
|
235
|
+
out[p++] = 0x00;
|
|
236
|
+
out[p++] = 0x17;
|
|
237
|
+
}
|
|
238
|
+
writeKeyKP(kp, out, p);
|
|
239
|
+
return out;
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Parse a round-2 message. `expectEcParameters` must be `true` when the parser
|
|
244
|
+
* is the client reading ServerKeyExchange, and `false` when the parser is the
|
|
245
|
+
* server reading ClientKeyExchange.
|
|
246
|
+
*/
|
|
247
|
+
parseRound2(bytes: Uint8Array, options: { expectEcParameters: boolean }): EcJpakeKeyKP {
|
|
248
|
+
let p = 0;
|
|
249
|
+
if (options.expectEcParameters) {
|
|
250
|
+
if (bytes.length < 3) {
|
|
251
|
+
throw new DtlsError("round-2 message too short for ECParameters header");
|
|
252
|
+
}
|
|
253
|
+
if (bytes[0] !== 0x03 || bytes[1] !== 0x00 || bytes[2] !== 0x17) {
|
|
254
|
+
throw new DtlsError(
|
|
255
|
+
`expected ECParameters{named_curve, secp256r1} (03 00 17), got ${Array.from(bytes.subarray(0, 3))
|
|
256
|
+
.map(b => b.toString(16).padStart(2, "0"))
|
|
257
|
+
.join(" ")}`,
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
p = 3;
|
|
261
|
+
}
|
|
262
|
+
const { kp, nextOffset } = readKeyKP(bytes, p);
|
|
263
|
+
if (nextOffset !== bytes.length) {
|
|
264
|
+
throw new DtlsError(`trailing bytes after round-2 message: ${bytes.length - nextOffset} extra`);
|
|
265
|
+
}
|
|
266
|
+
return kp;
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Verify the embedded round-2 ZKP under the supplied composite generator
|
|
271
|
+
* and the peer's `id` ("client" or "server"). Returns `false` (does not throw)
|
|
272
|
+
* on any verification failure — including malformed bytes — to mirror the
|
|
273
|
+
* round-1 `SchnorrZkp.verify` contract.
|
|
274
|
+
*/
|
|
275
|
+
verifyRound2Zkp(args: { kp: EcJpakeKeyKP; generator: SchnorrZkpGenerator; peerId: string }): boolean {
|
|
276
|
+
const { kp, generator, peerId } = args;
|
|
277
|
+
return SchnorrZkp.verify({ zkp: kp.zkp, publicKey: kp.X, id: peerId, generator });
|
|
278
|
+
},
|
|
279
|
+
} as const;
|
|
@@ -0,0 +1,193 @@
|
|
|
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 { p256 } from "@noble/curves/nist.js";
|
|
9
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
10
|
+
import { DtlsError } from "../channel/DtlsChannel.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Schnorr zero-knowledge proof of knowledge of `x` such that `X = x*G`,
|
|
14
|
+
* matching the EC-JPAKE wire shape used by mbedTLS v3.6.6 / draft-cragie-tls-ecjpake-01.
|
|
15
|
+
*
|
|
16
|
+
* Wire fields:
|
|
17
|
+
* - `V`: ephemeral commitment point `v*G`, SEC1 uncompressed (`0x04 || X || Y`, 65 bytes for P-256).
|
|
18
|
+
* - `r`: scalar response `v - h*x mod n`, minimal big-endian (leading zeros stripped).
|
|
19
|
+
*
|
|
20
|
+
* The `h` challenge is hashed over `len(G)||G || len(V)||V || len(X)||X || len(ID)||ID`,
|
|
21
|
+
* each `len` a 4-byte big-endian integer (mbedTLS `ecjpake_hash`, ecjpake.c v3.6.6 §190-238).
|
|
22
|
+
*/
|
|
23
|
+
export interface SchnorrZkp {
|
|
24
|
+
/** SEC1-uncompressed encoding of `V = v*G`. */
|
|
25
|
+
V: Uint8Array;
|
|
26
|
+
/** Minimal big-endian encoding of `r = v - h*x mod n`. */
|
|
27
|
+
r: Uint8Array;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const Point = p256.Point;
|
|
31
|
+
const N = Point.Fn.ORDER;
|
|
32
|
+
const POINT_LEN = 65;
|
|
33
|
+
|
|
34
|
+
function be32(value: number): Uint8Array {
|
|
35
|
+
const out = new Uint8Array(4);
|
|
36
|
+
new DataView(out.buffer).setUint32(0, value, false);
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function hashChallenge(args: {
|
|
41
|
+
gBytes: Uint8Array;
|
|
42
|
+
vBytes: Uint8Array;
|
|
43
|
+
xBytes: Uint8Array;
|
|
44
|
+
idBytes: Uint8Array;
|
|
45
|
+
}): bigint {
|
|
46
|
+
const { gBytes, vBytes, xBytes, idBytes } = args;
|
|
47
|
+
const total = 4 + gBytes.length + 4 + vBytes.length + 4 + xBytes.length + 4 + idBytes.length;
|
|
48
|
+
const buf = new Uint8Array(total);
|
|
49
|
+
let p = 0;
|
|
50
|
+
buf.set(be32(gBytes.length), p);
|
|
51
|
+
p += 4;
|
|
52
|
+
buf.set(gBytes, p);
|
|
53
|
+
p += gBytes.length;
|
|
54
|
+
buf.set(be32(vBytes.length), p);
|
|
55
|
+
p += 4;
|
|
56
|
+
buf.set(vBytes, p);
|
|
57
|
+
p += vBytes.length;
|
|
58
|
+
buf.set(be32(xBytes.length), p);
|
|
59
|
+
p += 4;
|
|
60
|
+
buf.set(xBytes, p);
|
|
61
|
+
p += xBytes.length;
|
|
62
|
+
buf.set(be32(idBytes.length), p);
|
|
63
|
+
p += 4;
|
|
64
|
+
buf.set(idBytes, p);
|
|
65
|
+
|
|
66
|
+
const digest = sha256(buf);
|
|
67
|
+
let h = 0n;
|
|
68
|
+
for (const byte of digest) {
|
|
69
|
+
h = (h << 8n) | BigInt(byte);
|
|
70
|
+
}
|
|
71
|
+
return h % N;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function bigintToMinimalBE(value: bigint): Uint8Array {
|
|
75
|
+
if (value < 0n) {
|
|
76
|
+
throw new InternalError("Schnorr response scalar must be non-negative");
|
|
77
|
+
}
|
|
78
|
+
if (value === 0n) {
|
|
79
|
+
return new Uint8Array(0);
|
|
80
|
+
}
|
|
81
|
+
const tmp = new Array<number>();
|
|
82
|
+
let v = value;
|
|
83
|
+
while (v > 0n) {
|
|
84
|
+
tmp.push(Number(v & 0xffn));
|
|
85
|
+
v >>= 8n;
|
|
86
|
+
}
|
|
87
|
+
return Uint8Array.from(tmp.reverse());
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function bigintFromBE(bytes: Uint8Array): bigint {
|
|
91
|
+
let v = 0n;
|
|
92
|
+
for (const byte of bytes) {
|
|
93
|
+
v = (v << 8n) | BigInt(byte);
|
|
94
|
+
}
|
|
95
|
+
return v;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function getBaseGBytes(): Uint8Array {
|
|
99
|
+
return Point.BASE.toBytes(false);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function pointFromBytes(bytes: Uint8Array): InstanceType<typeof Point> {
|
|
103
|
+
if (bytes.length !== POINT_LEN || bytes[0] !== 0x04) {
|
|
104
|
+
throw new DtlsError(
|
|
105
|
+
`expected SEC1-uncompressed P-256 point (65 bytes, 0x04 prefix), got len=${bytes.length} head=${bytes[0]}`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
return Point.fromBytes(bytes);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Optional generator override. When omitted the curve base point `G` is used,
|
|
113
|
+
* matching round-1 ZKPs. Round 2 passes a composite point (e.g. `X1 + X2 + X3`)
|
|
114
|
+
* and must supply both `point` (for arithmetic) and `bytes` (for the hash
|
|
115
|
+
* preimage, since mbedTLS hashes the SEC1-uncompressed encoding verbatim).
|
|
116
|
+
*/
|
|
117
|
+
export interface SchnorrZkpGenerator {
|
|
118
|
+
point: InstanceType<typeof Point>;
|
|
119
|
+
bytes: Uint8Array;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function generatorOrBase(g?: SchnorrZkpGenerator): SchnorrZkpGenerator {
|
|
123
|
+
if (g) {
|
|
124
|
+
if (g.bytes.length !== POINT_LEN || g.bytes[0] !== 0x04) {
|
|
125
|
+
throw new InternalError("generator bytes must be SEC1-uncompressed P-256 (65 bytes, 0x04 prefix)");
|
|
126
|
+
}
|
|
127
|
+
return g;
|
|
128
|
+
}
|
|
129
|
+
return { point: Point.BASE, bytes: getBaseGBytes() };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export const SchnorrZkp = {
|
|
133
|
+
/**
|
|
134
|
+
* Generate a Schnorr ZKP for `(x, X = x*G)`. `G` defaults to the curve generator;
|
|
135
|
+
* pass `generator` for the round-2 composite-generator case.
|
|
136
|
+
*
|
|
137
|
+
* The caller must supply both `x` and the SEC1 encoding of `X` to keep the call site
|
|
138
|
+
* identical to the verification path (no implicit recomputation).
|
|
139
|
+
*
|
|
140
|
+
* `ephemeral` is the per-proof scalar `v`; in production it must be sampled
|
|
141
|
+
* uniformly from `[1, n-1]`. Tests pass a fixed value so the proof is deterministic.
|
|
142
|
+
*/
|
|
143
|
+
generate(args: {
|
|
144
|
+
privateKey: bigint;
|
|
145
|
+
publicKey: Uint8Array;
|
|
146
|
+
ephemeral: bigint;
|
|
147
|
+
id: string;
|
|
148
|
+
generator?: SchnorrZkpGenerator;
|
|
149
|
+
}): SchnorrZkp {
|
|
150
|
+
const { privateKey, publicKey, ephemeral, id } = args;
|
|
151
|
+
if (ephemeral <= 0n || ephemeral >= N) {
|
|
152
|
+
throw new InternalError("ephemeral scalar must be in [1, n-1]");
|
|
153
|
+
}
|
|
154
|
+
if (privateKey <= 0n || privateKey >= N) {
|
|
155
|
+
throw new InternalError("private key scalar must be in [1, n-1]");
|
|
156
|
+
}
|
|
157
|
+
const g = generatorOrBase(args.generator);
|
|
158
|
+
const V = g.point.multiply(ephemeral);
|
|
159
|
+
const vBytes = V.toBytes(false);
|
|
160
|
+
const idBytes = new TextEncoder().encode(id);
|
|
161
|
+
const h = hashChallenge({ gBytes: g.bytes, vBytes, xBytes: publicKey, idBytes });
|
|
162
|
+
// r = v - h*x mod n, matching mbedTLS ecjpake_zkp_write.
|
|
163
|
+
const rBig = (((ephemeral - ((h * privateKey) % N)) % N) + N) % N;
|
|
164
|
+
return { V: vBytes, r: bigintToMinimalBE(rBig) };
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
verify(args: { zkp: SchnorrZkp; publicKey: Uint8Array; id: string; generator?: SchnorrZkpGenerator }): boolean {
|
|
168
|
+
const { zkp, publicKey, id } = args;
|
|
169
|
+
const idBytes = new TextEncoder().encode(id);
|
|
170
|
+
let g: SchnorrZkpGenerator;
|
|
171
|
+
let V;
|
|
172
|
+
let X;
|
|
173
|
+
try {
|
|
174
|
+
g = generatorOrBase(args.generator);
|
|
175
|
+
V = pointFromBytes(zkp.V);
|
|
176
|
+
X = pointFromBytes(publicKey);
|
|
177
|
+
} catch {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
if (V.is0() || X.is0()) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
const r = bigintFromBE(zkp.r);
|
|
184
|
+
if (r >= N) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
const h = hashChallenge({ gBytes: g.bytes, vBytes: zkp.V, xBytes: publicKey, idBytes });
|
|
188
|
+
// mbedTLS ecjpake_zkp_verify computes V' = r*G + h*X via ecp_muladd. multiplyUnsafe is
|
|
189
|
+
// safe here: r is on the wire (peer-supplied) and h is a hash digest; neither is secret.
|
|
190
|
+
const lhs = g.point.multiplyUnsafe(r).add(X.multiplyUnsafe(h));
|
|
191
|
+
return lhs.equals(V);
|
|
192
|
+
},
|
|
193
|
+
} as const;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Production EC-JPAKE crypto core (P-256 / draft-cragie-tls-ecjpake-01, mbedTLS-compatible).
|
|
9
|
+
*
|
|
10
|
+
* Hardening applied (Phase 3 sub-batch 1):
|
|
11
|
+
* - Constant-time scalar multiplication on password-derived secrets (`EcJpakePms.derive`
|
|
12
|
+
* uses `Point.multiply`; `SchnorrZkp.verify` keeps `multiplyUnsafe` only on peer-supplied
|
|
13
|
+
* `r` and the hash digest `h`, neither of which is secret).
|
|
14
|
+
* - Single pre-sized `Uint8Array` allocation in `EcJpakeRound.serializeRound1` /
|
|
15
|
+
* `serializeRound2` (replaces ~330 `Array.push` calls per round-1 message).
|
|
16
|
+
* - Defensive copies on parse outputs: `EcJpakeRound.parseRound1` / `parseRound2` slice
|
|
17
|
+
* the input so returned `Uint8Array`s own their backing buffer.
|
|
18
|
+
* - Hoisted participant identifiers `ECJPAKE_ID_CLIENT` / `ECJPAKE_ID_SERVER`.
|
|
19
|
+
*
|
|
20
|
+
* Constant-time guarantees rest on noble's `Point.multiply` implementation; if upstream
|
|
21
|
+
* drops that property, revisit `EcJpakePms.derive`.
|
|
22
|
+
*
|
|
23
|
+
* Internal to `dtls/`; not re-exported from the package public API surface.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
export { ECJPAKE_ID_CLIENT, ECJPAKE_ID_SERVER, EcJpakeRound } from "./EcJpakeRound.js";
|
|
27
|
+
export type { EcJpakeKeyKP } from "./EcJpakeRound.js";
|
|
28
|
+
export { SchnorrZkp } from "./SchnorrZkp.js";
|
|
29
|
+
export type { SchnorrZkp as SchnorrZkpType } from "./SchnorrZkp.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { DtlsError } from "../channel/DtlsChannel.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ChangeCipherSpec is *not* a handshake message — it sits at the record layer
|
|
11
|
+
* under its own ContentType (20) and consists of a single byte 0x01
|
|
12
|
+
* (RFC 5246 §7.1). The state machine wraps {@link CHANGE_CIPHER_SPEC_BODY}
|
|
13
|
+
* in a `DtlsRecord` with `type = ContentType.CHANGE_CIPHER_SPEC`, NOT in a
|
|
14
|
+
* handshake envelope, and the bytes do not feed the handshake-transcript
|
|
15
|
+
* hash (RFC 5246 §7.4.9).
|
|
16
|
+
*
|
|
17
|
+
* Kept as a shared 1-byte buffer so the state machine can pass it directly
|
|
18
|
+
* to `DtlsRecord.encode` without per-call allocation. (Typed arrays cannot
|
|
19
|
+
* be `Object.freeze`d while their element storage is live, so the readonly
|
|
20
|
+
* guarantee is type-only.)
|
|
21
|
+
*/
|
|
22
|
+
export const CHANGE_CIPHER_SPEC_BODY: Readonly<Uint8Array> = new Uint8Array([0x01]);
|
|
23
|
+
|
|
24
|
+
export const ChangeCipherSpec = {
|
|
25
|
+
parse(body: Uint8Array): void {
|
|
26
|
+
if (body.length !== 1 || body[0] !== 0x01) {
|
|
27
|
+
throw new DtlsError(
|
|
28
|
+
`ChangeCipherSpec must be a single 0x01 byte, got len=${body.length} first=${body[0] ?? "undefined"}`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
} as const;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* DTLS 1.2 ClientHello body builder for `TLS_ECJPAKE_WITH_AES_128_CCM_8`
|
|
9
|
+
* (RFC 6347 §4.2.1, RFC 5246 §7.4.1.2). The shape is fixed:
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* ProtocolVersion client_version // 2 bytes = 0xfe 0xfd (DTLS 1.2)
|
|
13
|
+
* Random random // 32 bytes (caller-supplied)
|
|
14
|
+
* opaque session_id<0..32> // length(1) || body — always empty for us
|
|
15
|
+
* opaque cookie<0..2^8-1> // length(1) || body (DTLS-only, RFC 6347 §4.2.2)
|
|
16
|
+
* CipherSuite cipher_suites<2..> // length(2) || N×2 bytes — exactly [0xC0, 0xFF]
|
|
17
|
+
* opaque compression<1..> // length(1) || N bytes — exactly [0x00]
|
|
18
|
+
* Extension extensions<0..2^16-1> // length(2) || extension entries
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Each Extension is `uint16 extension_type || opaque extension_data<0..2^16-1>`.
|
|
22
|
+
* Required extensions:
|
|
23
|
+
* - `ecjpake_kkpp` (0x0100, draft-cragie-tls-ecjpake-01) — round-1 ECJPAKEKeyKPPairList payload
|
|
24
|
+
* - `supported_groups` (0x000a, RFC 8422 §5.1.1) — peer requires this even though the cipher
|
|
25
|
+
* suite hardcodes P-256, otherwise mbedtls rejects with "no common elliptic curve"
|
|
26
|
+
* - `ec_point_formats` (0x000b, RFC 8422 §5.1.2) — uncompressed-only; mbedtls is lenient if
|
|
27
|
+
* omitted but real BRs may not be
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { InternalError } from "@matter/general";
|
|
31
|
+
|
|
32
|
+
/** TLS extension type for `ecjpake_kkpp` (draft-cragie-tls-ecjpake-01 §3). */
|
|
33
|
+
export const EXTENSION_TYPE_ECJPAKE_KKPP = 0x0100;
|
|
34
|
+
|
|
35
|
+
/** TLS extension type for `supported_groups` (RFC 8422 §5.1.1, formerly `elliptic_curves`). */
|
|
36
|
+
export const EXTENSION_TYPE_SUPPORTED_GROUPS = 0x000a;
|
|
37
|
+
|
|
38
|
+
/** TLS extension type for `ec_point_formats` (RFC 8422 §5.1.2). */
|
|
39
|
+
export const EXTENSION_TYPE_EC_POINT_FORMATS = 0x000b;
|
|
40
|
+
|
|
41
|
+
/** Named-curve identifier for `secp256r1` (P-256, RFC 8422 §5.1.1). */
|
|
42
|
+
export const NAMED_CURVE_SECP256R1 = 0x0017;
|
|
43
|
+
|
|
44
|
+
/** TLS cipher-suite identifier for `TLS_ECJPAKE_WITH_AES_128_CCM_8` (mbedTLS, experimental). */
|
|
45
|
+
export const CIPHER_SUITE_ECJPAKE_WITH_AES_128_CCM_8 = 0xc0ff;
|
|
46
|
+
|
|
47
|
+
const DTLS_1_2_MAJOR = 0xfe;
|
|
48
|
+
const DTLS_1_2_MINOR = 0xfd;
|
|
49
|
+
const RANDOM_LEN = 32;
|
|
50
|
+
const COMPRESSION_NULL = 0x00;
|
|
51
|
+
const MAX_COOKIE_LEN = 0xff;
|
|
52
|
+
|
|
53
|
+
export interface ClientHelloFields {
|
|
54
|
+
/** 32 random bytes that will become `ClientHello.random`. */
|
|
55
|
+
random: Uint8Array;
|
|
56
|
+
/**
|
|
57
|
+
* DTLS cookie returned by `HelloVerifyRequest`, or empty on the first ClientHello
|
|
58
|
+
* (RFC 6347 §4.2.1).
|
|
59
|
+
*/
|
|
60
|
+
cookie: Uint8Array;
|
|
61
|
+
/** `ecjpake_kkpp` extension payload — the round-1 ECJPAKEKeyKPPairList bytes. */
|
|
62
|
+
ecjpakeKkpp: Uint8Array;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function writeUint16BE(buf: Uint8Array, offset: number, value: number): void {
|
|
66
|
+
buf[offset] = (value >>> 8) & 0xff;
|
|
67
|
+
buf[offset + 1] = value & 0xff;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const ClientHelloMessage = {
|
|
71
|
+
/**
|
|
72
|
+
* Serialise a ClientHello body. Caller wraps the result in a
|
|
73
|
+
* {@link HandshakeMessage} and a `DtlsRecord` of `ContentType.HANDSHAKE`.
|
|
74
|
+
*/
|
|
75
|
+
build(fields: ClientHelloFields): Uint8Array {
|
|
76
|
+
const { random, cookie, ecjpakeKkpp } = fields;
|
|
77
|
+
if (random.length !== RANDOM_LEN) {
|
|
78
|
+
throw new InternalError(`ClientHello random must be ${RANDOM_LEN} bytes, got ${random.length}`);
|
|
79
|
+
}
|
|
80
|
+
if (cookie.length > MAX_COOKIE_LEN) {
|
|
81
|
+
throw new InternalError(`ClientHello cookie must be <= ${MAX_COOKIE_LEN} bytes, got ${cookie.length}`);
|
|
82
|
+
}
|
|
83
|
+
const ecjpakeExtLen = 2 + 2 + ecjpakeKkpp.length;
|
|
84
|
+
const supportedGroupsExtLen = 2 + 2 + 2 + 2; // header(4) + list_len(2) + secp256r1(2)
|
|
85
|
+
const ecPointFormatsExtLen = 2 + 2 + 1 + 1; // header(4) + list_len(1) + uncompressed(1)
|
|
86
|
+
const extEntryLen = ecjpakeExtLen + supportedGroupsExtLen + ecPointFormatsExtLen;
|
|
87
|
+
const extensionsBlockLen = 2 + extEntryLen;
|
|
88
|
+
|
|
89
|
+
const totalLen =
|
|
90
|
+
2 + // version
|
|
91
|
+
RANDOM_LEN +
|
|
92
|
+
1 + // session_id length (always 0)
|
|
93
|
+
1 +
|
|
94
|
+
cookie.length + // cookie length + body
|
|
95
|
+
2 +
|
|
96
|
+
2 + // cipher_suites length(2) + 2 bytes for the suite
|
|
97
|
+
1 +
|
|
98
|
+
1 + // compression length(1) + 1 byte (null)
|
|
99
|
+
extensionsBlockLen;
|
|
100
|
+
|
|
101
|
+
const out = new Uint8Array(totalLen);
|
|
102
|
+
let p = 0;
|
|
103
|
+
out[p++] = DTLS_1_2_MAJOR;
|
|
104
|
+
out[p++] = DTLS_1_2_MINOR;
|
|
105
|
+
out.set(random, p);
|
|
106
|
+
p += RANDOM_LEN;
|
|
107
|
+
out[p++] = 0; // session_id length, no body
|
|
108
|
+
out[p++] = cookie.length;
|
|
109
|
+
out.set(cookie, p);
|
|
110
|
+
p += cookie.length;
|
|
111
|
+
// cipher_suites: length=2, body=[0xC0, 0xFF]
|
|
112
|
+
writeUint16BE(out, p, 2);
|
|
113
|
+
p += 2;
|
|
114
|
+
out[p++] = (CIPHER_SUITE_ECJPAKE_WITH_AES_128_CCM_8 >>> 8) & 0xff;
|
|
115
|
+
out[p++] = CIPHER_SUITE_ECJPAKE_WITH_AES_128_CCM_8 & 0xff;
|
|
116
|
+
// compression_methods: length=1, body=[0x00]
|
|
117
|
+
out[p++] = 1;
|
|
118
|
+
out[p++] = COMPRESSION_NULL;
|
|
119
|
+
// extensions block
|
|
120
|
+
writeUint16BE(out, p, extEntryLen);
|
|
121
|
+
p += 2;
|
|
122
|
+
// ecjpake_kkpp
|
|
123
|
+
writeUint16BE(out, p, EXTENSION_TYPE_ECJPAKE_KKPP);
|
|
124
|
+
p += 2;
|
|
125
|
+
writeUint16BE(out, p, ecjpakeKkpp.length);
|
|
126
|
+
p += 2;
|
|
127
|
+
out.set(ecjpakeKkpp, p);
|
|
128
|
+
p += ecjpakeKkpp.length;
|
|
129
|
+
// supported_groups: list_len=2, [secp256r1]
|
|
130
|
+
writeUint16BE(out, p, EXTENSION_TYPE_SUPPORTED_GROUPS);
|
|
131
|
+
p += 2;
|
|
132
|
+
writeUint16BE(out, p, 4); // ext data: list_len(2) + 1 curve(2)
|
|
133
|
+
p += 2;
|
|
134
|
+
writeUint16BE(out, p, 2); // list_len = 2 bytes (one curve)
|
|
135
|
+
p += 2;
|
|
136
|
+
writeUint16BE(out, p, NAMED_CURVE_SECP256R1);
|
|
137
|
+
p += 2;
|
|
138
|
+
// ec_point_formats: list_len=1, [uncompressed=0x00]
|
|
139
|
+
writeUint16BE(out, p, EXTENSION_TYPE_EC_POINT_FORMATS);
|
|
140
|
+
p += 2;
|
|
141
|
+
writeUint16BE(out, p, 2); // ext data: list_len(1) + 1 format(1)
|
|
142
|
+
p += 2;
|
|
143
|
+
out[p++] = 1; // list_len = 1 byte (one format)
|
|
144
|
+
out[p++] = 0x00; // uncompressed
|
|
145
|
+
if (p !== totalLen) {
|
|
146
|
+
throw new InternalError(`ClientHello internal length mismatch: wrote ${p}, expected ${totalLen}`);
|
|
147
|
+
}
|
|
148
|
+
return out;
|
|
149
|
+
},
|
|
150
|
+
} as const;
|