@matter/protocol 0.15.0-alpha.0-20250620-16e218ed3 → 0.15.0-alpha.0-20250625-4a4b1be1b
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/kinds/X509Base.d.ts +1 -1
- package/dist/cjs/certificate/kinds/X509Base.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/X509Base.js +40 -14
- package/dist/cjs/certificate/kinds/X509Base.js.map +1 -1
- package/dist/cjs/dcl/DclClient.d.ts +26 -0
- package/dist/cjs/dcl/DclClient.d.ts.map +1 -0
- package/dist/cjs/dcl/DclClient.js +119 -0
- package/dist/cjs/dcl/DclClient.js.map +6 -0
- package/dist/cjs/dcl/DclRestApiTypes.d.ts +49 -0
- package/dist/cjs/dcl/DclRestApiTypes.d.ts.map +1 -0
- package/dist/cjs/dcl/DclRestApiTypes.js +22 -0
- package/dist/cjs/dcl/DclRestApiTypes.js.map +6 -0
- package/dist/cjs/dcl/index.d.ts +7 -0
- package/dist/cjs/dcl/index.d.ts.map +1 -0
- package/dist/cjs/dcl/index.js +24 -0
- package/dist/cjs/dcl/index.js.map +6 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/peer/PeerSet.js +1 -1
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +20 -0
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -0
- package/dist/cjs/protocol/ProtocolStatusMessage.js +61 -0
- package/dist/cjs/protocol/ProtocolStatusMessage.js.map +6 -0
- package/dist/cjs/protocol/index.d.ts +1 -0
- package/dist/cjs/protocol/index.d.ts.map +1 -1
- package/dist/cjs/protocol/index.js +1 -0
- package/dist/cjs/protocol/index.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +4 -5
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.js +7 -8
- package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js +2 -2
- package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts +4 -15
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js +3 -21
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +1 -1
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +2 -2
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/cjs/session/pase/PaseClient.js +2 -2
- package/dist/cjs/session/pase/PaseClient.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +1 -1
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/certificate/kinds/X509Base.d.ts +1 -1
- package/dist/esm/certificate/kinds/X509Base.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/X509Base.js +40 -14
- package/dist/esm/certificate/kinds/X509Base.js.map +1 -1
- package/dist/esm/dcl/DclClient.d.ts +26 -0
- package/dist/esm/dcl/DclClient.d.ts.map +1 -0
- package/dist/esm/dcl/DclClient.js +99 -0
- package/dist/esm/dcl/DclClient.js.map +6 -0
- package/dist/esm/dcl/DclRestApiTypes.d.ts +49 -0
- package/dist/esm/dcl/DclRestApiTypes.d.ts.map +1 -0
- package/dist/esm/dcl/DclRestApiTypes.js +6 -0
- package/dist/esm/dcl/DclRestApiTypes.js.map +6 -0
- package/dist/esm/dcl/index.d.ts +7 -0
- package/dist/esm/dcl/index.d.ts.map +1 -0
- package/dist/esm/dcl/index.js +7 -0
- package/dist/esm/dcl/index.js.map +6 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/peer/PeerSet.js +2 -2
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts +20 -0
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -0
- package/dist/esm/protocol/ProtocolStatusMessage.js +41 -0
- package/dist/esm/protocol/ProtocolStatusMessage.js.map +6 -0
- package/dist/esm/protocol/index.d.ts +1 -0
- package/dist/esm/protocol/index.d.ts.map +1 -1
- package/dist/esm/protocol/index.js +1 -0
- package/dist/esm/protocol/index.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts +4 -5
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.js +8 -14
- package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.js +3 -3
- package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts +4 -15
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js +4 -22
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +2 -2
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseServer.js +3 -3
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/dist/esm/session/pase/PaseClient.js +3 -3
- package/dist/esm/session/pase/PaseClient.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +2 -2
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/certificate/kinds/X509Base.ts +54 -18
- package/src/dcl/DclClient.ts +140 -0
- package/src/dcl/DclRestApiTypes.ts +55 -0
- package/src/dcl/index.ts +7 -0
- package/src/index.ts +1 -0
- package/src/peer/PeerSet.ts +2 -2
- package/src/protocol/ProtocolStatusMessage.ts +51 -0
- package/src/protocol/index.ts +1 -0
- package/src/securechannel/SecureChannelMessenger.ts +11 -18
- package/src/securechannel/SecureChannelProtocol.ts +3 -3
- package/src/securechannel/SecureChannelStatusMessageSchema.ts +5 -31
- package/src/session/case/CaseClient.ts +2 -2
- package/src/session/case/CaseServer.ts +3 -3
- package/src/session/pase/PaseClient.ts +3 -3
- package/src/session/pase/PaseServer.ts +2 -2
|
@@ -3,21 +3,10 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
protocolStatus: ProtocolStatusCode;
|
|
11
|
-
protocolData?: Uint8Array;
|
|
12
|
-
};
|
|
13
|
-
export declare class SecureChannelStatusMessageSchema extends Schema<StatusMessage, Uint8Array> {
|
|
14
|
-
encodeInternal({ generalStatus, protocolId, protocolStatus, protocolData }: StatusMessage): Uint8Array<ArrayBuffer>;
|
|
15
|
-
decodeInternal(bytes: Uint8Array): {
|
|
16
|
-
generalStatus: number;
|
|
17
|
-
protocolId: number;
|
|
18
|
-
protocolStatus: number;
|
|
19
|
-
remainingBytes: Uint8Array<ArrayBufferLike> | undefined;
|
|
20
|
-
};
|
|
6
|
+
import { ProtocolStatusMessage, ProtocolStatusMessageSchema } from "#protocol/ProtocolStatusMessage.js";
|
|
7
|
+
import { SecureChannelStatusCode } from "#types";
|
|
8
|
+
export type SecureChannelStatusMessage = ProtocolStatusMessage<SecureChannelStatusCode>;
|
|
9
|
+
export declare class SecureChannelStatusMessageSchema extends ProtocolStatusMessageSchema<SecureChannelStatusMessage> {
|
|
21
10
|
}
|
|
22
11
|
export declare const TlvSecureChannelStatusMessage: SecureChannelStatusMessageSchema;
|
|
23
12
|
//# sourceMappingURL=SecureChannelStatusMessageSchema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecureChannelStatusMessageSchema.d.ts","sourceRoot":"","sources":["../../../src/securechannel/SecureChannelStatusMessageSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"SecureChannelStatusMessageSchema.d.ts","sourceRoot":"","sources":["../../../src/securechannel/SecureChannelStatusMessageSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAA8B,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAE7E,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;AAExF,qBAAa,gCAAiC,SAAQ,2BAA2B,CAAC,0BAA0B,CAAC;CAAG;AAEhH,eAAO,MAAM,6BAA6B,kCAAmE,CAAC"}
|
|
@@ -3,29 +3,11 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
class SecureChannelStatusMessageSchema extends
|
|
9
|
-
encodeInternal({ generalStatus, protocolId, protocolStatus, protocolData }) {
|
|
10
|
-
const writer = new DataWriter(Endian.Little);
|
|
11
|
-
writer.writeUInt16(generalStatus);
|
|
12
|
-
writer.writeUInt32(protocolId);
|
|
13
|
-
writer.writeUInt16(protocolStatus);
|
|
14
|
-
if (protocolData !== void 0 && protocolData.length > 0) {
|
|
15
|
-
writer.writeByteArray(protocolData);
|
|
16
|
-
}
|
|
17
|
-
return writer.toByteArray();
|
|
18
|
-
}
|
|
19
|
-
decodeInternal(bytes) {
|
|
20
|
-
const reader = new DataReader(bytes, Endian.Little);
|
|
21
|
-
const generalStatus = reader.readUInt16();
|
|
22
|
-
const protocolId = reader.readUInt32();
|
|
23
|
-
const protocolStatus = reader.readUInt16();
|
|
24
|
-
const remainingBytes = reader.remainingBytesCount > 0 ? reader.remainingBytes : void 0;
|
|
25
|
-
return { generalStatus, protocolId, protocolStatus, remainingBytes };
|
|
26
|
-
}
|
|
6
|
+
import { ProtocolStatusMessageSchema } from "#protocol/ProtocolStatusMessage.js";
|
|
7
|
+
import { SECURE_CHANNEL_PROTOCOL_ID } from "#types";
|
|
8
|
+
class SecureChannelStatusMessageSchema extends ProtocolStatusMessageSchema {
|
|
27
9
|
}
|
|
28
|
-
const TlvSecureChannelStatusMessage = new SecureChannelStatusMessageSchema();
|
|
10
|
+
const TlvSecureChannelStatusMessage = new SecureChannelStatusMessageSchema(SECURE_CHANNEL_PROTOCOL_ID);
|
|
29
11
|
export {
|
|
30
12
|
SecureChannelStatusMessageSchema,
|
|
31
13
|
TlvSecureChannelStatusMessage
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/securechannel/SecureChannelStatusMessageSchema.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAgC,mCAAmC;AACnE,SAAS,kCAA2D;AAI7D,MAAM,yCAAyC,4BAAwD;AAAC;AAExG,MAAM,gCAAgC,IAAI,iCAAiC,0BAA0B;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseClient.d.ts","sourceRoot":"","sources":["../../../../src/session/case/CaseClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseClient.d.ts","sourceRoot":"","sources":["../../../../src/session/case/CaseClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAA2B,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAkBpE,qBAAa,UAAU;;gBAGP,QAAQ,EAAE,cAAc;IAI9B,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,wBAAwB,CAAC,EAAE,MAAM;;;;CAgO9G"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { Icac, Noc } from "#certificate/index.js";
|
|
7
7
|
import { Bytes, Logger, PublicKey, UnexpectedDataError } from "#general";
|
|
8
8
|
import { ChannelStatusResponseError } from "#securechannel/index.js";
|
|
9
|
-
import { NodeId,
|
|
9
|
+
import { NodeId, SecureChannelStatusCode } from "#types";
|
|
10
10
|
import {
|
|
11
11
|
KDFSR1_KEY_INFO,
|
|
12
12
|
KDFSR2_INFO,
|
|
@@ -33,7 +33,7 @@ class CaseClient {
|
|
|
33
33
|
return await this.#doPair(messenger, exchange, fabric, peerNodeId);
|
|
34
34
|
} catch (error) {
|
|
35
35
|
if (!(error instanceof ChannelStatusResponseError)) {
|
|
36
|
-
await messenger.sendError(
|
|
36
|
+
await messenger.sendError(SecureChannelStatusCode.InvalidParam);
|
|
37
37
|
}
|
|
38
38
|
throw error;
|
|
39
39
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/session/case/CaseClient.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAM,WAAW;AAC1B,SAAS,OAAO,QAAQ,WAAW,2BAA2B;AAC9D,SAAS,kCAAkC;AAE3C,SAAS,QAAQ
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["fabric"]
|
|
6
6
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Noc } from "#certificate/index.js";
|
|
7
7
|
import { Bytes, CryptoDecryptError, Logger, PublicKey, UnexpectedDataError } from "#general";
|
|
8
|
-
import { NodeId,
|
|
8
|
+
import { NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
|
|
9
9
|
import { FabricNotFoundError } from "../../fabric/FabricManager.js";
|
|
10
10
|
import { ChannelStatusResponseError } from "../../securechannel/SecureChannelMessenger.js";
|
|
11
11
|
import {
|
|
@@ -39,9 +39,9 @@ class CaseServer {
|
|
|
39
39
|
} catch (error) {
|
|
40
40
|
logger.error("An error occurred during the commissioning", error);
|
|
41
41
|
if (error instanceof FabricNotFoundError) {
|
|
42
|
-
await messenger.sendError(
|
|
42
|
+
await messenger.sendError(SecureChannelStatusCode.NoSharedTrustRoots);
|
|
43
43
|
} else if (!(error instanceof ChannelStatusResponseError)) {
|
|
44
|
-
await messenger.sendError(
|
|
44
|
+
await messenger.sendError(SecureChannelStatusCode.InvalidParam);
|
|
45
45
|
}
|
|
46
46
|
} finally {
|
|
47
47
|
await exchange.session.destroy();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/session/case/CaseServer.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,WAAW;AACpB,SAAS,OAAe,oBAAoB,QAAQ,WAAW,2BAA2B;AAG1F,SAAS,QAAQ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Bytes, ec, Logger, Spake2p, UnexpectedDataError } from "#general";
|
|
7
|
-
import { CommissioningOptions, NodeId,
|
|
7
|
+
import { CommissioningOptions, NodeId, SecureChannelStatusCode } from "#types";
|
|
8
8
|
import { DEFAULT_PASSCODE_ID, PaseClientMessenger, SPAKE_CONTEXT } from "./PaseMessenger.js";
|
|
9
9
|
const { numberToBytesBE } = ec;
|
|
10
10
|
const logger = Logger.get("PaseClient");
|
|
@@ -51,7 +51,7 @@ class PaseClient {
|
|
|
51
51
|
response: { pbkdfParameters, responderSessionId, responderSessionParams }
|
|
52
52
|
} = await messenger.readPbkdfParamResponse();
|
|
53
53
|
if (pbkdfParameters === void 0) {
|
|
54
|
-
await messenger.sendError(
|
|
54
|
+
await messenger.sendError(SecureChannelStatusCode.InvalidParam);
|
|
55
55
|
throw new UnexpectedDataError("Missing requested PbkdfParameters in the response. Commissioning failed.");
|
|
56
56
|
}
|
|
57
57
|
sessionParameters = {
|
|
@@ -69,7 +69,7 @@ class PaseClient {
|
|
|
69
69
|
const { y: Y, verifier } = await messenger.readPasePake2();
|
|
70
70
|
const { Ke, hAY, hBX } = await spake2p.computeSecretAndVerifiersFromY(w1, X, Y);
|
|
71
71
|
if (!Bytes.areEqual(verifier, hBX)) {
|
|
72
|
-
await messenger.sendError(
|
|
72
|
+
await messenger.sendError(SecureChannelStatusCode.InvalidParam);
|
|
73
73
|
throw new UnexpectedDataError(
|
|
74
74
|
"Received incorrect key confirmation from the receiver. Commissioning failed."
|
|
75
75
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/session/pase/PaseClient.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAe,IAAI,QAAyB,SAAS,2BAA2B;AAEzF,SAAS,sBAAsB,QAAQ
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
Time,
|
|
13
13
|
UnexpectedDataError
|
|
14
14
|
} from "#general";
|
|
15
|
-
import { NodeId,
|
|
15
|
+
import { NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
|
|
16
16
|
import { ChannelStatusResponseError } from "../../securechannel/SecureChannelMessenger.js";
|
|
17
17
|
import { DEFAULT_PASSCODE_ID, PaseServerMessenger, SPAKE_CONTEXT } from "./PaseMessenger.js";
|
|
18
18
|
const { bytesToNumberBE } = ec;
|
|
@@ -140,7 +140,7 @@ class PaseServer {
|
|
|
140
140
|
this.#pairingTimer?.stop();
|
|
141
141
|
this.#pairingTimer = void 0;
|
|
142
142
|
if (sendError) {
|
|
143
|
-
await messenger.sendError(
|
|
143
|
+
await messenger.sendError(SecureChannelStatusCode.InvalidParam);
|
|
144
144
|
}
|
|
145
145
|
await messenger.close();
|
|
146
146
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/session/pase/PaseServer.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,OACG;AAEP,SAAS,QAAQ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/protocol",
|
|
3
|
-
"version": "0.15.0-alpha.0-
|
|
3
|
+
"version": "0.15.0-alpha.0-20250625-4a4b1be1b",
|
|
4
4
|
"description": "Low-level APIs for Matter interaction",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"#*": "./src/*"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@matter/general": "0.15.0-alpha.0-
|
|
44
|
-
"@matter/model": "0.15.0-alpha.0-
|
|
45
|
-
"@matter/types": "0.15.0-alpha.0-
|
|
43
|
+
"@matter/general": "0.15.0-alpha.0-20250625-4a4b1be1b",
|
|
44
|
+
"@matter/model": "0.15.0-alpha.0-20250625-4a4b1be1b",
|
|
45
|
+
"@matter/types": "0.15.0-alpha.0-20250625-4a4b1be1b"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@matter/tools": "0.15.0-alpha.0-
|
|
49
|
-
"@matter/testing": "0.15.0-alpha.0-
|
|
48
|
+
"@matter/tools": "0.15.0-alpha.0-20250625-4a4b1be1b",
|
|
49
|
+
"@matter/testing": "0.15.0-alpha.0-20250625-4a4b1be1b"
|
|
50
50
|
},
|
|
51
51
|
"files": [
|
|
52
52
|
"dist/**/*",
|
|
@@ -340,34 +340,70 @@ export abstract class X509Base<CT extends X509Certificate> {
|
|
|
340
340
|
/**
|
|
341
341
|
* Extract the public key from a Certificate Signing Request (CSR) in ASN.1 DER format.
|
|
342
342
|
*/
|
|
343
|
-
static async getPublicKeyFromCsr(crypto: Crypto,
|
|
344
|
-
const { [DerKey.Elements]: rootElements } = DerCodec.decode(
|
|
345
|
-
if (rootElements?.length !== 3)
|
|
343
|
+
static async getPublicKeyFromCsr(crypto: Crypto, encodedCsr: Uint8Array) {
|
|
344
|
+
const { [DerKey.Elements]: rootElements } = DerCodec.decode(encodedCsr);
|
|
345
|
+
if (rootElements?.length !== 3) {
|
|
346
|
+
throw new CertificateError("Invalid CSR data");
|
|
347
|
+
}
|
|
346
348
|
const [requestNode, signAlgorithmNode, signatureNode] = rootElements;
|
|
347
349
|
|
|
348
350
|
// Extract the public key
|
|
349
351
|
const { [DerKey.Elements]: requestElements } = requestNode;
|
|
350
|
-
if (requestElements?.length !== 4)
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
352
|
+
if (requestElements?.length !== 4) {
|
|
353
|
+
throw new CertificateError("Invalid CSR data");
|
|
354
|
+
}
|
|
355
|
+
const [versionNode, subjectNode, publicKeyNode] = requestElements;
|
|
356
|
+
const requestVersionBytes = versionNode[DerKey.Bytes];
|
|
357
|
+
if (requestVersionBytes.length !== 1 || requestVersionBytes[0] !== 0) {
|
|
358
|
+
throw new CertificateError(`Unsupported CSR version ${requestVersionBytes[0]}`);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Verify the subject, according to spec can be "any value", so just check that it exists
|
|
362
|
+
if (!subjectNode[DerKey.Elements]?.length) {
|
|
363
|
+
throw new CertificateError("Missing subject in CSR data");
|
|
364
|
+
}
|
|
355
365
|
|
|
356
366
|
const { [DerKey.Elements]: publicKeyElements } = publicKeyNode;
|
|
357
|
-
if (publicKeyElements?.length !== 2)
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
const
|
|
367
|
+
if (publicKeyElements?.length !== 2) {
|
|
368
|
+
throw new CertificateError("Invalid CSR data");
|
|
369
|
+
}
|
|
370
|
+
const [publicKeyTypeNode, publicKeyBytesNode] = publicKeyElements;
|
|
361
371
|
|
|
362
|
-
// Verify
|
|
372
|
+
// Verify Public Key Algorithm Type
|
|
373
|
+
const { [DerKey.Elements]: publicKeyTypeNodeElements } = publicKeyTypeNode;
|
|
374
|
+
if (publicKeyTypeNodeElements?.length !== 2) {
|
|
375
|
+
throw new CertificateError("Invalid public key type in CSR");
|
|
376
|
+
}
|
|
363
377
|
if (
|
|
364
|
-
signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes] === undefined ||
|
|
365
378
|
!Bytes.areEqual(
|
|
366
|
-
|
|
367
|
-
|
|
379
|
+
publicKeyTypeNodeElements[0][DerKey.Bytes],
|
|
380
|
+
X962.PublicKeyAlgorithmEcPublicKey[DerKey.Bytes],
|
|
368
381
|
)
|
|
369
|
-
)
|
|
370
|
-
throw new CertificateError("Unsupported
|
|
382
|
+
) {
|
|
383
|
+
throw new CertificateError("Unsupported public key algorithm in CSR");
|
|
384
|
+
}
|
|
385
|
+
// Verify Public Key Curve Type (Parameter to Algorithm)
|
|
386
|
+
if (
|
|
387
|
+
!Bytes.areEqual(
|
|
388
|
+
publicKeyTypeNodeElements[1][DerKey.Bytes],
|
|
389
|
+
X962.PublicKeyAlgorithmEcPublicKeyP256[DerKey.Bytes],
|
|
390
|
+
)
|
|
391
|
+
) {
|
|
392
|
+
throw new CertificateError("Unsupported public key curve in CSR");
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
const publicKey = publicKeyBytesNode[DerKey.Bytes];
|
|
396
|
+
|
|
397
|
+
// Verify the CSR signature algorithm
|
|
398
|
+
const signatureAlgorithmBytes = signAlgorithmNode[DerKey.Elements]?.[0]?.[DerKey.Bytes];
|
|
399
|
+
if (
|
|
400
|
+
signatureAlgorithmBytes === undefined ||
|
|
401
|
+
!Bytes.areEqual(X962.EcdsaWithSHA256[DerKey.ObjectId][DerKey.Bytes], signatureAlgorithmBytes)
|
|
402
|
+
) {
|
|
403
|
+
throw new CertificateError("Unsupported signature algorithm in CSR");
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Verify the CSR signature
|
|
371
407
|
await crypto.verifyEcdsa(
|
|
372
408
|
PublicKey(publicKey),
|
|
373
409
|
DerCodec.encode(requestNode),
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import {
|
|
7
|
+
DclApiErrorResponse,
|
|
8
|
+
DclModelModelsWithVidPidResponse,
|
|
9
|
+
DclModelVersionsWithVidPidResponse,
|
|
10
|
+
DclModelVersionWithVidPidSoftwareVersionResponse,
|
|
11
|
+
DclPkiCertificateResponse,
|
|
12
|
+
DclPkiRootCertificatesResponse,
|
|
13
|
+
DclPkiRootCertificateSubjectReference,
|
|
14
|
+
} from "#dcl/DclRestApiTypes.js";
|
|
15
|
+
import { MatterError } from "#general";
|
|
16
|
+
|
|
17
|
+
const DCL_PRODUCTION_URL = "https://on.dcl.csa-iot.org";
|
|
18
|
+
const DCL_TEST_URL = "https://on.test-net.dcl.csa-iot.org";
|
|
19
|
+
|
|
20
|
+
/** Base class for all DCL-related errors */
|
|
21
|
+
export class MatterDclError extends MatterError {}
|
|
22
|
+
|
|
23
|
+
/** Error thrown when fetching data from DCL fails */
|
|
24
|
+
export class MatterDclResponseError extends MatterDclError {
|
|
25
|
+
constructor(path: string, error: DclApiErrorResponse) {
|
|
26
|
+
super(`Error fetching ${path} from DCL: ${error.code} - ${error.message}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** A client clas to use "fetch" to get REST DAta from DCL (Decentraland) */
|
|
31
|
+
export class DclClient {
|
|
32
|
+
#baseUrl: string;
|
|
33
|
+
|
|
34
|
+
constructor(private readonly production: boolean = true) {
|
|
35
|
+
this.#baseUrl = this.production ? DCL_PRODUCTION_URL : DCL_TEST_URL;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async #fetchJson<ResponseT>(path: string): Promise<ResponseT> {
|
|
39
|
+
const url = new URL(path, this.#baseUrl);
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetch(url.toString(), {
|
|
42
|
+
method: "GET",
|
|
43
|
+
headers: {
|
|
44
|
+
"Content-Type": "application/json",
|
|
45
|
+
},
|
|
46
|
+
signal: AbortSignal.timeout(5_000), // 5 seconds timeout
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new MatterDclResponseError(path, await response.json());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return await response.json();
|
|
54
|
+
} catch (error) {
|
|
55
|
+
if (error instanceof MatterDclResponseError) {
|
|
56
|
+
throw error; // Re-throw custom DCL error
|
|
57
|
+
}
|
|
58
|
+
throw new MatterDclResponseError(path, {
|
|
59
|
+
code: 500,
|
|
60
|
+
message: error instanceof Error ? error.message : "Unknown Error",
|
|
61
|
+
details: [],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async fetchRootCertificateList() {
|
|
67
|
+
const certList = await this.#fetchJson<DclPkiRootCertificatesResponse>("/certificates/approved");
|
|
68
|
+
if (certList?.approvedRootCertificates?.schemaVersion !== 0) {
|
|
69
|
+
throw new MatterDclError(
|
|
70
|
+
`Unsupported DCL Root Certificate schema version: ${certList.approvedRootCertificates.schemaVersion}`,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
return certList.approvedRootCertificates.certs;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async fetchRootCertificateBySubject(subject: DclPkiRootCertificateSubjectReference) {
|
|
77
|
+
const path = `/certificates/${encodeURIComponent(subject.subject)}/${encodeURIComponent(subject.subjectKeyId)}`;
|
|
78
|
+
const response = await this.#fetchJson<DclPkiCertificateResponse>(path);
|
|
79
|
+
if (
|
|
80
|
+
!response ||
|
|
81
|
+
!response.approvedRootCertificates ||
|
|
82
|
+
response.approvedRootCertificates.subject !== subject.subject ||
|
|
83
|
+
response.approvedRootCertificates.subjectKeyId !== subject.subjectKeyId ||
|
|
84
|
+
response.approvedRootCertificates.schemaVersion !== 0
|
|
85
|
+
) {
|
|
86
|
+
throw new MatterDclError(
|
|
87
|
+
`Root certificate not found for subject: ${subject.subject}, subjectKeyId: ${subject.subjectKeyId}`,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
return response.approvedRootCertificates.certs;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async fetchModelByVidPid(vid: number, pid: number) {
|
|
94
|
+
const path = `/models/model/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
|
|
95
|
+
const response = await this.#fetchJson<DclModelModelsWithVidPidResponse>(path);
|
|
96
|
+
if (
|
|
97
|
+
!response ||
|
|
98
|
+
!response.model ||
|
|
99
|
+
response.model.vid !== vid ||
|
|
100
|
+
response.model.pid !== pid ||
|
|
101
|
+
response.model.schemaVersion !== 0
|
|
102
|
+
) {
|
|
103
|
+
throw new MatterDclError(`Model not found for VID: ${vid}, PID: ${pid}`);
|
|
104
|
+
}
|
|
105
|
+
return response.model;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async fetchModelVersionsByVidPid(vid: number, pid: number) {
|
|
109
|
+
const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}`;
|
|
110
|
+
const response = await this.#fetchJson<DclModelVersionsWithVidPidResponse>(path);
|
|
111
|
+
if (
|
|
112
|
+
!response ||
|
|
113
|
+
!response.modelVersions ||
|
|
114
|
+
response.modelVersions.vid !== vid ||
|
|
115
|
+
response.modelVersions.pid !== pid ||
|
|
116
|
+
response.modelVersions.schemaVersion !== 0
|
|
117
|
+
) {
|
|
118
|
+
throw new MatterDclError(`Model versions not found for VID: ${vid}, PID: ${pid}`);
|
|
119
|
+
}
|
|
120
|
+
return response.modelVersions.softwareVersions;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async fetchModelVersionByVidPidSoftwareVersion(vid: number, pid: number, softwareVersion: number) {
|
|
124
|
+
const path = `/models/versions/${encodeURIComponent(vid)}/${encodeURIComponent(pid)}/${encodeURIComponent(softwareVersion)}`;
|
|
125
|
+
const response = await this.#fetchJson<DclModelVersionWithVidPidSoftwareVersionResponse>(path);
|
|
126
|
+
if (
|
|
127
|
+
!response ||
|
|
128
|
+
!response.modelVersion ||
|
|
129
|
+
response.modelVersion.vid !== vid ||
|
|
130
|
+
response.modelVersion.pid !== pid ||
|
|
131
|
+
response.modelVersion.softwareVersion !== softwareVersion ||
|
|
132
|
+
response.modelVersion.schemaVersion !== 0
|
|
133
|
+
) {
|
|
134
|
+
throw new MatterDclError(
|
|
135
|
+
`Model version not found for VID: ${vid}, PID: ${pid}, Software Version: ${softwareVersion}`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
return response.modelVersion;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DeviceModelDclSchema, DeviceSoftwareVersionModelDclSchema, ProductAttestationDclSchema } from "@matter/types";
|
|
7
|
+
|
|
8
|
+
export interface DclApiErrorResponse {
|
|
9
|
+
code: number;
|
|
10
|
+
message: string;
|
|
11
|
+
details: string[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface DclPkiRootCertificateSubjectReference {
|
|
15
|
+
subject: string;
|
|
16
|
+
subjectKeyId: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Response for /dcl/pki/certificates/approved */
|
|
20
|
+
export interface DclPkiRootCertificatesResponse {
|
|
21
|
+
approvedRootCertificates: {
|
|
22
|
+
certs: DclPkiRootCertificateSubjectReference[];
|
|
23
|
+
schemaVersion: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Response for /dcl/pki/certificates/{subject}/{subjectKeyId} */
|
|
28
|
+
export interface DclPkiCertificateResponse {
|
|
29
|
+
approvedRootCertificates: {
|
|
30
|
+
subject: string;
|
|
31
|
+
subjectKeyId: string;
|
|
32
|
+
certs: ProductAttestationDclSchema[];
|
|
33
|
+
schemaVersion: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Response for /dcl/models/model/{vid}/{pid} */
|
|
38
|
+
export interface DclModelModelsWithVidPidResponse {
|
|
39
|
+
model: DeviceModelDclSchema;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Response for /dcl/model/versions/{vid}/{pid} */
|
|
43
|
+
export interface DclModelVersionsWithVidPidResponse {
|
|
44
|
+
modelVersions: {
|
|
45
|
+
vid: number;
|
|
46
|
+
pid: number;
|
|
47
|
+
softwareVersions: number[];
|
|
48
|
+
schemaVersion: number;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Response for /dcl/model/versions/{vid}/{pid}/{softwareVersion} */
|
|
53
|
+
export interface DclModelVersionWithVidPidSoftwareVersionResponse {
|
|
54
|
+
modelVersion: DeviceSoftwareVersionModelDclSchema;
|
|
55
|
+
}
|
package/src/dcl/index.ts
ADDED
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from "./certificate/index.js";
|
|
|
10
10
|
export * from "./cluster/index.js";
|
|
11
11
|
export * from "./codec/index.js";
|
|
12
12
|
export * from "./common/index.js";
|
|
13
|
+
export * from "./dcl/index.js";
|
|
13
14
|
export * from "./events/index.js";
|
|
14
15
|
export * from "./fabric/index.js";
|
|
15
16
|
export * from "./groups/index.js";
|
package/src/peer/PeerSet.ts
CHANGED
|
@@ -35,7 +35,7 @@ import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
|
|
|
35
35
|
import { ChannelStatusResponseError } from "#securechannel/index.js";
|
|
36
36
|
import { CaseClient, SecureSession, Session } from "#session/index.js";
|
|
37
37
|
import { SessionManager } from "#session/SessionManager.js";
|
|
38
|
-
import { GroupId, NodeId,
|
|
38
|
+
import { GroupId, NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
|
|
39
39
|
import { ChannelManager } from "../protocol/ChannelManager.js";
|
|
40
40
|
import { ChannelNotConnectedError, ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
|
|
41
41
|
import { DedicatedChannelExchangeProvider, ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
|
|
@@ -738,7 +738,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
738
738
|
|
|
739
739
|
if (
|
|
740
740
|
error instanceof ChannelStatusResponseError &&
|
|
741
|
-
error.protocolStatusCode ===
|
|
741
|
+
error.protocolStatusCode === SecureChannelStatusCode.NoSharedTrustRoots
|
|
742
742
|
) {
|
|
743
743
|
// It seems the stored resumption record is outdated; we need to retry pairing without resumption
|
|
744
744
|
if (await this.#sessions.deleteResumptionRecord(fabric.addressOf(address.nodeId))) {
|