@matter/protocol 0.15.0-alpha.0-20250616-4b3754906 → 0.15.0-alpha.0-20250619-df2264f15

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 (207) hide show
  1. package/dist/cjs/certificate/AttestationCertificateManager.d.ts.map +1 -1
  2. package/dist/cjs/certificate/AttestationCertificateManager.js +26 -22
  3. package/dist/cjs/certificate/AttestationCertificateManager.js.map +1 -1
  4. package/dist/cjs/certificate/CertificateAuthority.d.ts +1 -2
  5. package/dist/cjs/certificate/CertificateAuthority.d.ts.map +1 -1
  6. package/dist/cjs/certificate/CertificateAuthority.js +22 -29
  7. package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
  8. package/dist/cjs/certificate/DeviceCertification.d.ts.map +1 -1
  9. package/dist/cjs/certificate/DeviceCertification.js +2 -6
  10. package/dist/cjs/certificate/DeviceCertification.js.map +1 -1
  11. package/dist/cjs/certificate/index.d.ts +7 -2
  12. package/dist/cjs/certificate/index.d.ts.map +1 -1
  13. package/dist/cjs/certificate/index.js +14 -2
  14. package/dist/cjs/certificate/index.js.map +1 -1
  15. package/dist/cjs/certificate/kinds/AttestationCertificates.d.ts +34 -0
  16. package/dist/cjs/certificate/kinds/AttestationCertificates.d.ts.map +1 -0
  17. package/dist/cjs/certificate/kinds/AttestationCertificates.js +64 -0
  18. package/dist/cjs/certificate/kinds/AttestationCertificates.js.map +6 -0
  19. package/dist/cjs/certificate/kinds/CertificationDeclaration.d.ts +23 -0
  20. package/dist/cjs/certificate/kinds/CertificationDeclaration.d.ts.map +1 -0
  21. package/dist/cjs/certificate/kinds/CertificationDeclaration.js +86 -0
  22. package/dist/cjs/certificate/kinds/CertificationDeclaration.js.map +6 -0
  23. package/dist/cjs/certificate/kinds/Icac.d.ts +29 -0
  24. package/dist/cjs/certificate/kinds/Icac.d.ts.map +1 -0
  25. package/dist/cjs/certificate/kinds/Icac.js +138 -0
  26. package/dist/cjs/certificate/kinds/Icac.js.map +6 -0
  27. package/dist/cjs/certificate/kinds/Noc.d.ts +27 -0
  28. package/dist/cjs/certificate/kinds/Noc.d.ts.map +1 -0
  29. package/dist/cjs/certificate/kinds/Noc.js +148 -0
  30. package/dist/cjs/certificate/kinds/Noc.js.map +6 -0
  31. package/dist/cjs/certificate/kinds/OperationalBase.d.ts +24 -0
  32. package/dist/cjs/certificate/kinds/OperationalBase.d.ts.map +1 -0
  33. package/dist/cjs/certificate/kinds/OperationalBase.js +68 -0
  34. package/dist/cjs/certificate/kinds/OperationalBase.js.map +6 -0
  35. package/dist/cjs/certificate/kinds/Rcac.d.ts +25 -0
  36. package/dist/cjs/certificate/kinds/Rcac.d.ts.map +1 -0
  37. package/dist/cjs/certificate/kinds/Rcac.js +119 -0
  38. package/dist/cjs/certificate/kinds/Rcac.js.map +6 -0
  39. package/dist/cjs/certificate/kinds/X509Base.d.ts +92 -0
  40. package/dist/cjs/certificate/kinds/X509Base.d.ts.map +1 -0
  41. package/dist/cjs/certificate/kinds/X509Base.js +344 -0
  42. package/dist/cjs/certificate/kinds/X509Base.js.map +6 -0
  43. package/dist/cjs/certificate/kinds/common.d.ts +18 -0
  44. package/dist/cjs/certificate/kinds/common.d.ts.map +1 -0
  45. package/dist/cjs/certificate/kinds/common.js +42 -0
  46. package/dist/cjs/certificate/kinds/common.js.map +6 -0
  47. package/dist/cjs/certificate/kinds/definitions/asn.d.ts +25 -0
  48. package/dist/cjs/certificate/kinds/definitions/asn.d.ts.map +1 -0
  49. package/dist/cjs/certificate/kinds/definitions/asn.js +83 -0
  50. package/dist/cjs/certificate/kinds/definitions/asn.js.map +6 -0
  51. package/dist/cjs/certificate/kinds/definitions/attestation.d.ts +44 -0
  52. package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -0
  53. package/dist/cjs/certificate/kinds/definitions/attestation.js +22 -0
  54. package/dist/cjs/certificate/kinds/definitions/attestation.js.map +6 -0
  55. package/dist/cjs/certificate/kinds/definitions/base.d.ts +52 -0
  56. package/dist/cjs/certificate/kinds/definitions/base.d.ts.map +1 -0
  57. package/dist/cjs/certificate/kinds/definitions/base.js +43 -0
  58. package/dist/cjs/certificate/kinds/definitions/base.js.map +6 -0
  59. package/dist/cjs/certificate/kinds/definitions/certification-declaration.d.ts +18 -0
  60. package/dist/cjs/certificate/kinds/definitions/certification-declaration.d.ts.map +1 -0
  61. package/dist/cjs/certificate/kinds/definitions/certification-declaration.js +50 -0
  62. package/dist/cjs/certificate/kinds/definitions/certification-declaration.js.map +6 -0
  63. package/dist/cjs/certificate/kinds/definitions/operational.d.ts +368 -0
  64. package/dist/cjs/certificate/kinds/definitions/operational.d.ts.map +1 -0
  65. package/dist/cjs/certificate/kinds/definitions/operational.js +149 -0
  66. package/dist/cjs/certificate/kinds/definitions/operational.js.map +6 -0
  67. package/dist/cjs/certificate/kinds/index.d.ts +12 -0
  68. package/dist/cjs/certificate/kinds/index.d.ts.map +1 -0
  69. package/dist/cjs/certificate/kinds/index.js +29 -0
  70. package/dist/cjs/certificate/kinds/index.js.map +6 -0
  71. package/dist/cjs/fabric/Fabric.d.ts +1 -2
  72. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  73. package/dist/cjs/fabric/Fabric.js +28 -31
  74. package/dist/cjs/fabric/Fabric.js.map +1 -1
  75. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  76. package/dist/cjs/peer/ControllerCommissioningFlow.js +2 -1
  77. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  78. package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
  79. package/dist/cjs/session/case/CaseClient.js +3 -3
  80. package/dist/cjs/session/case/CaseClient.js.map +1 -1
  81. package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
  82. package/dist/cjs/session/case/CaseServer.js +2 -2
  83. package/dist/cjs/session/case/CaseServer.js.map +1 -1
  84. package/dist/esm/certificate/AttestationCertificateManager.d.ts.map +1 -1
  85. package/dist/esm/certificate/AttestationCertificateManager.js +20 -16
  86. package/dist/esm/certificate/AttestationCertificateManager.js.map +1 -1
  87. package/dist/esm/certificate/CertificateAuthority.d.ts +1 -2
  88. package/dist/esm/certificate/CertificateAuthority.d.ts.map +1 -1
  89. package/dist/esm/certificate/CertificateAuthority.js +18 -30
  90. package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
  91. package/dist/esm/certificate/DeviceCertification.d.ts.map +1 -1
  92. package/dist/esm/certificate/DeviceCertification.js +2 -6
  93. package/dist/esm/certificate/DeviceCertification.js.map +1 -1
  94. package/dist/esm/certificate/index.d.ts +7 -2
  95. package/dist/esm/certificate/index.d.ts.map +1 -1
  96. package/dist/esm/certificate/index.js +10 -2
  97. package/dist/esm/certificate/index.js.map +1 -1
  98. package/dist/esm/certificate/kinds/AttestationCertificates.d.ts +34 -0
  99. package/dist/esm/certificate/kinds/AttestationCertificates.d.ts.map +1 -0
  100. package/dist/esm/certificate/kinds/AttestationCertificates.js +44 -0
  101. package/dist/esm/certificate/kinds/AttestationCertificates.js.map +6 -0
  102. package/dist/esm/certificate/kinds/CertificationDeclaration.d.ts +23 -0
  103. package/dist/esm/certificate/kinds/CertificationDeclaration.d.ts.map +1 -0
  104. package/dist/esm/certificate/kinds/CertificationDeclaration.js +66 -0
  105. package/dist/esm/certificate/kinds/CertificationDeclaration.js.map +6 -0
  106. package/dist/esm/certificate/kinds/Icac.d.ts +29 -0
  107. package/dist/esm/certificate/kinds/Icac.d.ts.map +1 -0
  108. package/dist/esm/certificate/kinds/Icac.js +118 -0
  109. package/dist/esm/certificate/kinds/Icac.js.map +6 -0
  110. package/dist/esm/certificate/kinds/Noc.d.ts +27 -0
  111. package/dist/esm/certificate/kinds/Noc.d.ts.map +1 -0
  112. package/dist/esm/certificate/kinds/Noc.js +128 -0
  113. package/dist/esm/certificate/kinds/Noc.js.map +6 -0
  114. package/dist/esm/certificate/kinds/OperationalBase.d.ts +24 -0
  115. package/dist/esm/certificate/kinds/OperationalBase.d.ts.map +1 -0
  116. package/dist/esm/certificate/kinds/OperationalBase.js +48 -0
  117. package/dist/esm/certificate/kinds/OperationalBase.js.map +6 -0
  118. package/dist/esm/certificate/kinds/Rcac.d.ts +25 -0
  119. package/dist/esm/certificate/kinds/Rcac.d.ts.map +1 -0
  120. package/dist/esm/certificate/kinds/Rcac.js +99 -0
  121. package/dist/esm/certificate/kinds/Rcac.js.map +6 -0
  122. package/dist/esm/certificate/kinds/X509Base.d.ts +92 -0
  123. package/dist/esm/certificate/kinds/X509Base.d.ts.map +1 -0
  124. package/dist/esm/certificate/kinds/X509Base.js +347 -0
  125. package/dist/esm/certificate/kinds/X509Base.js.map +6 -0
  126. package/dist/esm/certificate/kinds/common.d.ts +18 -0
  127. package/dist/esm/certificate/kinds/common.d.ts.map +1 -0
  128. package/dist/esm/certificate/kinds/common.js +22 -0
  129. package/dist/esm/certificate/kinds/common.js.map +6 -0
  130. package/dist/esm/certificate/kinds/definitions/asn.d.ts +25 -0
  131. package/dist/esm/certificate/kinds/definitions/asn.d.ts.map +1 -0
  132. package/dist/esm/certificate/kinds/definitions/asn.js +63 -0
  133. package/dist/esm/certificate/kinds/definitions/asn.js.map +6 -0
  134. package/dist/esm/certificate/kinds/definitions/attestation.d.ts +44 -0
  135. package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -0
  136. package/dist/esm/certificate/kinds/definitions/attestation.js +6 -0
  137. package/dist/esm/certificate/kinds/definitions/attestation.js.map +6 -0
  138. package/dist/esm/certificate/kinds/definitions/base.d.ts +52 -0
  139. package/dist/esm/certificate/kinds/definitions/base.d.ts.map +1 -0
  140. package/dist/esm/certificate/kinds/definitions/base.js +23 -0
  141. package/dist/esm/certificate/kinds/definitions/base.js.map +6 -0
  142. package/dist/esm/certificate/kinds/definitions/certification-declaration.d.ts +18 -0
  143. package/dist/esm/certificate/kinds/definitions/certification-declaration.d.ts.map +1 -0
  144. package/dist/esm/certificate/kinds/definitions/certification-declaration.js +41 -0
  145. package/dist/esm/certificate/kinds/definitions/certification-declaration.js.map +6 -0
  146. package/dist/esm/certificate/kinds/definitions/operational.d.ts +368 -0
  147. package/dist/esm/certificate/kinds/definitions/operational.d.ts.map +1 -0
  148. package/dist/esm/certificate/kinds/definitions/operational.js +148 -0
  149. package/dist/esm/certificate/kinds/definitions/operational.js.map +6 -0
  150. package/dist/esm/certificate/kinds/index.d.ts +12 -0
  151. package/dist/esm/certificate/kinds/index.d.ts.map +1 -0
  152. package/dist/esm/certificate/kinds/index.js +12 -0
  153. package/dist/esm/certificate/kinds/index.js.map +6 -0
  154. package/dist/esm/fabric/Fabric.d.ts +1 -2
  155. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  156. package/dist/esm/fabric/Fabric.js +28 -36
  157. package/dist/esm/fabric/Fabric.js.map +1 -1
  158. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  159. package/dist/esm/peer/ControllerCommissioningFlow.js +2 -1
  160. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  161. package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
  162. package/dist/esm/session/case/CaseClient.js +3 -3
  163. package/dist/esm/session/case/CaseClient.js.map +1 -1
  164. package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
  165. package/dist/esm/session/case/CaseServer.js +2 -2
  166. package/dist/esm/session/case/CaseServer.js.map +1 -1
  167. package/package.json +6 -6
  168. package/src/certificate/AttestationCertificateManager.ts +20 -16
  169. package/src/certificate/CertificateAuthority.ts +18 -35
  170. package/src/certificate/DeviceCertification.ts +2 -6
  171. package/src/certificate/index.ts +7 -2
  172. package/src/certificate/kinds/AttestationCertificates.ts +48 -0
  173. package/src/certificate/kinds/CertificationDeclaration.ts +91 -0
  174. package/src/certificate/kinds/Icac.ts +156 -0
  175. package/src/certificate/kinds/Noc.ts +164 -0
  176. package/src/certificate/kinds/OperationalBase.ts +72 -0
  177. package/src/certificate/kinds/Rcac.ts +126 -0
  178. package/src/certificate/kinds/X509Base.ts +380 -0
  179. package/src/certificate/kinds/common.ts +24 -0
  180. package/src/certificate/kinds/definitions/asn.ts +97 -0
  181. package/src/certificate/kinds/definitions/attestation.ts +46 -0
  182. package/src/certificate/kinds/definitions/base.ts +43 -0
  183. package/src/certificate/kinds/definitions/certification-declaration.ts +38 -0
  184. package/src/certificate/kinds/definitions/operational.ts +179 -0
  185. package/src/certificate/kinds/index.ts +12 -0
  186. package/src/fabric/Fabric.ts +28 -40
  187. package/src/peer/ControllerCommissioningFlow.ts +2 -1
  188. package/src/session/case/CaseClient.ts +3 -3
  189. package/src/session/case/CaseServer.ts +2 -2
  190. package/dist/cjs/certificate/CertificateManager.d.ts +0 -578
  191. package/dist/cjs/certificate/CertificateManager.d.ts.map +0 -1
  192. package/dist/cjs/certificate/CertificateManager.js +0 -843
  193. package/dist/cjs/certificate/CertificateManager.js.map +0 -6
  194. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts +0 -11
  195. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts.map +0 -1
  196. package/dist/cjs/certificate/CertificationDeclarationManager.js +0 -54
  197. package/dist/cjs/certificate/CertificationDeclarationManager.js.map +0 -6
  198. package/dist/esm/certificate/CertificateManager.d.ts +0 -578
  199. package/dist/esm/certificate/CertificateManager.d.ts.map +0 -1
  200. package/dist/esm/certificate/CertificateManager.js +0 -870
  201. package/dist/esm/certificate/CertificateManager.js.map +0 -6
  202. package/dist/esm/certificate/CertificationDeclarationManager.d.ts +0 -11
  203. package/dist/esm/certificate/CertificationDeclarationManager.d.ts.map +0 -1
  204. package/dist/esm/certificate/CertificationDeclarationManager.js +0 -34
  205. package/dist/esm/certificate/CertificationDeclarationManager.js.map +0 -6
  206. package/src/certificate/CertificateManager.ts +0 -1176
  207. package/src/certificate/CertificationDeclarationManager.ts +0 -52
