@matterbridge/core 3.5.3

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 (295) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +22 -0
  3. package/dist/cli.d.ts +29 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +268 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/cliEmitter.d.ts +50 -0
  8. package/dist/cliEmitter.d.ts.map +1 -0
  9. package/dist/cliEmitter.js +49 -0
  10. package/dist/cliEmitter.js.map +1 -0
  11. package/dist/cliHistory.d.ts +48 -0
  12. package/dist/cliHistory.d.ts.map +1 -0
  13. package/dist/cliHistory.js +826 -0
  14. package/dist/cliHistory.js.map +1 -0
  15. package/dist/clusters/export.d.ts +2 -0
  16. package/dist/clusters/export.d.ts.map +1 -0
  17. package/dist/clusters/export.js +3 -0
  18. package/dist/clusters/export.js.map +1 -0
  19. package/dist/crypto/attestationDecoder.d.ts +180 -0
  20. package/dist/crypto/attestationDecoder.d.ts.map +1 -0
  21. package/dist/crypto/attestationDecoder.js +176 -0
  22. package/dist/crypto/attestationDecoder.js.map +1 -0
  23. package/dist/crypto/declarationDecoder.d.ts +72 -0
  24. package/dist/crypto/declarationDecoder.d.ts.map +1 -0
  25. package/dist/crypto/declarationDecoder.js +241 -0
  26. package/dist/crypto/declarationDecoder.js.map +1 -0
  27. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts +9 -0
  28. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts.map +1 -0
  29. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js +120 -0
  30. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js.map +1 -0
  31. package/dist/crypto/read-extensions.d.ts +2 -0
  32. package/dist/crypto/read-extensions.d.ts.map +1 -0
  33. package/dist/crypto/read-extensions.js +81 -0
  34. package/dist/crypto/read-extensions.js.map +1 -0
  35. package/dist/crypto/testData.d.ts +31 -0
  36. package/dist/crypto/testData.d.ts.map +1 -0
  37. package/dist/crypto/testData.js +131 -0
  38. package/dist/crypto/testData.js.map +1 -0
  39. package/dist/crypto/walk-der.d.ts +2 -0
  40. package/dist/crypto/walk-der.d.ts.map +1 -0
  41. package/dist/crypto/walk-der.js +165 -0
  42. package/dist/crypto/walk-der.js.map +1 -0
  43. package/dist/deviceManager.d.ts +135 -0
  44. package/dist/deviceManager.d.ts.map +1 -0
  45. package/dist/deviceManager.js +270 -0
  46. package/dist/deviceManager.js.map +1 -0
  47. package/dist/devices/airConditioner.d.ts +98 -0
  48. package/dist/devices/airConditioner.d.ts.map +1 -0
  49. package/dist/devices/airConditioner.js +74 -0
  50. package/dist/devices/airConditioner.js.map +1 -0
  51. package/dist/devices/basicVideoPlayer.d.ts +88 -0
  52. package/dist/devices/basicVideoPlayer.d.ts.map +1 -0
  53. package/dist/devices/basicVideoPlayer.js +155 -0
  54. package/dist/devices/basicVideoPlayer.js.map +1 -0
  55. package/dist/devices/batteryStorage.d.ts +48 -0
  56. package/dist/devices/batteryStorage.d.ts.map +1 -0
  57. package/dist/devices/batteryStorage.js +75 -0
  58. package/dist/devices/batteryStorage.js.map +1 -0
  59. package/dist/devices/castingVideoPlayer.d.ts +79 -0
  60. package/dist/devices/castingVideoPlayer.d.ts.map +1 -0
  61. package/dist/devices/castingVideoPlayer.js +101 -0
  62. package/dist/devices/castingVideoPlayer.js.map +1 -0
  63. package/dist/devices/cooktop.d.ts +61 -0
  64. package/dist/devices/cooktop.d.ts.map +1 -0
  65. package/dist/devices/cooktop.js +77 -0
  66. package/dist/devices/cooktop.js.map +1 -0
  67. package/dist/devices/dishwasher.d.ts +71 -0
  68. package/dist/devices/dishwasher.d.ts.map +1 -0
  69. package/dist/devices/dishwasher.js +130 -0
  70. package/dist/devices/dishwasher.js.map +1 -0
  71. package/dist/devices/evse.d.ts +76 -0
  72. package/dist/devices/evse.d.ts.map +1 -0
  73. package/dist/devices/evse.js +156 -0
  74. package/dist/devices/evse.js.map +1 -0
  75. package/dist/devices/export.d.ts +19 -0
  76. package/dist/devices/export.d.ts.map +1 -0
  77. package/dist/devices/export.js +23 -0
  78. package/dist/devices/export.js.map +1 -0
  79. package/dist/devices/extractorHood.d.ts +46 -0
  80. package/dist/devices/extractorHood.d.ts.map +1 -0
  81. package/dist/devices/extractorHood.js +78 -0
  82. package/dist/devices/extractorHood.js.map +1 -0
  83. package/dist/devices/heatPump.d.ts +47 -0
  84. package/dist/devices/heatPump.d.ts.map +1 -0
  85. package/dist/devices/heatPump.js +84 -0
  86. package/dist/devices/heatPump.js.map +1 -0
  87. package/dist/devices/laundryDryer.d.ts +67 -0
  88. package/dist/devices/laundryDryer.d.ts.map +1 -0
  89. package/dist/devices/laundryDryer.js +106 -0
  90. package/dist/devices/laundryDryer.js.map +1 -0
  91. package/dist/devices/laundryWasher.d.ts +81 -0
  92. package/dist/devices/laundryWasher.d.ts.map +1 -0
  93. package/dist/devices/laundryWasher.js +147 -0
  94. package/dist/devices/laundryWasher.js.map +1 -0
  95. package/dist/devices/microwaveOven.d.ts +168 -0
  96. package/dist/devices/microwaveOven.d.ts.map +1 -0
  97. package/dist/devices/microwaveOven.js +179 -0
  98. package/dist/devices/microwaveOven.js.map +1 -0
  99. package/dist/devices/oven.d.ts +105 -0
  100. package/dist/devices/oven.d.ts.map +1 -0
  101. package/dist/devices/oven.js +190 -0
  102. package/dist/devices/oven.js.map +1 -0
  103. package/dist/devices/refrigerator.d.ts +118 -0
  104. package/dist/devices/refrigerator.d.ts.map +1 -0
  105. package/dist/devices/refrigerator.js +186 -0
  106. package/dist/devices/refrigerator.js.map +1 -0
  107. package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
  108. package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
  109. package/dist/devices/roboticVacuumCleaner.js +268 -0
  110. package/dist/devices/roboticVacuumCleaner.js.map +1 -0
  111. package/dist/devices/solarPower.d.ts +40 -0
  112. package/dist/devices/solarPower.d.ts.map +1 -0
  113. package/dist/devices/solarPower.js +59 -0
  114. package/dist/devices/solarPower.js.map +1 -0
  115. package/dist/devices/speaker.d.ts +87 -0
  116. package/dist/devices/speaker.d.ts.map +1 -0
  117. package/dist/devices/speaker.js +120 -0
  118. package/dist/devices/speaker.js.map +1 -0
  119. package/dist/devices/temperatureControl.d.ts +166 -0
  120. package/dist/devices/temperatureControl.d.ts.map +1 -0
  121. package/dist/devices/temperatureControl.js +78 -0
  122. package/dist/devices/temperatureControl.js.map +1 -0
  123. package/dist/devices/waterHeater.d.ts +111 -0
  124. package/dist/devices/waterHeater.d.ts.map +1 -0
  125. package/dist/devices/waterHeater.js +166 -0
  126. package/dist/devices/waterHeater.js.map +1 -0
  127. package/dist/dgram/export.d.ts +2 -0
  128. package/dist/dgram/export.d.ts.map +1 -0
  129. package/dist/dgram/export.js +2 -0
  130. package/dist/dgram/export.js.map +1 -0
  131. package/dist/export.d.ts +32 -0
  132. package/dist/export.d.ts.map +1 -0
  133. package/dist/export.js +39 -0
  134. package/dist/export.js.map +1 -0
  135. package/dist/frontend.d.ts +248 -0
  136. package/dist/frontend.d.ts.map +1 -0
  137. package/dist/frontend.js +2605 -0
  138. package/dist/frontend.js.map +1 -0
  139. package/dist/helpers.d.ts +48 -0
  140. package/dist/helpers.d.ts.map +1 -0
  141. package/dist/helpers.js +161 -0
  142. package/dist/helpers.js.map +1 -0
  143. package/dist/jestutils/export.d.ts +2 -0
  144. package/dist/jestutils/export.d.ts.map +1 -0
  145. package/dist/jestutils/export.js +2 -0
  146. package/dist/jestutils/export.js.map +1 -0
  147. package/dist/jestutils/jestHelpers.d.ts +349 -0
  148. package/dist/jestutils/jestHelpers.d.ts.map +1 -0
  149. package/dist/jestutils/jestHelpers.js +980 -0
  150. package/dist/jestutils/jestHelpers.js.map +1 -0
  151. package/dist/matter/behaviors.d.ts +2 -0
  152. package/dist/matter/behaviors.d.ts.map +1 -0
  153. package/dist/matter/behaviors.js +3 -0
  154. package/dist/matter/behaviors.js.map +1 -0
  155. package/dist/matter/clusters.d.ts +2 -0
  156. package/dist/matter/clusters.d.ts.map +1 -0
  157. package/dist/matter/clusters.js +3 -0
  158. package/dist/matter/clusters.js.map +1 -0
  159. package/dist/matter/devices.d.ts +2 -0
  160. package/dist/matter/devices.d.ts.map +1 -0
  161. package/dist/matter/devices.js +3 -0
  162. package/dist/matter/devices.js.map +1 -0
  163. package/dist/matter/endpoints.d.ts +2 -0
  164. package/dist/matter/endpoints.d.ts.map +1 -0
  165. package/dist/matter/endpoints.js +3 -0
  166. package/dist/matter/endpoints.js.map +1 -0
  167. package/dist/matter/export.d.ts +4 -0
  168. package/dist/matter/export.d.ts.map +1 -0
  169. package/dist/matter/export.js +5 -0
  170. package/dist/matter/export.js.map +1 -0
  171. package/dist/matter/types.d.ts +2 -0
  172. package/dist/matter/types.d.ts.map +1 -0
  173. package/dist/matter/types.js +3 -0
  174. package/dist/matter/types.js.map +1 -0
  175. package/dist/matterNode.d.ts +341 -0
  176. package/dist/matterNode.d.ts.map +1 -0
  177. package/dist/matterNode.js +1329 -0
  178. package/dist/matterNode.js.map +1 -0
  179. package/dist/matterbridge.d.ts +544 -0
  180. package/dist/matterbridge.d.ts.map +1 -0
  181. package/dist/matterbridge.js +2880 -0
  182. package/dist/matterbridge.js.map +1 -0
  183. package/dist/matterbridgeAccessoryPlatform.d.ts +49 -0
  184. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  185. package/dist/matterbridgeAccessoryPlatform.js +80 -0
  186. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  187. package/dist/matterbridgeBehaviors.d.ts +2428 -0
  188. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  189. package/dist/matterbridgeBehaviors.js +620 -0
  190. package/dist/matterbridgeBehaviors.js.map +1 -0
  191. package/dist/matterbridgeDeviceTypes.d.ts +744 -0
  192. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  193. package/dist/matterbridgeDeviceTypes.js +1312 -0
  194. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  195. package/dist/matterbridgeDynamicPlatform.d.ts +49 -0
  196. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  197. package/dist/matterbridgeDynamicPlatform.js +80 -0
  198. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  199. package/dist/matterbridgeEndpoint.d.ts +1548 -0
  200. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  201. package/dist/matterbridgeEndpoint.js +2883 -0
  202. package/dist/matterbridgeEndpoint.js.map +1 -0
  203. package/dist/matterbridgeEndpointHelpers.d.ts +1855 -0
  204. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  205. package/dist/matterbridgeEndpointHelpers.js +1270 -0
  206. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  207. package/dist/matterbridgeEndpointTypes.d.ts +172 -0
  208. package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
  209. package/dist/matterbridgeEndpointTypes.js +28 -0
  210. package/dist/matterbridgeEndpointTypes.js.map +1 -0
  211. package/dist/matterbridgePlatform.d.ts +520 -0
  212. package/dist/matterbridgePlatform.d.ts.map +1 -0
  213. package/dist/matterbridgePlatform.js +921 -0
  214. package/dist/matterbridgePlatform.js.map +1 -0
  215. package/dist/mb_coap.d.ts +24 -0
  216. package/dist/mb_coap.d.ts.map +1 -0
  217. package/dist/mb_coap.js +89 -0
  218. package/dist/mb_coap.js.map +1 -0
  219. package/dist/mb_health.d.ts +77 -0
  220. package/dist/mb_health.d.ts.map +1 -0
  221. package/dist/mb_health.js +147 -0
  222. package/dist/mb_health.js.map +1 -0
  223. package/dist/mb_mdns.d.ts +24 -0
  224. package/dist/mb_mdns.d.ts.map +1 -0
  225. package/dist/mb_mdns.js +285 -0
  226. package/dist/mb_mdns.js.map +1 -0
  227. package/dist/pluginManager.d.ts +388 -0
  228. package/dist/pluginManager.d.ts.map +1 -0
  229. package/dist/pluginManager.js +1574 -0
  230. package/dist/pluginManager.js.map +1 -0
  231. package/dist/spawn.d.ts +33 -0
  232. package/dist/spawn.d.ts.map +1 -0
  233. package/dist/spawn.js +165 -0
  234. package/dist/spawn.js.map +1 -0
  235. package/dist/utils/export.d.ts +2 -0
  236. package/dist/utils/export.d.ts.map +1 -0
  237. package/dist/utils/export.js +2 -0
  238. package/dist/utils/export.js.map +1 -0
  239. package/dist/workers/brand.d.ts +25 -0
  240. package/dist/workers/brand.d.ts.map +1 -0
  241. package/dist/workers/brand.extend.d.ts +10 -0
  242. package/dist/workers/brand.extend.d.ts.map +1 -0
  243. package/dist/workers/brand.extend.js +15 -0
  244. package/dist/workers/brand.extend.js.map +1 -0
  245. package/dist/workers/brand.invalid.d.ts +9 -0
  246. package/dist/workers/brand.invalid.d.ts.map +1 -0
  247. package/dist/workers/brand.invalid.js +19 -0
  248. package/dist/workers/brand.invalid.js.map +1 -0
  249. package/dist/workers/brand.js +67 -0
  250. package/dist/workers/brand.js.map +1 -0
  251. package/dist/workers/clusterTypes.d.ts +47 -0
  252. package/dist/workers/clusterTypes.d.ts.map +1 -0
  253. package/dist/workers/clusterTypes.js +57 -0
  254. package/dist/workers/clusterTypes.js.map +1 -0
  255. package/dist/workers/frontendWorker.d.ts +2 -0
  256. package/dist/workers/frontendWorker.d.ts.map +1 -0
  257. package/dist/workers/frontendWorker.js +90 -0
  258. package/dist/workers/frontendWorker.js.map +1 -0
  259. package/dist/workers/helloWorld.d.ts +2 -0
  260. package/dist/workers/helloWorld.d.ts.map +1 -0
  261. package/dist/workers/helloWorld.js +135 -0
  262. package/dist/workers/helloWorld.js.map +1 -0
  263. package/dist/workers/matterWorker.d.ts +2 -0
  264. package/dist/workers/matterWorker.d.ts.map +1 -0
  265. package/dist/workers/matterWorker.js +104 -0
  266. package/dist/workers/matterWorker.js.map +1 -0
  267. package/dist/workers/matterbridgeWorker.d.ts +2 -0
  268. package/dist/workers/matterbridgeWorker.d.ts.map +1 -0
  269. package/dist/workers/matterbridgeWorker.js +75 -0
  270. package/dist/workers/matterbridgeWorker.js.map +1 -0
  271. package/dist/workers/messageLab.d.ts +134 -0
  272. package/dist/workers/messageLab.d.ts.map +1 -0
  273. package/dist/workers/messageLab.js +129 -0
  274. package/dist/workers/messageLab.js.map +1 -0
  275. package/dist/workers/testWorker.d.ts +2 -0
  276. package/dist/workers/testWorker.d.ts.map +1 -0
  277. package/dist/workers/testWorker.js +45 -0
  278. package/dist/workers/testWorker.js.map +1 -0
  279. package/dist/workers/usage.d.ts +19 -0
  280. package/dist/workers/usage.d.ts.map +1 -0
  281. package/dist/workers/usage.js +140 -0
  282. package/dist/workers/usage.js.map +1 -0
  283. package/dist/workers/workerManager.d.ts +115 -0
  284. package/dist/workers/workerManager.d.ts.map +1 -0
  285. package/dist/workers/workerManager.js +464 -0
  286. package/dist/workers/workerManager.js.map +1 -0
  287. package/dist/workers/workerServer.d.ts +126 -0
  288. package/dist/workers/workerServer.d.ts.map +1 -0
  289. package/dist/workers/workerServer.js +340 -0
  290. package/dist/workers/workerServer.js.map +1 -0
  291. package/dist/workers/workerTypes.d.ts +23 -0
  292. package/dist/workers/workerTypes.d.ts.map +1 -0
  293. package/dist/workers/workerTypes.js +3 -0
  294. package/dist/workers/workerTypes.js.map +1 -0
  295. package/package.json +120 -0
