@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.
- package/LICENSE +202 -0
- package/README.md +22 -0
- package/dist/cli.d.ts +29 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +268 -0
- package/dist/cli.js.map +1 -0
- package/dist/cliEmitter.d.ts +50 -0
- package/dist/cliEmitter.d.ts.map +1 -0
- package/dist/cliEmitter.js +49 -0
- package/dist/cliEmitter.js.map +1 -0
- package/dist/cliHistory.d.ts +48 -0
- package/dist/cliHistory.d.ts.map +1 -0
- package/dist/cliHistory.js +826 -0
- package/dist/cliHistory.js.map +1 -0
- package/dist/clusters/export.d.ts +2 -0
- package/dist/clusters/export.d.ts.map +1 -0
- package/dist/clusters/export.js +3 -0
- package/dist/clusters/export.js.map +1 -0
- package/dist/crypto/attestationDecoder.d.ts +180 -0
- package/dist/crypto/attestationDecoder.d.ts.map +1 -0
- package/dist/crypto/attestationDecoder.js +176 -0
- package/dist/crypto/attestationDecoder.js.map +1 -0
- package/dist/crypto/declarationDecoder.d.ts +72 -0
- package/dist/crypto/declarationDecoder.d.ts.map +1 -0
- package/dist/crypto/declarationDecoder.js +241 -0
- package/dist/crypto/declarationDecoder.js.map +1 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts +9 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts.map +1 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js +120 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js.map +1 -0
- package/dist/crypto/read-extensions.d.ts +2 -0
- package/dist/crypto/read-extensions.d.ts.map +1 -0
- package/dist/crypto/read-extensions.js +81 -0
- package/dist/crypto/read-extensions.js.map +1 -0
- package/dist/crypto/testData.d.ts +31 -0
- package/dist/crypto/testData.d.ts.map +1 -0
- package/dist/crypto/testData.js +131 -0
- package/dist/crypto/testData.js.map +1 -0
- package/dist/crypto/walk-der.d.ts +2 -0
- package/dist/crypto/walk-der.d.ts.map +1 -0
- package/dist/crypto/walk-der.js +165 -0
- package/dist/crypto/walk-der.js.map +1 -0
- package/dist/deviceManager.d.ts +135 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +270 -0
- package/dist/deviceManager.js.map +1 -0
- package/dist/devices/airConditioner.d.ts +98 -0
- package/dist/devices/airConditioner.d.ts.map +1 -0
- package/dist/devices/airConditioner.js +74 -0
- package/dist/devices/airConditioner.js.map +1 -0
- package/dist/devices/basicVideoPlayer.d.ts +88 -0
- package/dist/devices/basicVideoPlayer.d.ts.map +1 -0
- package/dist/devices/basicVideoPlayer.js +155 -0
- package/dist/devices/basicVideoPlayer.js.map +1 -0
- package/dist/devices/batteryStorage.d.ts +48 -0
- package/dist/devices/batteryStorage.d.ts.map +1 -0
- package/dist/devices/batteryStorage.js +75 -0
- package/dist/devices/batteryStorage.js.map +1 -0
- package/dist/devices/castingVideoPlayer.d.ts +79 -0
- package/dist/devices/castingVideoPlayer.d.ts.map +1 -0
- package/dist/devices/castingVideoPlayer.js +101 -0
- package/dist/devices/castingVideoPlayer.js.map +1 -0
- package/dist/devices/cooktop.d.ts +61 -0
- package/dist/devices/cooktop.d.ts.map +1 -0
- package/dist/devices/cooktop.js +77 -0
- package/dist/devices/cooktop.js.map +1 -0
- package/dist/devices/dishwasher.d.ts +71 -0
- package/dist/devices/dishwasher.d.ts.map +1 -0
- package/dist/devices/dishwasher.js +130 -0
- package/dist/devices/dishwasher.js.map +1 -0
- package/dist/devices/evse.d.ts +76 -0
- package/dist/devices/evse.d.ts.map +1 -0
- package/dist/devices/evse.js +156 -0
- package/dist/devices/evse.js.map +1 -0
- package/dist/devices/export.d.ts +19 -0
- package/dist/devices/export.d.ts.map +1 -0
- package/dist/devices/export.js +23 -0
- package/dist/devices/export.js.map +1 -0
- package/dist/devices/extractorHood.d.ts +46 -0
- package/dist/devices/extractorHood.d.ts.map +1 -0
- package/dist/devices/extractorHood.js +78 -0
- package/dist/devices/extractorHood.js.map +1 -0
- package/dist/devices/heatPump.d.ts +47 -0
- package/dist/devices/heatPump.d.ts.map +1 -0
- package/dist/devices/heatPump.js +84 -0
- package/dist/devices/heatPump.js.map +1 -0
- package/dist/devices/laundryDryer.d.ts +67 -0
- package/dist/devices/laundryDryer.d.ts.map +1 -0
- package/dist/devices/laundryDryer.js +106 -0
- package/dist/devices/laundryDryer.js.map +1 -0
- package/dist/devices/laundryWasher.d.ts +81 -0
- package/dist/devices/laundryWasher.d.ts.map +1 -0
- package/dist/devices/laundryWasher.js +147 -0
- package/dist/devices/laundryWasher.js.map +1 -0
- package/dist/devices/microwaveOven.d.ts +168 -0
- package/dist/devices/microwaveOven.d.ts.map +1 -0
- package/dist/devices/microwaveOven.js +179 -0
- package/dist/devices/microwaveOven.js.map +1 -0
- package/dist/devices/oven.d.ts +105 -0
- package/dist/devices/oven.d.ts.map +1 -0
- package/dist/devices/oven.js +190 -0
- package/dist/devices/oven.js.map +1 -0
- package/dist/devices/refrigerator.d.ts +118 -0
- package/dist/devices/refrigerator.d.ts.map +1 -0
- package/dist/devices/refrigerator.js +186 -0
- package/dist/devices/refrigerator.js.map +1 -0
- package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
- package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
- package/dist/devices/roboticVacuumCleaner.js +268 -0
- package/dist/devices/roboticVacuumCleaner.js.map +1 -0
- package/dist/devices/solarPower.d.ts +40 -0
- package/dist/devices/solarPower.d.ts.map +1 -0
- package/dist/devices/solarPower.js +59 -0
- package/dist/devices/solarPower.js.map +1 -0
- package/dist/devices/speaker.d.ts +87 -0
- package/dist/devices/speaker.d.ts.map +1 -0
- package/dist/devices/speaker.js +120 -0
- package/dist/devices/speaker.js.map +1 -0
- package/dist/devices/temperatureControl.d.ts +166 -0
- package/dist/devices/temperatureControl.d.ts.map +1 -0
- package/dist/devices/temperatureControl.js +78 -0
- package/dist/devices/temperatureControl.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +111 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +166 -0
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/dgram/export.d.ts +2 -0
- package/dist/dgram/export.d.ts.map +1 -0
- package/dist/dgram/export.js +2 -0
- package/dist/dgram/export.js.map +1 -0
- package/dist/export.d.ts +32 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +39 -0
- package/dist/export.js.map +1 -0
- package/dist/frontend.d.ts +248 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +2605 -0
- package/dist/frontend.js.map +1 -0
- package/dist/helpers.d.ts +48 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +161 -0
- package/dist/helpers.js.map +1 -0
- package/dist/jestutils/export.d.ts +2 -0
- package/dist/jestutils/export.d.ts.map +1 -0
- package/dist/jestutils/export.js +2 -0
- package/dist/jestutils/export.js.map +1 -0
- package/dist/jestutils/jestHelpers.d.ts +349 -0
- package/dist/jestutils/jestHelpers.d.ts.map +1 -0
- package/dist/jestutils/jestHelpers.js +980 -0
- package/dist/jestutils/jestHelpers.js.map +1 -0
- package/dist/matter/behaviors.d.ts +2 -0
- package/dist/matter/behaviors.d.ts.map +1 -0
- package/dist/matter/behaviors.js +3 -0
- package/dist/matter/behaviors.js.map +1 -0
- package/dist/matter/clusters.d.ts +2 -0
- package/dist/matter/clusters.d.ts.map +1 -0
- package/dist/matter/clusters.js +3 -0
- package/dist/matter/clusters.js.map +1 -0
- package/dist/matter/devices.d.ts +2 -0
- package/dist/matter/devices.d.ts.map +1 -0
- package/dist/matter/devices.js +3 -0
- package/dist/matter/devices.js.map +1 -0
- package/dist/matter/endpoints.d.ts +2 -0
- package/dist/matter/endpoints.d.ts.map +1 -0
- package/dist/matter/endpoints.js +3 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +4 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +5 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +2 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +3 -0
- package/dist/matter/types.js.map +1 -0
- package/dist/matterNode.d.ts +341 -0
- package/dist/matterNode.d.ts.map +1 -0
- package/dist/matterNode.js +1329 -0
- package/dist/matterNode.js.map +1 -0
- package/dist/matterbridge.d.ts +544 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +2880 -0
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +49 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +80 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +2428 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +620 -0
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +744 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +1312 -0
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +49 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +80 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1548 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +2883 -0
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +1855 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +1270 -0
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgeEndpointTypes.d.ts +172 -0
- package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
- package/dist/matterbridgeEndpointTypes.js +28 -0
- package/dist/matterbridgeEndpointTypes.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +520 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +921 -0
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/mb_coap.d.ts +24 -0
- package/dist/mb_coap.d.ts.map +1 -0
- package/dist/mb_coap.js +89 -0
- package/dist/mb_coap.js.map +1 -0
- package/dist/mb_health.d.ts +77 -0
- package/dist/mb_health.d.ts.map +1 -0
- package/dist/mb_health.js +147 -0
- package/dist/mb_health.js.map +1 -0
- package/dist/mb_mdns.d.ts +24 -0
- package/dist/mb_mdns.d.ts.map +1 -0
- package/dist/mb_mdns.js +285 -0
- package/dist/mb_mdns.js.map +1 -0
- package/dist/pluginManager.d.ts +388 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +1574 -0
- package/dist/pluginManager.js.map +1 -0
- package/dist/spawn.d.ts +33 -0
- package/dist/spawn.d.ts.map +1 -0
- package/dist/spawn.js +165 -0
- package/dist/spawn.js.map +1 -0
- package/dist/utils/export.d.ts +2 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +2 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/workers/brand.d.ts +25 -0
- package/dist/workers/brand.d.ts.map +1 -0
- package/dist/workers/brand.extend.d.ts +10 -0
- package/dist/workers/brand.extend.d.ts.map +1 -0
- package/dist/workers/brand.extend.js +15 -0
- package/dist/workers/brand.extend.js.map +1 -0
- package/dist/workers/brand.invalid.d.ts +9 -0
- package/dist/workers/brand.invalid.d.ts.map +1 -0
- package/dist/workers/brand.invalid.js +19 -0
- package/dist/workers/brand.invalid.js.map +1 -0
- package/dist/workers/brand.js +67 -0
- package/dist/workers/brand.js.map +1 -0
- package/dist/workers/clusterTypes.d.ts +47 -0
- package/dist/workers/clusterTypes.d.ts.map +1 -0
- package/dist/workers/clusterTypes.js +57 -0
- package/dist/workers/clusterTypes.js.map +1 -0
- package/dist/workers/frontendWorker.d.ts +2 -0
- package/dist/workers/frontendWorker.d.ts.map +1 -0
- package/dist/workers/frontendWorker.js +90 -0
- package/dist/workers/frontendWorker.js.map +1 -0
- package/dist/workers/helloWorld.d.ts +2 -0
- package/dist/workers/helloWorld.d.ts.map +1 -0
- package/dist/workers/helloWorld.js +135 -0
- package/dist/workers/helloWorld.js.map +1 -0
- package/dist/workers/matterWorker.d.ts +2 -0
- package/dist/workers/matterWorker.d.ts.map +1 -0
- package/dist/workers/matterWorker.js +104 -0
- package/dist/workers/matterWorker.js.map +1 -0
- package/dist/workers/matterbridgeWorker.d.ts +2 -0
- package/dist/workers/matterbridgeWorker.d.ts.map +1 -0
- package/dist/workers/matterbridgeWorker.js +75 -0
- package/dist/workers/matterbridgeWorker.js.map +1 -0
- package/dist/workers/messageLab.d.ts +134 -0
- package/dist/workers/messageLab.d.ts.map +1 -0
- package/dist/workers/messageLab.js +129 -0
- package/dist/workers/messageLab.js.map +1 -0
- package/dist/workers/testWorker.d.ts +2 -0
- package/dist/workers/testWorker.d.ts.map +1 -0
- package/dist/workers/testWorker.js +45 -0
- package/dist/workers/testWorker.js.map +1 -0
- package/dist/workers/usage.d.ts +19 -0
- package/dist/workers/usage.d.ts.map +1 -0
- package/dist/workers/usage.js +140 -0
- package/dist/workers/usage.js.map +1 -0
- package/dist/workers/workerManager.d.ts +115 -0
- package/dist/workers/workerManager.d.ts.map +1 -0
- package/dist/workers/workerManager.js +464 -0
- package/dist/workers/workerManager.js.map +1 -0
- package/dist/workers/workerServer.d.ts +126 -0
- package/dist/workers/workerServer.d.ts.map +1 -0
- package/dist/workers/workerServer.js +340 -0
- package/dist/workers/workerServer.js.map +1 -0
- package/dist/workers/workerTypes.d.ts +23 -0
- package/dist/workers/workerTypes.d.ts.map +1 -0
- package/dist/workers/workerTypes.js +3 -0
- package/dist/workers/workerTypes.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|