@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.
Files changed (869) hide show
  1. package/README.md +192 -0
  2. package/dist/cjs/coap/CoapClient.d.ts +33 -0
  3. package/dist/cjs/coap/CoapClient.d.ts.map +1 -0
  4. package/dist/cjs/coap/CoapClient.js +281 -0
  5. package/dist/cjs/coap/CoapClient.js.map +6 -0
  6. package/dist/cjs/coap/CoapMessage.d.ts +23 -0
  7. package/dist/cjs/coap/CoapMessage.d.ts.map +1 -0
  8. package/dist/cjs/coap/CoapMessage.js +182 -0
  9. package/dist/cjs/coap/CoapMessage.js.map +6 -0
  10. package/dist/cjs/coap/index.d.ts +8 -0
  11. package/dist/cjs/coap/index.d.ts.map +1 -0
  12. package/dist/cjs/coap/index.js +31 -0
  13. package/dist/cjs/coap/index.js.map +6 -0
  14. package/dist/cjs/commissioner/Commissioner.d.ts +89 -0
  15. package/dist/cjs/commissioner/Commissioner.d.ts.map +1 -0
  16. package/dist/cjs/commissioner/Commissioner.js +188 -0
  17. package/dist/cjs/commissioner/Commissioner.js.map +6 -0
  18. package/dist/cjs/commissioner/LeadKa.d.ts +17 -0
  19. package/dist/cjs/commissioner/LeadKa.d.ts.map +1 -0
  20. package/dist/cjs/commissioner/LeadKa.js +63 -0
  21. package/dist/cjs/commissioner/LeadKa.js.map +6 -0
  22. package/dist/cjs/commissioner/LeadPet.d.ts +14 -0
  23. package/dist/cjs/commissioner/LeadPet.d.ts.map +1 -0
  24. package/dist/cjs/commissioner/LeadPet.js +66 -0
  25. package/dist/cjs/commissioner/LeadPet.js.map +6 -0
  26. package/dist/cjs/commissioner/index.d.ts +12 -0
  27. package/dist/cjs/commissioner/index.d.ts.map +1 -0
  28. package/dist/cjs/commissioner/index.js +38 -0
  29. package/dist/cjs/commissioner/index.js.map +6 -0
  30. package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts +50 -0
  31. package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts.map +1 -0
  32. package/dist/cjs/credentials/ThreadCredentialsRegistry.js +119 -0
  33. package/dist/cjs/credentials/ThreadCredentialsRegistry.js.map +6 -0
  34. package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts +26 -0
  35. package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts.map +1 -0
  36. package/dist/cjs/credentials/ThreadNetworkCredentials.js +22 -0
  37. package/dist/cjs/credentials/ThreadNetworkCredentials.js.map +6 -0
  38. package/dist/cjs/credentials/index.d.ts +8 -0
  39. package/dist/cjs/credentials/index.d.ts.map +1 -0
  40. package/dist/cjs/credentials/index.js +30 -0
  41. package/dist/cjs/credentials/index.js.map +6 -0
  42. package/dist/cjs/crypto/AesCmacPrf128.d.ts +24 -0
  43. package/dist/cjs/crypto/AesCmacPrf128.d.ts.map +1 -0
  44. package/dist/cjs/crypto/AesCmacPrf128.js +107 -0
  45. package/dist/cjs/crypto/AesCmacPrf128.js.map +6 -0
  46. package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts +18 -0
  47. package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts.map +1 -0
  48. package/dist/cjs/crypto/Pbkdf2AesCmac.js +62 -0
  49. package/dist/cjs/crypto/Pbkdf2AesCmac.js.map +6 -0
  50. package/dist/cjs/crypto/Pskc.d.ts +21 -0
  51. package/dist/cjs/crypto/Pskc.d.ts.map +1 -0
  52. package/dist/cjs/crypto/Pskc.js +69 -0
  53. package/dist/cjs/crypto/Pskc.js.map +6 -0
  54. package/dist/cjs/crypto/index.d.ts +9 -0
  55. package/dist/cjs/crypto/index.d.ts.map +1 -0
  56. package/dist/cjs/crypto/index.js +35 -0
  57. package/dist/cjs/crypto/index.js.map +6 -0
  58. package/dist/cjs/dataset/OperationalDataset.d.ts +74 -0
  59. package/dist/cjs/dataset/OperationalDataset.d.ts.map +1 -0
  60. package/dist/cjs/dataset/OperationalDataset.js +244 -0
  61. package/dist/cjs/dataset/OperationalDataset.js.map +6 -0
  62. package/dist/cjs/dataset/SecurityPolicy.d.ts +22 -0
  63. package/dist/cjs/dataset/SecurityPolicy.d.ts.map +1 -0
  64. package/dist/cjs/dataset/SecurityPolicy.js +59 -0
  65. package/dist/cjs/dataset/SecurityPolicy.js.map +6 -0
  66. package/dist/cjs/dataset/errors.d.ts +10 -0
  67. package/dist/cjs/dataset/errors.d.ts.map +1 -0
  68. package/dist/cjs/dataset/errors.js +32 -0
  69. package/dist/cjs/dataset/errors.js.map +6 -0
  70. package/dist/cjs/dataset/index.d.ts +9 -0
  71. package/dist/cjs/dataset/index.d.ts.map +1 -0
  72. package/dist/cjs/dataset/index.js +36 -0
  73. package/dist/cjs/dataset/index.js.map +6 -0
  74. package/dist/cjs/dataset/meshcopTlvTypes.d.ts +61 -0
  75. package/dist/cjs/dataset/meshcopTlvTypes.d.ts.map +1 -0
  76. package/dist/cjs/dataset/meshcopTlvTypes.js +82 -0
  77. package/dist/cjs/dataset/meshcopTlvTypes.js.map +6 -0
  78. package/dist/cjs/diagnostic/DefaultTlvSet.d.ts +8 -0
  79. package/dist/cjs/diagnostic/DefaultTlvSet.d.ts.map +1 -0
  80. package/dist/cjs/diagnostic/DefaultTlvSet.js +52 -0
  81. package/dist/cjs/diagnostic/DefaultTlvSet.js.map +6 -0
  82. package/dist/cjs/diagnostic/DiagnosticResponse.d.ts +47 -0
  83. package/dist/cjs/diagnostic/DiagnosticResponse.d.ts.map +1 -0
  84. package/dist/cjs/diagnostic/DiagnosticResponse.js +22 -0
  85. package/dist/cjs/diagnostic/DiagnosticResponse.js.map +6 -0
  86. package/dist/cjs/diagnostic/DiagnosticSource.d.ts +64 -0
  87. package/dist/cjs/diagnostic/DiagnosticSource.d.ts.map +1 -0
  88. package/dist/cjs/diagnostic/DiagnosticSource.js +34 -0
  89. package/dist/cjs/diagnostic/DiagnosticSource.js.map +6 -0
  90. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts +78 -0
  91. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -0
  92. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js +654 -0
  93. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js.map +6 -0
  94. package/dist/cjs/diagnostic/connectMeshcop.d.ts +38 -0
  95. package/dist/cjs/diagnostic/connectMeshcop.d.ts.map +1 -0
  96. package/dist/cjs/diagnostic/connectMeshcop.js +100 -0
  97. package/dist/cjs/diagnostic/connectMeshcop.js.map +6 -0
  98. package/dist/cjs/diagnostic/errors.d.ts +10 -0
  99. package/dist/cjs/diagnostic/errors.d.ts.map +1 -0
  100. package/dist/cjs/diagnostic/errors.js +32 -0
  101. package/dist/cjs/diagnostic/errors.js.map +6 -0
  102. package/dist/cjs/diagnostic/index.d.ts +13 -0
  103. package/dist/cjs/diagnostic/index.d.ts.map +1 -0
  104. package/dist/cjs/diagnostic/index.js +35 -0
  105. package/dist/cjs/diagnostic/index.js.map +6 -0
  106. package/dist/cjs/discovery/BorderRouterEntry.d.ts +54 -0
  107. package/dist/cjs/discovery/BorderRouterEntry.d.ts.map +1 -0
  108. package/dist/cjs/discovery/BorderRouterEntry.js +22 -0
  109. package/dist/cjs/discovery/BorderRouterEntry.js.map +6 -0
  110. package/dist/cjs/discovery/BorderRouterRegistry.d.ts +36 -0
  111. package/dist/cjs/discovery/BorderRouterRegistry.d.ts.map +1 -0
  112. package/dist/cjs/discovery/BorderRouterRegistry.js +522 -0
  113. package/dist/cjs/discovery/BorderRouterRegistry.js.map +6 -0
  114. package/dist/cjs/discovery/DnssdLikeTypes.d.ts +50 -0
  115. package/dist/cjs/discovery/DnssdLikeTypes.d.ts.map +1 -0
  116. package/dist/cjs/discovery/DnssdLikeTypes.js +22 -0
  117. package/dist/cjs/discovery/DnssdLikeTypes.js.map +6 -0
  118. package/dist/cjs/discovery/index.d.ts +8 -0
  119. package/dist/cjs/discovery/index.d.ts.map +1 -0
  120. package/dist/cjs/discovery/index.js +30 -0
  121. package/dist/cjs/discovery/index.js.map +6 -0
  122. package/dist/cjs/dtls/channel/DtlsChannel.d.ts +39 -0
  123. package/dist/cjs/dtls/channel/DtlsChannel.d.ts.map +1 -0
  124. package/dist/cjs/dtls/channel/DtlsChannel.js +32 -0
  125. package/dist/cjs/dtls/channel/DtlsChannel.js.map +6 -0
  126. package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts +38 -0
  127. package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts.map +1 -0
  128. package/dist/cjs/dtls/channel/DtlsConnectOpts.js +22 -0
  129. package/dist/cjs/dtls/channel/DtlsConnectOpts.js.map +6 -0
  130. package/dist/cjs/dtls/channel/DtlsRetransmitTimer.d.ts +43 -0
  131. package/dist/cjs/dtls/channel/DtlsRetransmitTimer.d.ts.map +1 -0
  132. package/dist/cjs/dtls/channel/DtlsRetransmitTimer.js +97 -0
  133. package/dist/cjs/dtls/channel/DtlsRetransmitTimer.js.map +6 -0
  134. package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts +35 -0
  135. package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts.map +1 -0
  136. package/dist/cjs/dtls/channel/NobleDtlsChannel.js +440 -0
  137. package/dist/cjs/dtls/channel/NobleDtlsChannel.js.map +6 -0
  138. package/dist/cjs/dtls/channel/connectDtls.d.ts +15 -0
  139. package/dist/cjs/dtls/channel/connectDtls.d.ts.map +1 -0
  140. package/dist/cjs/dtls/channel/connectDtls.js +41 -0
  141. package/dist/cjs/dtls/channel/connectDtls.js.map +6 -0
  142. package/dist/cjs/dtls/channel/index.d.ts +14 -0
  143. package/dist/cjs/dtls/channel/index.d.ts.map +1 -0
  144. package/dist/cjs/dtls/channel/index.js +32 -0
  145. package/dist/cjs/dtls/channel/index.js.map +6 -0
  146. package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts +35 -0
  147. package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts.map +1 -0
  148. package/dist/cjs/dtls/ecjpake/EcJpakePms.js +61 -0
  149. package/dist/cjs/dtls/ecjpake/EcJpakePms.js.map +6 -0
  150. package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts +119 -0
  151. package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -0
  152. package/dist/cjs/dtls/ecjpake/EcJpakeRound.js +248 -0
  153. package/dist/cjs/dtls/ecjpake/EcJpakeRound.js.map +6 -0
  154. package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts +60 -0
  155. package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -0
  156. package/dist/cjs/dtls/ecjpake/SchnorrZkp.js +162 -0
  157. package/dist/cjs/dtls/ecjpake/SchnorrZkp.js.map +6 -0
  158. package/dist/cjs/dtls/ecjpake/index.d.ts +28 -0
  159. package/dist/cjs/dtls/ecjpake/index.d.ts.map +1 -0
  160. package/dist/cjs/dtls/ecjpake/index.js +34 -0
  161. package/dist/cjs/dtls/ecjpake/index.js.map +6 -0
  162. package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts +23 -0
  163. package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -0
  164. package/dist/cjs/dtls/handshake/ChangeCipherSpec.js +41 -0
  165. package/dist/cjs/dtls/handshake/ChangeCipherSpec.js.map +6 -0
  166. package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts +34 -0
  167. package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts.map +1 -0
  168. package/dist/cjs/dtls/handshake/ClientHelloMessage.js +117 -0
  169. package/dist/cjs/dtls/handshake/ClientHelloMessage.js.map +6 -0
  170. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts +22 -0
  171. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -0
  172. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js +35 -0
  173. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js.map +6 -0
  174. package/dist/cjs/dtls/handshake/DtlsClient.d.ts +57 -0
  175. package/dist/cjs/dtls/handshake/DtlsClient.d.ts.map +1 -0
  176. package/dist/cjs/dtls/handshake/DtlsClient.js +502 -0
  177. package/dist/cjs/dtls/handshake/DtlsClient.js.map +6 -0
  178. package/dist/cjs/dtls/handshake/FinishedMessage.d.ts +13 -0
  179. package/dist/cjs/dtls/handshake/FinishedMessage.d.ts.map +1 -0
  180. package/dist/cjs/dtls/handshake/FinishedMessage.js +48 -0
  181. package/dist/cjs/dtls/handshake/FinishedMessage.js.map +6 -0
  182. package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts +58 -0
  183. package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts.map +1 -0
  184. package/dist/cjs/dtls/handshake/HandshakeMessage.js +117 -0
  185. package/dist/cjs/dtls/handshake/HandshakeMessage.js.map +6 -0
  186. package/dist/cjs/dtls/handshake/HandshakeType.d.ts +29 -0
  187. package/dist/cjs/dtls/handshake/HandshakeType.d.ts.map +1 -0
  188. package/dist/cjs/dtls/handshake/HandshakeType.js +45 -0
  189. package/dist/cjs/dtls/handshake/HandshakeType.js.map +6 -0
  190. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts +11 -0
  191. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -0
  192. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js +49 -0
  193. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js.map +6 -0
  194. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts +14 -0
  195. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -0
  196. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js +37 -0
  197. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js.map +6 -0
  198. package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts +15 -0
  199. package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts.map +1 -0
  200. package/dist/cjs/dtls/handshake/ServerHelloMessage.js +113 -0
  201. package/dist/cjs/dtls/handshake/ServerHelloMessage.js.map +6 -0
  202. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts +24 -0
  203. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -0
  204. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js +35 -0
  205. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js.map +6 -0
  206. package/dist/cjs/dtls/handshake/index.d.ts +14 -0
  207. package/dist/cjs/dtls/handshake/index.d.ts.map +1 -0
  208. package/dist/cjs/dtls/handshake/index.js +30 -0
  209. package/dist/cjs/dtls/handshake/index.js.map +6 -0
  210. package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts +36 -0
  211. package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts.map +1 -0
  212. package/dist/cjs/dtls/prf/HandshakeTranscript.js +55 -0
  213. package/dist/cjs/dtls/prf/HandshakeTranscript.js.map +6 -0
  214. package/dist/cjs/dtls/prf/TlsPrf.d.ts +82 -0
  215. package/dist/cjs/dtls/prf/TlsPrf.d.ts.map +1 -0
  216. package/dist/cjs/dtls/prf/TlsPrf.js +121 -0
  217. package/dist/cjs/dtls/prf/TlsPrf.js.map +6 -0
  218. package/dist/cjs/dtls/prf/index.d.ts +13 -0
  219. package/dist/cjs/dtls/prf/index.d.ts.map +1 -0
  220. package/dist/cjs/dtls/prf/index.js +32 -0
  221. package/dist/cjs/dtls/prf/index.js.map +6 -0
  222. package/dist/cjs/dtls/record/AesCcm8.d.ts +32 -0
  223. package/dist/cjs/dtls/record/AesCcm8.d.ts.map +1 -0
  224. package/dist/cjs/dtls/record/AesCcm8.js +78 -0
  225. package/dist/cjs/dtls/record/AesCcm8.js.map +6 -0
  226. package/dist/cjs/dtls/record/AntiReplayWindow.d.ts +38 -0
  227. package/dist/cjs/dtls/record/AntiReplayWindow.d.ts.map +1 -0
  228. package/dist/cjs/dtls/record/AntiReplayWindow.js +84 -0
  229. package/dist/cjs/dtls/record/AntiReplayWindow.js.map +6 -0
  230. package/dist/cjs/dtls/record/ContentType.d.ts +19 -0
  231. package/dist/cjs/dtls/record/ContentType.d.ts.map +1 -0
  232. package/dist/cjs/dtls/record/ContentType.js +39 -0
  233. package/dist/cjs/dtls/record/ContentType.js.map +6 -0
  234. package/dist/cjs/dtls/record/DtlsCipherState.d.ts +79 -0
  235. package/dist/cjs/dtls/record/DtlsCipherState.d.ts.map +1 -0
  236. package/dist/cjs/dtls/record/DtlsCipherState.js +173 -0
  237. package/dist/cjs/dtls/record/DtlsCipherState.js.map +6 -0
  238. package/dist/cjs/dtls/record/DtlsRecord.d.ts +89 -0
  239. package/dist/cjs/dtls/record/DtlsRecord.d.ts.map +1 -0
  240. package/dist/cjs/dtls/record/DtlsRecord.js +195 -0
  241. package/dist/cjs/dtls/record/DtlsRecord.js.map +6 -0
  242. package/dist/cjs/dtls/record/index.d.ts +15 -0
  243. package/dist/cjs/dtls/record/index.d.ts.map +1 -0
  244. package/dist/cjs/dtls/record/index.js +42 -0
  245. package/dist/cjs/dtls/record/index.js.map +6 -0
  246. package/dist/cjs/index.d.ts +32 -0
  247. package/dist/cjs/index.d.ts.map +1 -0
  248. package/dist/cjs/index.js +77 -0
  249. package/dist/cjs/index.js.map +6 -0
  250. package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts +22 -0
  251. package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts.map +1 -0
  252. package/dist/cjs/otbr-rest/OtbrRestCapability.js +22 -0
  253. package/dist/cjs/otbr-rest/OtbrRestCapability.js.map +6 -0
  254. package/dist/cjs/otbr-rest/OtbrRestClient.d.ts +257 -0
  255. package/dist/cjs/otbr-rest/OtbrRestClient.d.ts.map +1 -0
  256. package/dist/cjs/otbr-rest/OtbrRestClient.js +544 -0
  257. package/dist/cjs/otbr-rest/OtbrRestClient.js.map +6 -0
  258. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts +88 -0
  259. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -0
  260. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js +156 -0
  261. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js.map +6 -0
  262. package/dist/cjs/otbr-rest/OtbrRestError.d.ts +18 -0
  263. package/dist/cjs/otbr-rest/OtbrRestError.d.ts.map +1 -0
  264. package/dist/cjs/otbr-rest/OtbrRestError.js +42 -0
  265. package/dist/cjs/otbr-rest/OtbrRestError.js.map +6 -0
  266. package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts +17 -0
  267. package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts.map +1 -0
  268. package/dist/cjs/otbr-rest/OtbrRestProbe.js +96 -0
  269. package/dist/cjs/otbr-rest/OtbrRestProbe.js.map +6 -0
  270. package/dist/cjs/otbr-rest/caseNormalizer.d.ts +12 -0
  271. package/dist/cjs/otbr-rest/caseNormalizer.d.ts.map +1 -0
  272. package/dist/cjs/otbr-rest/caseNormalizer.js +59 -0
  273. package/dist/cjs/otbr-rest/caseNormalizer.js.map +6 -0
  274. package/dist/cjs/otbr-rest/index.d.ts +15 -0
  275. package/dist/cjs/otbr-rest/index.d.ts.map +1 -0
  276. package/dist/cjs/otbr-rest/index.js +40 -0
  277. package/dist/cjs/otbr-rest/index.js.map +6 -0
  278. package/dist/cjs/otbr-rest/translation.d.ts +24 -0
  279. package/dist/cjs/otbr-rest/translation.d.ts.map +1 -0
  280. package/dist/cjs/otbr-rest/translation.js +301 -0
  281. package/dist/cjs/otbr-rest/translation.js.map +6 -0
  282. package/dist/cjs/package.json +6 -0
  283. package/dist/cjs/selection/index.d.ts +11 -0
  284. package/dist/cjs/selection/index.d.ts.map +1 -0
  285. package/dist/cjs/selection/index.js +36 -0
  286. package/dist/cjs/selection/index.js.map +6 -0
  287. package/dist/cjs/selection/selectBr.d.ts +37 -0
  288. package/dist/cjs/selection/selectBr.d.ts.map +1 -0
  289. package/dist/cjs/selection/selectBr.js +66 -0
  290. package/dist/cjs/selection/selectBr.js.map +6 -0
  291. package/dist/cjs/selection/selectSource.d.ts +32 -0
  292. package/dist/cjs/selection/selectSource.d.ts.map +1 -0
  293. package/dist/cjs/selection/selectSource.js +43 -0
  294. package/dist/cjs/selection/selectSource.js.map +6 -0
  295. package/dist/cjs/selection/withExtPanIdLock.d.ts +23 -0
  296. package/dist/cjs/selection/withExtPanIdLock.d.ts.map +1 -0
  297. package/dist/cjs/selection/withExtPanIdLock.js +50 -0
  298. package/dist/cjs/selection/withExtPanIdLock.js.map +6 -0
  299. package/dist/cjs/tlv/BasicTlvCodec.d.ts +22 -0
  300. package/dist/cjs/tlv/BasicTlvCodec.d.ts.map +1 -0
  301. package/dist/cjs/tlv/BasicTlvCodec.js +97 -0
  302. package/dist/cjs/tlv/BasicTlvCodec.js.map +6 -0
  303. package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts +30 -0
  304. package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts.map +1 -0
  305. package/dist/cjs/tlv/NetworkDiagnosticTlv.js +41 -0
  306. package/dist/cjs/tlv/NetworkDiagnosticTlv.js.map +6 -0
  307. package/dist/cjs/tlv/TypeListTlv.d.ts +23 -0
  308. package/dist/cjs/tlv/TypeListTlv.d.ts.map +1 -0
  309. package/dist/cjs/tlv/TypeListTlv.js +49 -0
  310. package/dist/cjs/tlv/TypeListTlv.js.map +6 -0
  311. package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts +22 -0
  312. package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -0
  313. package/dist/cjs/tlv/diag/ChildIpv6AddressList.js +48 -0
  314. package/dist/cjs/tlv/diag/ChildIpv6AddressList.js.map +6 -0
  315. package/dist/cjs/tlv/diag/ChildTable.d.ts +29 -0
  316. package/dist/cjs/tlv/diag/ChildTable.d.ts.map +1 -0
  317. package/dist/cjs/tlv/diag/ChildTable.js +91 -0
  318. package/dist/cjs/tlv/diag/ChildTable.js.map +6 -0
  319. package/dist/cjs/tlv/diag/Connectivity.d.ts +45 -0
  320. package/dist/cjs/tlv/diag/Connectivity.d.ts.map +1 -0
  321. package/dist/cjs/tlv/diag/Connectivity.js +99 -0
  322. package/dist/cjs/tlv/diag/Connectivity.js.map +6 -0
  323. package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts +21 -0
  324. package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts.map +1 -0
  325. package/dist/cjs/tlv/diag/Ipv6AddressList.js +61 -0
  326. package/dist/cjs/tlv/diag/Ipv6AddressList.js.map +6 -0
  327. package/dist/cjs/tlv/diag/LeaderData.d.ts +28 -0
  328. package/dist/cjs/tlv/diag/LeaderData.d.ts.map +1 -0
  329. package/dist/cjs/tlv/diag/LeaderData.js +64 -0
  330. package/dist/cjs/tlv/diag/LeaderData.js.map +6 -0
  331. package/dist/cjs/tlv/diag/MacCounters.d.ts +28 -0
  332. package/dist/cjs/tlv/diag/MacCounters.d.ts.map +1 -0
  333. package/dist/cjs/tlv/diag/MacCounters.js +85 -0
  334. package/dist/cjs/tlv/diag/MacCounters.js.map +6 -0
  335. package/dist/cjs/tlv/diag/MleCounters.d.ts +41 -0
  336. package/dist/cjs/tlv/diag/MleCounters.d.ts.map +1 -0
  337. package/dist/cjs/tlv/diag/MleCounters.js +118 -0
  338. package/dist/cjs/tlv/diag/MleCounters.js.map +6 -0
  339. package/dist/cjs/tlv/diag/Mode.d.ts +26 -0
  340. package/dist/cjs/tlv/diag/Mode.d.ts.map +1 -0
  341. package/dist/cjs/tlv/diag/Mode.js +57 -0
  342. package/dist/cjs/tlv/diag/Mode.js.map +6 -0
  343. package/dist/cjs/tlv/diag/NetworkData.d.ts +93 -0
  344. package/dist/cjs/tlv/diag/NetworkData.d.ts.map +1 -0
  345. package/dist/cjs/tlv/diag/NetworkData.js +157 -0
  346. package/dist/cjs/tlv/diag/NetworkData.js.map +6 -0
  347. package/dist/cjs/tlv/diag/Primitives.d.ts +34 -0
  348. package/dist/cjs/tlv/diag/Primitives.d.ts.map +1 -0
  349. package/dist/cjs/tlv/diag/Primitives.js +163 -0
  350. package/dist/cjs/tlv/diag/Primitives.js.map +6 -0
  351. package/dist/cjs/tlv/diag/Route64.d.ts +42 -0
  352. package/dist/cjs/tlv/diag/Route64.d.ts.map +1 -0
  353. package/dist/cjs/tlv/diag/Route64.js +98 -0
  354. package/dist/cjs/tlv/diag/Route64.js.map +6 -0
  355. package/dist/cjs/tlv/diag/RouterNeighbor.d.ts +46 -0
  356. package/dist/cjs/tlv/diag/RouterNeighbor.d.ts.map +1 -0
  357. package/dist/cjs/tlv/diag/RouterNeighbor.js +65 -0
  358. package/dist/cjs/tlv/diag/RouterNeighbor.js.map +6 -0
  359. package/dist/cjs/tlv/diag/Timeout.d.ts +17 -0
  360. package/dist/cjs/tlv/diag/Timeout.d.ts.map +1 -0
  361. package/dist/cjs/tlv/diag/Timeout.js +53 -0
  362. package/dist/cjs/tlv/diag/Timeout.js.map +6 -0
  363. package/dist/cjs/tlv/diag/VendorInfo.d.ts +35 -0
  364. package/dist/cjs/tlv/diag/VendorInfo.d.ts.map +1 -0
  365. package/dist/cjs/tlv/diag/VendorInfo.js +130 -0
  366. package/dist/cjs/tlv/diag/VendorInfo.js.map +6 -0
  367. package/dist/cjs/tlv/diag/index.d.ts +26 -0
  368. package/dist/cjs/tlv/diag/index.d.ts.map +1 -0
  369. package/dist/cjs/tlv/diag/index.js +67 -0
  370. package/dist/cjs/tlv/diag/index.js.map +6 -0
  371. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts +21 -0
  372. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -0
  373. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js +48 -0
  374. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js.map +6 -0
  375. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts +27 -0
  376. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -0
  377. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js +62 -0
  378. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js.map +6 -0
  379. package/dist/cjs/tlv/networkDiagTlvTypes.d.ts +59 -0
  380. package/dist/cjs/tlv/networkDiagTlvTypes.d.ts.map +1 -0
  381. package/dist/cjs/tlv/networkDiagTlvTypes.js +76 -0
  382. package/dist/cjs/tlv/networkDiagTlvTypes.js.map +6 -0
  383. package/dist/cjs/util/meshLocalAddr.d.ts +27 -0
  384. package/dist/cjs/util/meshLocalAddr.d.ts.map +1 -0
  385. package/dist/cjs/util/meshLocalAddr.js +67 -0
  386. package/dist/cjs/util/meshLocalAddr.js.map +6 -0
  387. package/dist/esm/coap/CoapClient.d.ts +33 -0
  388. package/dist/esm/coap/CoapClient.d.ts.map +1 -0
  389. package/dist/esm/coap/CoapClient.js +270 -0
  390. package/dist/esm/coap/CoapClient.js.map +6 -0
  391. package/dist/esm/coap/CoapMessage.d.ts +23 -0
  392. package/dist/esm/coap/CoapMessage.d.ts.map +1 -0
  393. package/dist/esm/coap/CoapMessage.js +162 -0
  394. package/dist/esm/coap/CoapMessage.js.map +6 -0
  395. package/dist/esm/coap/index.d.ts +8 -0
  396. package/dist/esm/coap/index.d.ts.map +1 -0
  397. package/dist/esm/coap/index.js +11 -0
  398. package/dist/esm/coap/index.js.map +6 -0
  399. package/dist/esm/commissioner/Commissioner.d.ts +89 -0
  400. package/dist/esm/commissioner/Commissioner.d.ts.map +1 -0
  401. package/dist/esm/commissioner/Commissioner.js +168 -0
  402. package/dist/esm/commissioner/Commissioner.js.map +6 -0
  403. package/dist/esm/commissioner/LeadKa.d.ts +17 -0
  404. package/dist/esm/commissioner/LeadKa.d.ts.map +1 -0
  405. package/dist/esm/commissioner/LeadKa.js +43 -0
  406. package/dist/esm/commissioner/LeadKa.js.map +6 -0
  407. package/dist/esm/commissioner/LeadPet.d.ts +14 -0
  408. package/dist/esm/commissioner/LeadPet.d.ts.map +1 -0
  409. package/dist/esm/commissioner/LeadPet.js +46 -0
  410. package/dist/esm/commissioner/LeadPet.js.map +6 -0
  411. package/dist/esm/commissioner/index.d.ts +12 -0
  412. package/dist/esm/commissioner/index.d.ts.map +1 -0
  413. package/dist/esm/commissioner/index.js +23 -0
  414. package/dist/esm/commissioner/index.js.map +6 -0
  415. package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts +50 -0
  416. package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts.map +1 -0
  417. package/dist/esm/credentials/ThreadCredentialsRegistry.js +99 -0
  418. package/dist/esm/credentials/ThreadCredentialsRegistry.js.map +6 -0
  419. package/dist/esm/credentials/ThreadNetworkCredentials.d.ts +26 -0
  420. package/dist/esm/credentials/ThreadNetworkCredentials.d.ts.map +1 -0
  421. package/dist/esm/credentials/ThreadNetworkCredentials.js +6 -0
  422. package/dist/esm/credentials/ThreadNetworkCredentials.js.map +6 -0
  423. package/dist/esm/credentials/index.d.ts +8 -0
  424. package/dist/esm/credentials/index.d.ts.map +1 -0
  425. package/dist/esm/credentials/index.js +10 -0
  426. package/dist/esm/credentials/index.js.map +6 -0
  427. package/dist/esm/crypto/AesCmacPrf128.d.ts +24 -0
  428. package/dist/esm/crypto/AesCmacPrf128.d.ts.map +1 -0
  429. package/dist/esm/crypto/AesCmacPrf128.js +87 -0
  430. package/dist/esm/crypto/AesCmacPrf128.js.map +6 -0
  431. package/dist/esm/crypto/Pbkdf2AesCmac.d.ts +18 -0
  432. package/dist/esm/crypto/Pbkdf2AesCmac.d.ts.map +1 -0
  433. package/dist/esm/crypto/Pbkdf2AesCmac.js +42 -0
  434. package/dist/esm/crypto/Pbkdf2AesCmac.js.map +6 -0
  435. package/dist/esm/crypto/Pskc.d.ts +21 -0
  436. package/dist/esm/crypto/Pskc.d.ts.map +1 -0
  437. package/dist/esm/crypto/Pskc.js +49 -0
  438. package/dist/esm/crypto/Pskc.js.map +6 -0
  439. package/dist/esm/crypto/index.d.ts +9 -0
  440. package/dist/esm/crypto/index.d.ts.map +1 -0
  441. package/dist/esm/crypto/index.js +15 -0
  442. package/dist/esm/crypto/index.js.map +6 -0
  443. package/dist/esm/dataset/OperationalDataset.d.ts +74 -0
  444. package/dist/esm/dataset/OperationalDataset.d.ts.map +1 -0
  445. package/dist/esm/dataset/OperationalDataset.js +224 -0
  446. package/dist/esm/dataset/OperationalDataset.js.map +6 -0
  447. package/dist/esm/dataset/SecurityPolicy.d.ts +22 -0
  448. package/dist/esm/dataset/SecurityPolicy.d.ts.map +1 -0
  449. package/dist/esm/dataset/SecurityPolicy.js +39 -0
  450. package/dist/esm/dataset/SecurityPolicy.js.map +6 -0
  451. package/dist/esm/dataset/errors.d.ts +10 -0
  452. package/dist/esm/dataset/errors.d.ts.map +1 -0
  453. package/dist/esm/dataset/errors.js +12 -0
  454. package/dist/esm/dataset/errors.js.map +6 -0
  455. package/dist/esm/dataset/index.d.ts +9 -0
  456. package/dist/esm/dataset/index.d.ts.map +1 -0
  457. package/dist/esm/dataset/index.js +16 -0
  458. package/dist/esm/dataset/index.js.map +6 -0
  459. package/dist/esm/dataset/meshcopTlvTypes.d.ts +61 -0
  460. package/dist/esm/dataset/meshcopTlvTypes.d.ts.map +1 -0
  461. package/dist/esm/dataset/meshcopTlvTypes.js +62 -0
  462. package/dist/esm/dataset/meshcopTlvTypes.js.map +6 -0
  463. package/dist/esm/diagnostic/DefaultTlvSet.d.ts +8 -0
  464. package/dist/esm/diagnostic/DefaultTlvSet.d.ts.map +1 -0
  465. package/dist/esm/diagnostic/DefaultTlvSet.js +32 -0
  466. package/dist/esm/diagnostic/DefaultTlvSet.js.map +6 -0
  467. package/dist/esm/diagnostic/DiagnosticResponse.d.ts +47 -0
  468. package/dist/esm/diagnostic/DiagnosticResponse.d.ts.map +1 -0
  469. package/dist/esm/diagnostic/DiagnosticResponse.js +6 -0
  470. package/dist/esm/diagnostic/DiagnosticResponse.js.map +6 -0
  471. package/dist/esm/diagnostic/DiagnosticSource.d.ts +64 -0
  472. package/dist/esm/diagnostic/DiagnosticSource.d.ts.map +1 -0
  473. package/dist/esm/diagnostic/DiagnosticSource.js +14 -0
  474. package/dist/esm/diagnostic/DiagnosticSource.js.map +6 -0
  475. package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts +78 -0
  476. package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -0
  477. package/dist/esm/diagnostic/MeshCopDiagnosticSource.js +663 -0
  478. package/dist/esm/diagnostic/MeshCopDiagnosticSource.js.map +6 -0
  479. package/dist/esm/diagnostic/connectMeshcop.d.ts +38 -0
  480. package/dist/esm/diagnostic/connectMeshcop.d.ts.map +1 -0
  481. package/dist/esm/diagnostic/connectMeshcop.js +80 -0
  482. package/dist/esm/diagnostic/connectMeshcop.js.map +6 -0
  483. package/dist/esm/diagnostic/errors.d.ts +10 -0
  484. package/dist/esm/diagnostic/errors.d.ts.map +1 -0
  485. package/dist/esm/diagnostic/errors.js +12 -0
  486. package/dist/esm/diagnostic/errors.js.map +6 -0
  487. package/dist/esm/diagnostic/index.d.ts +13 -0
  488. package/dist/esm/diagnostic/index.d.ts.map +1 -0
  489. package/dist/esm/diagnostic/index.js +15 -0
  490. package/dist/esm/diagnostic/index.js.map +6 -0
  491. package/dist/esm/discovery/BorderRouterEntry.d.ts +54 -0
  492. package/dist/esm/discovery/BorderRouterEntry.d.ts.map +1 -0
  493. package/dist/esm/discovery/BorderRouterEntry.js +6 -0
  494. package/dist/esm/discovery/BorderRouterEntry.js.map +6 -0
  495. package/dist/esm/discovery/BorderRouterRegistry.d.ts +36 -0
  496. package/dist/esm/discovery/BorderRouterRegistry.d.ts.map +1 -0
  497. package/dist/esm/discovery/BorderRouterRegistry.js +508 -0
  498. package/dist/esm/discovery/BorderRouterRegistry.js.map +6 -0
  499. package/dist/esm/discovery/DnssdLikeTypes.d.ts +50 -0
  500. package/dist/esm/discovery/DnssdLikeTypes.d.ts.map +1 -0
  501. package/dist/esm/discovery/DnssdLikeTypes.js +6 -0
  502. package/dist/esm/discovery/DnssdLikeTypes.js.map +6 -0
  503. package/dist/esm/discovery/index.d.ts +8 -0
  504. package/dist/esm/discovery/index.d.ts.map +1 -0
  505. package/dist/esm/discovery/index.js +10 -0
  506. package/dist/esm/discovery/index.js.map +6 -0
  507. package/dist/esm/dtls/channel/DtlsChannel.d.ts +39 -0
  508. package/dist/esm/dtls/channel/DtlsChannel.d.ts.map +1 -0
  509. package/dist/esm/dtls/channel/DtlsChannel.js +12 -0
  510. package/dist/esm/dtls/channel/DtlsChannel.js.map +6 -0
  511. package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts +38 -0
  512. package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts.map +1 -0
  513. package/dist/esm/dtls/channel/DtlsConnectOpts.js +6 -0
  514. package/dist/esm/dtls/channel/DtlsConnectOpts.js.map +6 -0
  515. package/dist/esm/dtls/channel/DtlsRetransmitTimer.d.ts +43 -0
  516. package/dist/esm/dtls/channel/DtlsRetransmitTimer.d.ts.map +1 -0
  517. package/dist/esm/dtls/channel/DtlsRetransmitTimer.js +77 -0
  518. package/dist/esm/dtls/channel/DtlsRetransmitTimer.js.map +6 -0
  519. package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts +35 -0
  520. package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts.map +1 -0
  521. package/dist/esm/dtls/channel/NobleDtlsChannel.js +432 -0
  522. package/dist/esm/dtls/channel/NobleDtlsChannel.js.map +6 -0
  523. package/dist/esm/dtls/channel/connectDtls.d.ts +15 -0
  524. package/dist/esm/dtls/channel/connectDtls.d.ts.map +1 -0
  525. package/dist/esm/dtls/channel/connectDtls.js +21 -0
  526. package/dist/esm/dtls/channel/connectDtls.js.map +6 -0
  527. package/dist/esm/dtls/channel/index.d.ts +14 -0
  528. package/dist/esm/dtls/channel/index.d.ts.map +1 -0
  529. package/dist/esm/dtls/channel/index.js +12 -0
  530. package/dist/esm/dtls/channel/index.js.map +6 -0
  531. package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts +35 -0
  532. package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts.map +1 -0
  533. package/dist/esm/dtls/ecjpake/EcJpakePms.js +41 -0
  534. package/dist/esm/dtls/ecjpake/EcJpakePms.js.map +6 -0
  535. package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts +119 -0
  536. package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -0
  537. package/dist/esm/dtls/ecjpake/EcJpakeRound.js +228 -0
  538. package/dist/esm/dtls/ecjpake/EcJpakeRound.js.map +6 -0
  539. package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts +60 -0
  540. package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -0
  541. package/dist/esm/dtls/ecjpake/SchnorrZkp.js +142 -0
  542. package/dist/esm/dtls/ecjpake/SchnorrZkp.js.map +6 -0
  543. package/dist/esm/dtls/ecjpake/index.d.ts +28 -0
  544. package/dist/esm/dtls/ecjpake/index.d.ts.map +1 -0
  545. package/dist/esm/dtls/ecjpake/index.js +14 -0
  546. package/dist/esm/dtls/ecjpake/index.js.map +6 -0
  547. package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts +23 -0
  548. package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -0
  549. package/dist/esm/dtls/handshake/ChangeCipherSpec.js +21 -0
  550. package/dist/esm/dtls/handshake/ChangeCipherSpec.js.map +6 -0
  551. package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts +34 -0
  552. package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts.map +1 -0
  553. package/dist/esm/dtls/handshake/ClientHelloMessage.js +97 -0
  554. package/dist/esm/dtls/handshake/ClientHelloMessage.js.map +6 -0
  555. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts +22 -0
  556. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -0
  557. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js +15 -0
  558. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js.map +6 -0
  559. package/dist/esm/dtls/handshake/DtlsClient.d.ts +57 -0
  560. package/dist/esm/dtls/handshake/DtlsClient.d.ts.map +1 -0
  561. package/dist/esm/dtls/handshake/DtlsClient.js +482 -0
  562. package/dist/esm/dtls/handshake/DtlsClient.js.map +6 -0
  563. package/dist/esm/dtls/handshake/FinishedMessage.d.ts +13 -0
  564. package/dist/esm/dtls/handshake/FinishedMessage.d.ts.map +1 -0
  565. package/dist/esm/dtls/handshake/FinishedMessage.js +28 -0
  566. package/dist/esm/dtls/handshake/FinishedMessage.js.map +6 -0
  567. package/dist/esm/dtls/handshake/HandshakeMessage.d.ts +58 -0
  568. package/dist/esm/dtls/handshake/HandshakeMessage.d.ts.map +1 -0
  569. package/dist/esm/dtls/handshake/HandshakeMessage.js +97 -0
  570. package/dist/esm/dtls/handshake/HandshakeMessage.js.map +6 -0
  571. package/dist/esm/dtls/handshake/HandshakeType.d.ts +29 -0
  572. package/dist/esm/dtls/handshake/HandshakeType.d.ts.map +1 -0
  573. package/dist/esm/dtls/handshake/HandshakeType.js +25 -0
  574. package/dist/esm/dtls/handshake/HandshakeType.js.map +6 -0
  575. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts +11 -0
  576. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -0
  577. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js +29 -0
  578. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js.map +6 -0
  579. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts +14 -0
  580. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -0
  581. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js +17 -0
  582. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js.map +6 -0
  583. package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts +15 -0
  584. package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts.map +1 -0
  585. package/dist/esm/dtls/handshake/ServerHelloMessage.js +93 -0
  586. package/dist/esm/dtls/handshake/ServerHelloMessage.js.map +6 -0
  587. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts +24 -0
  588. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -0
  589. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js +15 -0
  590. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js.map +6 -0
  591. package/dist/esm/dtls/handshake/index.d.ts +14 -0
  592. package/dist/esm/dtls/handshake/index.d.ts.map +1 -0
  593. package/dist/esm/dtls/handshake/index.js +10 -0
  594. package/dist/esm/dtls/handshake/index.js.map +6 -0
  595. package/dist/esm/dtls/prf/HandshakeTranscript.d.ts +36 -0
  596. package/dist/esm/dtls/prf/HandshakeTranscript.d.ts.map +1 -0
  597. package/dist/esm/dtls/prf/HandshakeTranscript.js +35 -0
  598. package/dist/esm/dtls/prf/HandshakeTranscript.js.map +6 -0
  599. package/dist/esm/dtls/prf/TlsPrf.d.ts +82 -0
  600. package/dist/esm/dtls/prf/TlsPrf.d.ts.map +1 -0
  601. package/dist/esm/dtls/prf/TlsPrf.js +101 -0
  602. package/dist/esm/dtls/prf/TlsPrf.js.map +6 -0
  603. package/dist/esm/dtls/prf/index.d.ts +13 -0
  604. package/dist/esm/dtls/prf/index.d.ts.map +1 -0
  605. package/dist/esm/dtls/prf/index.js +12 -0
  606. package/dist/esm/dtls/prf/index.js.map +6 -0
  607. package/dist/esm/dtls/record/AesCcm8.d.ts +32 -0
  608. package/dist/esm/dtls/record/AesCcm8.d.ts.map +1 -0
  609. package/dist/esm/dtls/record/AesCcm8.js +58 -0
  610. package/dist/esm/dtls/record/AesCcm8.js.map +6 -0
  611. package/dist/esm/dtls/record/AntiReplayWindow.d.ts +38 -0
  612. package/dist/esm/dtls/record/AntiReplayWindow.d.ts.map +1 -0
  613. package/dist/esm/dtls/record/AntiReplayWindow.js +64 -0
  614. package/dist/esm/dtls/record/AntiReplayWindow.js.map +6 -0
  615. package/dist/esm/dtls/record/ContentType.d.ts +19 -0
  616. package/dist/esm/dtls/record/ContentType.d.ts.map +1 -0
  617. package/dist/esm/dtls/record/ContentType.js +19 -0
  618. package/dist/esm/dtls/record/ContentType.js.map +6 -0
  619. package/dist/esm/dtls/record/DtlsCipherState.d.ts +79 -0
  620. package/dist/esm/dtls/record/DtlsCipherState.d.ts.map +1 -0
  621. package/dist/esm/dtls/record/DtlsCipherState.js +153 -0
  622. package/dist/esm/dtls/record/DtlsCipherState.js.map +6 -0
  623. package/dist/esm/dtls/record/DtlsRecord.d.ts +89 -0
  624. package/dist/esm/dtls/record/DtlsRecord.d.ts.map +1 -0
  625. package/dist/esm/dtls/record/DtlsRecord.js +175 -0
  626. package/dist/esm/dtls/record/DtlsRecord.js.map +6 -0
  627. package/dist/esm/dtls/record/index.d.ts +15 -0
  628. package/dist/esm/dtls/record/index.d.ts.map +1 -0
  629. package/dist/esm/dtls/record/index.js +29 -0
  630. package/dist/esm/dtls/record/index.js.map +6 -0
  631. package/dist/esm/index.d.ts +32 -0
  632. package/dist/esm/index.d.ts.map +1 -0
  633. package/dist/esm/index.js +74 -0
  634. package/dist/esm/index.js.map +6 -0
  635. package/dist/esm/otbr-rest/OtbrRestCapability.d.ts +22 -0
  636. package/dist/esm/otbr-rest/OtbrRestCapability.d.ts.map +1 -0
  637. package/dist/esm/otbr-rest/OtbrRestCapability.js +6 -0
  638. package/dist/esm/otbr-rest/OtbrRestCapability.js.map +6 -0
  639. package/dist/esm/otbr-rest/OtbrRestClient.d.ts +257 -0
  640. package/dist/esm/otbr-rest/OtbrRestClient.d.ts.map +1 -0
  641. package/dist/esm/otbr-rest/OtbrRestClient.js +524 -0
  642. package/dist/esm/otbr-rest/OtbrRestClient.js.map +6 -0
  643. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts +88 -0
  644. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -0
  645. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js +136 -0
  646. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js.map +6 -0
  647. package/dist/esm/otbr-rest/OtbrRestError.d.ts +18 -0
  648. package/dist/esm/otbr-rest/OtbrRestError.d.ts.map +1 -0
  649. package/dist/esm/otbr-rest/OtbrRestError.js +22 -0
  650. package/dist/esm/otbr-rest/OtbrRestError.js.map +6 -0
  651. package/dist/esm/otbr-rest/OtbrRestProbe.d.ts +17 -0
  652. package/dist/esm/otbr-rest/OtbrRestProbe.d.ts.map +1 -0
  653. package/dist/esm/otbr-rest/OtbrRestProbe.js +76 -0
  654. package/dist/esm/otbr-rest/OtbrRestProbe.js.map +6 -0
  655. package/dist/esm/otbr-rest/caseNormalizer.d.ts +12 -0
  656. package/dist/esm/otbr-rest/caseNormalizer.d.ts.map +1 -0
  657. package/dist/esm/otbr-rest/caseNormalizer.js +39 -0
  658. package/dist/esm/otbr-rest/caseNormalizer.js.map +6 -0
  659. package/dist/esm/otbr-rest/index.d.ts +15 -0
  660. package/dist/esm/otbr-rest/index.d.ts.map +1 -0
  661. package/dist/esm/otbr-rest/index.js +20 -0
  662. package/dist/esm/otbr-rest/index.js.map +6 -0
  663. package/dist/esm/otbr-rest/translation.d.ts +24 -0
  664. package/dist/esm/otbr-rest/translation.d.ts.map +1 -0
  665. package/dist/esm/otbr-rest/translation.js +281 -0
  666. package/dist/esm/otbr-rest/translation.js.map +6 -0
  667. package/dist/esm/package.json +6 -0
  668. package/dist/esm/selection/index.d.ts +11 -0
  669. package/dist/esm/selection/index.d.ts.map +1 -0
  670. package/dist/esm/selection/index.js +16 -0
  671. package/dist/esm/selection/index.js.map +6 -0
  672. package/dist/esm/selection/selectBr.d.ts +37 -0
  673. package/dist/esm/selection/selectBr.d.ts.map +1 -0
  674. package/dist/esm/selection/selectBr.js +46 -0
  675. package/dist/esm/selection/selectBr.js.map +6 -0
  676. package/dist/esm/selection/selectSource.d.ts +32 -0
  677. package/dist/esm/selection/selectSource.d.ts.map +1 -0
  678. package/dist/esm/selection/selectSource.js +23 -0
  679. package/dist/esm/selection/selectSource.js.map +6 -0
  680. package/dist/esm/selection/withExtPanIdLock.d.ts +23 -0
  681. package/dist/esm/selection/withExtPanIdLock.d.ts.map +1 -0
  682. package/dist/esm/selection/withExtPanIdLock.js +30 -0
  683. package/dist/esm/selection/withExtPanIdLock.js.map +6 -0
  684. package/dist/esm/tlv/BasicTlvCodec.d.ts +22 -0
  685. package/dist/esm/tlv/BasicTlvCodec.d.ts.map +1 -0
  686. package/dist/esm/tlv/BasicTlvCodec.js +77 -0
  687. package/dist/esm/tlv/BasicTlvCodec.js.map +6 -0
  688. package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts +30 -0
  689. package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts.map +1 -0
  690. package/dist/esm/tlv/NetworkDiagnosticTlv.js +21 -0
  691. package/dist/esm/tlv/NetworkDiagnosticTlv.js.map +6 -0
  692. package/dist/esm/tlv/TypeListTlv.d.ts +23 -0
  693. package/dist/esm/tlv/TypeListTlv.d.ts.map +1 -0
  694. package/dist/esm/tlv/TypeListTlv.js +29 -0
  695. package/dist/esm/tlv/TypeListTlv.js.map +6 -0
  696. package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts +22 -0
  697. package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -0
  698. package/dist/esm/tlv/diag/ChildIpv6AddressList.js +28 -0
  699. package/dist/esm/tlv/diag/ChildIpv6AddressList.js.map +6 -0
  700. package/dist/esm/tlv/diag/ChildTable.d.ts +29 -0
  701. package/dist/esm/tlv/diag/ChildTable.d.ts.map +1 -0
  702. package/dist/esm/tlv/diag/ChildTable.js +71 -0
  703. package/dist/esm/tlv/diag/ChildTable.js.map +6 -0
  704. package/dist/esm/tlv/diag/Connectivity.d.ts +45 -0
  705. package/dist/esm/tlv/diag/Connectivity.d.ts.map +1 -0
  706. package/dist/esm/tlv/diag/Connectivity.js +79 -0
  707. package/dist/esm/tlv/diag/Connectivity.js.map +6 -0
  708. package/dist/esm/tlv/diag/Ipv6AddressList.d.ts +21 -0
  709. package/dist/esm/tlv/diag/Ipv6AddressList.d.ts.map +1 -0
  710. package/dist/esm/tlv/diag/Ipv6AddressList.js +41 -0
  711. package/dist/esm/tlv/diag/Ipv6AddressList.js.map +6 -0
  712. package/dist/esm/tlv/diag/LeaderData.d.ts +28 -0
  713. package/dist/esm/tlv/diag/LeaderData.d.ts.map +1 -0
  714. package/dist/esm/tlv/diag/LeaderData.js +44 -0
  715. package/dist/esm/tlv/diag/LeaderData.js.map +6 -0
  716. package/dist/esm/tlv/diag/MacCounters.d.ts +28 -0
  717. package/dist/esm/tlv/diag/MacCounters.d.ts.map +1 -0
  718. package/dist/esm/tlv/diag/MacCounters.js +65 -0
  719. package/dist/esm/tlv/diag/MacCounters.js.map +6 -0
  720. package/dist/esm/tlv/diag/MleCounters.d.ts +41 -0
  721. package/dist/esm/tlv/diag/MleCounters.d.ts.map +1 -0
  722. package/dist/esm/tlv/diag/MleCounters.js +98 -0
  723. package/dist/esm/tlv/diag/MleCounters.js.map +6 -0
  724. package/dist/esm/tlv/diag/Mode.d.ts +26 -0
  725. package/dist/esm/tlv/diag/Mode.d.ts.map +1 -0
  726. package/dist/esm/tlv/diag/Mode.js +37 -0
  727. package/dist/esm/tlv/diag/Mode.js.map +6 -0
  728. package/dist/esm/tlv/diag/NetworkData.d.ts +93 -0
  729. package/dist/esm/tlv/diag/NetworkData.d.ts.map +1 -0
  730. package/dist/esm/tlv/diag/NetworkData.js +137 -0
  731. package/dist/esm/tlv/diag/NetworkData.js.map +6 -0
  732. package/dist/esm/tlv/diag/Primitives.d.ts +34 -0
  733. package/dist/esm/tlv/diag/Primitives.d.ts.map +1 -0
  734. package/dist/esm/tlv/diag/Primitives.js +143 -0
  735. package/dist/esm/tlv/diag/Primitives.js.map +6 -0
  736. package/dist/esm/tlv/diag/Route64.d.ts +42 -0
  737. package/dist/esm/tlv/diag/Route64.d.ts.map +1 -0
  738. package/dist/esm/tlv/diag/Route64.js +78 -0
  739. package/dist/esm/tlv/diag/Route64.js.map +6 -0
  740. package/dist/esm/tlv/diag/RouterNeighbor.d.ts +46 -0
  741. package/dist/esm/tlv/diag/RouterNeighbor.d.ts.map +1 -0
  742. package/dist/esm/tlv/diag/RouterNeighbor.js +45 -0
  743. package/dist/esm/tlv/diag/RouterNeighbor.js.map +6 -0
  744. package/dist/esm/tlv/diag/Timeout.d.ts +17 -0
  745. package/dist/esm/tlv/diag/Timeout.d.ts.map +1 -0
  746. package/dist/esm/tlv/diag/Timeout.js +33 -0
  747. package/dist/esm/tlv/diag/Timeout.js.map +6 -0
  748. package/dist/esm/tlv/diag/VendorInfo.d.ts +35 -0
  749. package/dist/esm/tlv/diag/VendorInfo.d.ts.map +1 -0
  750. package/dist/esm/tlv/diag/VendorInfo.js +110 -0
  751. package/dist/esm/tlv/diag/VendorInfo.js.map +6 -0
  752. package/dist/esm/tlv/diag/index.d.ts +26 -0
  753. package/dist/esm/tlv/diag/index.d.ts.map +1 -0
  754. package/dist/esm/tlv/diag/index.js +55 -0
  755. package/dist/esm/tlv/diag/index.js.map +6 -0
  756. package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts +21 -0
  757. package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -0
  758. package/dist/esm/tlv/meshcop/Ip6AddressTlv.js +28 -0
  759. package/dist/esm/tlv/meshcop/Ip6AddressTlv.js.map +6 -0
  760. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts +27 -0
  761. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -0
  762. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js +42 -0
  763. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js.map +6 -0
  764. package/dist/esm/tlv/networkDiagTlvTypes.d.ts +59 -0
  765. package/dist/esm/tlv/networkDiagTlvTypes.d.ts.map +1 -0
  766. package/dist/esm/tlv/networkDiagTlvTypes.js +56 -0
  767. package/dist/esm/tlv/networkDiagTlvTypes.js.map +6 -0
  768. package/dist/esm/util/meshLocalAddr.d.ts +27 -0
  769. package/dist/esm/util/meshLocalAddr.d.ts.map +1 -0
  770. package/dist/esm/util/meshLocalAddr.js +47 -0
  771. package/dist/esm/util/meshLocalAddr.js.map +6 -0
  772. package/package.json +73 -0
  773. package/src/coap/CoapClient.ts +355 -0
  774. package/src/coap/CoapMessage.ts +190 -0
  775. package/src/coap/index.ts +8 -0
  776. package/src/commissioner/Commissioner.ts +205 -0
  777. package/src/commissioner/LeadKa.ts +48 -0
  778. package/src/commissioner/LeadPet.ts +53 -0
  779. package/src/commissioner/index.ts +17 -0
  780. package/src/credentials/ThreadCredentialsRegistry.ts +117 -0
  781. package/src/credentials/ThreadNetworkCredentials.ts +26 -0
  782. package/src/credentials/index.ts +8 -0
  783. package/src/crypto/AesCmacPrf128.ts +101 -0
  784. package/src/crypto/Pbkdf2AesCmac.ts +57 -0
  785. package/src/crypto/Pskc.ts +57 -0
  786. package/src/crypto/index.ts +9 -0
  787. package/src/dataset/OperationalDataset.ts +326 -0
  788. package/src/dataset/SecurityPolicy.ts +48 -0
  789. package/src/dataset/errors.ts +10 -0
  790. package/src/dataset/index.ts +9 -0
  791. package/src/dataset/meshcopTlvTypes.ts +69 -0
  792. package/src/diagnostic/DefaultTlvSet.ts +31 -0
  793. package/src/diagnostic/DiagnosticResponse.ts +45 -0
  794. package/src/diagnostic/DiagnosticSource.ts +66 -0
  795. package/src/diagnostic/MeshCopDiagnosticSource.ts +808 -0
  796. package/src/diagnostic/connectMeshcop.ts +122 -0
  797. package/src/diagnostic/errors.ts +10 -0
  798. package/src/diagnostic/index.ts +13 -0
  799. package/src/discovery/BorderRouterEntry.ts +54 -0
  800. package/src/discovery/BorderRouterRegistry.ts +645 -0
  801. package/src/discovery/DnssdLikeTypes.ts +51 -0
  802. package/src/discovery/index.ts +8 -0
  803. package/src/dtls/channel/DtlsChannel.ts +42 -0
  804. package/src/dtls/channel/DtlsConnectOpts.ts +50 -0
  805. package/src/dtls/channel/DtlsRetransmitTimer.ts +107 -0
  806. package/src/dtls/channel/NobleDtlsChannel.ts +519 -0
  807. package/src/dtls/channel/connectDtls.ts +26 -0
  808. package/src/dtls/channel/index.ts +15 -0
  809. package/src/dtls/ecjpake/EcJpakePms.ts +65 -0
  810. package/src/dtls/ecjpake/EcJpakeRound.ts +279 -0
  811. package/src/dtls/ecjpake/SchnorrZkp.ts +193 -0
  812. package/src/dtls/ecjpake/index.ts +29 -0
  813. package/src/dtls/handshake/ChangeCipherSpec.ts +32 -0
  814. package/src/dtls/handshake/ClientHelloMessage.ts +150 -0
  815. package/src/dtls/handshake/ClientKeyExchangeMessage.ts +25 -0
  816. package/src/dtls/handshake/DtlsClient.ts +610 -0
  817. package/src/dtls/handshake/FinishedMessage.ts +36 -0
  818. package/src/dtls/handshake/HandshakeMessage.ts +144 -0
  819. package/src/dtls/handshake/HandshakeType.ts +35 -0
  820. package/src/dtls/handshake/HelloVerifyRequestMessage.ts +47 -0
  821. package/src/dtls/handshake/ServerHelloDoneMessage.ts +20 -0
  822. package/src/dtls/handshake/ServerHelloMessage.ts +129 -0
  823. package/src/dtls/handshake/ServerKeyExchangeMessage.ts +31 -0
  824. package/src/dtls/handshake/index.ts +15 -0
  825. package/src/dtls/prf/HandshakeTranscript.ts +52 -0
  826. package/src/dtls/prf/TlsPrf.ts +173 -0
  827. package/src/dtls/prf/index.ts +14 -0
  828. package/src/dtls/record/AesCcm8.ts +83 -0
  829. package/src/dtls/record/AntiReplayWindow.ts +87 -0
  830. package/src/dtls/record/ContentType.ts +23 -0
  831. package/src/dtls/record/DtlsCipherState.ts +202 -0
  832. package/src/dtls/record/DtlsRecord.ts +249 -0
  833. package/src/dtls/record/index.ts +26 -0
  834. package/src/index.ts +93 -0
  835. package/src/otbr-rest/OtbrRestCapability.ts +22 -0
  836. package/src/otbr-rest/OtbrRestClient.ts +644 -0
  837. package/src/otbr-rest/OtbrRestDiagnosticSource.ts +172 -0
  838. package/src/otbr-rest/OtbrRestError.ts +29 -0
  839. package/src/otbr-rest/OtbrRestProbe.ts +85 -0
  840. package/src/otbr-rest/caseNormalizer.ts +49 -0
  841. package/src/otbr-rest/index.ts +21 -0
  842. package/src/otbr-rest/translation.ts +344 -0
  843. package/src/selection/index.ts +11 -0
  844. package/src/selection/selectBr.ts +77 -0
  845. package/src/selection/selectSource.ts +51 -0
  846. package/src/selection/withExtPanIdLock.ts +40 -0
  847. package/src/tlv/BasicTlvCodec.ts +83 -0
  848. package/src/tlv/NetworkDiagnosticTlv.ts +37 -0
  849. package/src/tlv/TypeListTlv.ts +38 -0
  850. package/src/tlv/diag/ChildIpv6AddressList.ts +41 -0
  851. package/src/tlv/diag/ChildTable.ts +92 -0
  852. package/src/tlv/diag/Connectivity.ts +115 -0
  853. package/src/tlv/diag/Ipv6AddressList.ts +47 -0
  854. package/src/tlv/diag/LeaderData.ts +59 -0
  855. package/src/tlv/diag/MacCounters.ts +84 -0
  856. package/src/tlv/diag/MleCounters.ts +147 -0
  857. package/src/tlv/diag/Mode.ts +52 -0
  858. package/src/tlv/diag/NetworkData.ts +241 -0
  859. package/src/tlv/diag/Primitives.ts +146 -0
  860. package/src/tlv/diag/Route64.ts +118 -0
  861. package/src/tlv/diag/RouterNeighbor.ts +85 -0
  862. package/src/tlv/diag/Timeout.ts +36 -0
  863. package/src/tlv/diag/VendorInfo.ts +113 -0
  864. package/src/tlv/diag/index.ts +59 -0
  865. package/src/tlv/meshcop/Ip6AddressTlv.ts +36 -0
  866. package/src/tlv/meshcop/UdpEncapsulationTlv.ts +57 -0
  867. package/src/tlv/networkDiagTlvTypes.ts +69 -0
  868. package/src/tsconfig.json +21 -0
  869. 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;