@@ -0,0 +1,241 @@
1
+ /* eslint-disable no-console */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ /* eslint-disable @typescript-eslint/no-unused-vars */
4
+ /**
5
+ * This file contains the Certification Declaration functions.
6
+ *
7
+ * @file certificate.ts
8
+ * @author Luca Liguori
9
+ * created 2025-05-08
10
+ * version 1.0.0
11
+ *
12
+ * Copyright 2025, 2026, 2027 Luca Liguori.
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License. *
25
+ */
26
+ const tlvFields = [
27
+ 'format_version',
28
+ 'vendor_id',
29
+ 'product_id_array',
30
+ 'device_type_id',
31
+ 'certificate_id',
32
+ 'security_level',
33
+ 'security_information',
34
+ 'version_number',
35
+ 'certification_type',
36
+ 'dac_origin_vendor_id',
37
+ 'dac_origin_product_id',
38
+ 'authorized_paa_list',
39
+ ];
40
+ const certification_types = ['test', 'provisional', 'production'];
41
+ /* ──────────────────────────────────────────────────────────────── */
42
+ /* 1. BER helpers */
43
+ /* ──────────────────────────────────────────────────────────────── */
44
+ const OID_DATA = Buffer.from('06092a864886f70d010701', 'hex'); // 1.2.840.113549.1.7.1
45
+ const OID_CHIP_CD = Buffer.from('060b2b0601040182a22c0103', 'hex'); // 1.3.6.1.4.1.37244.1.3
46
+ /**
47
+ * Read DER length octets at `pos`, return [len, bytesConsumed].
48
+ *
49
+ * @param {Buffer} buf Buffer containing the DER-encoded data
50
+ * @param {number} pos Position in the buffer to start reading
51
+ * @returns {[number, number]} Tuple containing the length and the number of bytes consumed
52
+ */
53
+ function readLen(buf, pos) {
54
+ const first = buf[pos];
55
+ if ((first & 0x80) === 0)
56
+ return [first, 1];
57
+ const n = first & 0x7f;
58
+ let len = 0;
59
+ for (let i = 1; i <= n; i++)
60
+ len = (len << 8) | buf[pos + i];
61
+ return [len, 1 + n];
62
+ }
63
+ /**
64
+ * Find the encapsulated OCTET-STRING that contains the Matter-TLV.
65
+ * Accepts both the legacy `data` OID and the modern `chip-cd` OID.
66
+ *
67
+ * @param {Buffer} der DER-encoded CMS SignedData blob
68
+ * @param {boolean} debug Enable debug output
69
+ * @returns {Buffer} The extracted TLV payload
70
+ */
71
+ function findTlvPayload(der, debug = false) {
72
+ /* locate the OID bytes anywhere in the blob */
73
+ let idx = der.indexOf(OID_CHIP_CD);
74
+ if (idx === -1)
75
+ idx = der.indexOf(OID_DATA);
76
+ if (idx === -1)
77
+ throw new Error('content-type OID not found');
78
+ /* skip over the OID TLV */
79
+ const [oidLen, oidLenBytes] = readLen(der, idx + 1);
80
+ let p = idx + 1 + oidLenBytes + oidLen;
81
+ /* scan forward for the first [0] EXPLICIT wrapper that
82
+ immediately encloses an OCTET-STRING (0x04) */
83
+ for (; p < der.length; p++) {
84
+ if (der[p] !== 0xa0)
85
+ continue; // not context-specific[0]
86
+ const [len0, ll0] = readLen(der, p + 1);
87
+ const octPos = p + 1 + ll0;
88
+ if (der[octPos] !== 0x04)
89
+ continue; // not OCTET-STRING
90
+ const [octLen, octLl] = readLen(der, octPos + 1);
91
+ return der.subarray(octPos + 1 + octLl, octPos + 1 + octLl + octLen);
92
+ }
93
+ throw new Error('encapContentInfo not found');
94
+ }
95
+ /* ──────────────────────────────────────────────────────────────── */
96
+ /* 2. Public API */
97
+ /* ──────────────────────────────────────────────────────────────── */
98
+ /**
99
+ * Parse the Matter-TLV payload according to spec §6.3.
100
+ *
101
+ * @param {Buffer} tlv - The TLV payload to decode.
102
+ * @param {boolean} [debug] - Enable debug output.
103
+ * @returns {CertificationDeclaration} The decoded Certification Declaration.
104
+ */
105
+ export function decodeCdTlv(tlv, debug = false) {
106
+ const cd = {};
107
+ // Skip start marker (0x15) and remove end marker (0x18 at end)
108
+ if (tlv[0] !== 0x15)
109
+ throw new Error('TLV start marker not found');
110
+ if (tlv[tlv.length - 1] !== 0x18)
111
+ throw new Error('TLV end marker not found');
112
+ const data = tlv.subarray(1, tlv.length - 1);
113
+ let idx = 0;
114
+ while (idx < data.length) {
115
+ const tag = data[idx++];
116
+ const field = data[idx++];
117
+ if (debug)
118
+ console.log(`Tag: 0x${tag.toString(16)} Field: ${field.toString(10)}-${tlvFields[field]}`);
119
+ let val;
120
+ let arrVal = [];
121
+ let arrLen = 0;
122
+ switch (tag) {
123
+ case 0x24: // 24: 1-byte unsigned
124
+ val = data.subarray(idx, idx + 1);
125
+ if (debug)
126
+ console.log(` ${tlvFields[field]} = 0x${val.toString('hex')} (${val.readUInt8(0)}) ${field === 8 ? `${certification_types[val.readUInt8(0)]}` : ''}`);
127
+ idx += 1;
128
+ break;
129
+ case 0x25: // 25: 2-byte unsigned
130
+ val = data.subarray(idx, idx + 2);
131
+ if (debug)
132
+ console.log(` ${tlvFields[field]} = 0x${val.readUInt16LE(0).toString(16)} (${val.readUInt16LE(0)})`);
133
+ idx += 2;
134
+ break;
135
+ case 0x36: // 36: array of 2-byte values, next byte is 0x05 for UInt16 0x10 for 0x14 20 bytes of PAA SKIs, ends with 0x18
136
+ arrVal = [];
137
+ if (field === 0x0b) {
138
+ const subType = data[idx++];
139
+ const subTypeLen = data[idx++];
140
+ val = data.subarray(idx, idx + subTypeLen);
141
+ idx += subTypeLen;
142
+ const subTypeEnd = data[idx++];
143
+ break;
144
+ }
145
+ while (data[idx] !== 0x18) {
146
+ arrLen = data[idx++];
147
+ val = data.subarray(idx, idx + 2);
148
+ arrVal.push(val.readUInt16LE(0));
149
+ idx += 2;
150
+ }
151
+ idx++; // skip 0x18
152
+ if (debug)
153
+ console.log(` ${tlvFields[field]} = [${arrVal.map((v) => `0x${v.toString(16).padStart(4, '0')} (${v})`).join(', ')}]`);
154
+ break;
155
+ case 0x2c: // 2C: string, next byte is length
156
+ arrLen = data[idx++];
157
+ val = data.subarray(idx, idx + arrLen);
158
+ if (debug)
159
+ console.log(` ${tlvFields[field]} = "${val.toString('utf8')}"`);
160
+ idx += arrLen;
161
+ break;
162
+ default:
163
+ if (debug)
164
+ console.log(` Unknown tag 0x${tag.toString(16)}, stopping.`);
165
+ idx = data.length;
166
+ continue;
167
+ }
168
+ // Assign the value to the corresponding field in the CD object
169
+ if (!val) {
170
+ if (debug)
171
+ console.log(` No value found for field ${field}, stopping.`);
172
+ idx = data.length;
173
+ continue;
174
+ }
175
+ switch (field) {
176
+ case 0:
177
+ cd.formatVersion = val.readUInt8(0);
178
+ break;
179
+ case 1:
180
+ cd.vendorId = val.readUInt16LE(0);
181
+ break;
182
+ case 2:
183
+ cd.productIds = arrVal;
184
+ break;
185
+ case 3:
186
+ cd.deviceTypeId = val.length === 2 ? val.readUInt16LE(0) : val.readUInt8(0);
187
+ break;
188
+ case 4:
189
+ cd.certificateId = val.toString('utf8');
190
+ break;
191
+ case 5:
192
+ cd.securityLevel = val.readUInt8(0);
193
+ break;
194
+ case 6:
195
+ cd.securityInformation = val.readUInt8(0);
196
+ break;
197
+ case 7:
198
+ cd.versionNumber = val.length === 2 ? val.readUInt16LE(0) : val.readUInt8(0);
199
+ break;
200
+ case 8:
201
+ cd.certificationType = val.readUInt8(0);
202
+ break;
203
+ case 9:
204
+ cd.dacOriginVid = val.readUInt16LE(0);
205
+ break;
206
+ case 10:
207
+ cd.dacOriginPid = val.readUInt16LE(0);
208
+ break;
209
+ case 11:
210
+ cd.authorizedPaaList = [];
211
+ cd.authorizedPaaList.push(val.toString('hex'));
212
+ break;
213
+ default:
214
+ if (debug)
215
+ console.log(` Unknown field ${field}, stopping.`);
216
+ idx = data.length;
217
+ continue;
218
+ }
219
+ if (debug)
220
+ console.log(` remaining hex=${data.slice(idx).toString('hex')}`);
221
+ }
222
+ return cd;
223
+ }
224
+ /**
225
+ * Decode a Matter Certification-Declaration.
226
+ *
227
+ * @param {Buffer | Uint8Array | string} src - The source data to decode.
228
+ * @param {boolean} [debug] - Enable debug output.
229
+ * @returns {CertificationDeclaration} The decoded Certification Declaration.
230
+ */
231
+ export function decodeCertificationDeclaration(src, debug = false) {
232
+ const der = typeof src === 'string' ? Buffer.from(src.replace(/[^0-9A-Za-z+/=]/g, ''), /^[0-9A-F]+$/i.test(src) && src.length % 2 === 0 ? 'hex' : 'base64') : Buffer.from(src);
233
+ const tlv = findTlvPayload(der, debug);
234
+ if (debug)
235
+ console.log('Decoded tlv from findTlvPayload:\n', '>>' + Buffer.from(tlv).toString('hex') + '<<');
236
+ const decoded = decodeCdTlv(tlv, debug);
237
+ if (debug)
238
+ console.log('Decoded CD from decodeCdTlv:\n', decoded);
239
+ return decoded;
240
+ }
241
+ //# sourceMappingURL=declarationDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarationDecoder.js","sourceRoot":"","sources":["../../src/crypto/declarationDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parses the extensions from a DER-encoded X.509 certificate.
3
+ *
4
+ * @param {Buffer} der - The DER-encoded certificate buffer.
5
+ *
6
+ * @returns {Record<string, any>} An object containing the parsed extensions.
7
+ */
8
+ export declare function parseExtensions(der: Buffer): Record<string, any>;
9
+ //# sourceMappingURL=extract%E2%80%90cert%E2%80%90extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract‐cert‐extensions.d.ts","sourceRoot":"","sources":["../../src/crypto/extract‐cert‐extensions.ts"],"names":[],"mappings":"AA2CA;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,uBA4D1C"}
@@ -0,0 +1,120 @@
1
+ /* eslint-disable jsdoc/reject-any-type */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ /* eslint-disable no-console */
4
+ // extract-cert-extensions.ts
5
+ import { X509Certificate } from 'node:crypto';
6
+ /**
7
+ * Reads a TLV (Tag-Length-Value) structure from a buffer.
8
+ *
9
+ * @param {Buffer} buf - The buffer containing the TLV data.
10
+ * @param {number} offset - The offset in the buffer where the TLV data starts.
11
+ * @returns {object} An object containing the tag, length, value, and next offset.
12
+ */
13
+ function readTLV(buf, offset) {
14
+ const tag = buf[offset++];
15
+ let len = buf[offset++];
16
+ if (len & 0x80) {
17
+ const count = len & 0x7f;
18
+ len = buf.readUIntBE(offset, count);
19
+ offset += count;
20
+ }
21
+ const value = buf.subarray(offset, offset + len);
22
+ return { tag, len, value, next: offset + len };
23
+ }
24
+ /**
25
+ * Walks through a buffer containing TLV structures and extracts them into an array.
26
+ *
27
+ * @param {Buffer} buf - The buffer containing the TLV data.
28
+ * @returns {Array} An array of objects, each containing the tag, length, and value of a TLV structure.
29
+ */
30
+ function walk(buf) {
31
+ const nodes = [];
32
+ let off = 0;
33
+ while (off < buf.length) {
34
+ const { tag, len, value, next } = readTLV(buf, off);
35
+ nodes.push({ tag, len, value });
36
+ off = next;
37
+ }
38
+ return nodes;
39
+ }
40
+ /**
41
+ * Parses the extensions from a DER-encoded X.509 certificate.
42
+ *
43
+ * @param {Buffer} der - The DER-encoded certificate buffer.
44
+ *
45
+ * @returns {Record<string, any>} An object containing the parsed extensions.
46
+ */
47
+ export function parseExtensions(der) {
48
+ const cert = new X509Certificate(der);
49
+ console.log('Parsing certificate:');
50
+ console.log(' Subject:', cert.subject);
51
+ console.log(' Issuer: ', cert.issuer);
52
+ const raw = cert.raw;
53
+ const tbsCertificateStart = raw.indexOf(0x30); // Look for a SEQUENCE start
54
+ const tbsTLV = readTLV(raw, tbsCertificateStart);
55
+ const tbsKids = walk(tbsTLV.value);
56
+ // Find the extensions container, usually context-specific tag [3] (0xa3)
57
+ const extNode = tbsKids.find((node) => node.tag === 0xa3 || node.tag === 3);
58
+ if (!extNode) {
59
+ console.error('No extensions ([3]) found in certificate');
60
+ return {};
61
+ }
62
+ let extPayload = extNode.value;
63
+ const offset = 0;
64
+ if (extPayload[0] !== 0x30) {
65
+ extPayload = readTLV(extPayload, offset).value;
66
+ }
67
+ const extensions = {};
68
+ const extList = walk(extPayload);
69
+ extList.forEach((entryNode) => {
70
+ const entryContent = walk(entryNode.value);
71
+ const oidValue = entryContent[0]?.value?.toString('hex');
72
+ const isCritical = entryContent[1] && entryContent[1].value?.length > 0 ? entryContent[1].value[0] !== 0 : false;
73
+ const valueNodeIndex = entryContent.length > 2 ? 2 : 1;
74
+ const extensionValue = entryContent[valueNodeIndex]?.value;
75
+ console.log(`Found extension OID ${oidValue} (critical=${isCritical}): ${extensionValue?.toString('hex')}`);
76
+ switch (oidValue) {
77
+ case '551d0e':
78
+ extensions.SubjectKeyIdentifier = extensionValue.toString('hex');
79
+ break;
80
+ case '551d0f':
81
+ extensions.KeyUsage = extensionValue.toString('hex');
82
+ break;
83
+ case '551d13':
84
+ extensions.BasicConstraints = extensionValue.toString('hex');
85
+ break;
86
+ case '551d23':
87
+ extensions.AuthorityKeyIdentifier = extensionValue.toString('hex');
88
+ break;
89
+ default:
90
+ console.warn(`Unknown extension OID ${oidValue}: ${extensionValue?.toString('hex')}`);
91
+ }
92
+ });
93
+ console.log('Final parsed extensions:', extensions);
94
+ return extensions;
95
+ }
96
+ const certDAC = `-----BEGIN CERTIFICATE-----
97
+ MIIB6TCCAY+gAwIBAgIIDgY7dCvPvl0wCgYIKoZIzj0EAwIwRjEYMBYGA1UEAwwP
98
+ TWF0dGVyIFRlc3QgUEFJMRQwEgYKKwYBBAGConwCAQwERkZGMTEUMBIGCisGAQQB
99
+ gqJ8AgIMBDgwMDAwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEyMzU5NTlaMEsx
100
+ HTAbBgNVBAMMFE1hdHRlciBUZXN0IERBQyAwMDAxMRQwEgYKKwYBBAGConwCAQwE
101
+ RkZGMTEUMBIGCisGAQQBgqJ8AgIMBDgwMDAwWTATBgcqhkjOPQIBBggqhkjOPQMB
102
+ BwNCAATCJYMix9xyc3wzvu1wczeqJIW8Rnk+TVrJp1rXQ1JmyQoCjuyvJlD+cAnv
103
+ /K7L6tHyw9EkNd7C6tPZkpW/ztbDo2AwXjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB
104
+ /wQEAwIHgDAdBgNVHQ4EFgQUlsLZJJTql4XA0WcI44jxwJHqD9UwHwYDVR0jBBgw
105
+ FoAUr0K3CU3r1RXsbs8zuBEVIl8yUogwCgYIKoZIzj0EAwIDSAAwRQIgX8sppA08
106
+ NabozmBlxtCdphc9xbJF7DIEkePTSTK3PhcCIQC0VpkPUgUQBFo4j3VOdxVAoESX
107
+ kjGWRV5EDWgl2WEDZA==
108
+ -----END CERTIFICATE-----`;
109
+ // Reads a PEM file from the command line
110
+ // const pem = readFileSync(process.argv[2], 'utf8');
111
+ // Extract the first CERTIFICATE block we find
112
+ const der = Buffer.from(certDAC
113
+ .replace(/-----BEGIN CERTIFICATE-----/, '')
114
+ .replace(/-----END CERTIFICATE-----/, '')
115
+ .replace(/\s+/g, ''), 'base64');
116
+ console.log('DER:\n', '>>' + Buffer.from(der).toString('hex') + '<<');
117
+ const exts = parseExtensions(der);
118
+ console.log('Extracted extensions:');
119
+ console.dir(exts, { depth: null });
120
+ //# sourceMappingURL=extract%E2%80%90cert%E2%80%90extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract‐cert‐extensions.js","sourceRoot":"","sources":["../../src/crypto/extract‐cert‐extensions.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,uDAAuD;AACvD,+BAA+B;AAE/B,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,GAAW,EAAE,MAAc;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACxB,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;QACzB,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;IACjD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,SAAS,IAAI,CAAC,GAAW;IACvB,MAAM,KAAK,GAAkD,EAAE,CAAC;IAChE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAChC,GAAG,GAAG,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAErB,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;IAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,yEAAyE;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC;IAEjB,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3B,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACjH,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,cAAc,UAAU,MAAM,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE5G,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,UAAU,CAAC,oBAAoB,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,QAAQ;gBACX,UAAU,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,QAAQ;gBACX,UAAU,CAAC,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,QAAQ;gBACX,UAAU,CAAC,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM;YACR;gBACE,OAAO,CAAC,IAAI,CAAC,yBAAyB,QAAQ,KAAK,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,OAAO,GAAG;;;;;;;;;;;;0BAYU,CAAC;AAE3B,yCAAyC;AACzC,qDAAqD;AAErD,8CAA8C;AAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CACrB,OAAO;KACJ,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;KAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;KACxC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EACtB,QAAQ,CACT,CAAC;AACF,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACtE,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AAClC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACrC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=read-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-extensions.d.ts","sourceRoot":"","sources":["../../src/crypto/read-extensions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ /* eslint-disable no-console */
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ /**
4
+ * Reads the length of a DER-encoded value from a buffer.
5
+ *
6
+ * @param {Buffer} buffer - The buffer containing the DER-encoded data.
7
+ * @param {number} offset - The offset in the buffer where the length starts.
8
+ * @returns {{ length: number; offset: number }} An object containing the length and the new offset.
9
+ */
10
+ function readLength(buffer, offset) {
11
+ let length = buffer[offset++];
12
+ if (length & 0x80) {
13
+ const numOfBytes = length & 0x7f;
14
+ length = 0;
15
+ for (let i = 0; i < numOfBytes; i++) {
16
+ length = (length << 8) | buffer[offset++];
17
+ }
18
+ }
19
+ return { length, offset };
20
+ }
21
+ /**
22
+ * Parses the extensions from a DER-encoded X.509 certificate.
23
+ *
24
+ * @param {Buffer} derBuffer - The DER-encoded certificate buffer.
25
+ * @returns {Extension[]} An array of parsed extensions.
26
+ */
27
+ function parseExtensions(derBuffer) {
28
+ let offset = 0;
29
+ // Skip the initial sequence header
30
+ ({ offset } = readLength(derBuffer, offset + 2));
31
+ // Move past TBSCertificate section until we reach extensions
32
+ let currentTag;
33
+ while ((currentTag = derBuffer[offset++]) !== 0xa3) {
34
+ console.log(`Skipping non-extension tag: ${currentTag.toString(16)}`);
35
+ }
36
+ let result = readLength(derBuffer, offset);
37
+ const extensionsLength = result.length;
38
+ offset = result.offset;
39
+ const extensionsEndOffset = offset + extensionsLength;
40
+ const extensions = [];
41
+ while (offset < extensionsEndOffset) {
42
+ console.log(`Reading extension at offset: ${offset}`);
43
+ if (derBuffer[offset++] !== 0x30) {
44
+ throw new Error('Expected sequence');
45
+ }
46
+ result = readLength(derBuffer, offset);
47
+ const seqLength = result.length;
48
+ offset = result.offset;
49
+ const extnID = [];
50
+ if (derBuffer[offset++] === 0x06) {
51
+ result = readLength(derBuffer, offset);
52
+ const oidLength = result.length;
53
+ offset = result.offset;
54
+ for (let i = 0; i < oidLength; i++) {
55
+ extnID.push(derBuffer[offset++]);
56
+ }
57
+ }
58
+ const critical = derBuffer[offset] === 0x01 && derBuffer[offset + 1] === 0x01 ? !!derBuffer[offset + 2] : false;
59
+ if (critical)
60
+ offset += 3;
61
+ if (derBuffer[offset++] !== 0x04) {
62
+ throw new Error(`Expected octet string at offset ${offset - 1}, found ${derBuffer[offset - 1].toString(16)}`);
63
+ }
64
+ result = readLength(derBuffer, offset);
65
+ const extnValueLength = result.length;
66
+ offset = result.offset;
67
+ const extnValue = derBuffer.slice(offset, offset + extnValueLength);
68
+ offset += extnValueLength;
69
+ extensions.push({
70
+ extnID,
71
+ critical,
72
+ extnValue,
73
+ });
74
+ }
75
+ return extensions;
76
+ }
77
+ // Example usage:
78
+ const exampleDER = Buffer.from('308201e93082018fa00302010202080e063b742bcfbe5d300a06082a8648ce3d04030230463118301606035504030c0f4d617474657220546573742050414931143012060a2b0601040182a27c02010c044646463131143012060a2b0601040182a27c02020c04383030303020170d3231303632383134323334335a180f39393939313233313233353935395a304b311d301b06035504030c144d6174746572205465737420444143203030303131143012060a2b0601040182a27c02010c044646463131143012060a2b0601040182a27c02020c04383030303059301306072a8648ce3d020106082a8648ce3d03010703420004c2258322c7dc72737c33beed707337aa2485bc46793e4d5ac9a75ad7435266c90a028eecaf2650fe7009effcaecbead1f2c3d12435dec2ead3d99295bfced6c3a360305e300c0603551d130101ff04023000300e0603551d0f0101ff040403020780301d0603551d0e0416041496c2d92494ea9785c0d16708e388f1c091ea0fd5301f0603551d23041830168014af42b7094debd515ec6ecf33b81115225f325288300a06082a8648ce3d040302034800304502205fcb29a40d3c35a6e8ce6065c6d09da6173dc5b245ec320491e3d34932b73e17022100b456990f520510045a388f754e771540a04497923196455e440d6825d9610364', 'hex');
79
+ parseExtensions(exampleDER);
80
+ export {};
81
+ //# sourceMappingURL=read-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-extensions.js","sourceRoot":"","sources":["../../src/crypto/read-extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare const certDAC = "-----BEGIN CERTIFICATE-----\nMIIB6TCCAY+gAwIBAgIIDgY7dCvPvl0wCgYIKoZIzj0EAwIwRjEYMBYGA1UEAwwP\nTWF0dGVyIFRlc3QgUEFJMRQwEgYKKwYBBAGConwCAQwERkZGMTEUMBIGCisGAQQB\ngqJ8AgIMBDgwMDAwIBcNMjEwNjI4MTQyMzQzWhgPOTk5OTEyMzEyMzU5NTlaMEsx\nHTAbBgNVBAMMFE1hdHRlciBUZXN0IERBQyAwMDAxMRQwEgYKKwYBBAGConwCAQwE\nRkZGMTEUMBIGCisGAQQBgqJ8AgIMBDgwMDAwWTATBgcqhkjOPQIBBggqhkjOPQMB\nBwNCAATCJYMix9xyc3wzvu1wczeqJIW8Rnk+TVrJp1rXQ1JmyQoCjuyvJlD+cAnv\n/K7L6tHyw9EkNd7C6tPZkpW/ztbDo2AwXjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB\n/wQEAwIHgDAdBgNVHQ4EFgQUlsLZJJTql4XA0WcI44jxwJHqD9UwHwYDVR0jBBgw\nFoAUr0K3CU3r1RXsbs8zuBEVIl8yUogwCgYIKoZIzj0EAwIDSAAwRQIgX8sppA08\nNabozmBlxtCdphc9xbJF7DIEkePTSTK3PhcCIQC0VpkPUgUQBFo4j3VOdxVAoESX\nkjGWRV5EDWgl2WEDZA==\n-----END CERTIFICATE-----";
2
+ export declare const keyDAC = "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIHtcWp+0aVVH+DAQ38iXpphqmT7LfMnMD4V/kIqszwfuoAoGCCqGSM49\nAwEHoUQDQgAEwiWDIsfccnN8M77tcHM3qiSFvEZ5Pk1ayada10NSZskKAo7sryZQ\n/nAJ7/yuy+rR8sPRJDXewurT2ZKVv87Www==\n-----END EC PRIVATE KEY-----";
3
+ export declare const certPAI = "-----BEGIN CERTIFICATE-----\nMIIB1DCCAXqgAwIBAgIIPmzmUJrYQM0wCgYIKoZIzj0EAwIwMDEYMBYGA1UEAwwP\nTWF0dGVyIFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwERkZGMTAgFw0yMTA2Mjgx\nNDIzNDNaGA85OTk5MTIzMTIzNTk1OVowRjEYMBYGA1UEAwwPTWF0dGVyIFRlc3Qg\nUEFJMRQwEgYKKwYBBAGConwCAQwERkZGMTEUMBIGCisGAQQBgqJ8AgIMBDgwMDAw\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASA3fEbIo8+MfY7z1eY2hRiOuu96C7z\neO6tv7GP4avOMdCO1LIGBLbMxtm1+rZOfeEMt0vgF8nsFRYFbXDyzQsio2YwZDAS\nBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUr0K3\nCU3r1RXsbs8zuBEVIl8yUogwHwYDVR0jBBgwFoAUav0idx9RH+y/FkGXZxDc3DGh\ncX4wCgYIKoZIzj0EAwIDSAAwRQIhAJbJyM8uAYhgBdj1vHLAe3X9mldpWsSRETET\ni+oDPOUDAiAlVJQ75X1T1sR199I+v8/CA2zSm6Y5PsfvrYcUq3GCGQ==\n-----END CERTIFICATE-----";
4
+ export declare const keyPAI = "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIEZ7LYpps1z+a9sPw2qBp9jj5F0GLffNuCJY88hAHcMYoAoGCCqGSM49\nAwEHoUQDQgAEgN3xGyKPPjH2O89XmNoUYjrrvegu83jurb+xj+GrzjHQjtSyBgS2\nzMbZtfq2Tn3hDLdL4BfJ7BUWBW1w8s0LIg==\n-----END EC PRIVATE KEY-----";
5
+ export declare const certPAA = "-----BEGIN CERTIFICATE-----\nMIIBvTCCAWSgAwIBAgIITqjoMYLUHBwwCgYIKoZIzj0EAwIwMDEYMBYGA1UEAwwP\nTWF0dGVyIFRlc3QgUEFBMRQwEgYKKwYBBAGConwCAQwERkZGMTAgFw0yMTA2Mjgx\nNDIzNDNaGA85OTk5MTIzMTIzNTk1OVowMDEYMBYGA1UEAwwPTWF0dGVyIFRlc3Qg\nUEFBMRQwEgYKKwYBBAGConwCAQwERkZGMTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABLbLY3KIfyko9brIGqnZOuJDHK2p154kL2UXfvnO2TKijs0Duq9qj8oYShpQ\nNUKWDUU/MD8fGUIddR6Pjxqam3WjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD\nVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRq/SJ3H1Ef7L8WQZdnENzcMaFxfjAfBgNV\nHSMEGDAWgBRq/SJ3H1Ef7L8WQZdnENzcMaFxfjAKBggqhkjOPQQDAgNHADBEAiBQ\nqoAC9NkyqaAFOPZTaK0P/8jvu8m+t9pWmDXPmqdRDgIgI7rI/g8j51RFtlM5CBpH\nmUkpxyqvChVI1A0DTVFLJd4=\n-----END CERTIFICATE-----";
6
+ export declare const keyPAA = "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIGUSyuyuz8VD1gYjFhWXFi8BRoTFZaEpti/SjCerHMxQoAoGCCqGSM49\nAwEHoUQDQgAEtstjcoh/KSj1usgaqdk64kMcranXniQvZRd++c7ZMqKOzQO6r2qP\nyhhKGlA1QpYNRT8wPx8ZQh11Ho+PGpqbdQ==\n-----END EC PRIVATE KEY-----";
7
+ export declare const matterbridgePairing: {
8
+ passcode: string;
9
+ discriminator: string;
10
+ privateKey: {
11
+ kty: string;
12
+ d: string;
13
+ crv: string;
14
+ x: string;
15
+ y: string;
16
+ };
17
+ certificate: string;
18
+ intermediateCertificate: string;
19
+ declaration: string;
20
+ };
21
+ export declare const Shelly1Gen4: {
22
+ DeviceAttestation: string;
23
+ ProductAttestation: string;
24
+ AttestationElements: string;
25
+ AttestationSignature: string;
26
+ };
27
+ export declare const AttestationElements = "15310111013082010d06092a864886f70d010702a081ff3081fc020103310d300b0609608648016503040201306906092a864886f70d010701a05c045a152400012501f2ff360205018005028018250334122c04135a494732303134325a423333303030322d323424050024060024070124080094262408002509f1ff250a0080360b1014785ce705b86b8f4e6fc793aa60cb43ea696882d51818317d307b020103801462fa823359acfaa9963e1cfa140addf504f37160300b0609608648016503040201300a06082a8648ce3d0403020447304502204ae9c9b7f8aa68610add84e41291fc8f4dc533fca29dc1fff2253c09cd32f7750221009c0a5fdef9e008d1cc8bb7c3959cdb65c46125cb7295081e47b5c131e4d1f48c300220e0421b91c6fdcdb40e2a4d2cf31db2b4e18b411b1d3ad4d12a9d90aa8e52fae22603fdc65b28d0f1ff3e0001001773616d706c655f76656e646f725f726573657276656431d0f1ff3e0003001876656e646f725f7265736572766564335f6578616d706c6518";
28
+ export declare const AttestationSignature = "7982535d24cfe14a71ab0424cf0bacf1e345487ed50f1ac0bc259eccfb39081ed7a752188d9f76f9063703eb240f9cd14b0a43e741fe60ef2a81635aea5b484d";
29
+ export declare const elinDAC = "-----BEGIN CERTIFICATE-----\nMIICBjCCAaugAwIBAgIUNIqpoKLNHVCal90ZaRpbcAYRHzIwCgYIKoZIzj0EAwIw\nNTEdMBsGA1UEAwwUU2hlbGx5IE1hdHRlciBQQUkgMDIxFDASBgorBgEEAYKifAIB\nDAQxNDkwMCAXDTI1MDEyOTE1MTAzNVoYDzk5OTkxMjMxMjM1OTU5WjBsMT4wPAYD\nVQQDDDVTaGVsbHkgQmF0Y2ggUzNQTC0wMDExMkVVLW1hdHRlci10ZXN0LTAwMSBT\nTiBxd2VydHktNTEUMBIGCisGAQQBgqJ8AgEMBDE0OTAxFDASBgorBgEEAYKifAIC\nDAQwMDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWXf60B73lZwzhjwqrKXK\nozWrPHA8sJPMXQk2lcA4DHgSkffeYpJVISVrg2D1fQ1PD/AJiezh9iUkNAAiS0NA\n7KNgMF4wDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQc5vd7ydQDijHxrY+Jafpn\nGufYfzAdBgNVHQ4EFgQUvQ9tRG73T2UdDr079k6mGjNxbG4wDgYDVR0PAQH/BAQD\nAgeAMAoGCCqGSM49BAMCA0kAMEYCIQCuRM+HrkgSPkLVDCGzglQMn1SDfGPKGFAb\ncaek7vzNSQIhAJ17pDLEJ6sFKlWXL+hjBAJsvYgd2JFXGNpYfBje8Zwn\n-----END CERTIFICATE-----";
30
+ export declare const elinDAK = "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgqAZKSqiyqsIOpIgM\njqr4mAYOuNuS662zigoF47Lwr3mgCgYIKoZIzj0DAQehRANCAARZd/rQHveVnDOG\nPCqspcqjNas8cDywk8xdCTaVwDgMeBKR995iklUhJWuDYPV9DU8P8AmJ7OH2JSQ0\nACJLQ0Ds\n-----END PRIVATE KEY-----";
31
+ //# sourceMappingURL=testData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testData.d.ts","sourceRoot":"","sources":["../../src/crypto/testData.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,quBAYM,CAAC;AAE3B,eAAO,MAAM,MAAM,2OAIU,CAAC;AAE9B,eAAO,MAAM,OAAO,usBAWM,CAAC;AAE3B,eAAO,MAAM,MAAM,2OAIU,CAAC;AAE9B,eAAO,MAAM,OAAO,uqBAWM,CAAC;AAE3B,eAAO,MAAM,MAAM,2OAIU,CAAC;AAI9B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;CAgB/B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;CAQvB,CAAC;AAqCF,eAAO,MAAM,mBAAmB,2wBAC0uB,CAAC;AAE3wB,eAAO,MAAM,oBAAoB,qIAAqI,CAAC;AAEvK,eAAO,MAAM,OAAO,ywBAYM,CAAC;AAE3B,eAAO,MAAM,OAAO,2QAKM,CAAC"}