@matter/thread-br-client 0.0.1 → 0.17.5-alpha.0-20260706-fd4c49e2e
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/LICENSE +201 -0
- package/README.md +5 -5
- package/dist/cjs/coap/CoapClient.d.ts +2 -2
- package/dist/cjs/coap/CoapClient.d.ts.map +1 -1
- package/dist/cjs/coap/CoapClient.js +9 -16
- package/dist/cjs/coap/CoapClient.js.map +1 -1
- package/dist/cjs/coap/CoapMessage.d.ts +11 -6
- package/dist/cjs/coap/CoapMessage.d.ts.map +1 -1
- package/dist/cjs/coap/CoapMessage.js +8 -5
- package/dist/cjs/coap/CoapMessage.js.map +1 -1
- package/dist/cjs/commissioner/Commissioner.d.ts.map +1 -1
- package/dist/cjs/commissioner/Commissioner.js +5 -2
- package/dist/cjs/commissioner/Commissioner.js.map +1 -1
- package/dist/cjs/commissioner/LeadKa.d.ts +3 -3
- package/dist/cjs/commissioner/LeadKa.d.ts.map +1 -1
- package/dist/cjs/commissioner/LeadKa.js +1 -1
- package/dist/cjs/commissioner/LeadKa.js.map +1 -1
- package/dist/cjs/commissioner/LeadPet.d.ts +3 -2
- package/dist/cjs/commissioner/LeadPet.d.ts.map +1 -1
- package/dist/cjs/commissioner/LeadPet.js +4 -3
- package/dist/cjs/commissioner/LeadPet.js.map +1 -1
- package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts +5 -5
- package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts.map +1 -1
- package/dist/cjs/credentials/ThreadCredentialsRegistry.js +10 -9
- package/dist/cjs/credentials/ThreadCredentialsRegistry.js.map +1 -1
- package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts +4 -3
- package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts.map +1 -1
- package/dist/cjs/crypto/AesCmacPrf128.d.ts +4 -14
- package/dist/cjs/crypto/AesCmacPrf128.d.ts.map +1 -1
- package/dist/cjs/crypto/AesCmacPrf128.js +7 -71
- package/dist/cjs/crypto/AesCmacPrf128.js.map +2 -2
- package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts +5 -4
- package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts.map +1 -1
- package/dist/cjs/crypto/Pbkdf2AesCmac.js +5 -4
- package/dist/cjs/crypto/Pbkdf2AesCmac.js.map +1 -1
- package/dist/cjs/crypto/Pskc.d.ts +4 -3
- package/dist/cjs/crypto/Pskc.d.ts.map +1 -1
- package/dist/cjs/crypto/Pskc.js +6 -5
- package/dist/cjs/crypto/Pskc.js.map +1 -1
- package/dist/cjs/crypto/index.d.ts +1 -1
- package/dist/cjs/crypto/index.d.ts.map +1 -1
- package/dist/cjs/crypto/index.js +0 -1
- package/dist/cjs/crypto/index.js.map +1 -1
- package/dist/cjs/dataset/OperationalDataset.d.ts +10 -10
- package/dist/cjs/dataset/OperationalDataset.d.ts.map +1 -1
- package/dist/cjs/dataset/OperationalDataset.js +32 -31
- package/dist/cjs/dataset/OperationalDataset.js.map +1 -1
- package/dist/cjs/dataset/SecurityPolicy.d.ts +3 -2
- package/dist/cjs/dataset/SecurityPolicy.d.ts.map +1 -1
- package/dist/cjs/dataset/SecurityPolicy.js +5 -4
- package/dist/cjs/dataset/SecurityPolicy.js.map +1 -1
- package/dist/cjs/diagnostic/DiagnosticResponse.d.ts +5 -4
- package/dist/cjs/diagnostic/DiagnosticResponse.d.ts.map +1 -1
- package/dist/cjs/diagnostic/DiagnosticSource.d.ts +2 -2
- package/dist/cjs/diagnostic/DiagnosticSource.d.ts.map +1 -1
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts +7 -3
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -1
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js +48 -43
- package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js.map +1 -1
- package/dist/cjs/diagnostic/connectMeshcop.d.ts.map +1 -1
- package/dist/cjs/diagnostic/connectMeshcop.js +5 -12
- package/dist/cjs/diagnostic/connectMeshcop.js.map +1 -1
- package/dist/cjs/diagnostic/errors.d.ts +1 -1
- package/dist/cjs/diagnostic/errors.d.ts.map +1 -1
- package/dist/cjs/discovery/BorderRouterRegistry.d.ts.map +1 -1
- package/dist/cjs/discovery/BorderRouterRegistry.js +2 -4
- package/dist/cjs/discovery/BorderRouterRegistry.js.map +1 -1
- package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts +3 -3
- package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts.map +1 -1
- package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts.map +1 -1
- package/dist/cjs/dtls/channel/NobleDtlsChannel.js +89 -58
- package/dist/cjs/dtls/channel/NobleDtlsChannel.js.map +1 -1
- package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts +5 -4
- package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts.map +1 -1
- package/dist/cjs/dtls/ecjpake/EcJpakePms.js +4 -5
- package/dist/cjs/dtls/ecjpake/EcJpakePms.js.map +1 -1
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts +16 -15
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -1
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.js +40 -29
- package/dist/cjs/dtls/ecjpake/EcJpakeRound.js.map +1 -1
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts +10 -9
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -1
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.js +17 -13
- package/dist/cjs/dtls/ecjpake/SchnorrZkp.js.map +1 -1
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts +2 -1
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.js +3 -1
- package/dist/cjs/dtls/handshake/ChangeCipherSpec.js.map +1 -1
- package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts +27 -4
- package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ClientHelloMessage.js +3 -1
- package/dist/cjs/dtls/handshake/ClientHelloMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts +2 -1
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/DtlsClient.d.ts +9 -6
- package/dist/cjs/dtls/handshake/DtlsClient.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/DtlsClient.js +99 -77
- package/dist/cjs/dtls/handshake/DtlsClient.js.map +1 -1
- package/dist/cjs/dtls/handshake/FinishedMessage.d.ts +10 -3
- package/dist/cjs/dtls/handshake/FinishedMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/FinishedMessage.js +4 -2
- package/dist/cjs/dtls/handshake/FinishedMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts +5 -4
- package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/HandshakeMessage.js +13 -11
- package/dist/cjs/dtls/handshake/HandshakeMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts +19 -2
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js +3 -1
- package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts +2 -1
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js +3 -2
- package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts +4 -3
- package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ServerHelloMessage.js +3 -1
- package/dist/cjs/dtls/handshake/ServerHelloMessage.js.map +1 -1
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts +2 -1
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -1
- package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js.map +1 -1
- package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts +7 -5
- package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts.map +1 -1
- package/dist/cjs/dtls/prf/HandshakeTranscript.js +14 -9
- package/dist/cjs/dtls/prf/HandshakeTranscript.js.map +1 -1
- package/dist/cjs/dtls/prf/TlsPrf.d.ts +23 -22
- package/dist/cjs/dtls/prf/TlsPrf.d.ts.map +1 -1
- package/dist/cjs/dtls/prf/TlsPrf.js +33 -30
- package/dist/cjs/dtls/prf/TlsPrf.js.map +1 -1
- package/dist/cjs/dtls/record/AesCcm8.d.ts +13 -12
- package/dist/cjs/dtls/record/AesCcm8.d.ts.map +1 -1
- package/dist/cjs/dtls/record/AesCcm8.js +12 -34
- package/dist/cjs/dtls/record/AesCcm8.js.map +1 -1
- package/dist/cjs/dtls/record/DtlsCipherState.d.ts +11 -10
- package/dist/cjs/dtls/record/DtlsCipherState.d.ts.map +1 -1
- package/dist/cjs/dtls/record/DtlsCipherState.js +10 -6
- package/dist/cjs/dtls/record/DtlsCipherState.js.map +1 -1
- package/dist/cjs/dtls/record/DtlsRecord.d.ts +10 -10
- package/dist/cjs/dtls/record/DtlsRecord.d.ts.map +1 -1
- package/dist/cjs/dtls/record/DtlsRecord.js +10 -8
- package/dist/cjs/dtls/record/DtlsRecord.js.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts +3 -4
- package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestClient.d.ts +27 -8
- package/dist/cjs/otbr-rest/OtbrRestClient.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestClient.js +50 -20
- package/dist/cjs/otbr-rest/OtbrRestClient.js.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts +2 -1
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js +3 -3
- package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts +6 -4
- package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/OtbrRestProbe.js +11 -43
- package/dist/cjs/otbr-rest/OtbrRestProbe.js.map +1 -1
- package/dist/cjs/otbr-rest/caseNormalizer.d.ts +7 -0
- package/dist/cjs/otbr-rest/caseNormalizer.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/caseNormalizer.js +11 -0
- package/dist/cjs/otbr-rest/caseNormalizer.js.map +1 -1
- package/dist/cjs/otbr-rest/parseHexBytes.d.ts +22 -0
- package/dist/cjs/otbr-rest/parseHexBytes.d.ts.map +1 -0
- package/dist/cjs/otbr-rest/parseHexBytes.js +50 -0
- package/dist/cjs/otbr-rest/parseHexBytes.js.map +6 -0
- package/dist/cjs/otbr-rest/translation.d.ts +2 -1
- package/dist/cjs/otbr-rest/translation.d.ts.map +1 -1
- package/dist/cjs/otbr-rest/translation.js +20 -22
- package/dist/cjs/otbr-rest/translation.js.map +1 -1
- package/dist/cjs/selection/selectBr.d.ts +8 -4
- package/dist/cjs/selection/selectBr.d.ts.map +1 -1
- package/dist/cjs/selection/selectBr.js +6 -5
- package/dist/cjs/selection/selectBr.js.map +1 -1
- package/dist/cjs/selection/withExtPanIdLock.d.ts +2 -1
- package/dist/cjs/selection/withExtPanIdLock.d.ts.map +1 -1
- package/dist/cjs/selection/withExtPanIdLock.js.map +1 -1
- package/dist/cjs/tlv/BasicTlvCodec.d.ts +4 -4
- package/dist/cjs/tlv/BasicTlvCodec.d.ts.map +1 -1
- package/dist/cjs/tlv/BasicTlvCodec.js +13 -11
- package/dist/cjs/tlv/BasicTlvCodec.js.map +1 -1
- package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts +3 -2
- package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts.map +1 -1
- package/dist/cjs/tlv/NetworkDiagnosticTlv.js.map +1 -1
- package/dist/cjs/tlv/TypeListTlv.d.ts +3 -2
- package/dist/cjs/tlv/TypeListTlv.d.ts.map +1 -1
- package/dist/cjs/tlv/TypeListTlv.js +1 -1
- package/dist/cjs/tlv/TypeListTlv.js.map +1 -1
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts +3 -2
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.js +5 -3
- package/dist/cjs/tlv/diag/ChildIpv6AddressList.js.map +1 -1
- package/dist/cjs/tlv/diag/ChildTable.d.ts +3 -2
- package/dist/cjs/tlv/diag/ChildTable.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/ChildTable.js +7 -6
- package/dist/cjs/tlv/diag/ChildTable.js.map +1 -1
- package/dist/cjs/tlv/diag/Connectivity.d.ts +3 -2
- package/dist/cjs/tlv/diag/Connectivity.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Connectivity.js +14 -14
- package/dist/cjs/tlv/diag/Connectivity.js.map +1 -1
- package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts +3 -2
- package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Ipv6AddressList.js +6 -5
- package/dist/cjs/tlv/diag/Ipv6AddressList.js.map +1 -1
- package/dist/cjs/tlv/diag/LeaderData.d.ts +3 -2
- package/dist/cjs/tlv/diag/LeaderData.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/LeaderData.js +8 -7
- package/dist/cjs/tlv/diag/LeaderData.js.map +1 -1
- package/dist/cjs/tlv/diag/MacCounters.d.ts +3 -2
- package/dist/cjs/tlv/diag/MacCounters.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/MacCounters.js +12 -11
- package/dist/cjs/tlv/diag/MacCounters.js.map +1 -1
- package/dist/cjs/tlv/diag/MleCounters.d.ts +3 -2
- package/dist/cjs/tlv/diag/MleCounters.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/MleCounters.js +18 -17
- package/dist/cjs/tlv/diag/MleCounters.js.map +1 -1
- package/dist/cjs/tlv/diag/Mode.d.ts +3 -2
- package/dist/cjs/tlv/diag/Mode.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Mode.js +5 -3
- package/dist/cjs/tlv/diag/Mode.js.map +1 -1
- package/dist/cjs/tlv/diag/NetworkData.d.ts +7 -6
- package/dist/cjs/tlv/diag/NetworkData.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/NetworkData.js +23 -18
- package/dist/cjs/tlv/diag/NetworkData.js.map +1 -1
- package/dist/cjs/tlv/diag/Primitives.d.ts +15 -14
- package/dist/cjs/tlv/diag/Primitives.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Primitives.js +25 -19
- package/dist/cjs/tlv/diag/Primitives.js.map +1 -1
- package/dist/cjs/tlv/diag/Route64.d.ts +3 -2
- package/dist/cjs/tlv/diag/Route64.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Route64.js +8 -7
- package/dist/cjs/tlv/diag/Route64.js.map +1 -1
- package/dist/cjs/tlv/diag/RouterNeighbor.d.ts +3 -2
- package/dist/cjs/tlv/diag/RouterNeighbor.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/RouterNeighbor.js +13 -11
- package/dist/cjs/tlv/diag/RouterNeighbor.js.map +1 -1
- package/dist/cjs/tlv/diag/Timeout.d.ts +3 -2
- package/dist/cjs/tlv/diag/Timeout.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/Timeout.js +4 -3
- package/dist/cjs/tlv/diag/Timeout.js.map +1 -1
- package/dist/cjs/tlv/diag/VendorInfo.d.ts +13 -12
- package/dist/cjs/tlv/diag/VendorInfo.d.ts.map +1 -1
- package/dist/cjs/tlv/diag/VendorInfo.js +4 -3
- package/dist/cjs/tlv/diag/VendorInfo.js.map +1 -1
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts +3 -2
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -1
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js +7 -4
- package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js.map +1 -1
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts +4 -3
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -1
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js +9 -7
- package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js.map +1 -1
- package/dist/cjs/util/meshLocalAddr.d.ts +5 -4
- package/dist/cjs/util/meshLocalAddr.d.ts.map +1 -1
- package/dist/cjs/util/meshLocalAddr.js +6 -4
- package/dist/cjs/util/meshLocalAddr.js.map +1 -1
- package/dist/esm/coap/CoapClient.d.ts +2 -2
- package/dist/esm/coap/CoapClient.d.ts.map +1 -1
- package/dist/esm/coap/CoapClient.js +11 -17
- package/dist/esm/coap/CoapClient.js.map +1 -1
- package/dist/esm/coap/CoapMessage.d.ts +11 -6
- package/dist/esm/coap/CoapMessage.d.ts.map +1 -1
- package/dist/esm/coap/CoapMessage.js +8 -5
- package/dist/esm/coap/CoapMessage.js.map +1 -1
- package/dist/esm/commissioner/Commissioner.d.ts.map +1 -1
- package/dist/esm/commissioner/Commissioner.js +5 -2
- package/dist/esm/commissioner/Commissioner.js.map +1 -1
- package/dist/esm/commissioner/LeadKa.d.ts +3 -3
- package/dist/esm/commissioner/LeadKa.d.ts.map +1 -1
- package/dist/esm/commissioner/LeadKa.js +2 -2
- package/dist/esm/commissioner/LeadKa.js.map +1 -1
- package/dist/esm/commissioner/LeadPet.d.ts +3 -2
- package/dist/esm/commissioner/LeadPet.d.ts.map +1 -1
- package/dist/esm/commissioner/LeadPet.js +4 -3
- package/dist/esm/commissioner/LeadPet.js.map +1 -1
- package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts +5 -5
- package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts.map +1 -1
- package/dist/esm/credentials/ThreadCredentialsRegistry.js +10 -9
- package/dist/esm/credentials/ThreadCredentialsRegistry.js.map +1 -1
- package/dist/esm/credentials/ThreadNetworkCredentials.d.ts +4 -3
- package/dist/esm/credentials/ThreadNetworkCredentials.d.ts.map +1 -1
- package/dist/esm/crypto/AesCmacPrf128.d.ts +4 -14
- package/dist/esm/crypto/AesCmacPrf128.d.ts.map +1 -1
- package/dist/esm/crypto/AesCmacPrf128.js +8 -72
- package/dist/esm/crypto/AesCmacPrf128.js.map +2 -2
- package/dist/esm/crypto/Pbkdf2AesCmac.d.ts +5 -4
- package/dist/esm/crypto/Pbkdf2AesCmac.d.ts.map +1 -1
- package/dist/esm/crypto/Pbkdf2AesCmac.js +6 -5
- package/dist/esm/crypto/Pbkdf2AesCmac.js.map +1 -1
- package/dist/esm/crypto/Pskc.d.ts +4 -3
- package/dist/esm/crypto/Pskc.d.ts.map +1 -1
- package/dist/esm/crypto/Pskc.js +7 -6
- package/dist/esm/crypto/Pskc.js.map +1 -1
- package/dist/esm/crypto/index.d.ts +1 -1
- package/dist/esm/crypto/index.d.ts.map +1 -1
- package/dist/esm/crypto/index.js +1 -2
- package/dist/esm/crypto/index.js.map +1 -1
- package/dist/esm/dataset/OperationalDataset.d.ts +10 -10
- package/dist/esm/dataset/OperationalDataset.d.ts.map +1 -1
- package/dist/esm/dataset/OperationalDataset.js +32 -31
- package/dist/esm/dataset/OperationalDataset.js.map +1 -1
- package/dist/esm/dataset/SecurityPolicy.d.ts +3 -2
- package/dist/esm/dataset/SecurityPolicy.d.ts.map +1 -1
- package/dist/esm/dataset/SecurityPolicy.js +6 -5
- package/dist/esm/dataset/SecurityPolicy.js.map +1 -1
- package/dist/esm/diagnostic/DiagnosticResponse.d.ts +5 -4
- package/dist/esm/diagnostic/DiagnosticResponse.d.ts.map +1 -1
- package/dist/esm/diagnostic/DiagnosticSource.d.ts +2 -2
- package/dist/esm/diagnostic/DiagnosticSource.d.ts.map +1 -1
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts +7 -3
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -1
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.js +49 -43
- package/dist/esm/diagnostic/MeshCopDiagnosticSource.js.map +1 -1
- package/dist/esm/diagnostic/connectMeshcop.d.ts.map +1 -1
- package/dist/esm/diagnostic/connectMeshcop.js +6 -13
- package/dist/esm/diagnostic/connectMeshcop.js.map +1 -1
- package/dist/esm/diagnostic/errors.d.ts +1 -1
- package/dist/esm/diagnostic/errors.d.ts.map +1 -1
- package/dist/esm/discovery/BorderRouterRegistry.d.ts.map +1 -1
- package/dist/esm/discovery/BorderRouterRegistry.js +2 -4
- package/dist/esm/discovery/BorderRouterRegistry.js.map +1 -1
- package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts +3 -3
- package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts.map +1 -1
- package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts.map +1 -1
- package/dist/esm/dtls/channel/NobleDtlsChannel.js +90 -58
- package/dist/esm/dtls/channel/NobleDtlsChannel.js.map +1 -1
- package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts +5 -4
- package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts.map +1 -1
- package/dist/esm/dtls/ecjpake/EcJpakePms.js +5 -6
- package/dist/esm/dtls/ecjpake/EcJpakePms.js.map +1 -1
- package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts +16 -15
- package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -1
- package/dist/esm/dtls/ecjpake/EcJpakeRound.js +41 -30
- package/dist/esm/dtls/ecjpake/EcJpakeRound.js.map +1 -1
- package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts +10 -9
- package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -1
- package/dist/esm/dtls/ecjpake/SchnorrZkp.js +18 -14
- package/dist/esm/dtls/ecjpake/SchnorrZkp.js.map +1 -1
- package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts +2 -1
- package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ChangeCipherSpec.js +3 -1
- package/dist/esm/dtls/handshake/ChangeCipherSpec.js.map +1 -1
- package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts +27 -4
- package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ClientHelloMessage.js +4 -2
- package/dist/esm/dtls/handshake/ClientHelloMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts +2 -1
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/DtlsClient.d.ts +9 -6
- package/dist/esm/dtls/handshake/DtlsClient.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/DtlsClient.js +100 -78
- package/dist/esm/dtls/handshake/DtlsClient.js.map +1 -1
- package/dist/esm/dtls/handshake/FinishedMessage.d.ts +10 -3
- package/dist/esm/dtls/handshake/FinishedMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/FinishedMessage.js +5 -3
- package/dist/esm/dtls/handshake/FinishedMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/HandshakeMessage.d.ts +5 -4
- package/dist/esm/dtls/handshake/HandshakeMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/HandshakeMessage.js +14 -12
- package/dist/esm/dtls/handshake/HandshakeMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts +19 -2
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js +3 -1
- package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts +2 -1
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js +3 -2
- package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts +4 -3
- package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ServerHelloMessage.js +3 -1
- package/dist/esm/dtls/handshake/ServerHelloMessage.js.map +1 -1
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts +2 -1
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -1
- package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js.map +1 -1
- package/dist/esm/dtls/prf/HandshakeTranscript.d.ts +7 -5
- package/dist/esm/dtls/prf/HandshakeTranscript.d.ts.map +1 -1
- package/dist/esm/dtls/prf/HandshakeTranscript.js +15 -10
- package/dist/esm/dtls/prf/HandshakeTranscript.js.map +1 -1
- package/dist/esm/dtls/prf/TlsPrf.d.ts +23 -22
- package/dist/esm/dtls/prf/TlsPrf.d.ts.map +1 -1
- package/dist/esm/dtls/prf/TlsPrf.js +34 -31
- package/dist/esm/dtls/prf/TlsPrf.js.map +1 -1
- package/dist/esm/dtls/record/AesCcm8.d.ts +13 -12
- package/dist/esm/dtls/record/AesCcm8.d.ts.map +1 -1
- package/dist/esm/dtls/record/AesCcm8.js +13 -35
- package/dist/esm/dtls/record/AesCcm8.js.map +1 -1
- package/dist/esm/dtls/record/DtlsCipherState.d.ts +11 -10
- package/dist/esm/dtls/record/DtlsCipherState.d.ts.map +1 -1
- package/dist/esm/dtls/record/DtlsCipherState.js +11 -7
- package/dist/esm/dtls/record/DtlsCipherState.js.map +1 -1
- package/dist/esm/dtls/record/DtlsRecord.d.ts +10 -10
- package/dist/esm/dtls/record/DtlsRecord.d.ts.map +1 -1
- package/dist/esm/dtls/record/DtlsRecord.js +11 -9
- package/dist/esm/dtls/record/DtlsRecord.js.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestCapability.d.ts +3 -4
- package/dist/esm/otbr-rest/OtbrRestCapability.d.ts.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestClient.d.ts +27 -8
- package/dist/esm/otbr-rest/OtbrRestClient.d.ts.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestClient.js +51 -21
- package/dist/esm/otbr-rest/OtbrRestClient.js.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts +2 -1
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js +4 -4
- package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestProbe.d.ts +6 -4
- package/dist/esm/otbr-rest/OtbrRestProbe.d.ts.map +1 -1
- package/dist/esm/otbr-rest/OtbrRestProbe.js +12 -44
- package/dist/esm/otbr-rest/OtbrRestProbe.js.map +1 -1
- package/dist/esm/otbr-rest/caseNormalizer.d.ts +7 -0
- package/dist/esm/otbr-rest/caseNormalizer.d.ts.map +1 -1
- package/dist/esm/otbr-rest/caseNormalizer.js +11 -0
- package/dist/esm/otbr-rest/caseNormalizer.js.map +1 -1
- package/dist/esm/otbr-rest/parseHexBytes.d.ts +22 -0
- package/dist/esm/otbr-rest/parseHexBytes.d.ts.map +1 -0
- package/dist/esm/otbr-rest/parseHexBytes.js +30 -0
- package/dist/esm/otbr-rest/parseHexBytes.js.map +6 -0
- package/dist/esm/otbr-rest/translation.d.ts +2 -1
- package/dist/esm/otbr-rest/translation.d.ts.map +1 -1
- package/dist/esm/otbr-rest/translation.js +16 -18
- package/dist/esm/otbr-rest/translation.js.map +1 -1
- package/dist/esm/selection/selectBr.d.ts +8 -4
- package/dist/esm/selection/selectBr.d.ts.map +1 -1
- package/dist/esm/selection/selectBr.js +6 -5
- package/dist/esm/selection/selectBr.js.map +1 -1
- package/dist/esm/selection/withExtPanIdLock.d.ts +2 -1
- package/dist/esm/selection/withExtPanIdLock.d.ts.map +1 -1
- package/dist/esm/selection/withExtPanIdLock.js.map +1 -1
- package/dist/esm/tlv/BasicTlvCodec.d.ts +4 -4
- package/dist/esm/tlv/BasicTlvCodec.d.ts.map +1 -1
- package/dist/esm/tlv/BasicTlvCodec.js +14 -12
- package/dist/esm/tlv/BasicTlvCodec.js.map +1 -1
- package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts +3 -2
- package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts.map +1 -1
- package/dist/esm/tlv/NetworkDiagnosticTlv.js.map +1 -1
- package/dist/esm/tlv/TypeListTlv.d.ts +3 -2
- package/dist/esm/tlv/TypeListTlv.d.ts.map +1 -1
- package/dist/esm/tlv/TypeListTlv.js +2 -2
- package/dist/esm/tlv/TypeListTlv.js.map +1 -1
- package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts +3 -2
- package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -1
- package/dist/esm/tlv/diag/ChildIpv6AddressList.js +5 -3
- package/dist/esm/tlv/diag/ChildIpv6AddressList.js.map +1 -1
- package/dist/esm/tlv/diag/ChildTable.d.ts +3 -2
- package/dist/esm/tlv/diag/ChildTable.d.ts.map +1 -1
- package/dist/esm/tlv/diag/ChildTable.js +8 -7
- package/dist/esm/tlv/diag/ChildTable.js.map +1 -1
- package/dist/esm/tlv/diag/Connectivity.d.ts +3 -2
- package/dist/esm/tlv/diag/Connectivity.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Connectivity.js +14 -14
- package/dist/esm/tlv/diag/Connectivity.js.map +1 -1
- package/dist/esm/tlv/diag/Ipv6AddressList.d.ts +3 -2
- package/dist/esm/tlv/diag/Ipv6AddressList.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Ipv6AddressList.js +7 -6
- package/dist/esm/tlv/diag/Ipv6AddressList.js.map +1 -1
- package/dist/esm/tlv/diag/LeaderData.d.ts +3 -2
- package/dist/esm/tlv/diag/LeaderData.d.ts.map +1 -1
- package/dist/esm/tlv/diag/LeaderData.js +9 -8
- package/dist/esm/tlv/diag/LeaderData.js.map +1 -1
- package/dist/esm/tlv/diag/MacCounters.d.ts +3 -2
- package/dist/esm/tlv/diag/MacCounters.d.ts.map +1 -1
- package/dist/esm/tlv/diag/MacCounters.js +13 -12
- package/dist/esm/tlv/diag/MacCounters.js.map +1 -1
- package/dist/esm/tlv/diag/MleCounters.d.ts +3 -2
- package/dist/esm/tlv/diag/MleCounters.d.ts.map +1 -1
- package/dist/esm/tlv/diag/MleCounters.js +19 -18
- package/dist/esm/tlv/diag/MleCounters.js.map +1 -1
- package/dist/esm/tlv/diag/Mode.d.ts +3 -2
- package/dist/esm/tlv/diag/Mode.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Mode.js +5 -3
- package/dist/esm/tlv/diag/Mode.js.map +1 -1
- package/dist/esm/tlv/diag/NetworkData.d.ts +7 -6
- package/dist/esm/tlv/diag/NetworkData.d.ts.map +1 -1
- package/dist/esm/tlv/diag/NetworkData.js +23 -18
- package/dist/esm/tlv/diag/NetworkData.js.map +1 -1
- package/dist/esm/tlv/diag/Primitives.d.ts +15 -14
- package/dist/esm/tlv/diag/Primitives.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Primitives.js +26 -20
- package/dist/esm/tlv/diag/Primitives.js.map +1 -1
- package/dist/esm/tlv/diag/Route64.d.ts +3 -2
- package/dist/esm/tlv/diag/Route64.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Route64.js +9 -8
- package/dist/esm/tlv/diag/Route64.js.map +1 -1
- package/dist/esm/tlv/diag/RouterNeighbor.d.ts +3 -2
- package/dist/esm/tlv/diag/RouterNeighbor.d.ts.map +1 -1
- package/dist/esm/tlv/diag/RouterNeighbor.js +13 -11
- package/dist/esm/tlv/diag/RouterNeighbor.js.map +1 -1
- package/dist/esm/tlv/diag/Timeout.d.ts +3 -2
- package/dist/esm/tlv/diag/Timeout.d.ts.map +1 -1
- package/dist/esm/tlv/diag/Timeout.js +5 -4
- package/dist/esm/tlv/diag/Timeout.js.map +1 -1
- package/dist/esm/tlv/diag/VendorInfo.d.ts +13 -12
- package/dist/esm/tlv/diag/VendorInfo.d.ts.map +1 -1
- package/dist/esm/tlv/diag/VendorInfo.js +5 -4
- package/dist/esm/tlv/diag/VendorInfo.js.map +1 -1
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts +3 -2
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -1
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.js +7 -4
- package/dist/esm/tlv/meshcop/Ip6AddressTlv.js.map +1 -1
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts +4 -3
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -1
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js +10 -8
- package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js.map +1 -1
- package/dist/esm/util/meshLocalAddr.d.ts +5 -4
- package/dist/esm/util/meshLocalAddr.d.ts.map +1 -1
- package/dist/esm/util/meshLocalAddr.js +7 -5
- package/dist/esm/util/meshLocalAddr.js.map +1 -1
- package/package.json +5 -5
- package/src/coap/CoapClient.ts +13 -20
- package/src/coap/CoapMessage.ts +17 -9
- package/src/commissioner/Commissioner.ts +5 -2
- package/src/commissioner/LeadKa.ts +4 -4
- package/src/commissioner/LeadPet.ts +6 -5
- package/src/credentials/ThreadCredentialsRegistry.ts +14 -13
- package/src/credentials/ThreadNetworkCredentials.ts +5 -3
- package/src/crypto/AesCmacPrf128.ts +10 -87
- package/src/crypto/Pbkdf2AesCmac.ts +14 -10
- package/src/crypto/Pskc.ts +7 -6
- package/src/crypto/index.ts +1 -1
- package/src/dataset/OperationalDataset.ts +48 -47
- package/src/dataset/SecurityPolicy.ts +8 -7
- package/src/diagnostic/DiagnosticResponse.ts +5 -4
- package/src/diagnostic/DiagnosticSource.ts +2 -2
- package/src/diagnostic/MeshCopDiagnosticSource.ts +80 -64
- package/src/diagnostic/connectMeshcop.ts +6 -14
- package/src/diagnostic/errors.ts +1 -1
- package/src/discovery/BorderRouterRegistry.ts +2 -4
- package/src/dtls/channel/DtlsConnectOpts.ts +3 -3
- package/src/dtls/channel/NobleDtlsChannel.ts +96 -60
- package/src/dtls/ecjpake/EcJpakePms.ts +5 -6
- package/src/dtls/ecjpake/EcJpakeRound.ts +57 -37
- package/src/dtls/ecjpake/SchnorrZkp.ts +43 -30
- package/src/dtls/handshake/ChangeCipherSpec.ts +3 -1
- package/src/dtls/handshake/ClientHelloMessage.ts +8 -6
- package/src/dtls/handshake/ClientKeyExchangeMessage.ts +2 -1
- package/src/dtls/handshake/DtlsClient.ts +119 -95
- package/src/dtls/handshake/FinishedMessage.ts +5 -3
- package/src/dtls/handshake/HandshakeMessage.ts +18 -16
- package/src/dtls/handshake/HelloVerifyRequestMessage.ts +3 -1
- package/src/dtls/handshake/ServerHelloDoneMessage.ts +5 -3
- package/src/dtls/handshake/ServerHelloMessage.ts +5 -3
- package/src/dtls/handshake/ServerKeyExchangeMessage.ts +2 -1
- package/src/dtls/prf/HandshakeTranscript.ts +18 -11
- package/src/dtls/prf/TlsPrf.ts +68 -54
- package/src/dtls/record/AesCcm8.ts +23 -49
- package/src/dtls/record/DtlsCipherState.ts +20 -16
- package/src/dtls/record/DtlsRecord.ts +17 -15
- package/src/otbr-rest/OtbrRestCapability.ts +4 -4
- package/src/otbr-rest/OtbrRestClient.ts +64 -29
- package/src/otbr-rest/OtbrRestDiagnosticSource.ts +5 -5
- package/src/otbr-rest/OtbrRestProbe.ts +12 -47
- package/src/otbr-rest/caseNormalizer.ts +17 -0
- package/src/otbr-rest/parseHexBytes.ts +47 -0
- package/src/otbr-rest/translation.ts +24 -22
- package/src/selection/selectBr.ts +26 -13
- package/src/selection/withExtPanIdLock.ts +1 -1
- package/src/tlv/BasicTlvCodec.ts +17 -15
- package/src/tlv/NetworkDiagnosticTlv.ts +3 -2
- package/src/tlv/TypeListTlv.ts +4 -4
- package/src/tlv/diag/ChildIpv6AddressList.ts +8 -5
- package/src/tlv/diag/ChildTable.ts +10 -9
- package/src/tlv/diag/Connectivity.ts +16 -16
- package/src/tlv/diag/Ipv6AddressList.ts +9 -8
- package/src/tlv/diag/LeaderData.ts +11 -10
- package/src/tlv/diag/MacCounters.ts +15 -14
- package/src/tlv/diag/MleCounters.ts +21 -20
- package/src/tlv/diag/Mode.ts +7 -5
- package/src/tlv/diag/NetworkData.ts +31 -26
- package/src/tlv/diag/Primitives.ts +42 -36
- package/src/tlv/diag/Route64.ts +11 -10
- package/src/tlv/diag/RouterNeighbor.ts +16 -13
- package/src/tlv/diag/Timeout.ts +7 -6
- package/src/tlv/diag/VendorInfo.ts +19 -18
- package/src/tlv/meshcop/Ip6AddressTlv.ts +9 -6
- package/src/tlv/meshcop/UdpEncapsulationTlv.ts +13 -11
- package/src/util/meshLocalAddr.ts +10 -8
|
@@ -3,25 +3,26 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Bytes } from "@matter/general";
|
|
6
7
|
/**
|
|
7
8
|
* Realm-local all-Thread-nodes multicast address (`ff03::1`).
|
|
8
9
|
*/
|
|
9
|
-
export declare const ALL_THREAD_NODES_REALM_LOCAL:
|
|
10
|
+
export declare const ALL_THREAD_NODES_REALM_LOCAL: Bytes;
|
|
10
11
|
/**
|
|
11
12
|
* Realm-local all-Thread-routers multicast address (`ff03::2`). Diagnostic
|
|
12
13
|
* multicast queries (`MGMT_DIAG_GET.qry`) target this group.
|
|
13
14
|
*/
|
|
14
|
-
export declare const ALL_THREAD_ROUTERS_REALM_LOCAL:
|
|
15
|
+
export declare const ALL_THREAD_ROUTERS_REALM_LOCAL: Bytes;
|
|
15
16
|
/**
|
|
16
17
|
* Derive the mesh-local IPv6 address of a node from its RLOC16.
|
|
17
18
|
*
|
|
18
19
|
* Layout: `mlPrefix(8) || 0x0000 00FF FE00 || rloc16(2 BE)` — the well-known
|
|
19
20
|
* Thread RLOC interface identifier with the locator in the low 16 bits.
|
|
20
21
|
*/
|
|
21
|
-
export declare function deriveMeshLocalAddress(mlPrefix:
|
|
22
|
+
export declare function deriveMeshLocalAddress(mlPrefix: Bytes, rloc16: number): Bytes;
|
|
22
23
|
/**
|
|
23
24
|
* Format a 16-byte IPv6 address as colon-separated hextets with leading zeros
|
|
24
25
|
* trimmed. No `::` compression — for logs, where unambiguity beats brevity.
|
|
25
26
|
*/
|
|
26
|
-
export declare function formatIp6(
|
|
27
|
+
export declare function formatIp6(input: Bytes): string;
|
|
27
28
|
//# sourceMappingURL=meshLocalAddr.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshLocalAddr.d.ts","sourceRoot":"","sources":["../../../src/util/meshLocalAddr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"meshLocalAddr.d.ts","sourceRoot":"","sources":["../../../src/util/meshLocalAddr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAuB,MAAM,iBAAiB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,KAAwB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,KAAwB,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAe7E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAU9C"}
|
|
@@ -3,25 +3,27 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { ImplementationError } from "@matter/general";
|
|
6
|
+
import { Bytes, ImplementationError } from "@matter/general";
|
|
7
7
|
const ALL_THREAD_NODES_REALM_LOCAL = realmLocal(1);
|
|
8
8
|
const ALL_THREAD_ROUTERS_REALM_LOCAL = realmLocal(2);
|
|
9
9
|
function deriveMeshLocalAddress(mlPrefix, rloc16) {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const prefix = Bytes.of(mlPrefix);
|
|
11
|
+
if (prefix.length !== 8) {
|
|
12
|
+
throw new ImplementationError(`deriveMeshLocalAddress: mlPrefix must be 8 bytes, got ${prefix.length}`);
|
|
12
13
|
}
|
|
13
14
|
if (!Number.isInteger(rloc16) || rloc16 < 0 || rloc16 > 65535) {
|
|
14
15
|
throw new ImplementationError(`deriveMeshLocalAddress: rloc16 out of range: ${rloc16}`);
|
|
15
16
|
}
|
|
16
17
|
const addr = new Uint8Array(16);
|
|
17
|
-
addr.set(
|
|
18
|
+
addr.set(prefix, 0);
|
|
18
19
|
addr[11] = 255;
|
|
19
20
|
addr[12] = 254;
|
|
20
21
|
addr[14] = rloc16 >> 8 & 255;
|
|
21
22
|
addr[15] = rloc16 & 255;
|
|
22
23
|
return addr;
|
|
23
24
|
}
|
|
24
|
-
function formatIp6(
|
|
25
|
+
function formatIp6(input) {
|
|
26
|
+
const addr = Bytes.of(input);
|
|
25
27
|
if (addr.length !== 16) {
|
|
26
28
|
throw new ImplementationError(`formatIp6: address must be 16 bytes, got ${addr.length}`);
|
|
27
29
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/meshLocalAddr.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,2BAA2B;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,2BAA2B;AAKpC,MAAM,+BAAsC,WAAW,CAAI;AAM3D,MAAM,iCAAwC,WAAW,CAAI;AAQ7D,SAAS,uBAAuB,UAAiB,QAAuB;AAC3E,QAAM,SAAS,MAAM,GAAG,QAAQ;AAChC,MAAI,OAAO,WAAW,GAAG;AACrB,UAAM,IAAI,oBAAoB,yDAAyD,OAAO,MAAM,EAAE;AAAA,EAC1G;AACA,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,KAAK,SAAS,OAAQ;AAC5D,UAAM,IAAI,oBAAoB,gDAAgD,MAAM,EAAE;AAAA,EAC1F;AACA,QAAM,OAAO,IAAI,WAAW,EAAE;AAC9B,OAAK,IAAI,QAAQ,CAAC;AAClB,OAAK,EAAE,IAAI;AACX,OAAK,EAAE,IAAI;AACX,OAAK,EAAE,IAAK,UAAU,IAAK;AAC3B,OAAK,EAAE,IAAI,SAAS;AACpB,SAAO;AACX;AAMO,SAAS,UAAU,OAAsB;AAC5C,QAAM,OAAO,MAAM,GAAG,KAAK;AAC3B,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,oBAAoB,4CAA4C,KAAK,MAAM,EAAE;AAAA,EAC3F;AACA,QAAM,SAAS,IAAI,MAAc;AACjC,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC5B,WAAO,MAAO,KAAK,CAAC,KAAK,IAAK,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;AAAA,EAC3D;AACA,SAAO,OAAO,KAAK,GAAG;AAC1B;AAEA,SAAS,WAAW,UAA8B;AAC9C,QAAM,OAAO,IAAI,WAAW,EAAE;AAC9B,OAAK,CAAC,IAAI;AACV,OAAK,CAAC,IAAI;AACV,OAAK,EAAE,IAAI;AACX,SAAO;AACX;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/thread-br-client",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.17.5-alpha.0-20260706-fd4c49e2e",
|
|
4
4
|
"description": "Thread Border Router discovery, dataset codec, and MeshCoP/OTBR diagnostics for matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"coverage": "c8 matter-test esm"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@matter/general": "
|
|
32
|
-
"@matter/protocol": "
|
|
31
|
+
"@matter/general": "0.17.5-alpha.0-20260706-fd4c49e2e",
|
|
32
|
+
"@matter/protocol": "0.17.5-alpha.0-20260706-fd4c49e2e",
|
|
33
33
|
"@noble/curves": "^2.2.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@matter/testing": "
|
|
36
|
+
"@matter/testing": "0.17.5-alpha.0-20260706-fd4c49e2e"
|
|
37
37
|
},
|
|
38
38
|
"files": [
|
|
39
39
|
"dist/**/*",
|
|
@@ -70,4 +70,4 @@
|
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
72
|
}
|
|
73
|
-
}
|
|
73
|
+
}
|
package/src/coap/CoapClient.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type Duration,
|
|
11
11
|
type Entropy,
|
|
12
12
|
type Environment,
|
|
13
|
+
errorOf,
|
|
13
14
|
ImplementationError,
|
|
14
15
|
Logger,
|
|
15
16
|
Millis,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
Timer,
|
|
20
21
|
} from "@matter/general";
|
|
21
22
|
import type { DtlsChannel } from "../dtls/channel/DtlsChannel.js";
|
|
22
|
-
import { CoapMessage } from "./CoapMessage.js";
|
|
23
|
+
import { CoapError, CoapMessage } from "./CoapMessage.js";
|
|
23
24
|
|
|
24
25
|
const logger = Logger.get("CoapClient");
|
|
25
26
|
|
|
@@ -71,14 +72,6 @@ function pathsEqual(a: string[], b: string[]): boolean {
|
|
|
71
72
|
return true;
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
function tokenHex(token: Uint8Array): string {
|
|
75
|
-
let out = "";
|
|
76
|
-
for (const b of token) {
|
|
77
|
-
out += b.toString(16).padStart(2, "0");
|
|
78
|
-
}
|
|
79
|
-
return out;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
75
|
export class CoapClient {
|
|
83
76
|
#entropy: Entropy;
|
|
84
77
|
#messageId: number;
|
|
@@ -110,7 +103,7 @@ export class CoapClient {
|
|
|
110
103
|
type: "CON" | "NON";
|
|
111
104
|
code: string;
|
|
112
105
|
uriPath: string[];
|
|
113
|
-
payload?:
|
|
106
|
+
payload?: Bytes;
|
|
114
107
|
}): Promise<CoapMessage> {
|
|
115
108
|
const messageId = this.#nextMessageId();
|
|
116
109
|
const token = this.#randomToken();
|
|
@@ -152,7 +145,7 @@ export class CoapClient {
|
|
|
152
145
|
`CoapClient: messageId collision at ${msg.messageId} — too many concurrent CON requests`,
|
|
153
146
|
);
|
|
154
147
|
}
|
|
155
|
-
const reqTokenHex =
|
|
148
|
+
const reqTokenHex = Bytes.toHex(msg.token);
|
|
156
149
|
if (this.#pendingByToken.has(reqTokenHex)) {
|
|
157
150
|
throw new ImplementationError(`CoapClient: token collision for ${reqTokenHex}`);
|
|
158
151
|
}
|
|
@@ -229,7 +222,7 @@ export class CoapClient {
|
|
|
229
222
|
scheduleRetransmit(initialDelay);
|
|
230
223
|
})
|
|
231
224
|
.catch(err => {
|
|
232
|
-
state.reject(
|
|
225
|
+
state.reject(errorOf(err));
|
|
233
226
|
});
|
|
234
227
|
});
|
|
235
228
|
}
|
|
@@ -240,7 +233,7 @@ export class CoapClient {
|
|
|
240
233
|
for await (const bytes of this.#channel) {
|
|
241
234
|
let msg: CoapMessage;
|
|
242
235
|
try {
|
|
243
|
-
msg = CoapMessage.decode(
|
|
236
|
+
msg = CoapMessage.decode(bytes);
|
|
244
237
|
} catch (err) {
|
|
245
238
|
logger.debug(`CoAP inbound decode failed, dropping: ${err}`);
|
|
246
239
|
continue;
|
|
@@ -249,9 +242,9 @@ export class CoapClient {
|
|
|
249
242
|
await this.#dispatchInbound(msg);
|
|
250
243
|
}
|
|
251
244
|
} catch (err) {
|
|
252
|
-
channelError =
|
|
245
|
+
channelError = errorOf(err);
|
|
253
246
|
} finally {
|
|
254
|
-
const err = channelError ?? new
|
|
247
|
+
const err = channelError ?? new CoapError("CoapClient: channel closed");
|
|
255
248
|
// Reject all outstanding requests (both maps reference the same PendingState entries).
|
|
256
249
|
for (const state of this.#pendingByToken.values()) {
|
|
257
250
|
state.reject(err);
|
|
@@ -268,7 +261,7 @@ export class CoapClient {
|
|
|
268
261
|
// Stray ACK (duplicate or for a request we no longer track) — ignore.
|
|
269
262
|
return;
|
|
270
263
|
}
|
|
271
|
-
const isEmptyAck = msg.code === "0.00" && msg.payload.
|
|
264
|
+
const isEmptyAck = msg.code === "0.00" && msg.payload.byteLength === 0;
|
|
272
265
|
if (isEmptyAck) {
|
|
273
266
|
// Separate response coming.
|
|
274
267
|
state.onEmptyAck();
|
|
@@ -282,14 +275,14 @@ export class CoapClient {
|
|
|
282
275
|
if (msg.type === "RST") {
|
|
283
276
|
const state = this.#pendingByMsgId.get(msg.messageId);
|
|
284
277
|
if (state !== undefined) {
|
|
285
|
-
state.reject(new
|
|
278
|
+
state.reject(new CoapError(`CoAP RST received for messageId=${msg.messageId}`));
|
|
286
279
|
}
|
|
287
280
|
return;
|
|
288
281
|
}
|
|
289
282
|
|
|
290
283
|
// CON or NON. Check token first so a separate response is routed back to the
|
|
291
284
|
// originating #sendCon call regardless of which Uri-Path the BR replied on.
|
|
292
|
-
const inboundTokenHex =
|
|
285
|
+
const inboundTokenHex = Bytes.toHex(msg.token);
|
|
293
286
|
const pending = this.#pendingByToken.get(inboundTokenHex);
|
|
294
287
|
if (pending !== undefined) {
|
|
295
288
|
if (msg.type === "CON") {
|
|
@@ -338,7 +331,7 @@ export class CoapClient {
|
|
|
338
331
|
}
|
|
339
332
|
if (delivered === 0) {
|
|
340
333
|
logger.debug(
|
|
341
|
-
`CoAP inbound consumed by no request or listener: uri=${uri} type=${msg.type} code=${msg.code} payloadLen=${msg.payload.
|
|
334
|
+
`CoAP inbound consumed by no request or listener: uri=${uri} type=${msg.type} code=${msg.code} payloadLen=${msg.payload.byteLength}`,
|
|
342
335
|
);
|
|
343
336
|
}
|
|
344
337
|
}
|
|
@@ -349,7 +342,7 @@ export class CoapClient {
|
|
|
349
342
|
return id;
|
|
350
343
|
}
|
|
351
344
|
|
|
352
|
-
#randomToken():
|
|
345
|
+
#randomToken(): Bytes {
|
|
353
346
|
return Bytes.of(this.#entropy.randomBytes(4));
|
|
354
347
|
}
|
|
355
348
|
}
|
package/src/coap/CoapMessage.ts
CHANGED
|
@@ -12,12 +12,17 @@ export interface CoapMessage {
|
|
|
12
12
|
type: CoapType;
|
|
13
13
|
code: string;
|
|
14
14
|
messageId: number;
|
|
15
|
-
token:
|
|
15
|
+
token: Bytes;
|
|
16
16
|
uriPath?: string[];
|
|
17
|
-
payload:
|
|
17
|
+
payload: Bytes;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Thrown for CoAP-layer failures: a datagram that cannot be decoded per RFC
|
|
22
|
+
* 7252 §3, an RST response, or a clean close of the underlying channel while
|
|
23
|
+
* requests are still outstanding. A channel that fails with its own error
|
|
24
|
+
* propagates that error unchanged.
|
|
25
|
+
*/
|
|
21
26
|
export class CoapError extends MatterError {}
|
|
22
27
|
|
|
23
28
|
const VERSION = 1;
|
|
@@ -75,8 +80,10 @@ function encodeOption(out: number[], delta: number, value: Uint8Array): void {
|
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
export namespace CoapMessage {
|
|
78
|
-
export function encode(msg: CoapMessage):
|
|
79
|
-
const
|
|
83
|
+
export function encode(msg: CoapMessage): Bytes {
|
|
84
|
+
const token = Bytes.of(msg.token);
|
|
85
|
+
const payload = Bytes.of(msg.payload);
|
|
86
|
+
const tokenLength = token.length;
|
|
80
87
|
if (tokenLength > 8) {
|
|
81
88
|
throw new CoapError(`CoAP token too long: ${tokenLength} (max 8)`);
|
|
82
89
|
}
|
|
@@ -85,7 +92,7 @@ export namespace CoapMessage {
|
|
|
85
92
|
out.push((VERSION << 6) | (TYPE_TO_BITS[msg.type] << 4) | tokenLength);
|
|
86
93
|
out.push(encodeCode(msg.code));
|
|
87
94
|
out.push((msg.messageId >> 8) & 0xff, msg.messageId & 0xff);
|
|
88
|
-
pushAll(out,
|
|
95
|
+
pushAll(out, token);
|
|
89
96
|
|
|
90
97
|
if (msg.uriPath !== undefined) {
|
|
91
98
|
let lastOptionNumber = 0;
|
|
@@ -95,15 +102,16 @@ export namespace CoapMessage {
|
|
|
95
102
|
}
|
|
96
103
|
}
|
|
97
104
|
|
|
98
|
-
if (
|
|
105
|
+
if (payload.length > 0) {
|
|
99
106
|
out.push(PAYLOAD_MARKER);
|
|
100
|
-
pushAll(out,
|
|
107
|
+
pushAll(out, payload);
|
|
101
108
|
}
|
|
102
109
|
|
|
103
110
|
return Uint8Array.from(out);
|
|
104
111
|
}
|
|
105
112
|
|
|
106
|
-
export function decode(
|
|
113
|
+
export function decode(input: Bytes): CoapMessage {
|
|
114
|
+
const bytes = Bytes.of(input);
|
|
107
115
|
if (bytes.length < 4) {
|
|
108
116
|
throw new CoapError(`CoAP message too short: ${bytes.length} bytes`);
|
|
109
117
|
}
|
|
@@ -86,7 +86,7 @@ export class Commissioner {
|
|
|
86
86
|
payload: LeadPet.buildRequest(Commissioner.COMMISSIONER_ID),
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
logger.debug(`
|
|
89
|
+
logger.debug(`COMM_PET response code=${response.code} payloadLen=${response.payload.byteLength}`);
|
|
90
90
|
const parsed = LeadPet.parseResponse(response.payload);
|
|
91
91
|
|
|
92
92
|
if (parsed.state === "accept") {
|
|
@@ -162,7 +162,10 @@ export class Commissioner {
|
|
|
162
162
|
sessionBytes[1] = sessionId & 0xff;
|
|
163
163
|
const releasePayload = BasicTlv.encode([
|
|
164
164
|
{ type: MeshCopTlvType.COMMISSIONER_SESSION_ID, value: sessionBytes },
|
|
165
|
-
{
|
|
165
|
+
{
|
|
166
|
+
type: MeshCopTlvType.COMMISSIONER_ID,
|
|
167
|
+
value: new TextEncoder().encode(Commissioner.COMMISSIONER_ID),
|
|
168
|
+
},
|
|
166
169
|
]);
|
|
167
170
|
await this.#coap.request({
|
|
168
171
|
type: "CON",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { MatterError } from "@matter/general";
|
|
7
|
+
import { Bytes, MatterError } from "@matter/general";
|
|
8
8
|
import { MeshCopTlvType } from "../dataset/meshcopTlvTypes.js";
|
|
9
9
|
import { BasicTlv } from "../tlv/BasicTlvCodec.js";
|
|
10
10
|
|
|
@@ -19,7 +19,7 @@ export interface LeadKaResponse {
|
|
|
19
19
|
const STATE_ACCEPT = 0x01;
|
|
20
20
|
|
|
21
21
|
export namespace LeadKa {
|
|
22
|
-
export function buildRequest(sessionId: number):
|
|
22
|
+
export function buildRequest(sessionId: number): Bytes {
|
|
23
23
|
const sessionBytes = new Uint8Array(2);
|
|
24
24
|
sessionBytes[0] = (sessionId >> 8) & 0xff;
|
|
25
25
|
sessionBytes[1] = sessionId & 0xff;
|
|
@@ -32,11 +32,11 @@ export namespace LeadKa {
|
|
|
32
32
|
]);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export function parseResponse(payload:
|
|
35
|
+
export function parseResponse(payload: Bytes): LeadKaResponse {
|
|
36
36
|
const entries = BasicTlv.walk(payload);
|
|
37
37
|
for (const entry of entries) {
|
|
38
38
|
if (entry.type === MeshCopTlvType.STATE) {
|
|
39
|
-
const byte = entry.value[0];
|
|
39
|
+
const byte = Bytes.of(entry.value)[0];
|
|
40
40
|
if (byte === 0x01) return { state: "accept" };
|
|
41
41
|
if (byte === 0xff) return { state: "reject" };
|
|
42
42
|
if (byte === 0x00) return { state: "pending" };
|
|
@@ -15,26 +15,27 @@ export interface LeadPetResponse {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export namespace LeadPet {
|
|
18
|
-
export function buildRequest(commissionerId: string):
|
|
18
|
+
export function buildRequest(commissionerId: string): Bytes {
|
|
19
19
|
return BasicTlv.encode([
|
|
20
20
|
{ type: MeshCopTlvType.COMMISSIONER_ID, value: new TextEncoder().encode(commissionerId) },
|
|
21
21
|
]);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export function parseResponse(payload:
|
|
24
|
+
export function parseResponse(payload: Bytes): LeadPetResponse {
|
|
25
25
|
const entries = BasicTlv.walk(payload);
|
|
26
26
|
let state: "accept" | "reject" | "pending" | undefined;
|
|
27
27
|
let sessionId: number | undefined;
|
|
28
28
|
|
|
29
29
|
for (const entry of entries) {
|
|
30
30
|
if (entry.type === MeshCopTlvType.STATE) {
|
|
31
|
-
const byte = entry.value[0];
|
|
31
|
+
const byte = Bytes.of(entry.value)[0];
|
|
32
32
|
if (byte === 0x01) state = "accept";
|
|
33
33
|
else if (byte === 0xff) state = "reject";
|
|
34
34
|
else if (byte === 0x00) state = "pending";
|
|
35
35
|
else throw new CommissionerProtocolError(`LeadPet: unknown state byte ${byte}`);
|
|
36
36
|
} else if (entry.type === MeshCopTlvType.COMMISSIONER_SESSION_ID) {
|
|
37
|
-
|
|
37
|
+
const sessionIdBytes = Bytes.of(entry.value);
|
|
38
|
+
sessionId = (sessionIdBytes[0] << 8) | sessionIdBytes[1];
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
|
|
@@ -42,7 +43,7 @@ export namespace LeadPet {
|
|
|
42
43
|
const tlvSummary =
|
|
43
44
|
entries.length === 0
|
|
44
45
|
? "none"
|
|
45
|
-
: entries.map(e => `t=0x${e.type.toString(16)}/${e.value.
|
|
46
|
+
: entries.map(e => `t=0x${e.type.toString(16)}/${e.value.byteLength}b`).join(",");
|
|
46
47
|
throw new CommissionerProtocolError(
|
|
47
48
|
`LeadPet: response missing STATE TLV (payload=${Bytes.toHex(payload)}, tlvs=[${tlvSummary}])`,
|
|
48
49
|
);
|
|
@@ -19,7 +19,7 @@ export class ThreadCredentialsRegistry {
|
|
|
19
19
|
readonly #byExtPanId = new Map<string, ThreadNetworkCredentials>();
|
|
20
20
|
readonly events = {
|
|
21
21
|
registered: new Observable<[creds: ThreadNetworkCredentials]>(),
|
|
22
|
-
unregistered: new Observable<[extPanId:
|
|
22
|
+
unregistered: new Observable<[extPanId: Bytes]>(),
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
/**
|
|
@@ -62,10 +62,10 @@ export class ThreadCredentialsRegistry {
|
|
|
62
62
|
*/
|
|
63
63
|
registerCredentials(creds: ThreadNetworkCredentials): void {
|
|
64
64
|
const stored: ThreadNetworkCredentials = {
|
|
65
|
-
extPanId: creds.extPanId.slice(),
|
|
65
|
+
extPanId: Bytes.of(creds.extPanId).slice(),
|
|
66
66
|
networkName: creds.networkName,
|
|
67
|
-
pskc: creds.pskc.slice(),
|
|
68
|
-
meshLocalPrefix: creds.meshLocalPrefix
|
|
67
|
+
pskc: Bytes.of(creds.pskc).slice(),
|
|
68
|
+
meshLocalPrefix: creds.meshLocalPrefix === undefined ? undefined : Bytes.of(creds.meshLocalPrefix).slice(),
|
|
69
69
|
activeTimestamp: creds.activeTimestamp,
|
|
70
70
|
};
|
|
71
71
|
this.#byExtPanId.set(keyOf(stored.extPanId), stored);
|
|
@@ -74,15 +74,15 @@ export class ThreadCredentialsRegistry {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/** Remove an entry. No-op if absent. */
|
|
77
|
-
unregister(extPanId:
|
|
77
|
+
unregister(extPanId: Bytes): void {
|
|
78
78
|
const key = keyOf(extPanId);
|
|
79
79
|
if (!this.#byExtPanId.has(key)) return;
|
|
80
80
|
this.#byExtPanId.delete(key);
|
|
81
|
-
this.events.unregistered.emit(extPanId.slice());
|
|
81
|
+
this.events.unregistered.emit(Bytes.of(extPanId).slice());
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/** Lookup by extPanId. Comparison is by
|
|
85
|
-
getCredentials(extPanId:
|
|
84
|
+
/** Lookup by extPanId. Comparison is by byte equality, not reference. */
|
|
85
|
+
getCredentials(extPanId: Bytes): ThreadNetworkCredentials | undefined {
|
|
86
86
|
return this.#byExtPanId.get(keyOf(extPanId));
|
|
87
87
|
}
|
|
88
88
|
|
|
@@ -92,23 +92,24 @@ export class ThreadCredentialsRegistry {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
function keyOf(extPanId:
|
|
95
|
+
function keyOf(extPanId: Bytes): string {
|
|
96
96
|
return Bytes.toHex(extPanId);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
function snapshot(creds: ThreadNetworkCredentials): ThreadNetworkCredentials {
|
|
100
100
|
return {
|
|
101
|
-
extPanId: creds.extPanId.slice(),
|
|
101
|
+
extPanId: Bytes.of(creds.extPanId).slice(),
|
|
102
102
|
networkName: creds.networkName,
|
|
103
|
-
pskc: creds.pskc.slice(),
|
|
104
|
-
meshLocalPrefix: creds.meshLocalPrefix
|
|
103
|
+
pskc: Bytes.of(creds.pskc).slice(),
|
|
104
|
+
meshLocalPrefix: creds.meshLocalPrefix === undefined ? undefined : Bytes.of(creds.meshLocalPrefix).slice(),
|
|
105
105
|
activeTimestamp: creds.activeTimestamp,
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
// matter.js exposes `Bytes.fromBigInt` but no inverse `Bytes.toBigInt` yet —
|
|
110
110
|
// dataset's activeTimestamp is a fixed-width 8-byte BE field so the loop is safe.
|
|
111
|
-
function bytesToBigint(
|
|
111
|
+
function bytesToBigint(input: Bytes): bigint {
|
|
112
|
+
const bytes = Bytes.of(input);
|
|
112
113
|
let result = 0n;
|
|
113
114
|
for (const b of bytes) {
|
|
114
115
|
result = (result << 8n) | BigInt(b);
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type { Bytes } from "@matter/general";
|
|
8
|
+
|
|
7
9
|
/**
|
|
8
10
|
* Credentials needed to authenticate against a Thread network's commissioner.
|
|
9
11
|
*
|
|
@@ -13,14 +15,14 @@
|
|
|
13
15
|
*/
|
|
14
16
|
export interface ThreadNetworkCredentials {
|
|
15
17
|
/** 8-byte extended PAN ID — primary registry key. */
|
|
16
|
-
extPanId:
|
|
18
|
+
extPanId: Bytes;
|
|
17
19
|
/** Thread network name (UTF-8, ≤16 bytes). */
|
|
18
20
|
networkName: string;
|
|
19
21
|
/** 16-byte EC-JPAKE password (PSKc). Sensitive — redact when logging. */
|
|
20
|
-
pskc:
|
|
22
|
+
pskc: Bytes;
|
|
21
23
|
/** 8-byte mesh-local prefix, used to derive node mesh-local addresses for
|
|
22
24
|
* UDP-proxy unicast diagnostics. Absent if the dataset omits it. */
|
|
23
|
-
meshLocalPrefix?:
|
|
25
|
+
meshLocalPrefix?: Bytes;
|
|
24
26
|
/** Active timestamp from the dataset, used for change detection. */
|
|
25
27
|
activeTimestamp?: bigint;
|
|
26
28
|
}
|
|
@@ -4,98 +4,21 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { createCipheriv } from "node:crypto";
|
|
7
|
+
import { Bytes, Crypto } from "@matter/general";
|
|
9
8
|
|
|
10
|
-
const
|
|
11
|
-
const RB = 0x87;
|
|
12
|
-
const ZERO_BLOCK = new Uint8Array(BLOCK_SIZE);
|
|
13
|
-
|
|
14
|
-
function aesEcbEncryptBlock(key: Uint8Array, block: Uint8Array): Uint8Array {
|
|
15
|
-
const cipher = createCipheriv("aes-128-ecb", key, null);
|
|
16
|
-
cipher.setAutoPadding(false);
|
|
17
|
-
const out = cipher.update(block);
|
|
18
|
-
cipher.final();
|
|
19
|
-
return new Uint8Array(out.buffer, out.byteOffset, out.byteLength);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function leftShift1(input: Uint8Array): Uint8Array {
|
|
23
|
-
const out = new Uint8Array(input.length);
|
|
24
|
-
let carry = 0;
|
|
25
|
-
for (let i = input.length - 1; i >= 0; i--) {
|
|
26
|
-
const b = input[i];
|
|
27
|
-
out[i] = ((b << 1) & 0xff) | carry;
|
|
28
|
-
carry = (b & 0x80) >> 7;
|
|
29
|
-
}
|
|
30
|
-
return out;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function xorInto(target: Uint8Array, source: Uint8Array, offset = 0): void {
|
|
34
|
-
for (let i = 0; i < BLOCK_SIZE; i++) {
|
|
35
|
-
target[i] ^= source[offset + i];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function generateSubkeys(key: Uint8Array): { k1: Uint8Array; k2: Uint8Array } {
|
|
40
|
-
const l = aesEcbEncryptBlock(key, ZERO_BLOCK);
|
|
41
|
-
const k1 = leftShift1(l);
|
|
42
|
-
if ((l[0] & 0x80) !== 0) k1[BLOCK_SIZE - 1] ^= RB;
|
|
43
|
-
const k2 = leftShift1(k1);
|
|
44
|
-
if ((k1[0] & 0x80) !== 0) k2[BLOCK_SIZE - 1] ^= RB;
|
|
45
|
-
return { k1, k2 };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* AES-CMAC per RFC 4493.
|
|
50
|
-
*
|
|
51
|
-
* Block-cipher-based MAC with a 128-bit AES key and a 16-byte tag. Empty messages
|
|
52
|
-
* are explicitly supported and pad to a single all-zero block XORed with K2.
|
|
53
|
-
*/
|
|
54
|
-
export namespace AesCmac {
|
|
55
|
-
export function compute(key: Uint8Array, message: Uint8Array): Uint8Array {
|
|
56
|
-
if (key.length !== 16) {
|
|
57
|
-
throw new InternalError(`AES-CMAC key must be 16 bytes, got ${key.length}`);
|
|
58
|
-
}
|
|
59
|
-
const { k1, k2 } = generateSubkeys(key);
|
|
60
|
-
|
|
61
|
-
const numBlocks = Math.max(1, Math.ceil(message.length / BLOCK_SIZE));
|
|
62
|
-
const lastBlockComplete = message.length > 0 && message.length % BLOCK_SIZE === 0;
|
|
63
|
-
|
|
64
|
-
const lastBlock = new Uint8Array(BLOCK_SIZE);
|
|
65
|
-
const lastBlockOffset = (numBlocks - 1) * BLOCK_SIZE;
|
|
66
|
-
if (lastBlockComplete) {
|
|
67
|
-
lastBlock.set(message.subarray(lastBlockOffset, lastBlockOffset + BLOCK_SIZE));
|
|
68
|
-
xorInto(lastBlock, k1);
|
|
69
|
-
} else {
|
|
70
|
-
const remaining = message.length - lastBlockOffset;
|
|
71
|
-
lastBlock.set(message.subarray(lastBlockOffset, lastBlockOffset + remaining));
|
|
72
|
-
lastBlock[remaining] = 0x80;
|
|
73
|
-
xorInto(lastBlock, k2);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const x = new Uint8Array(BLOCK_SIZE);
|
|
77
|
-
for (let i = 0; i < numBlocks - 1; i++) {
|
|
78
|
-
xorInto(x, message, i * BLOCK_SIZE);
|
|
79
|
-
const enc = aesEcbEncryptBlock(key, x);
|
|
80
|
-
x.set(enc);
|
|
81
|
-
}
|
|
82
|
-
xorInto(x, lastBlock);
|
|
83
|
-
return aesEcbEncryptBlock(key, x);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
9
|
+
const ZERO_BLOCK = new Uint8Array(16);
|
|
86
10
|
|
|
87
11
|
/**
|
|
88
|
-
* AES-CMAC-PRF-128 per RFC 4615
|
|
89
|
-
*
|
|
90
|
-
* Lifts AES-CMAC into a variable-length-key PRF: a 16-byte key is used directly,
|
|
91
|
-
* any other key is first compressed via CMAC under an all-zero key.
|
|
12
|
+
* AES-CMAC-PRF-128 per RFC 4615: a 16-byte key is used directly; any other length is
|
|
13
|
+
* first compressed via CMAC under an all-zero key. Built on {@link Crypto.cmac}.
|
|
92
14
|
*/
|
|
93
15
|
export namespace AesCmacPrf128 {
|
|
94
|
-
export function compute(key:
|
|
95
|
-
|
|
96
|
-
|
|
16
|
+
export function compute(crypto: Crypto, key: Bytes, message: Bytes): Bytes {
|
|
17
|
+
const keyBytes = Bytes.of(key);
|
|
18
|
+
if (keyBytes.length === 16) {
|
|
19
|
+
return crypto.cmac(keyBytes, message);
|
|
97
20
|
}
|
|
98
|
-
const derivedKey =
|
|
99
|
-
return
|
|
21
|
+
const derivedKey = crypto.cmac(ZERO_BLOCK, keyBytes);
|
|
22
|
+
return crypto.cmac(derivedKey, message);
|
|
100
23
|
}
|
|
101
24
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { ImplementationError } from "@matter/general";
|
|
7
|
+
import { Bytes, Crypto, ImplementationError } from "@matter/general";
|
|
8
8
|
import { AesCmacPrf128 } from "./AesCmacPrf128.js";
|
|
9
9
|
|
|
10
10
|
const HLEN = 16;
|
|
@@ -15,13 +15,17 @@ const HLEN = 16;
|
|
|
15
15
|
* Hand-rolled because Node's `crypto.pbkdf2` is hardwired to HMAC. The PRF here
|
|
16
16
|
* always emits 16 bytes, so each output block needs one PRF call per iteration.
|
|
17
17
|
*/
|
|
18
|
-
export function pbkdf2AesCmac(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
export function pbkdf2AesCmac(
|
|
19
|
+
crypto: Crypto,
|
|
20
|
+
args: {
|
|
21
|
+
password: Bytes;
|
|
22
|
+
salt: Bytes;
|
|
23
|
+
iterations: number;
|
|
24
|
+
dkLen: number;
|
|
25
|
+
},
|
|
26
|
+
): Bytes {
|
|
27
|
+
const { password, iterations, dkLen } = args;
|
|
28
|
+
const salt = Bytes.of(args.salt);
|
|
25
29
|
if (!Number.isInteger(iterations) || iterations <= 0) {
|
|
26
30
|
throw new ImplementationError(`iterations must be a positive integer, got ${iterations}`);
|
|
27
31
|
}
|
|
@@ -44,10 +48,10 @@ export function pbkdf2AesCmac(args: {
|
|
|
44
48
|
saltedBlock[salt.length + 2] = (i >>> 8) & 0xff;
|
|
45
49
|
saltedBlock[salt.length + 3] = i & 0xff;
|
|
46
50
|
|
|
47
|
-
let u = AesCmacPrf128.compute(password, saltedBlock);
|
|
51
|
+
let u = Bytes.of(AesCmacPrf128.compute(crypto, password, saltedBlock));
|
|
48
52
|
const t = new Uint8Array(u);
|
|
49
53
|
for (let j = 1; j < iterations; j++) {
|
|
50
|
-
u = AesCmacPrf128.compute(password, u);
|
|
54
|
+
u = Bytes.of(AesCmacPrf128.compute(crypto, password, u));
|
|
51
55
|
for (let k = 0; k < HLEN; k++) t[k] ^= u[k];
|
|
52
56
|
}
|
|
53
57
|
out.set(t, (i - 1) * HLEN);
|