@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.
- package/dist/cjs/certificate/AttestationCertificateManager.d.ts.map +1 -1
- package/dist/cjs/certificate/AttestationCertificateManager.js +26 -22
- package/dist/cjs/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.d.ts +1 -2
- package/dist/cjs/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.js +22 -29
- package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
- package/dist/cjs/certificate/DeviceCertification.d.ts.map +1 -1
- package/dist/cjs/certificate/DeviceCertification.js +2 -6
- package/dist/cjs/certificate/DeviceCertification.js.map +1 -1
- package/dist/cjs/certificate/index.d.ts +7 -2
- package/dist/cjs/certificate/index.d.ts.map +1 -1
- package/dist/cjs/certificate/index.js +14 -2
- package/dist/cjs/certificate/index.js.map +1 -1
- package/dist/cjs/certificate/kinds/AttestationCertificates.d.ts +34 -0
- package/dist/cjs/certificate/kinds/AttestationCertificates.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/AttestationCertificates.js +64 -0
- package/dist/cjs/certificate/kinds/AttestationCertificates.js.map +6 -0
- package/dist/cjs/certificate/kinds/CertificationDeclaration.d.ts +23 -0
- package/dist/cjs/certificate/kinds/CertificationDeclaration.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/CertificationDeclaration.js +86 -0
- package/dist/cjs/certificate/kinds/CertificationDeclaration.js.map +6 -0
- package/dist/cjs/certificate/kinds/Icac.d.ts +29 -0
- package/dist/cjs/certificate/kinds/Icac.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/Icac.js +138 -0
- package/dist/cjs/certificate/kinds/Icac.js.map +6 -0
- package/dist/cjs/certificate/kinds/Noc.d.ts +27 -0
- package/dist/cjs/certificate/kinds/Noc.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/Noc.js +148 -0
- package/dist/cjs/certificate/kinds/Noc.js.map +6 -0
- package/dist/cjs/certificate/kinds/OperationalBase.d.ts +24 -0
- package/dist/cjs/certificate/kinds/OperationalBase.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/OperationalBase.js +68 -0
- package/dist/cjs/certificate/kinds/OperationalBase.js.map +6 -0
- package/dist/cjs/certificate/kinds/Rcac.d.ts +25 -0
- package/dist/cjs/certificate/kinds/Rcac.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/Rcac.js +119 -0
- package/dist/cjs/certificate/kinds/Rcac.js.map +6 -0
- package/dist/cjs/certificate/kinds/X509Base.d.ts +92 -0
- package/dist/cjs/certificate/kinds/X509Base.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/X509Base.js +344 -0
- package/dist/cjs/certificate/kinds/X509Base.js.map +6 -0
- package/dist/cjs/certificate/kinds/common.d.ts +18 -0
- package/dist/cjs/certificate/kinds/common.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/common.js +42 -0
- package/dist/cjs/certificate/kinds/common.js.map +6 -0
- package/dist/cjs/certificate/kinds/definitions/asn.d.ts +25 -0
- package/dist/cjs/certificate/kinds/definitions/asn.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/definitions/asn.js +83 -0
- package/dist/cjs/certificate/kinds/definitions/asn.js.map +6 -0
- package/dist/cjs/certificate/kinds/definitions/attestation.d.ts +44 -0
- package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/definitions/attestation.js +22 -0
- package/dist/cjs/certificate/kinds/definitions/attestation.js.map +6 -0
- package/dist/cjs/certificate/kinds/definitions/base.d.ts +52 -0
- package/dist/cjs/certificate/kinds/definitions/base.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/definitions/base.js +43 -0
- package/dist/cjs/certificate/kinds/definitions/base.js.map +6 -0
- package/dist/cjs/certificate/kinds/definitions/certification-declaration.d.ts +18 -0
- package/dist/cjs/certificate/kinds/definitions/certification-declaration.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/definitions/certification-declaration.js +50 -0
- package/dist/cjs/certificate/kinds/definitions/certification-declaration.js.map +6 -0
- package/dist/cjs/certificate/kinds/definitions/operational.d.ts +368 -0
- package/dist/cjs/certificate/kinds/definitions/operational.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/definitions/operational.js +149 -0
- package/dist/cjs/certificate/kinds/definitions/operational.js.map +6 -0
- package/dist/cjs/certificate/kinds/index.d.ts +12 -0
- package/dist/cjs/certificate/kinds/index.d.ts.map +1 -0
- package/dist/cjs/certificate/kinds/index.js +29 -0
- package/dist/cjs/certificate/kinds/index.js.map +6 -0
- package/dist/cjs/fabric/Fabric.d.ts +1 -2
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +28 -31
- package/dist/cjs/fabric/Fabric.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +2 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +3 -3
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +2 -2
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/esm/certificate/AttestationCertificateManager.d.ts.map +1 -1
- package/dist/esm/certificate/AttestationCertificateManager.js +20 -16
- package/dist/esm/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.d.ts +1 -2
- package/dist/esm/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.js +18 -30
- package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
- package/dist/esm/certificate/DeviceCertification.d.ts.map +1 -1
- package/dist/esm/certificate/DeviceCertification.js +2 -6
- package/dist/esm/certificate/DeviceCertification.js.map +1 -1
- package/dist/esm/certificate/index.d.ts +7 -2
- package/dist/esm/certificate/index.d.ts.map +1 -1
- package/dist/esm/certificate/index.js +10 -2
- package/dist/esm/certificate/index.js.map +1 -1
- package/dist/esm/certificate/kinds/AttestationCertificates.d.ts +34 -0
- package/dist/esm/certificate/kinds/AttestationCertificates.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/AttestationCertificates.js +44 -0
- package/dist/esm/certificate/kinds/AttestationCertificates.js.map +6 -0
- package/dist/esm/certificate/kinds/CertificationDeclaration.d.ts +23 -0
- package/dist/esm/certificate/kinds/CertificationDeclaration.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/CertificationDeclaration.js +66 -0
- package/dist/esm/certificate/kinds/CertificationDeclaration.js.map +6 -0
- package/dist/esm/certificate/kinds/Icac.d.ts +29 -0
- package/dist/esm/certificate/kinds/Icac.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/Icac.js +118 -0
- package/dist/esm/certificate/kinds/Icac.js.map +6 -0
- package/dist/esm/certificate/kinds/Noc.d.ts +27 -0
- package/dist/esm/certificate/kinds/Noc.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/Noc.js +128 -0
- package/dist/esm/certificate/kinds/Noc.js.map +6 -0
- package/dist/esm/certificate/kinds/OperationalBase.d.ts +24 -0
- package/dist/esm/certificate/kinds/OperationalBase.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/OperationalBase.js +48 -0
- package/dist/esm/certificate/kinds/OperationalBase.js.map +6 -0
- package/dist/esm/certificate/kinds/Rcac.d.ts +25 -0
- package/dist/esm/certificate/kinds/Rcac.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/Rcac.js +99 -0
- package/dist/esm/certificate/kinds/Rcac.js.map +6 -0
- package/dist/esm/certificate/kinds/X509Base.d.ts +92 -0
- package/dist/esm/certificate/kinds/X509Base.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/X509Base.js +347 -0
- package/dist/esm/certificate/kinds/X509Base.js.map +6 -0
- package/dist/esm/certificate/kinds/common.d.ts +18 -0
- package/dist/esm/certificate/kinds/common.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/common.js +22 -0
- package/dist/esm/certificate/kinds/common.js.map +6 -0
- package/dist/esm/certificate/kinds/definitions/asn.d.ts +25 -0
- package/dist/esm/certificate/kinds/definitions/asn.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/definitions/asn.js +63 -0
- package/dist/esm/certificate/kinds/definitions/asn.js.map +6 -0
- package/dist/esm/certificate/kinds/definitions/attestation.d.ts +44 -0
- package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/definitions/attestation.js +6 -0
- package/dist/esm/certificate/kinds/definitions/attestation.js.map +6 -0
- package/dist/esm/certificate/kinds/definitions/base.d.ts +52 -0
- package/dist/esm/certificate/kinds/definitions/base.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/definitions/base.js +23 -0
- package/dist/esm/certificate/kinds/definitions/base.js.map +6 -0
- package/dist/esm/certificate/kinds/definitions/certification-declaration.d.ts +18 -0
- package/dist/esm/certificate/kinds/definitions/certification-declaration.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/definitions/certification-declaration.js +41 -0
- package/dist/esm/certificate/kinds/definitions/certification-declaration.js.map +6 -0
- package/dist/esm/certificate/kinds/definitions/operational.d.ts +368 -0
- package/dist/esm/certificate/kinds/definitions/operational.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/definitions/operational.js +148 -0
- package/dist/esm/certificate/kinds/definitions/operational.js.map +6 -0
- package/dist/esm/certificate/kinds/index.d.ts +12 -0
- package/dist/esm/certificate/kinds/index.d.ts.map +1 -0
- package/dist/esm/certificate/kinds/index.js +12 -0
- package/dist/esm/certificate/kinds/index.js.map +6 -0
- package/dist/esm/fabric/Fabric.d.ts +1 -2
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +28 -36
- package/dist/esm/fabric/Fabric.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +2 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +3 -3
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
- package/dist/esm/session/case/CaseServer.js +2 -2
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/certificate/AttestationCertificateManager.ts +20 -16
- package/src/certificate/CertificateAuthority.ts +18 -35
- package/src/certificate/DeviceCertification.ts +2 -6
- package/src/certificate/index.ts +7 -2
- package/src/certificate/kinds/AttestationCertificates.ts +48 -0
- package/src/certificate/kinds/CertificationDeclaration.ts +91 -0
- package/src/certificate/kinds/Icac.ts +156 -0
- package/src/certificate/kinds/Noc.ts +164 -0
- package/src/certificate/kinds/OperationalBase.ts +72 -0
- package/src/certificate/kinds/Rcac.ts +126 -0
- package/src/certificate/kinds/X509Base.ts +380 -0
- package/src/certificate/kinds/common.ts +24 -0
- package/src/certificate/kinds/definitions/asn.ts +97 -0
- package/src/certificate/kinds/definitions/attestation.ts +46 -0
- package/src/certificate/kinds/definitions/base.ts +43 -0
- package/src/certificate/kinds/definitions/certification-declaration.ts +38 -0
- package/src/certificate/kinds/definitions/operational.ts +179 -0
- package/src/certificate/kinds/index.ts +12 -0
- package/src/fabric/Fabric.ts +28 -40
- package/src/peer/ControllerCommissioningFlow.ts +2 -1
- package/src/session/case/CaseClient.ts +3 -3
- package/src/session/case/CaseServer.ts +2 -2
- package/dist/cjs/certificate/CertificateManager.d.ts +0 -578
- package/dist/cjs/certificate/CertificateManager.d.ts.map +0 -1
- package/dist/cjs/certificate/CertificateManager.js +0 -843
- package/dist/cjs/certificate/CertificateManager.js.map +0 -6
- package/dist/cjs/certificate/CertificationDeclarationManager.d.ts +0 -11
- package/dist/cjs/certificate/CertificationDeclarationManager.d.ts.map +0 -1
- package/dist/cjs/certificate/CertificationDeclarationManager.js +0 -54
- package/dist/cjs/certificate/CertificationDeclarationManager.js.map +0 -6
- package/dist/esm/certificate/CertificateManager.d.ts +0 -578
- package/dist/esm/certificate/CertificateManager.d.ts.map +0 -1
- package/dist/esm/certificate/CertificateManager.js +0 -870
- package/dist/esm/certificate/CertificateManager.js.map +0 -6
- package/dist/esm/certificate/CertificationDeclarationManager.d.ts +0 -11
- package/dist/esm/certificate/CertificationDeclarationManager.d.ts.map +0 -1
- package/dist/esm/certificate/CertificationDeclarationManager.js +0 -34
- package/dist/esm/certificate/CertificationDeclarationManager.js.map +0 -6
- package/src/certificate/CertificateManager.ts +0 -1176
- package/src/certificate/CertificationDeclarationManager.ts +0 -52
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { BinaryKeyPair, Construction, Crypto, Environment, Environmental, StorageContext } from "#general";
|
|
7
7
|
import { CaseAuthenticatedTag, FabricId, NodeId } from "#types";
|
|
8
|
-
import { CertificateManager } from "./CertificateManager.js";
|
|
9
8
|
/**
|
|
10
9
|
* Manages the root key pair for a fabric owned by a local node.
|
|
11
10
|
* TODO: Add support for (optional) ICACs
|
|
12
11
|
*/
|
|
13
12
|
export declare class CertificateAuthority {
|
|
14
13
|
#private;
|
|
15
|
-
get
|
|
14
|
+
get crypto(): Crypto;
|
|
16
15
|
get construction(): Construction<CertificateAuthority>;
|
|
17
16
|
static create(crypto: Crypto, options?: StorageContext | CertificateAuthority.Configuration): Promise<CertificateAuthority>;
|
|
18
17
|
constructor(crypto: Crypto, options?: StorageContext | CertificateAuthority.Configuration);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CertificateAuthority.d.ts","sourceRoot":"","sources":["../../../src/certificate/CertificateAuthority.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,aAAa,EAEb,YAAY,EACZ,MAAM,EACN,WAAW,EACX,aAAa,EAIb,cAAc,EAKjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"CertificateAuthority.d.ts","sourceRoot":"","sources":["../../../src/certificate/CertificateAuthority.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,aAAa,EAEb,YAAY,EACZ,MAAM,EACN,WAAW,EACX,aAAa,EAIb,cAAc,EAKjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOhE;;;GAGG;AACH,qBAAa,oBAAoB;;IAS7B,IAAI,MAAM,WAET;IAED,IAAI,YAAY,uCAEf;WAEY,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,oBAAoB,CAAC,aAAa;gBAIrF,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,oBAAoB,CAAC,aAAa;IAwCzF,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAO9C,IAAI,QAAQ,gCAEX;IAED,IAAI,MAAM,IAAI,oBAAoB,CAAC,aAAa,CAQ/C;IA4BK,WAAW,CACb,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,qBAAqB,CAAC,EAAE,oBAAoB,EAAE;CAyCrD;AAED,yBAAiB,oBAAoB,CAAC;IAClC,KAAY,aAAa,GAAG;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,aAAa,CAAC;QAC3B,iBAAiB,EAAE,UAAU,CAAC;QAC9B,aAAa,EAAE,UAAU,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACL"}
|
|
@@ -17,23 +17,20 @@ import {
|
|
|
17
17
|
asyncNew,
|
|
18
18
|
toHex
|
|
19
19
|
} from "#general";
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
TlvRootCertificate,
|
|
24
|
-
jsToMatterDate
|
|
25
|
-
} from "./CertificateManager.js";
|
|
20
|
+
import { jsToMatterDate } from "./kinds/definitions/asn.js";
|
|
21
|
+
import { Noc } from "./kinds/Noc.js";
|
|
22
|
+
import { Rcac } from "./kinds/Rcac.js";
|
|
26
23
|
const logger = Logger.get("CertificateAuthority");
|
|
27
24
|
class CertificateAuthority {
|
|
28
|
-
#
|
|
25
|
+
#crypto;
|
|
29
26
|
#rootCertId = BigInt(0);
|
|
30
27
|
#rootKeyPair;
|
|
31
28
|
#rootKeyIdentifier;
|
|
32
29
|
#rootCertBytes;
|
|
33
30
|
#nextCertificateId = BigInt(1);
|
|
34
31
|
#construction;
|
|
35
|
-
get
|
|
36
|
-
return this.#
|
|
32
|
+
get crypto() {
|
|
33
|
+
return this.#crypto;
|
|
37
34
|
}
|
|
38
35
|
get construction() {
|
|
39
36
|
return this.#construction;
|
|
@@ -42,14 +39,11 @@ class CertificateAuthority {
|
|
|
42
39
|
return asyncNew(CertificateAuthority, crypto, options);
|
|
43
40
|
}
|
|
44
41
|
constructor(crypto, options) {
|
|
45
|
-
this.#
|
|
42
|
+
this.#crypto = crypto;
|
|
46
43
|
this.#construction = Construction(this, async () => {
|
|
47
44
|
const certValues = options instanceof StorageContext ? await options.values() : options ?? {};
|
|
48
|
-
this.#rootKeyPair = await this.#
|
|
49
|
-
this.#rootKeyIdentifier = (await this.#
|
|
50
|
-
0,
|
|
51
|
-
20
|
|
52
|
-
);
|
|
45
|
+
this.#rootKeyPair = await this.#crypto.createKeyPair();
|
|
46
|
+
this.#rootKeyIdentifier = (await this.#crypto.computeSha256(this.#rootKeyPair.publicKey)).slice(0, 20);
|
|
53
47
|
this.#rootCertBytes = await this.#generateRootCert();
|
|
54
48
|
if ((typeof certValues.rootCertId === "number" || typeof certValues.rootCertId === "bigint") && (ArrayBuffer.isView(certValues.rootKeyPair) || typeof certValues.rootKeyPair === "object") && ArrayBuffer.isView(certValues.rootKeyIdentifier) && ArrayBuffer.isView(certValues.rootCertBytes) && (typeof certValues.nextCertificateId === "number" || typeof certValues.nextCertificateId === "bigint")) {
|
|
55
49
|
this.#rootCertId = BigInt(certValues.rootCertId);
|
|
@@ -92,7 +86,7 @@ class CertificateAuthority {
|
|
|
92
86
|
}
|
|
93
87
|
async #generateRootCert() {
|
|
94
88
|
const now = Time.get().now();
|
|
95
|
-
const
|
|
89
|
+
const cert = new Rcac({
|
|
96
90
|
serialNumber: Bytes.fromHex(toHex(this.#rootCertId)),
|
|
97
91
|
signatureAlgorithm: 1,
|
|
98
92
|
publicKeyAlgorithm: 1,
|
|
@@ -111,17 +105,14 @@ class CertificateAuthority {
|
|
|
111
105
|
subjectKeyIdentifier: this.#initializedRootKeyIdentifier,
|
|
112
106
|
authorityKeyIdentifier: this.#initializedRootKeyIdentifier
|
|
113
107
|
}
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this.#certs.rootCertToAsn1(unsignedCertificate)
|
|
118
|
-
);
|
|
119
|
-
return TlvRootCertificate.encode({ ...unsignedCertificate, signature });
|
|
108
|
+
});
|
|
109
|
+
await cert.sign(this.#crypto, this.#initializedRootKeyPair);
|
|
110
|
+
return cert.asSignedTlv();
|
|
120
111
|
}
|
|
121
112
|
async generateNoc(publicKey, fabricId, nodeId, caseAuthenticatedTags) {
|
|
122
113
|
const now = Time.get().now();
|
|
123
114
|
const certId = this.#nextCertificateId++;
|
|
124
|
-
const
|
|
115
|
+
const cert = new Noc({
|
|
125
116
|
serialNumber: Bytes.fromHex(toHex(certId)),
|
|
126
117
|
signatureAlgorithm: 1,
|
|
127
118
|
publicKeyAlgorithm: 1,
|
|
@@ -137,15 +128,12 @@ class CertificateAuthority {
|
|
|
137
128
|
digitalSignature: true
|
|
138
129
|
},
|
|
139
130
|
extendedKeyUsage: [2, 1],
|
|
140
|
-
subjectKeyIdentifier: (await this.#
|
|
131
|
+
subjectKeyIdentifier: (await this.#crypto.computeSha256(publicKey)).slice(0, 20),
|
|
141
132
|
authorityKeyIdentifier: this.#initializedRootKeyIdentifier
|
|
142
133
|
}
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.#certs.nodeOperationalCertToAsn1(unsignedCertificate)
|
|
147
|
-
);
|
|
148
|
-
return TlvOperationalCertificate.encode({ ...unsignedCertificate, signature });
|
|
134
|
+
});
|
|
135
|
+
await cert.sign(this.#crypto, this.#initializedRootKeyPair);
|
|
136
|
+
return cert.asSignedTlv();
|
|
149
137
|
}
|
|
150
138
|
get #initializedRootKeyPair() {
|
|
151
139
|
if (this.#rootKeyPair === void 0) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/certificate/CertificateAuthority.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EAEI;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAEP
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceCertification.d.ts","sourceRoot":"","sources":["../../../src/certificate/DeviceCertification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"DeviceCertification.d.ts","sourceRoot":"","sources":["../../../src/certificate/DeviceCertification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAsC,UAAU,EAAE,MAAM,UAAU,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAG5C;;GAEG;AACH,qBAAa,mBAAmB;;IAQ5B,IAAI,YAAY,sCAEf;IAED,IAAI,WAAW,gCAEd;IAED,IAAI,uBAAuB,gCAE1B;IAED,IAAI,WAAW,gCAEd;gBAEW,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAoC3F,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU;CA6BpD;AAED,yBAAiB,mBAAmB,CAAC;IACjC,UAAiB,aAAa;QAC1B,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;QACpC,WAAW,EAAE,UAAU,CAAC;QACxB,uBAAuB,EAAE,UAAU,CAAC;QACpC,WAAW,EAAE,UAAU,CAAC;KAC3B;IAED,KAAY,UAAU,GAAG,aAAa,GAAG,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;CAC3E"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { CertificationDeclaration } from "#certificate/kinds/CertificationDeclaration.js";
|
|
6
7
|
import { Construction, ImplementationError, InternalError, PrivateKey } from "#general";
|
|
7
8
|
import { AttestationCertificateManager } from "./AttestationCertificateManager.js";
|
|
8
|
-
import { CertificationDeclarationManager } from "./CertificationDeclarationManager.js";
|
|
9
9
|
class DeviceCertification {
|
|
10
10
|
#crypto;
|
|
11
11
|
#privateKey;
|
|
@@ -43,11 +43,7 @@ class DeviceCertification {
|
|
|
43
43
|
privateKey: PrivateKey(dacKeyPair.privateKey),
|
|
44
44
|
certificate: dac,
|
|
45
45
|
intermediateCertificate: await paa.getPAICert(),
|
|
46
|
-
declaration: await
|
|
47
|
-
crypto,
|
|
48
|
-
product.vendorId,
|
|
49
|
-
product.productId
|
|
50
|
-
)
|
|
46
|
+
declaration: await CertificationDeclaration.generate(crypto, product.vendorId, product.productId)
|
|
51
47
|
};
|
|
52
48
|
};
|
|
53
49
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/certificate/DeviceCertification.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAsB,qBAAqB,eAAe,kBAAkB;AAGrF,SAAS,qCAAqC;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,gCAAgC;AACzC,SAAS,cAAsB,qBAAqB,eAAe,kBAAkB;AAGrF,SAAS,qCAAqC;AAKvC,MAAM,oBAAoB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACS;AAAA,EAET,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACrC;AAAA,EAEA,IAAI,0BAA0B;AAC1B,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACrC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACrC;AAAA,EAEA,YAAY,QAAgB,QAAyC,SAA8B;AAC/F,SAAK,UAAU;AACf,QAAI;AACJ,QAAI,OAAO,WAAW,YAAY;AAC9B,uBAAiB;AAAA,IACrB,WAAW,QAAQ;AACf,uBAAiB,MAAM;AAAA,IAC3B,OAAO;AACH,uBAAiB,YAAY;AACzB,YAAI,YAAY,QAAW;AACvB,gBAAM,IAAI,oBAAoB,kEAAkE;AAAA,QACpG;AAEA,cAAM,MAAM,MAAM,8BAA8B,OAAO,QAAQ,QAAQ,QAAQ;AAC/E,cAAM,EAAE,SAAS,YAAY,IAAI,IAAI,MAAM,IAAI,UAAU,QAAQ,SAAS;AAE1E,eAAO;AAAA,UACH,YAAY,WAAW,WAAW,UAAU;AAAA,UAC5C,aAAa;AAAA,UACb,yBAAyB,MAAM,IAAI,WAAW;AAAA,UAC9C,aAAa,MAAM,yBAAyB,SAAS,QAAQ,QAAQ,UAAU,QAAQ,SAAS;AAAA,QACpG;AAAA,MACJ;AAAA,IACJ;AAEA,SAAK,gBAAgB,aAAa,MAAM,YAAY;AAChD,YAAMA,UAAS,MAAM,eAAe;AAEpC,WAAK,cACDA,QAAO,sBAAsB,aAAa,WAAWA,QAAO,UAAU,IAAIA,QAAO;AACrF,WAAK,eAAeA,QAAO;AAC3B,WAAK,2BAA2BA,QAAO;AACvC,WAAK,eAAeA,QAAO;AAAA,IAC/B,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,KAAK,SAAsB,MAAkB;AAC/C,UAAM,EAAE,WAAW,IAAI,KAAK,mBAAmB;AAC/C,UAAM,YAAY,MAAM,KAAK,QAAQ,UAAU,YAAY,CAAC,MAAM,QAAQ,uBAAuB,CAAC;AAClG,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB;AACjB,SAAK,cAAc,OAAO;AAC1B,QACI,KAAK,iBAAiB,UACtB,KAAK,6BAA6B,UAClC,KAAK,iBAAiB,UACtB,KAAK,gBAAgB,QACvB;AACE,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,MACH,aAAa,KAAK;AAAA,MAClB,yBAAyB,KAAK;AAAA,MAC9B,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,IACrB;AAAA,EACJ;AACJ;",
|
|
5
5
|
"names": ["config"]
|
|
6
6
|
}
|
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export * from "./AttestationCertificateManager.js";
|
|
7
7
|
export * from "./CertificateAuthority.js";
|
|
8
|
-
export * from "./CertificateManager.js";
|
|
9
|
-
export * from "./CertificationDeclarationManager.js";
|
|
10
8
|
export * from "./ChipPAAuthorities.js";
|
|
11
9
|
export * from "./DeviceCertification.js";
|
|
10
|
+
export * from "./kinds/AttestationCertificates.js";
|
|
11
|
+
export * from "./kinds/CertificationDeclaration.js";
|
|
12
|
+
export { CertificateError } from "./kinds/common.js";
|
|
13
|
+
export * from "./kinds/Icac.js";
|
|
14
|
+
export * from "./kinds/Noc.js";
|
|
15
|
+
export * from "./kinds/Rcac.js";
|
|
16
|
+
export * from "./kinds/X509Base.js";
|
|
12
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/certificate/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/certificate/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -5,8 +5,16 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export * from "./AttestationCertificateManager.js";
|
|
7
7
|
export * from "./CertificateAuthority.js";
|
|
8
|
-
export * from "./CertificateManager.js";
|
|
9
|
-
export * from "./CertificationDeclarationManager.js";
|
|
10
8
|
export * from "./ChipPAAuthorities.js";
|
|
11
9
|
export * from "./DeviceCertification.js";
|
|
10
|
+
export * from "./kinds/AttestationCertificates.js";
|
|
11
|
+
export * from "./kinds/CertificationDeclaration.js";
|
|
12
|
+
import { CertificateError } from "./kinds/common.js";
|
|
13
|
+
export * from "./kinds/Icac.js";
|
|
14
|
+
export * from "./kinds/Noc.js";
|
|
15
|
+
export * from "./kinds/Rcac.js";
|
|
16
|
+
export * from "./kinds/X509Base.js";
|
|
17
|
+
export {
|
|
18
|
+
CertificateError
|
|
19
|
+
};
|
|
12
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/certificate/index.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,wBAAwB;AACjC,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Crypto } from "#general";
|
|
7
|
+
import { AttestationCertificate } from "./definitions/attestation.js";
|
|
8
|
+
import { X509Certificate } from "./definitions/base.js";
|
|
9
|
+
import { X509Base } from "./X509Base.js";
|
|
10
|
+
/**
|
|
11
|
+
* Base class for Attestation Certificates (PAA, PAI, DAC).
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class AttestationBaseCertificate<CT extends X509Certificate> extends X509Base<CT> {
|
|
14
|
+
/**
|
|
15
|
+
* Sign the certificate using the provided crypto and key.
|
|
16
|
+
* If the certificate is already signed, it throws a CertificateError.
|
|
17
|
+
*/
|
|
18
|
+
sign(crypto: Crypto, key: JsonWebKey): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the signed certificate in ASN.1 DER format.
|
|
21
|
+
* If the certificate is not signed, it throws a CertificateError.
|
|
22
|
+
*/
|
|
23
|
+
asSignedAsn1(): Uint8Array<ArrayBufferLike>;
|
|
24
|
+
}
|
|
25
|
+
/** PAA (Product Attestation Authority) Certificate. */
|
|
26
|
+
export declare class Paa extends AttestationBaseCertificate<AttestationCertificate.Paa> {
|
|
27
|
+
}
|
|
28
|
+
/** PAI (Product Attestation Intermediate) Certificate. */
|
|
29
|
+
export declare class Pai extends AttestationBaseCertificate<AttestationCertificate.Pai> {
|
|
30
|
+
}
|
|
31
|
+
/** DAC (Device Attestation Certificate) Certificate. */
|
|
32
|
+
export declare class Dac extends AttestationBaseCertificate<AttestationCertificate.Dac> {
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=AttestationCertificates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttestationCertificates.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/AttestationCertificates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAgC,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,8BAAsB,0BAA0B,CAAC,EAAE,SAAS,eAAe,CAAE,SAAQ,QAAQ,CAAC,EAAE,CAAC;IAC7F;;;OAGG;IACY,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAInD;;;OAGG;IACH,YAAY,IAAI,UAAU,CAAC,eAAe,CAAC;CAU9C;AAED,uDAAuD;AACvD,qBAAa,GAAI,SAAQ,0BAA0B,CAAC,sBAAsB,CAAC,GAAG,CAAC;CAAG;AAElF,0DAA0D;AAC1D,qBAAa,GAAI,SAAQ,0BAA0B,CAAC,sBAAsB,CAAC,GAAG,CAAC;CAAG;AAElF,wDAAwD;AACxD,qBAAa,GAAI,SAAQ,0BAA0B,CAAC,sBAAsB,CAAC,GAAG,CAAC;CAAG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DerBitString, DerCodec, X962 } from "#general";
|
|
7
|
+
import { assertCertificateDerSize } from "./common.js";
|
|
8
|
+
import { X509Base } from "./X509Base.js";
|
|
9
|
+
class AttestationBaseCertificate extends X509Base {
|
|
10
|
+
/**
|
|
11
|
+
* Sign the certificate using the provided crypto and key.
|
|
12
|
+
* If the certificate is already signed, it throws a CertificateError.
|
|
13
|
+
*/
|
|
14
|
+
async sign(crypto, key) {
|
|
15
|
+
this.signature = await crypto.signEcdsa(key, this.asUnsignedAsn1(), "der");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the signed certificate in ASN.1 DER format.
|
|
19
|
+
* If the certificate is not signed, it throws a CertificateError.
|
|
20
|
+
*/
|
|
21
|
+
asSignedAsn1() {
|
|
22
|
+
const certificate = this.genericBuildAsn1Structure(this.cert);
|
|
23
|
+
const certBytes = DerCodec.encode({
|
|
24
|
+
certificate,
|
|
25
|
+
signAlgorithm: X962.EcdsaWithSHA256,
|
|
26
|
+
signature: DerBitString(this.signature)
|
|
27
|
+
});
|
|
28
|
+
assertCertificateDerSize(certBytes);
|
|
29
|
+
return certBytes;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
class Paa extends AttestationBaseCertificate {
|
|
33
|
+
}
|
|
34
|
+
class Pai extends AttestationBaseCertificate {
|
|
35
|
+
}
|
|
36
|
+
class Dac extends AttestationBaseCertificate {
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
AttestationBaseCertificate,
|
|
40
|
+
Dac,
|
|
41
|
+
Paa,
|
|
42
|
+
Pai
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=AttestationCertificates.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/certificate/kinds/AttestationCertificates.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAiB,cAAc,UAAU,YAAY;AACrD,SAAS,gCAAgC;AAGzC,SAAS,gBAAgB;AAKlB,MAAe,mCAA+D,SAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9F,MAAe,KAAK,QAAgB,KAAiB;AACjD,SAAK,YAAY,MAAM,OAAO,UAAU,KAAK,KAAK,eAAe,GAAG,KAAK;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAA4C;AACxC,UAAM,cAAc,KAAK,0BAA0B,KAAK,IAAI;AAC5D,UAAM,YAAY,SAAS,OAAO;AAAA,MAC9B;AAAA,MACA,eAAe,KAAK;AAAA,MACpB,WAAW,aAAa,KAAK,SAAS;AAAA,IAC1C,CAAC;AACD,6BAAyB,SAAS;AAClC,WAAO;AAAA,EACX;AACJ;AAGO,MAAM,YAAY,2BAAuD;AAAC;AAG1E,MAAM,YAAY,2BAAuD;AAAC;AAG1E,MAAM,YAAY,2BAAuD;AAAC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Crypto } from "#general";
|
|
7
|
+
import { TypeFromBitmapSchema, VendorId } from "#types";
|
|
8
|
+
import { CertificationDeclaration as CertificationDeclarationDef } from "./definitions/certification-declaration.js";
|
|
9
|
+
/** A Matter Certification Declaration */
|
|
10
|
+
export declare class CertificationDeclaration {
|
|
11
|
+
#private;
|
|
12
|
+
/**
|
|
13
|
+
* Generator which is the main usage for the class from outside.
|
|
14
|
+
* It constructs the class with the relevant details and returns a signed ASN.1 DER version of the CD.
|
|
15
|
+
*/
|
|
16
|
+
static generate(crypto: Crypto, vendorId: VendorId, productId: number, provisional?: boolean): Promise<Uint8Array<ArrayBufferLike>>;
|
|
17
|
+
constructor(content: TypeFromBitmapSchema<typeof CertificationDeclarationDef.TlvDc>, subjectKeyIdentifier: Uint8Array);
|
|
18
|
+
/**
|
|
19
|
+
* Returns the signed certificate in ASN.1 DER format.
|
|
20
|
+
*/
|
|
21
|
+
asSignedAsn1(crypto: Crypto, privateKey: JsonWebKey): Promise<Uint8Array<ArrayBufferLike>>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=CertificationDeclaration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificationDeclaration.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/CertificationDeclaration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA6B,MAAM,EAAiD,MAAM,UAAU,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAE,wBAAwB,IAAI,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAwBrH,yCAAyC;AACzC,qBAAa,wBAAwB;;IAIjC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,UAAQ;gBAoBtF,OAAO,EAAE,oBAAoB,CAAC,OAAO,2BAA2B,CAAC,KAAK,CAAC,EACvE,oBAAoB,EAAE,UAAU;IAMpC;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAmB5D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes, ContextTaggedBytes, DerCodec, Pkcs7, PrivateKey, SHA256_CMS, X962 } from "#general";
|
|
7
|
+
import { assertCertificateDerSize } from "./common.js";
|
|
8
|
+
import { CertificationDeclaration as CertificationDeclarationDef } from "./definitions/certification-declaration.js";
|
|
9
|
+
const TestCMS_SignerPrivateKey = Bytes.fromHex("AEF3484116E9481EC57BE0472DF41BF499064E5024AD869ECA5E889802D48075");
|
|
10
|
+
const TestCMS_SignerSubjectKeyIdentifier = Bytes.fromHex("62FA823359ACFAA9963E1CFA140ADDF504F37160");
|
|
11
|
+
class CertificationDeclaration {
|
|
12
|
+
#eContent;
|
|
13
|
+
#subjectKeyIdentifier;
|
|
14
|
+
/**
|
|
15
|
+
* Generator which is the main usage for the class from outside.
|
|
16
|
+
* It constructs the class with the relevant details and returns a signed ASN.1 DER version of the CD.
|
|
17
|
+
*/
|
|
18
|
+
static generate(crypto, vendorId, productId, provisional = false) {
|
|
19
|
+
const cd = new CertificationDeclaration(
|
|
20
|
+
{
|
|
21
|
+
formatVersion: 1,
|
|
22
|
+
vendorId,
|
|
23
|
+
produceIdArray: [productId],
|
|
24
|
+
deviceTypeId: 22,
|
|
25
|
+
certificateId: "CSA00000SWC00000-00",
|
|
26
|
+
securityLevel: 0,
|
|
27
|
+
securityInformation: 0,
|
|
28
|
+
versionNumber: 1,
|
|
29
|
+
certificationType: provisional ? 1 : 0
|
|
30
|
+
// 0 = Test, 1 = Provisional/In certification, 2 = official
|
|
31
|
+
},
|
|
32
|
+
TestCMS_SignerSubjectKeyIdentifier
|
|
33
|
+
);
|
|
34
|
+
return cd.asSignedAsn1(crypto, PrivateKey(TestCMS_SignerPrivateKey));
|
|
35
|
+
}
|
|
36
|
+
constructor(content, subjectKeyIdentifier) {
|
|
37
|
+
this.#eContent = CertificationDeclarationDef.TlvDc.encode(content);
|
|
38
|
+
this.#subjectKeyIdentifier = subjectKeyIdentifier;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns the signed certificate in ASN.1 DER format.
|
|
42
|
+
*/
|
|
43
|
+
async asSignedAsn1(crypto, privateKey) {
|
|
44
|
+
const cert = {
|
|
45
|
+
version: 3,
|
|
46
|
+
digestAlgorithm: [SHA256_CMS],
|
|
47
|
+
encapContentInfo: Pkcs7.Data(this.#eContent),
|
|
48
|
+
signerInfo: [
|
|
49
|
+
{
|
|
50
|
+
version: 3,
|
|
51
|
+
subjectKeyIdentifier: ContextTaggedBytes(0, this.#subjectKeyIdentifier),
|
|
52
|
+
digestAlgorithm: SHA256_CMS,
|
|
53
|
+
signatureAlgorithm: X962.EcdsaWithSHA256,
|
|
54
|
+
signature: await crypto.signEcdsa(privateKey, this.#eContent, "der")
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
};
|
|
58
|
+
const certBytes = DerCodec.encode(Pkcs7.SignedData(cert));
|
|
59
|
+
assertCertificateDerSize(certBytes);
|
|
60
|
+
return certBytes;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
CertificationDeclaration
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=CertificationDeclaration.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/certificate/kinds/CertificationDeclaration.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,OAAO,oBAA4B,UAAU,OAAO,YAAY,YAAY,YAAY;AAEjG,SAAS,gCAAgC;AACzC,SAAS,4BAA4B,mCAAmC;AAcxE,MAAM,2BAA2B,MAAM,QAAQ,kEAAkE;AAQjH,MAAM,qCAAqC,MAAM,QAAQ,0CAA0C;AAG5F,MAAM,yBAAyB;AAAA,EAClC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,SAAS,QAAgB,UAAoB,WAAmB,cAAc,OAAO;AACxF,UAAM,KAAK,IAAI;AAAA,MACX;AAAA,QACI,eAAe;AAAA,QACf;AAAA,QACA,gBAAgB,CAAC,SAAS;AAAA,QAC1B,cAAc;AAAA,QACd,eAAe;AAAA,QACf,eAAe;AAAA,QACf,qBAAqB;AAAA,QACrB,eAAe;AAAA,QACf,mBAAmB,cAAc,IAAI;AAAA;AAAA,MACzC;AAAA,MACA;AAAA,IACJ;AAEA,WAAO,GAAG,aAAa,QAAQ,WAAW,wBAAwB,CAAC;AAAA,EACvE;AAAA,EAEA,YACI,SACA,sBACF;AACE,SAAK,YAAY,4BAA4B,MAAM,OAAO,OAAO;AACjE,SAAK,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,QAAgB,YAAwB;AACvD,UAAM,OAAO;AAAA,MACT,SAAS;AAAA,MACT,iBAAiB,CAAC,UAAU;AAAA,MAC5B,kBAAkB,MAAM,KAAK,KAAK,SAAS;AAAA,MAC3C,YAAY;AAAA,QACR;AAAA,UACI,SAAS;AAAA,UACT,sBAAsB,mBAAmB,GAAG,KAAK,qBAAqB;AAAA,UACtE,iBAAiB;AAAA,UACjB,oBAAoB,KAAK;AAAA,UACzB,WAAW,MAAM,OAAO,UAAU,YAAY,KAAK,WAAW,KAAK;AAAA,QACvE;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,YAAY,SAAS,OAAO,MAAM,WAAW,IAAI,CAAC;AACxD,6BAAyB,SAAS;AAClC,WAAO;AAAA,EACX;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Crypto } from "#general";
|
|
7
|
+
import { OperationalCertificate } from "./definitions/operational.js";
|
|
8
|
+
import { OperationalBase } from "./OperationalBase.js";
|
|
9
|
+
import { Rcac } from "./Rcac.js";
|
|
10
|
+
/**
|
|
11
|
+
* Represents an Intermediate Certificate
|
|
12
|
+
*/
|
|
13
|
+
export declare class Icac extends OperationalBase<OperationalCertificate.Icac> {
|
|
14
|
+
/** Construct the class from a Tlv version of the certificate */
|
|
15
|
+
static fromTlv(tlv: Uint8Array): Icac;
|
|
16
|
+
/** Validates all basic certificate fields on construction. */
|
|
17
|
+
protected validateFields(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Encodes the certificate with the signature as Matter Tlv.
|
|
20
|
+
* If the certificate is not signed, it throws a CertificateError.
|
|
21
|
+
*/
|
|
22
|
+
asSignedTlv(): Uint8Array<ArrayBufferLike>;
|
|
23
|
+
/**
|
|
24
|
+
* Verify requirements a Matter Intermediate CA certificate must fulfill.
|
|
25
|
+
* Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
|
|
26
|
+
*/
|
|
27
|
+
verify(crypto: Crypto, root: Rcac): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=Icac.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icac.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/Icac.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,MAAM,EAAyB,MAAM,UAAU,CAAC;AAIhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,qBAAa,IAAK,SAAQ,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC;IAClE,gEAAgE;IAChE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAIrC,8DAA8D;IAC9D,SAAS,CAAC,cAAc;IAWxB;;;OAGG;IACH,WAAW;IAIX;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;CA4G1C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes, Diagnostic, PublicKey } from "#general";
|
|
7
|
+
import { FabricId } from "#types";
|
|
8
|
+
import { CertificateError } from "./common.js";
|
|
9
|
+
import { ExtensionKeyUsageSchema } from "./definitions/base.js";
|
|
10
|
+
import { OperationalCertificate } from "./definitions/operational.js";
|
|
11
|
+
import { OperationalBase } from "./OperationalBase.js";
|
|
12
|
+
class Icac extends OperationalBase {
|
|
13
|
+
/** Construct the class from a Tlv version of the certificate */
|
|
14
|
+
static fromTlv(tlv) {
|
|
15
|
+
return new Icac(OperationalCertificate.TlvIcac.decode(tlv));
|
|
16
|
+
}
|
|
17
|
+
/** Validates all basic certificate fields on construction. */
|
|
18
|
+
validateFields() {
|
|
19
|
+
const {
|
|
20
|
+
extensions: {
|
|
21
|
+
basicConstraints: { isCa }
|
|
22
|
+
}
|
|
23
|
+
} = this.cert;
|
|
24
|
+
if (!isCa) {
|
|
25
|
+
throw new CertificateError("Intermediate certificate must be a CA.");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Encodes the certificate with the signature as Matter Tlv.
|
|
30
|
+
* If the certificate is not signed, it throws a CertificateError.
|
|
31
|
+
*/
|
|
32
|
+
asSignedTlv() {
|
|
33
|
+
return OperationalCertificate.TlvIcac.encode({ ...this.cert, signature: this.signature });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Verify requirements a Matter Intermediate CA certificate must fulfill.
|
|
37
|
+
* Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
|
|
38
|
+
*/
|
|
39
|
+
async verify(crypto, root) {
|
|
40
|
+
this.generalVerify();
|
|
41
|
+
const {
|
|
42
|
+
subject,
|
|
43
|
+
issuer: { rcacId },
|
|
44
|
+
extensions
|
|
45
|
+
} = this.cert;
|
|
46
|
+
const { fabricId, icacId } = subject;
|
|
47
|
+
const { basicConstraints, extendedKeyUsage, subjectKeyIdentifier, authorityKeyIdentifier } = extensions;
|
|
48
|
+
const { fabricId: rootFabricId } = root.cert.subject;
|
|
49
|
+
if ("nodeId" in subject) {
|
|
50
|
+
throw new CertificateError(`Ica certificate must not contain a nodeId.`);
|
|
51
|
+
}
|
|
52
|
+
if (fabricId !== void 0) {
|
|
53
|
+
if (Array.isArray(fabricId)) {
|
|
54
|
+
throw new CertificateError(`Invalid fabricId in NoC certificate: ${Diagnostic.json(fabricId)}`);
|
|
55
|
+
}
|
|
56
|
+
if (fabricId === FabricId(0)) {
|
|
57
|
+
throw new CertificateError(`Invalid fabricId in NoC certificate: ${Diagnostic.json(fabricId)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (icacId === void 0 || Array.isArray(icacId)) {
|
|
61
|
+
throw new CertificateError(`Invalid icacId in Ica certificate: ${Diagnostic.json(icacId)}`);
|
|
62
|
+
}
|
|
63
|
+
if ("rcacId" in subject) {
|
|
64
|
+
throw new CertificateError(`Ica certificate must not contain an rcacId.`);
|
|
65
|
+
}
|
|
66
|
+
if ("caseAuthenticatedTags" in subject) {
|
|
67
|
+
throw new CertificateError(`Ica certificate must not contain a caseAuthenticatedTags.`);
|
|
68
|
+
}
|
|
69
|
+
if (rootFabricId !== void 0 && fabricId !== void 0 && rootFabricId !== fabricId) {
|
|
70
|
+
throw new CertificateError(
|
|
71
|
+
`FabricId in Ica certificate does not match the fabricId in the parent certificate. ${Diagnostic.json(
|
|
72
|
+
rootFabricId
|
|
73
|
+
)} !== ${Diagnostic.json(fabricId)}`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
if (root.cert.subject.rcacId !== rcacId) {
|
|
77
|
+
throw new CertificateError(
|
|
78
|
+
`RcacId in Ica certificate does not match the rcacId in the parent certificate. ${Diagnostic.json(
|
|
79
|
+
root.cert.subject.rcacId
|
|
80
|
+
)} !== ${Diagnostic.json(rcacId)}`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
if (!basicConstraints.isCa) {
|
|
84
|
+
throw new CertificateError(`Ica certificate must have isCa set to true.`);
|
|
85
|
+
}
|
|
86
|
+
const keyUsage = ExtensionKeyUsageSchema.encode(extensions.keyUsage);
|
|
87
|
+
if (keyUsage !== 96 && keyUsage !== 97) {
|
|
88
|
+
throw new CertificateError(
|
|
89
|
+
`Ica certificate keyUsage must have keyCertSign and CRLSign and optionally digitalSignature set.`
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
if (extendedKeyUsage !== void 0) {
|
|
93
|
+
throw new CertificateError(`Ica certificate must not have extendedKeyUsage set.`);
|
|
94
|
+
}
|
|
95
|
+
if (subjectKeyIdentifier === void 0) {
|
|
96
|
+
throw new CertificateError(`Ica certificate must have subjectKeyIdentifier set.`);
|
|
97
|
+
}
|
|
98
|
+
if (subjectKeyIdentifier.length !== 20) {
|
|
99
|
+
throw new CertificateError(`Ica certificate subjectKeyIdentifier must be 160 bit.`);
|
|
100
|
+
}
|
|
101
|
+
if (authorityKeyIdentifier === void 0) {
|
|
102
|
+
throw new CertificateError(`Ica certificate must have authorityKeyIdentifier set.`);
|
|
103
|
+
}
|
|
104
|
+
if (authorityKeyIdentifier.length !== 20) {
|
|
105
|
+
throw new CertificateError(`Ica certificate authorityKeyIdentifier must be 160 bit.`);
|
|
106
|
+
}
|
|
107
|
+
if (!Bytes.areEqual(authorityKeyIdentifier, root.cert.extensions.subjectKeyIdentifier)) {
|
|
108
|
+
throw new CertificateError(
|
|
109
|
+
`Ica certificate authorityKeyIdentifier must be equal to root cert subjectKeyIdentifier.`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
await crypto.verifyEcdsa(PublicKey(root.cert.ellipticCurvePublicKey), this.asUnsignedAsn1(), this.signature);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
Icac
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=Icac.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/certificate/kinds/Icac.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Crypto } from "#general";
|
|
7
|
+
import { OperationalCertificate } from "./definitions/operational.js";
|
|
8
|
+
import { Icac } from "./Icac.js";
|
|
9
|
+
import { OperationalBase } from "./OperationalBase.js";
|
|
10
|
+
import { Rcac } from "./Rcac.js";
|
|
11
|
+
export declare class Noc extends OperationalBase<OperationalCertificate.Noc> {
|
|
12
|
+
/** Construct the class from a Tlv version of the certificate */
|
|
13
|
+
static fromTlv(tlv: Uint8Array): Noc;
|
|
14
|
+
/** Validates all basic certificate fields on construction. */
|
|
15
|
+
protected validateFields(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Encodes the certificate with the signature as Matter Tlv.
|
|
18
|
+
* If the certificate is not signed, it throws a CertificateError.
|
|
19
|
+
*/
|
|
20
|
+
asSignedTlv(): Uint8Array<ArrayBufferLike>;
|
|
21
|
+
/**
|
|
22
|
+
* Verify requirements a Matter Node Operational certificate must fulfill.
|
|
23
|
+
* Rules for this are listed in @see {@link MatterSpecification.v12.Core} §6.5.x
|
|
24
|
+
*/
|
|
25
|
+
verify(crypto: Crypto, root: Rcac, ica?: Icac): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=Noc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Noc.d.ts","sourceRoot":"","sources":["../../../../src/certificate/kinds/Noc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,MAAM,EAAyB,MAAM,UAAU,CAAC;AAGhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,qBAAa,GAAI,SAAQ,eAAe,CAAC,sBAAsB,CAAC,GAAG,CAAC;IAChE,gEAAgE;IAChE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU;IAI9B,8DAA8D;IAC9D,SAAS,CAAC,cAAc;IAexB;;;OAGG;IACH,WAAW;IAIX;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI;CAmHtD"}
|