@@ -1,843 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var CertificateManager_exports = {};
20
- __export(CertificateManager_exports, {
21
- CertificateError: () => CertificateError,
22
- CertificateManager: () => CertificateManager,
23
- FabricId_Matter: () => FabricId_Matter,
24
- FirmwareSigningId_Matter: () => FirmwareSigningId_Matter,
25
- IcacId_Matter: () => IcacId_Matter,
26
- NocCat_Matter: () => NocCat_Matter,
27
- NodeId_Matter: () => NodeId_Matter,
28
- ProductId_Matter: () => ProductId_Matter,
29
- RcacId_Matter: () => RcacId_Matter,
30
- TlvCertificationDeclaration: () => TlvCertificationDeclaration,
31
- TlvIntermediateCertificate: () => TlvIntermediateCertificate,
32
- TlvOperationalCertificate: () => TlvOperationalCertificate,
33
- TlvRootCertificate: () => TlvRootCertificate,
34
- VendorId_Matter: () => VendorId_Matter,
35
- jsToMatterDate: () => jsToMatterDate,
36
- matterToJsDate: () => matterToJsDate
37
- });
38
- module.exports = __toCommonJS(CertificateManager_exports);
39
- var import_general = require("#general");
40
- var import_types = require("#types");
41
- /**
42
- * @license
43
- * Copyright 2022-2025 Matter.js Authors
44
- * SPDX-License-Identifier: Apache-2.0
45
- */
46
- const logger = import_general.Logger.get("CertificateManager");
47
- class CertificateError extends import_general.MatterError {
48
- }
49
- const YEAR_S = 365 * 24 * 60 * 60;
50
- const EPOCH_OFFSET_S = 10957 * 24 * 60 * 60;
51
- const MAX_DER_CERTIFICATE_SIZE = 600;
52
- const MAX_TLV_CERTIFICATE_SIZE = 400;
53
- function matterToJsDate(date) {
54
- return date === 0 ? import_general.X520.NON_WELL_DEFINED_DATE : new Date((date + EPOCH_OFFSET_S) * 1e3);
55
- }
56
- function jsToMatterDate(date, addYears = 0) {
57
- return date.getTime() === import_general.X520.NON_WELL_DEFINED_DATE.getTime() ? 0 : Math.floor(date.getTime() / 1e3) - EPOCH_OFFSET_S + addYears * YEAR_S;
58
- }
59
- function intTo16Chars(value) {
60
- const byteArray = new Uint8Array(8);
61
- const dataView = import_general.Bytes.dataViewOf(byteArray);
62
- dataView.setBigUint64(0, typeof value === "bigint" ? value : BigInt(value));
63
- return import_general.Bytes.toHex(byteArray).toUpperCase();
64
- }
65
- function uInt16To8Chars(value) {
66
- const byteArray = new Uint8Array(4);
67
- const dataView = import_general.Bytes.dataViewOf(byteArray);
68
- dataView.setUint32(0, value);
69
- return import_general.Bytes.toHex(byteArray).toUpperCase();
70
- }
71
- function uInt16To4Chars(value) {
72
- const byteArray = new Uint8Array(2);
73
- const dataView = import_general.Bytes.dataViewOf(byteArray);
74
- dataView.setUint16(0, value);
75
- return import_general.Bytes.toHex(byteArray).toUpperCase();
76
- }
77
- const GenericMatterOpCertObject = (id, valueConverter) => (value) => [
78
- (0, import_general.DerObject)(`2b0601040182a27c01${id.toString(16).padStart(2, "0")}`, {
79
- value: (valueConverter ?? intTo16Chars)(value)
80
- })
81
- ];
82
- const GenericMatterAttCertObject = (id, valueConverter) => (value) => [
83
- (0, import_general.DerObject)(`2b0601040182a27c02${id.toString(16).padStart(2, "0")}`, {
84
- value: (valueConverter ?? intTo16Chars)(value)
85
- })
86
- ];
87
- const NodeId_Matter = GenericMatterOpCertObject(1);
88
- const FirmwareSigningId_Matter = GenericMatterOpCertObject(2);
89
- const IcacId_Matter = GenericMatterOpCertObject(3);
90
- const RcacId_Matter = GenericMatterOpCertObject(4);
91
- const FabricId_Matter = GenericMatterOpCertObject(5);
92
- const NocCat_Matter = GenericMatterOpCertObject(6, uInt16To8Chars);
93
- const VendorId_Matter = GenericMatterAttCertObject(1, uInt16To4Chars);
94
- const ProductId_Matter = GenericMatterAttCertObject(2, uInt16To4Chars);
95
- const AllowedSubjectAndIssuerMatterFields = {
96
- nodeId: (0, import_types.TlvOptionalField)(17, import_types.TlvNodeId),
97
- firmwareSigningId: (0, import_types.TlvOptionalField)(18, import_types.TlvUInt32),
98
- icacId: (0, import_types.TlvOptionalField)(19, import_types.TlvUInt64),
99
- rcacId: (0, import_types.TlvOptionalField)(20, import_types.TlvUInt64),
100
- fabricId: (0, import_types.TlvOptionalField)(21, import_types.TlvFabricId),
101
- caseAuthenticatedTags: (0, import_types.TlvOptionalRepeatedField)(22, import_types.TlvCaseAuthenticatedTag, { maxLength: 3 })
102
- };
103
- const TlvGenericMatterSubjectOrIssuerTaggedList = (matterFields) => {
104
- const fields = {
105
- // Standard DNs
106
- commonName: (0, import_types.TlvOptionalField)(1, import_types.TlvString),
107
- sureName: (0, import_types.TlvOptionalField)(2, import_types.TlvString),
108
- serialNum: (0, import_types.TlvOptionalField)(3, import_types.TlvString),
109
- countryName: (0, import_types.TlvOptionalField)(4, import_types.TlvString),
110
- localityName: (0, import_types.TlvOptionalField)(5, import_types.TlvString),
111
- stateOrProvinceName: (0, import_types.TlvOptionalField)(6, import_types.TlvString),
112
- orgName: (0, import_types.TlvOptionalField)(7, import_types.TlvString),
113
- orgUnitName: (0, import_types.TlvOptionalField)(8, import_types.TlvString),
114
- title: (0, import_types.TlvOptionalField)(9, import_types.TlvString),
115
- name: (0, import_types.TlvOptionalField)(10, import_types.TlvString),
116
- givenName: (0, import_types.TlvOptionalField)(11, import_types.TlvString),
117
- initials: (0, import_types.TlvOptionalField)(12, import_types.TlvString),
118
- genQualifier: (0, import_types.TlvOptionalField)(13, import_types.TlvString),
119
- dnQualifier: (0, import_types.TlvOptionalField)(14, import_types.TlvString),
120
- pseudonym: (0, import_types.TlvOptionalField)(15, import_types.TlvString),
121
- domainComponent: (0, import_types.TlvOptionalField)(16, import_types.TlvString),
122
- // Matter specific DNs
123
- ...matterFields,
124
- // Standard DNs when encoded as Printable String
125
- commonNamePs: (0, import_types.TlvOptionalField)(129, import_types.TlvString),
126
- sureNamePs: (0, import_types.TlvOptionalField)(130, import_types.TlvString),
127
- serialNumPs: (0, import_types.TlvOptionalField)(131, import_types.TlvString),
128
- countryNamePs: (0, import_types.TlvOptionalField)(132, import_types.TlvString),
129
- localityNamePs: (0, import_types.TlvOptionalField)(133, import_types.TlvString),
130
- stateOrProvinceNamePs: (0, import_types.TlvOptionalField)(134, import_types.TlvString),
131
- orgNamePs: (0, import_types.TlvOptionalField)(135, import_types.TlvString),
132
- orgUnitNamePs: (0, import_types.TlvOptionalField)(136, import_types.TlvString),
133
- titlePs: (0, import_types.TlvOptionalField)(137, import_types.TlvString),
134
- namePs: (0, import_types.TlvOptionalField)(138, import_types.TlvString),
135
- givenNamePs: (0, import_types.TlvOptionalField)(139, import_types.TlvString),
136
- initialsPs: (0, import_types.TlvOptionalField)(140, import_types.TlvString),
137
- genQualifierPs: (0, import_types.TlvOptionalField)(141, import_types.TlvString),
138
- dnQualifierPs: (0, import_types.TlvOptionalField)(142, import_types.TlvString),
139
- pseudonymPs: (0, import_types.TlvOptionalField)(143, import_types.TlvString)
140
- };
141
- return (0, import_types.TlvTaggedList)(fields);
142
- };
143
- const ExtensionKeyUsageBitmap = {
144
- digitalSignature: (0, import_types.BitFlag)(0),
145
- nonRepudiation: (0, import_types.BitFlag)(1),
146
- keyEncipherment: (0, import_types.BitFlag)(2),
147
- dataEncipherment: (0, import_types.BitFlag)(3),
148
- keyAgreement: (0, import_types.BitFlag)(4),
149
- keyCertSign: (0, import_types.BitFlag)(5),
150
- cRLSign: (0, import_types.BitFlag)(6),
151
- encipherOnly: (0, import_types.BitFlag)(7),
152
- decipherOnly: (0, import_types.BitFlag)(8)
153
- };
154
- const ExtensionKeyUsageSchema = (0, import_types.BitmapSchema)(ExtensionKeyUsageBitmap);
155
- const BaseMatterCertificate = (matterFields) => (0, import_types.TlvObjectWithMaxSize)(
156
- {
157
- serialNumber: (0, import_types.TlvField)(1, import_types.TlvByteString.bound({ maxLength: 20 })),
158
- signatureAlgorithm: (0, import_types.TlvField)(2, import_types.TlvUInt8),
159
- issuer: (0, import_types.TlvField)(
160
- 3,
161
- TlvGenericMatterSubjectOrIssuerTaggedList({
162
- ...AllowedSubjectAndIssuerMatterFields,
163
- ...matterFields?.issuer ?? {}
164
- })
165
- ),
166
- notBefore: (0, import_types.TlvField)(4, import_types.TlvUInt32),
167
- notAfter: (0, import_types.TlvField)(5, import_types.TlvUInt32),
168
- subject: (0, import_types.TlvField)(
169
- 6,
170
- TlvGenericMatterSubjectOrIssuerTaggedList({
171
- ...AllowedSubjectAndIssuerMatterFields,
172
- ...matterFields?.subject ?? {}
173
- })
174
- ),
175
- publicKeyAlgorithm: (0, import_types.TlvField)(7, import_types.TlvUInt8),
176
- ellipticCurveIdentifier: (0, import_types.TlvField)(8, import_types.TlvUInt8),
177
- ellipticCurvePublicKey: (0, import_types.TlvField)(9, import_types.TlvByteString),
178
- extensions: (0, import_types.TlvField)(
179
- 10,
180
- (0, import_types.TlvTaggedList)({
181
- basicConstraints: (0, import_types.TlvField)(
182
- 1,
183
- (0, import_types.TlvObject)({
184
- isCa: (0, import_types.TlvField)(1, import_types.TlvBoolean),
185
- pathLen: (0, import_types.TlvOptionalField)(2, import_types.TlvUInt8)
186
- })
187
- ),
188
- keyUsage: (0, import_types.TlvField)(2, (0, import_types.TlvBitmap)(import_types.TlvUInt16, ExtensionKeyUsageBitmap)),
189
- extendedKeyUsage: (0, import_types.TlvOptionalField)(3, (0, import_types.TlvArray)(import_types.TlvUInt8)),
190
- subjectKeyIdentifier: (0, import_types.TlvField)(4, import_types.TlvByteString.bound({ length: 20 })),
191
- authorityKeyIdentifier: (0, import_types.TlvField)(5, import_types.TlvByteString.bound({ length: 20 })),
192
- futureExtension: (0, import_types.TlvOptionalRepeatedField)(6, import_types.TlvByteString)
193
- })
194
- ),
195
- signature: (0, import_types.TlvField)(11, import_types.TlvByteString)
196
- },
197
- MAX_TLV_CERTIFICATE_SIZE
198
- );
199
- const TlvRootCertificate = BaseMatterCertificate({
200
- subject: {
201
- rcacId: (0, import_types.TlvField)(20, import_types.TlvUInt64),
202
- fabricId: (0, import_types.TlvOptionalField)(21, import_types.TlvFabricId)
203
- },
204
- issuer: AllowedSubjectAndIssuerMatterFields
205
- });
206
- const TlvOperationalCertificate = BaseMatterCertificate({
207
- subject: {
208
- nodeId: (0, import_types.TlvField)(17, import_types.TlvNodeId),
209
- fabricId: (0, import_types.TlvField)(21, import_types.TlvFabricId),
210
- caseAuthenticatedTags: (0, import_types.TlvOptionalRepeatedField)(22, import_types.TlvCaseAuthenticatedTag, { maxLength: 3 })
211
- },
212
- issuer: AllowedSubjectAndIssuerMatterFields
213
- });
214
- const TlvIntermediateCertificate = BaseMatterCertificate({
215
- subject: {
216
- icacId: (0, import_types.TlvField)(19, import_types.TlvUInt64),
217
- fabricId: (0, import_types.TlvOptionalField)(21, import_types.TlvFabricId)
218
- },
219
- issuer: AllowedSubjectAndIssuerMatterFields
220
- });
221
- const TlvBaseCertificate = BaseMatterCertificate();
222
- const TlvCertificationDeclaration = (0, import_types.TlvObject)({
223
- formatVersion: (0, import_types.TlvField)(0, import_types.TlvUInt16),
224
- vendorId: (0, import_types.TlvField)(1, import_types.TlvVendorId),
225
- produceIdArray: (0, import_types.TlvField)(2, (0, import_types.TlvArray)(import_types.TlvUInt16, { minLength: 1, maxLength: 100 })),
226
- deviceTypeId: (0, import_types.TlvField)(3, import_types.TlvUInt32),
227
- certificateId: (0, import_types.TlvField)(4, import_types.TlvString.bound({ length: 19 })),
228
- securityLevel: (0, import_types.TlvField)(5, import_types.TlvUInt8),
229
- securityInformation: (0, import_types.TlvField)(6, import_types.TlvUInt16),
230
- versionNumber: (0, import_types.TlvField)(7, import_types.TlvUInt16),
231
- certificationType: (0, import_types.TlvField)(8, import_types.TlvUInt8),
232
- dacOriginVendorId: (0, import_types.TlvOptionalField)(9, import_types.TlvVendorId),
233
- dacOriginProductId: (0, import_types.TlvOptionalField)(10, import_types.TlvUInt16),
234
- authorizedPaaList: (0, import_types.TlvOptionalField)(
235
- 11,
236
- (0, import_types.TlvArray)(import_types.TlvByteString.bound({ length: 20 }), { minLength: 1, maxLength: 10 })
237
- )
238
- });
239
- function subjectOrIssuerToAsn1(data) {
240
- const asn = {};
241
- Object.entries(data).forEach(([key, value]) => {
242
- if (value === void 0) {
243
- return;
244
- }
245
- switch (key) {
246
- case "commonName":
247
- asn.commonName = import_general.X520.CommonName(value);
248
- break;
249
- case "sureName":
250
- asn.sureName = import_general.X520.SurName(value);
251
- break;
252
- case "serialNum":
253
- asn.serialNum = import_general.X520.SerialNumber(value);
254
- break;
255
- case "countryName":
256
- asn.countryName = import_general.X520.CountryName(value);
257
- break;
258
- case "localityName":
259
- asn.localityName = import_general.X520.LocalityName(value);
260
- break;
261
- case "stateOrProvinceName":
262
- asn.stateOrProvinceName = import_general.X520.StateOrProvinceName(value);
263
- break;
264
- case "orgName":
265
- asn.orgName = import_general.X520.OrganisationName(value);
266
- break;
267
- case "orgUnitName":
268
- asn.orgUnitName = import_general.X520.OrganizationalUnitName(value);
269
- break;
270
- case "title":
271
- asn.title = import_general.X520.Title(value);
272
- break;
273
- case "name":
274
- asn.name = import_general.X520.Name(value);
275
- break;
276
- case "givenName":
277
- asn.givenName = import_general.X520.GivenName(value);
278
- break;
279
- case "initials":
280
- asn.initials = import_general.X520.Initials(value);
281
- break;
282
- case "genQualifier":
283
- asn.genQualifier = import_general.X520.GenerationQualifier(value);
284
- break;
285
- case "dnQualifier":
286
- asn.dnQualifier = import_general.X520.DnQualifier(value);
287
- break;
288
- case "pseudonym":
289
- asn.pseudonym = import_general.X520.Pseudonym(value);
290
- break;
291
- case "domainComponent":
292
- asn.domainComponent = import_general.X520.DomainComponent(value);
293
- break;
294
- case "nodeId":
295
- asn.nodeId = NodeId_Matter(value);
296
- break;
297
- case "firmwareSigningId":
298
- asn.firmwareSigningId = FirmwareSigningId_Matter(value);
299
- break;
300
- case "icacId":
301
- asn.icacId = IcacId_Matter(value);
302
- break;
303
- case "rcacId":
304
- asn.rcacId = RcacId_Matter(value);
305
- break;
306
- case "fabricId":
307
- asn.fabricId = FabricId_Matter(value);
308
- break;
309
- case "caseAuthenticatedTags":
310
- const caseAuthenticatedTags = value;
311
- import_types.CaseAuthenticatedTag.validateNocTagList(caseAuthenticatedTags);
312
- const cat0 = caseAuthenticatedTags[0];
313
- const cat1 = caseAuthenticatedTags[1];
314
- const cat2 = caseAuthenticatedTags[2];
315
- if (cat0 !== void 0) {
316
- asn.caseAuthenticatedTag0 = NocCat_Matter(cat0);
317
- }
318
- if (cat1 !== void 0) {
319
- asn.caseAuthenticatedTag1 = NocCat_Matter(cat1);
320
- }
321
- if (cat2 !== void 0) {
322
- asn.caseAuthenticatedTag2 = NocCat_Matter(cat2);
323
- }
324
- break;
325
- case "vendorId":
326
- asn.vendorId = VendorId_Matter(value);
327
- break;
328
- case "productId":
329
- asn.productId = ProductId_Matter(value);
330
- break;
331
- case "commonNamePs":
332
- asn.commonNamePs = import_general.X520.CommonName(value, true);
333
- break;
334
- case "sureNamePs":
335
- asn.sureNamePs = import_general.X520.SurName(value, true);
336
- break;
337
- case "serialNumPs":
338
- asn.serialNumPs = import_general.X520.SerialNumber(value, true);
339
- break;
340
- case "countryNamePs":
341
- asn.countryNamePs = import_general.X520.CountryName(value, true);
342
- break;
343
- case "localityNamePs":
344
- asn.localityNamePs = import_general.X520.LocalityName(value, true);
345
- break;
346
- case "stateOrProvinceNamePs":
347
- asn.stateOrProvinceNamePs = import_general.X520.StateOrProvinceName(value, true);
348
- break;
349
- case "orgNamePs":
350
- asn.orgNamePs = import_general.X520.OrganisationName(value, true);
351
- break;
352
- case "orgUnitNamePs":
353
- asn.orgUnitNamePs = import_general.X520.OrganizationalUnitName(value, true);
354
- break;
355
- case "titlePs":
356
- asn.titlePs = import_general.X520.Title(value, true);
357
- break;
358
- case "namePs":
359
- asn.namePs = import_general.X520.Name(value, true);
360
- break;
361
- case "givenNamePs":
362
- asn.givenNamePs = import_general.X520.GivenName(value, true);
363
- break;
364
- case "initialsPs":
365
- asn.initialsPs = import_general.X520.Initials(value, true);
366
- break;
367
- case "genQualifierPs":
368
- asn.genQualifierPs = import_general.X520.GenerationQualifier(value, true);
369
- break;
370
- case "dnQualifierPs":
371
- asn.dnQualifierPs = import_general.X520.DnQualifier(value, true);
372
- break;
373
- case "pseudonymPs":
374
- asn.pseudonymPs = import_general.X520.Pseudonym(value, true);
375
- break;
376
- }
377
- });
378
- return asn;
379
- }
380
- function extensionsToAsn1(extensions) {
381
- const asn = {};
382
- Object.entries(extensions).forEach(([key, value]) => {
383
- if (value === void 0) {
384
- return;
385
- }
386
- switch (key) {
387
- case "basicConstraints":
388
- asn.basicConstraints = import_general.X509.BasicConstraints(value);
389
- break;
390
- case "keyUsage":
391
- asn.keyUsage = import_general.X509.KeyUsage(
392
- ExtensionKeyUsageSchema.encode(value)
393
- );
394
- break;
395
- case "extendedKeyUsage":
396
- asn.extendedKeyUsage = import_general.X509.ExtendedKeyUsage(value);
397
- break;
398
- case "subjectKeyIdentifier":
399
- asn.subjectKeyIdentifier = import_general.X509.SubjectKeyIdentifier(value);
400
- break;
401
- case "authorityKeyIdentifier":
402
- asn.authorityKeyIdentifier = import_general.X509.AuthorityKeyIdentifier(value);
403
- break;
404
- case "futureExtension":
405
- asn.futureExtension = (0, import_general.RawBytes)(import_general.Bytes.concat(...value ?? []));
406
- break;
407
- }
408
- });
409
- return asn;
410
- }
411
- function genericBuildAsn1Structure({
412
- serialNumber,
413
- notBefore,
414
- notAfter,
415
- issuer,
416
- subject,
417
- ellipticCurvePublicKey,
418
- extensions
419
- }) {
420
- const {
421
- basicConstraints: { isCa, pathLen }
422
- } = extensions;
423
- if (!isCa && pathLen !== void 0) {
424
- throw new CertificateError("Path length must be undefined for non-CA certificates.");
425
- }
426
- return {
427
- version: (0, import_general.ContextTagged)(0, 2),
428
- // v3
429
- serialNumber: (0, import_general.DatatypeOverride)(import_general.DerType.Integer, serialNumber),
430
- signatureAlgorithm: import_general.X962.EcdsaWithSHA256,
431
- issuer: subjectOrIssuerToAsn1(issuer),
432
- validity: {
433
- notBefore: matterToJsDate(notBefore),
434
- notAfter: matterToJsDate(notAfter)
435
- },
436
- subject: subjectOrIssuerToAsn1(subject),
437
- publicKey: import_general.X962.PublicKeyEcPrime256v1(ellipticCurvePublicKey),
438
- extensions: (0, import_general.ContextTagged)(3, extensionsToAsn1(extensions))
439
- };
440
- }
441
- function genericCertToAsn1(cert) {
442
- const certBytes = import_general.DerCodec.encode(genericBuildAsn1Structure(cert));
443
- assertCertificateDerSize(certBytes);
444
- return certBytes;
445
- }
446
- function assertCertificateDerSize(certBytes) {
447
- if (certBytes.length > MAX_DER_CERTIFICATE_SIZE) {
448
- throw new import_general.ImplementationError(
449
- `Certificate to generate is too big: ${certBytes.length} bytes instead of max ${MAX_DER_CERTIFICATE_SIZE} bytes`
450
- );
451
- }
452
- }
453
- class CertificateManager {
454
- #crypto;
455
- constructor(crypto) {
456
- this.#crypto = crypto;
457
- }
458
- get crypto() {
459
- return this.#crypto;
460
- }
461
- rootCertToAsn1(cert) {
462
- const {
463
- extensions: {
464
- basicConstraints: { isCa }
465
- }
466
- } = cert;
467
- if (!isCa) {
468
- throw new CertificateError("Root certificate must be a CA.");
469
- }
470
- return genericCertToAsn1(cert);
471
- }
472
- intermediateCaCertToAsn1(cert) {
473
- const {
474
- extensions: {
475
- basicConstraints: { isCa }
476
- }
477
- } = cert;
478
- if (!isCa) {
479
- throw new CertificateError("Intermediate certificate must be a CA.");
480
- }
481
- return genericCertToAsn1(cert);
482
- }
483
- nodeOperationalCertToAsn1(cert) {
484
- const {
485
- issuer: { icacId, rcacId },
486
- extensions: {
487
- basicConstraints: { isCa }
488
- }
489
- } = cert;
490
- if (icacId === void 0 && rcacId === void 0) {
491
- throw new CertificateError("Issuer RCAC or ICAC ID must be defined for an operational certificate.");
492
- }
493
- if (isCa) {
494
- throw new CertificateError("Node operational certificate must not be a CA.");
495
- }
496
- return genericCertToAsn1(cert);
497
- }
498
- async deviceAttestationCertToAsn1(cert, key) {
499
- const certificate = genericBuildAsn1Structure(cert);
500
- const signature = await this.#crypto.signEcdsa(key, import_general.DerCodec.encode(certificate), "der");
501
- const certBytes = import_general.DerCodec.encode({
502
- certificate,
503
- signAlgorithm: import_general.X962.EcdsaWithSHA256,
504
- signature: (0, import_general.DerBitString)(signature)
505
- });
506
- assertCertificateDerSize(certBytes);
507
- return certBytes;
508
- }
509
- async productAttestationIntermediateCertToAsn1(cert, key) {
510
- const certificate = genericBuildAsn1Structure(cert);
511
- const signature = await this.#crypto.signEcdsa(key, import_general.DerCodec.encode(certificate), "der");
512
- const certBytes = import_general.DerCodec.encode({
513
- certificate,
514
- signAlgorithm: import_general.X962.EcdsaWithSHA256,
515
- signature: (0, import_general.DerBitString)(signature)
516
- });
517
- assertCertificateDerSize(certBytes);
518
- return certBytes;
519
- }
520
- async productAttestationAuthorityCertToAsn1(cert, key) {
521
- const certificate = genericBuildAsn1Structure(cert);
522
- const certBytes = import_general.DerCodec.encode({
523
- certificate,
524
- signAlgorithm: import_general.X962.EcdsaWithSHA256,
525
- signature: (0, import_general.DerBitString)(await this.#crypto.signEcdsa(key, import_general.DerCodec.encode(certificate), "der"))
526
- });
527
- assertCertificateDerSize(certBytes);
528
- return certBytes;
529
- }
530
- async certificationDeclarationToAsn1(eContent, subjectKeyIdentifier, privateKey) {
531
- const certificate = {
532
- version: 3,
533
- digestAlgorithm: [import_general.SHA256_CMS],
534
- encapContentInfo: import_general.Pkcs7.Data(eContent),
535
- signerInfo: [
536
- {
537
- version: 3,
538
- subjectKeyIdentifier: (0, import_general.ContextTaggedBytes)(0, subjectKeyIdentifier),
539
- digestAlgorithm: import_general.SHA256_CMS,
540
- signatureAlgorithm: import_general.X962.EcdsaWithSHA256,
541
- signature: await this.#crypto.signEcdsa(privateKey, eContent, "der")
542
- }
543
- ]
544
- };
545
- const certBytes = import_general.DerCodec.encode(import_general.Pkcs7.SignedData(certificate));
546
- assertCertificateDerSize(certBytes);
547
- return certBytes;
548
- }
549
- /**
550
- * Validate general requirements a Matter certificate fields must fulfill.
551
- * Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
552
- */
553
- validateGeneralCertificateFields(cert) {
554
- if (cert.serialNumber.length > 20)
555
- throw new CertificateError(
556
- `Serial number must not be longer then 20 octets. Current serial number has ${cert.serialNumber.length} octets.`
557
- );
558
- if (cert.signatureAlgorithm !== 1) {
559
- throw new CertificateError(`Unsupported signature algorithm: ${cert.signatureAlgorithm}`);
560
- }
561
- if (cert.publicKeyAlgorithm !== 1) {
562
- throw new CertificateError(`Unsupported public key algorithm: ${cert.publicKeyAlgorithm}`);
563
- }
564
- if (cert.ellipticCurveIdentifier !== 1) {
565
- throw new CertificateError(`Unsupported elliptic curve identifier: ${cert.ellipticCurveIdentifier}`);
566
- }
567
- if (Object.keys(cert.subject).length > 5) {
568
- throw new CertificateError(`Certificate subject must not contain more than 5 RDNs.`);
569
- }
570
- if (Object.keys(cert.issuer).length > 5) {
571
- throw new CertificateError(`Certificate issuer must not contain more than 5 RDNs.`);
572
- }
573
- if (cert.notBefore * 1e3 > import_general.Time.nowMs()) {
574
- logger.warn(`Certificate notBefore date is in the future: ${cert.notBefore * 1e3} vs ${import_general.Time.nowMs()}`);
575
- }
576
- }
577
- /**
578
- * Verify requirements a Matter Root certificate must fulfill.
579
- * Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
580
- */
581
- async verifyRootCertificate(rootCert) {
582
- this.validateGeneralCertificateFields(rootCert);
583
- if ("nodeId" in rootCert.subject) {
584
- throw new CertificateError(`Root certificate must not contain a nodeId.`);
585
- }
586
- if (rootCert.subject.fabricId !== void 0) {
587
- if (Array.isArray(rootCert.subject.fabricId)) {
588
- throw new CertificateError(
589
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(rootCert.subject.fabricId)}`
590
- );
591
- }
592
- if (rootCert.subject.fabricId === (0, import_types.FabricId)(0)) {
593
- throw new CertificateError(
594
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(rootCert.subject.fabricId)}`
595
- );
596
- }
597
- }
598
- if ("icacId" in rootCert.subject) {
599
- throw new CertificateError(`Root certificate must not contain an icacId.`);
600
- }
601
- if (rootCert.subject.rcacId === void 0 || Array.isArray(rootCert.subject.rcacId)) {
602
- throw new CertificateError(
603
- `Invalid rcacId in Root certificate: ${import_general.Diagnostic.json(rootCert.subject.rcacId)}`
604
- );
605
- }
606
- if ("caseAuthenticatedTags" in rootCert.subject) {
607
- throw new CertificateError(`Root certificate must not contain a caseAuthenticatedTags.`);
608
- }
609
- if (rootCert.extensions.basicConstraints.isCa !== true) {
610
- throw new CertificateError(`Root certificate must have isCa set to true.`);
611
- }
612
- if (ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 96 && ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 97) {
613
- throw new CertificateError(
614
- `Root certificate keyUsage must have keyCertSign and CRLSign and optionally digitalSignature set.`
615
- );
616
- }
617
- if (rootCert.extensions.extendedKeyUsage !== void 0) {
618
- throw new CertificateError(`Root certificate must not have extendedKeyUsage set.`);
619
- }
620
- if (rootCert.extensions.subjectKeyIdentifier === void 0) {
621
- throw new CertificateError(`Root certificate must have subjectKeyIdentifier set.`);
622
- }
623
- if (rootCert.extensions.subjectKeyIdentifier.length !== 20) {
624
- throw new CertificateError(`Root certificate subjectKeyIdentifier must be 160 bit.`);
625
- }
626
- if (rootCert.extensions.authorityKeyIdentifier === void 0) {
627
- throw new CertificateError(`Root certificate must have authorityKeyIdentifier set.`);
628
- }
629
- if (rootCert.extensions.authorityKeyIdentifier.length !== 20) {
630
- throw new CertificateError(`Root certificate authorityKeyIdentifier must be 160 bit.`);
631
- }
632
- if (!import_general.Bytes.areEqual(rootCert.extensions.authorityKeyIdentifier, rootCert.extensions.subjectKeyIdentifier)) {
633
- throw new CertificateError(
634
- `Root certificate authorityKeyIdentifier must be equal to subjectKeyIdentifier.`
635
- );
636
- }
637
- await this.#crypto.verifyEcdsa(
638
- (0, import_general.PublicKey)(rootCert.ellipticCurvePublicKey),
639
- this.rootCertToAsn1(rootCert),
640
- rootCert.signature
641
- );
642
- }
643
- /**
644
- * Verify requirements a Matter Node Operational certificate must fulfill.
645
- * Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
646
- */
647
- async verifyNodeOperationalCertificate(nocCert, rootCert, icaCert) {
648
- this.validateGeneralCertificateFields(nocCert);
649
- if (nocCert.subject.nodeId === void 0 || Array.isArray(nocCert.subject.nodeId)) {
650
- throw new CertificateError(`Invalid nodeId in NoC certificate: ${import_general.Diagnostic.json(nocCert.subject.nodeId)}`);
651
- }
652
- if (!import_types.NodeId.isOperationalNodeId(nocCert.subject.nodeId)) {
653
- throw new CertificateError(`Invalid nodeId in NoC certificate: ${import_general.Diagnostic.json(nocCert.subject.nodeId)}`);
654
- }
655
- if (nocCert.subject.fabricId === void 0 || Array.isArray(nocCert.subject.fabricId)) {
656
- throw new CertificateError(
657
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(nocCert.subject.fabricId)}`
658
- );
659
- }
660
- if (nocCert.subject.fabricId === (0, import_types.FabricId)(0)) {
661
- throw new CertificateError(
662
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(nocCert.subject.fabricId)}`
663
- );
664
- }
665
- if ("icacId" in nocCert.subject) {
666
- throw new CertificateError(`Noc certificate must not contain an icacId.`);
667
- }
668
- if ("rcacId" in nocCert.subject) {
669
- throw new CertificateError(`Noc certificate must not contain an rcacId.`);
670
- }
671
- if (nocCert.subject.caseAuthenticatedTags !== void 0) {
672
- import_types.CaseAuthenticatedTag.validateNocTagList(nocCert.subject.caseAuthenticatedTags);
673
- }
674
- if (rootCert.subject.fabricId !== void 0 && rootCert.subject.fabricId !== nocCert.subject.fabricId) {
675
- throw new CertificateError(
676
- `FabricId in NoC certificate does not match the fabricId in the parent certificate. ${import_general.Diagnostic.json(
677
- rootCert.subject.fabricId
678
- )} !== ${import_general.Diagnostic.json(nocCert.subject.fabricId)}`
679
- );
680
- }
681
- if (icaCert !== void 0 && icaCert.subject.fabricId !== void 0 && icaCert.subject.fabricId !== nocCert.subject.fabricId) {
682
- throw new CertificateError(
683
- `FabricId in NoC certificate does not match the fabricId in the parent certificate. ${import_general.Diagnostic.json(
684
- icaCert.subject.fabricId
685
- )} !== ${import_general.Diagnostic.json(nocCert.subject.fabricId)}`
686
- );
687
- }
688
- if (nocCert.extensions.basicConstraints.isCa) {
689
- throw new CertificateError(`Noc certificate must not have isCa set to true.`);
690
- }
691
- if (!nocCert.extensions.keyUsage.digitalSignature) {
692
- throw new CertificateError(`Noc certificate must have keyUsage set to digitalSignature.`);
693
- }
694
- if (nocCert.extensions.extendedKeyUsage === void 0 || !nocCert.extensions.extendedKeyUsage.includes(1) && !nocCert.extensions.extendedKeyUsage.includes(2)) {
695
- throw new CertificateError(
696
- `Noc certificate must have extendedKeyUsage with serverAuth and clientAuth: ${import_general.Diagnostic.json(nocCert.extensions.extendedKeyUsage)}`
697
- );
698
- }
699
- if (nocCert.extensions.subjectKeyIdentifier === void 0) {
700
- throw new CertificateError(`Noc certificate must have subjectKeyIdentifier set.`);
701
- }
702
- if (nocCert.extensions.subjectKeyIdentifier.length !== 20) {
703
- throw new CertificateError(`Noc certificate subjectKeyIdentifier must be 160 bit.`);
704
- }
705
- if (nocCert.extensions.authorityKeyIdentifier === void 0) {
706
- throw new CertificateError(`Noc certificate must have authorityKeyIdentifier set.`);
707
- }
708
- if (nocCert.extensions.authorityKeyIdentifier.length !== 20) {
709
- throw new CertificateError(`Noc certificate authorityKeyIdentifier must be 160 bit.`);
710
- }
711
- if (!import_general.Bytes.areEqual(
712
- nocCert.extensions.authorityKeyIdentifier,
713
- (icaCert ?? rootCert).extensions.subjectKeyIdentifier
714
- )) {
715
- throw new CertificateError(
716
- `Noc certificate authorityKeyIdentifier must be equal to Root/Ica subjectKeyIdentifier.`
717
- );
718
- }
719
- await this.#crypto.verifyEcdsa(
720
- (0, import_general.PublicKey)((icaCert ?? rootCert).ellipticCurvePublicKey),
721
- this.nodeOperationalCertToAsn1(nocCert),
722
- nocCert.signature
723
- );
724
- }
725
- /**
726
- * Verify requirements a Matter Intermediate CA certificate must fulfill.
727
- * Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
728
- */
729
- async verifyIntermediateCaCertificate(rootCert, icaCert) {
730
- this.validateGeneralCertificateFields(icaCert);
731
- if ("nodeId" in icaCert.subject) {
732
- throw new CertificateError(`Ica certificate must not contain a nodeId.`);
733
- }
734
- if (icaCert.subject.fabricId !== void 0) {
735
- if (Array.isArray(icaCert.subject.fabricId)) {
736
- throw new CertificateError(
737
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(icaCert.subject.fabricId)}`
738
- );
739
- }
740
- if (icaCert.subject.fabricId === (0, import_types.FabricId)(0)) {
741
- throw new CertificateError(
742
- `Invalid fabricId in NoC certificate: ${import_general.Diagnostic.json(icaCert.subject.fabricId)}`
743
- );
744
- }
745
- }
746
- if (icaCert.subject.icacId === void 0 || Array.isArray(icaCert.subject.icacId)) {
747
- throw new CertificateError(`Invalid icacId in Ica certificate: ${import_general.Diagnostic.json(icaCert.subject.icacId)}`);
748
- }
749
- if ("rcacId" in icaCert.subject) {
750
- throw new CertificateError(`Ica certificate must not contain an rcacId.`);
751
- }
752
- if ("caseAuthenticatedTags" in icaCert.subject) {
753
- throw new CertificateError(`Ica certificate must not contain a caseAuthenticatedTags.`);
754
- }
755
- if (rootCert.subject.fabricId !== void 0 && icaCert.subject.fabricId !== void 0 && rootCert.subject.fabricId !== icaCert.subject.fabricId) {
756
- throw new CertificateError(
757
- `FabricId in Ica certificate does not match the fabricId in the parent certificate. ${import_general.Diagnostic.json(
758
- rootCert.subject.fabricId
759
- )} !== ${import_general.Diagnostic.json(icaCert.subject.fabricId)}`
760
- );
761
- }
762
- if (rootCert.subject.rcacId !== icaCert.issuer.rcacId) {
763
- throw new CertificateError(
764
- `RcacId in Ica certificate does not match the rcacId in the parent certificate. ${import_general.Diagnostic.json(
765
- rootCert.subject.rcacId
766
- )} !== ${import_general.Diagnostic.json(icaCert.issuer.rcacId)}`
767
- );
768
- }
769
- if (!icaCert.extensions.basicConstraints.isCa) {
770
- throw new CertificateError(`Ica certificate must have isCa set to true.`);
771
- }
772
- if (ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 96 && ExtensionKeyUsageSchema.encode(rootCert.extensions.keyUsage) !== 97) {
773
- throw new CertificateError(
774
- `Ica certificate keyUsage must have keyCertSign and CRLSign and optionally digitalSignature set.`
775
- );
776
- }
777
- if (icaCert.extensions.extendedKeyUsage !== void 0) {
778
- throw new CertificateError(`Ica certificate must not have extendedKeyUsage set.`);
779
- }
780
- if (icaCert.extensions.subjectKeyIdentifier === void 0) {
781
- throw new CertificateError(`Ica certificate must have subjectKeyIdentifier set.`);
782
- }
783
- if (icaCert.extensions.subjectKeyIdentifier.length !== 20) {
784
- throw new CertificateError(`Ica certificate subjectKeyIdentifier must be 160 bit.`);
785
- }
786
- if (icaCert.extensions.authorityKeyIdentifier === void 0) {
787
- throw new CertificateError(`Ica certificate must have authorityKeyIdentifier set.`);
788
- }
789
- if (icaCert.extensions.authorityKeyIdentifier.length !== 20) {
790
- throw new CertificateError(`Ica certificate authorityKeyIdentifier must be 160 bit.`);
791
- }
792
- if (!import_general.Bytes.areEqual(icaCert.extensions.authorityKeyIdentifier, rootCert.extensions.subjectKeyIdentifier)) {
793
- throw new CertificateError(
794
- `Ica certificate authorityKeyIdentifier must be equal to root cert subjectKeyIdentifier.`
795
- );
796
- }
797
- await this.#crypto.verifyEcdsa(
798
- (0, import_general.PublicKey)(rootCert.ellipticCurvePublicKey),
799
- this.intermediateCaCertToAsn1(icaCert),
800
- icaCert.signature
801
- );
802
- }
803
- async createCertificateSigningRequest(key) {
804
- const request = {
805
- version: 0,
806
- subject: { organization: import_general.X520.OrganisationName("CSR") },
807
- publicKey: import_general.X962.PublicKeyEcPrime256v1(key.publicKey),
808
- endSignedBytes: (0, import_general.ContextTagged)(0)
809
- };
810
- return import_general.DerCodec.encode({
811
- request,
812
- signAlgorithm: import_general.X962.EcdsaWithSHA256,
813
- signature: (0, import_general.DerBitString)(await this.#crypto.signEcdsa(key, import_general.DerCodec.encode(request), "der"))
814
- });
815
- }
816
- async getPublicKeyFromCsr(csr) {
817
- const { [import_general.DerKey.Elements]: rootElements } = import_general.DerCodec.decode(csr);
818
- if (rootElements?.length !== 3) throw new CertificateError("Invalid CSR data");
819
- const [requestNode, signAlgorithmNode, signatureNode] = rootElements;
820
- const { [import_general.DerKey.Elements]: requestElements } = requestNode;
821
- if (requestElements?.length !== 4) throw new CertificateError("Invalid CSR data");
822
- const [versionNode, _subjectNode, publicKeyNode] = requestElements;
823
- const requestVersion = versionNode[import_general.DerKey.Bytes][0];
824
- if (requestVersion !== 0) throw new CertificateError(`Unsupported request version${requestVersion}`);
825
- const { [import_general.DerKey.Elements]: publicKeyElements } = publicKeyNode;
826
- if (publicKeyElements?.length !== 2) throw new CertificateError("Invalid CSR data");
827
- const [_publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
828
- const publicKey = publicKeyBytesNode[import_general.DerKey.Bytes];
829
- if (signAlgorithmNode[import_general.DerKey.Elements]?.[0]?.[import_general.DerKey.Bytes] === void 0 || !import_general.Bytes.areEqual(
830
- import_general.X962.EcdsaWithSHA256[import_general.DerKey.ObjectId][import_general.DerKey.Bytes],
831
- signAlgorithmNode[import_general.DerKey.Elements]?.[0]?.[import_general.DerKey.Bytes]
832
- ))
833
- throw new CertificateError("Unsupported signature type");
834
- await this.#crypto.verifyEcdsa(
835
- (0, import_general.PublicKey)(publicKey),
836
- import_general.DerCodec.encode(requestNode),
837
- signatureNode[import_general.DerKey.Bytes],
838
- "der"
839
- );
840
- return publicKey;
841
- }
842
- }
843
- //# sourceMappingURL=CertificateManager.js.map