@matter/protocol 0.14.1-alpha.0-20250607-a93593303 → 0.15.0-alpha.0-20250613-a55f991d4
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.js +2 -2
- package/dist/cjs/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.d.ts +2 -2
- package/dist/cjs/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.js +5 -5
- package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
- package/dist/cjs/certificate/CertificateManager.d.ts +1 -1
- package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateManager.js +21 -10
- package/dist/cjs/certificate/CertificateManager.js.map +1 -1
- package/dist/cjs/certificate/CertificationDeclarationManager.d.ts +1 -1
- package/dist/cjs/certificate/DeviceCertification.d.ts +1 -1
- package/dist/cjs/certificate/DeviceCertification.d.ts.map +1 -1
- package/dist/cjs/certificate/DeviceCertification.js +5 -3
- package/dist/cjs/certificate/DeviceCertification.js.map +1 -1
- package/dist/cjs/codec/BtpCodec.d.ts +1 -1
- package/dist/cjs/codec/MessageCodec.d.ts +1 -1
- package/dist/cjs/events/OccurrenceManager.d.ts +1 -0
- package/dist/cjs/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/cjs/events/OccurrenceManager.js +14 -8
- package/dist/cjs/events/OccurrenceManager.js.map +1 -1
- package/dist/cjs/fabric/Fabric.d.ts +8 -6
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +22 -15
- package/dist/cjs/fabric/Fabric.js.map +1 -1
- package/dist/cjs/fabric/FabricAuthority.d.ts +4 -0
- package/dist/cjs/fabric/FabricAuthority.d.ts.map +1 -1
- package/dist/cjs/fabric/FabricAuthority.js +6 -0
- package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
- package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
- package/dist/cjs/fabric/FabricManager.js +9 -2
- package/dist/cjs/fabric/FabricManager.js.map +1 -1
- package/dist/cjs/fabric/TestFabric.d.ts +30 -0
- package/dist/cjs/fabric/TestFabric.d.ts.map +1 -0
- package/dist/cjs/fabric/TestFabric.js +70 -0
- package/dist/cjs/fabric/TestFabric.js.map +6 -0
- package/dist/cjs/fabric/index.d.ts +1 -0
- package/dist/cjs/fabric/index.d.ts.map +1 -1
- package/dist/cjs/fabric/index.js +1 -0
- package/dist/cjs/fabric/index.js.map +1 -1
- package/dist/cjs/groups/{FabricGroupsManager.d.ts → FabricGroups.d.ts} +2 -2
- package/dist/cjs/groups/FabricGroups.d.ts.map +1 -0
- package/dist/cjs/groups/{FabricGroupsManager.js → FabricGroups.js} +9 -9
- package/dist/cjs/groups/FabricGroups.js.map +6 -0
- package/dist/cjs/groups/KeySets.js +1 -1
- package/dist/cjs/groups/KeySets.js.map +1 -1
- package/dist/cjs/groups/index.d.ts +1 -1
- package/dist/cjs/groups/index.d.ts.map +1 -1
- package/dist/cjs/groups/index.js +1 -1
- package/dist/cjs/groups/index.js.map +1 -1
- package/dist/cjs/interaction/{AccessControlManager.d.ts → FabricAccessControl.d.ts} +12 -7
- package/dist/cjs/interaction/FabricAccessControl.d.ts.map +1 -0
- package/dist/cjs/interaction/{AccessControlManager.js → FabricAccessControl.js} +46 -21
- package/dist/cjs/interaction/FabricAccessControl.js.map +6 -0
- package/dist/cjs/interaction/index.d.ts +1 -1
- package/dist/cjs/interaction/index.d.ts.map +1 -1
- package/dist/cjs/interaction/index.js +1 -1
- package/dist/cjs/interaction/index.js.map +1 -1
- package/dist/cjs/mdns/MdnsScanner.d.ts +1 -1
- package/dist/cjs/mdns/MdnsScanner.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsScanner.js +2 -6
- package/dist/cjs/mdns/MdnsScanner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +2 -4
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +6 -0
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +13 -0
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts +1 -1
- package/dist/cjs/session/NodeSession.js +1 -1
- package/dist/cjs/session/Session.d.ts +1 -1
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +1 -0
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +34 -30
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseMessages.d.ts +8 -8
- package/dist/cjs/session/case/CaseMessages.js +8 -8
- package/dist/cjs/session/case/CaseMessages.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +26 -23
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseClient.js +4 -1
- package/dist/cjs/session/pase/PaseClient.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +4 -1
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/certificate/AttestationCertificateManager.js +2 -2
- package/dist/esm/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.d.ts +2 -2
- package/dist/esm/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.js +5 -5
- package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
- package/dist/esm/certificate/CertificateManager.d.ts +1 -1
- package/dist/esm/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateManager.js +22 -11
- package/dist/esm/certificate/CertificateManager.js.map +1 -1
- package/dist/esm/certificate/CertificationDeclarationManager.d.ts +1 -1
- package/dist/esm/certificate/DeviceCertification.d.ts +1 -1
- package/dist/esm/certificate/DeviceCertification.d.ts.map +1 -1
- package/dist/esm/certificate/DeviceCertification.js +5 -3
- package/dist/esm/certificate/DeviceCertification.js.map +1 -1
- package/dist/esm/codec/BtpCodec.d.ts +1 -1
- package/dist/esm/codec/MessageCodec.d.ts +1 -1
- package/dist/esm/events/OccurrenceManager.d.ts +1 -0
- package/dist/esm/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/esm/events/OccurrenceManager.js +14 -8
- package/dist/esm/events/OccurrenceManager.js.map +1 -1
- package/dist/esm/fabric/Fabric.d.ts +8 -6
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +22 -14
- package/dist/esm/fabric/Fabric.js.map +1 -1
- package/dist/esm/fabric/FabricAuthority.d.ts +4 -0
- package/dist/esm/fabric/FabricAuthority.d.ts.map +1 -1
- package/dist/esm/fabric/FabricAuthority.js +6 -0
- package/dist/esm/fabric/FabricAuthority.js.map +1 -1
- package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
- package/dist/esm/fabric/FabricManager.js +9 -2
- package/dist/esm/fabric/FabricManager.js.map +1 -1
- package/dist/esm/fabric/TestFabric.d.ts +30 -0
- package/dist/esm/fabric/TestFabric.d.ts.map +1 -0
- package/dist/esm/fabric/TestFabric.js +50 -0
- package/dist/esm/fabric/TestFabric.js.map +6 -0
- package/dist/esm/fabric/index.d.ts +1 -0
- package/dist/esm/fabric/index.d.ts.map +1 -1
- package/dist/esm/fabric/index.js +1 -0
- package/dist/esm/fabric/index.js.map +1 -1
- package/dist/esm/groups/{FabricGroupsManager.d.ts → FabricGroups.d.ts} +2 -2
- package/dist/esm/groups/FabricGroups.d.ts.map +1 -0
- package/dist/esm/groups/{FabricGroupsManager.js → FabricGroups.js} +6 -6
- package/dist/esm/groups/FabricGroups.js.map +6 -0
- package/dist/esm/groups/KeySets.js +1 -1
- package/dist/esm/groups/KeySets.js.map +1 -1
- package/dist/esm/groups/index.d.ts +1 -1
- package/dist/esm/groups/index.d.ts.map +1 -1
- package/dist/esm/groups/index.js +1 -1
- package/dist/esm/interaction/{AccessControlManager.d.ts → FabricAccessControl.d.ts} +12 -7
- package/dist/esm/interaction/FabricAccessControl.d.ts.map +1 -0
- package/dist/esm/interaction/{AccessControlManager.js → FabricAccessControl.js} +44 -19
- package/dist/esm/interaction/FabricAccessControl.js.map +6 -0
- package/dist/esm/interaction/index.d.ts +1 -1
- package/dist/esm/interaction/index.d.ts.map +1 -1
- package/dist/esm/interaction/index.js +1 -1
- package/dist/esm/mdns/MdnsScanner.d.ts +1 -1
- package/dist/esm/mdns/MdnsScanner.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsScanner.js +2 -6
- package/dist/esm/mdns/MdnsScanner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +2 -4
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +6 -0
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +13 -0
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts +1 -1
- package/dist/esm/session/NodeSession.js +1 -1
- package/dist/esm/session/Session.d.ts +1 -1
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +1 -0
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +34 -30
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseMessages.d.ts +8 -8
- package/dist/esm/session/case/CaseMessages.js +8 -8
- package/dist/esm/session/case/CaseMessages.js.map +1 -1
- package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
- package/dist/esm/session/case/CaseServer.js +26 -23
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/dist/esm/session/pase/PaseClient.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseClient.js +4 -1
- package/dist/esm/session/pase/PaseClient.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +4 -1
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/certificate/AttestationCertificateManager.ts +2 -2
- package/src/certificate/CertificateAuthority.ts +7 -7
- package/src/certificate/CertificateManager.ts +22 -11
- package/src/certificate/DeviceCertification.ts +5 -3
- package/src/events/OccurrenceManager.ts +16 -9
- package/src/fabric/Fabric.ts +24 -15
- package/src/fabric/FabricAuthority.ts +7 -0
- package/src/fabric/FabricManager.ts +9 -2
- package/src/fabric/TestFabric.ts +73 -0
- package/src/fabric/index.ts +1 -0
- package/src/groups/{FabricGroupsManager.ts → FabricGroups.ts} +4 -4
- package/src/groups/KeySets.ts +1 -1
- package/src/groups/index.ts +1 -1
- package/src/interaction/{AccessControlManager.ts → FabricAccessControl.ts} +61 -25
- package/src/interaction/index.ts +1 -1
- package/src/mdns/MdnsScanner.ts +2 -6
- package/src/peer/ControllerCommissioningFlow.ts +2 -4
- package/src/protocol/DeviceCommissioner.ts +1 -1
- package/src/protocol/MessageExchange.ts +14 -0
- package/src/session/NodeSession.ts +1 -1
- package/src/session/SessionManager.ts +1 -0
- package/src/session/case/CaseClient.ts +34 -30
- package/src/session/case/CaseMessages.ts +8 -8
- package/src/session/case/CaseServer.ts +27 -23
- package/src/session/pase/PaseClient.ts +4 -1
- package/src/session/pase/PaseServer.ts +4 -1
- package/dist/cjs/groups/FabricGroupsManager.d.ts.map +0 -1
- package/dist/cjs/groups/FabricGroupsManager.js.map +0 -6
- package/dist/cjs/interaction/AccessControlManager.d.ts.map +0 -1
- package/dist/cjs/interaction/AccessControlManager.js.map +0 -6
- package/dist/esm/groups/FabricGroupsManager.d.ts.map +0 -1
- package/dist/esm/groups/FabricGroupsManager.js.map +0 -6
- package/dist/esm/interaction/AccessControlManager.d.ts.map +0 -1
- package/dist/esm/interaction/AccessControlManager.js.map +0 -6
|
@@ -70,7 +70,7 @@ class CaseServer {
|
|
|
70
70
|
return false;
|
|
71
71
|
}
|
|
72
72
|
const { sharedSecret, fabric, peerNodeId, caseAuthenticatedTags } = cx.resumptionRecord;
|
|
73
|
-
const peerResumeKey = await Crypto.
|
|
73
|
+
const peerResumeKey = await Crypto.createHkdfKey(
|
|
74
74
|
sharedSecret,
|
|
75
75
|
Bytes.concat(cx.peerRandom, cx.peerResumptionId),
|
|
76
76
|
KDFSR1_KEY_INFO
|
|
@@ -97,7 +97,7 @@ class CaseServer {
|
|
|
97
97
|
caseAuthenticatedTags
|
|
98
98
|
});
|
|
99
99
|
const resumeSalt = Bytes.concat(cx.peerRandom, cx.localResumptionId);
|
|
100
|
-
const resumeKey = await Crypto.
|
|
100
|
+
const resumeKey = await Crypto.createHkdfKey(sharedSecret, resumeSalt, KDFSR2_KEY_INFO);
|
|
101
101
|
const resumeMic = Crypto.encrypt(resumeKey, new Uint8Array(0), RESUME2_MIC_NONCE);
|
|
102
102
|
try {
|
|
103
103
|
await cx.messenger.sendSigma2Resume({
|
|
@@ -135,26 +135,26 @@ class CaseServer {
|
|
|
135
135
|
const responderRandom = Crypto.getRandom();
|
|
136
136
|
const fabric = await this.#fabrics.findFabricFromDestinationId(cx.destinationId, cx.peerRandom);
|
|
137
137
|
const { operationalCert: nodeOpCert, intermediateCACert, operationalIdentityProtectionKey } = fabric;
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
);
|
|
138
|
+
const key = await Crypto.createKeyPair();
|
|
139
|
+
const responderEcdhPublicKey = key.publicBits;
|
|
140
|
+
const sharedSecret = await Crypto.generateDhSecret(key, PublicKey(cx.peerEcdhPublicKey));
|
|
141
141
|
const sigma2Salt = Bytes.concat(
|
|
142
142
|
operationalIdentityProtectionKey,
|
|
143
143
|
responderRandom,
|
|
144
144
|
responderEcdhPublicKey,
|
|
145
|
-
await Crypto.
|
|
145
|
+
await Crypto.computeSha256(cx.bytes)
|
|
146
146
|
);
|
|
147
|
-
const sigma2Key = await Crypto.
|
|
147
|
+
const sigma2Key = await Crypto.createHkdfKey(sharedSecret, sigma2Salt, KDFSR2_INFO);
|
|
148
148
|
const signatureData = TlvSignedData.encode({
|
|
149
|
-
nodeOpCert,
|
|
150
|
-
intermediateCACert,
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
responderNoc: nodeOpCert,
|
|
150
|
+
responderIcac: intermediateCACert,
|
|
151
|
+
responderPublicKey: responderEcdhPublicKey,
|
|
152
|
+
initiatorPublicKey: cx.peerEcdhPublicKey
|
|
153
153
|
});
|
|
154
154
|
const signature = await fabric.sign(signatureData);
|
|
155
155
|
const encryptedData = TlvEncryptedDataSigma2.encode({
|
|
156
|
-
nodeOpCert,
|
|
157
|
-
intermediateCACert,
|
|
156
|
+
responderNoc: nodeOpCert,
|
|
157
|
+
responderIcac: intermediateCACert,
|
|
158
158
|
signature,
|
|
159
159
|
resumptionId: cx.localResumptionId
|
|
160
160
|
});
|
|
@@ -172,20 +172,23 @@ class CaseServer {
|
|
|
172
172
|
sigma3Bytes,
|
|
173
173
|
sigma3: { encrypted: peerEncrypted }
|
|
174
174
|
} = await cx.messenger.readSigma3();
|
|
175
|
-
const sigma3Salt = Bytes.concat(
|
|
176
|
-
|
|
175
|
+
const sigma3Salt = Bytes.concat(
|
|
176
|
+
operationalIdentityProtectionKey,
|
|
177
|
+
await Crypto.computeSha256([cx.bytes, sigma2Bytes])
|
|
178
|
+
);
|
|
179
|
+
const sigma3Key = await Crypto.createHkdfKey(sharedSecret, sigma3Salt, KDFSR3_INFO);
|
|
177
180
|
const peerDecryptedData = Crypto.decrypt(sigma3Key, peerEncrypted, TBE_DATA3_NONCE);
|
|
178
181
|
const {
|
|
179
|
-
|
|
180
|
-
|
|
182
|
+
responderNoc: peerNewOpCert,
|
|
183
|
+
responderIcac: peerIntermediateCACert,
|
|
181
184
|
signature: peerSignature
|
|
182
185
|
} = TlvEncryptedDataSigma3.decode(peerDecryptedData);
|
|
183
186
|
await fabric.verifyCredentials(peerNewOpCert, peerIntermediateCACert);
|
|
184
187
|
const peerSignatureData = TlvSignedData.encode({
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
188
|
+
responderNoc: peerNewOpCert,
|
|
189
|
+
responderIcac: peerIntermediateCACert,
|
|
190
|
+
responderPublicKey: cx.peerEcdhPublicKey,
|
|
191
|
+
initiatorPublicKey: responderEcdhPublicKey
|
|
189
192
|
});
|
|
190
193
|
const {
|
|
191
194
|
ellipticCurvePublicKey: peerPublicKey,
|
|
@@ -194,10 +197,10 @@ class CaseServer {
|
|
|
194
197
|
if (fabric.fabricId !== peerFabricId) {
|
|
195
198
|
throw new UnexpectedDataError(`Fabric ID mismatch: ${fabric.fabricId} !== ${peerFabricId}`);
|
|
196
199
|
}
|
|
197
|
-
await Crypto.
|
|
200
|
+
await Crypto.verifyEcdsa(PublicKey(peerPublicKey), peerSignatureData, peerSignature);
|
|
198
201
|
const secureSessionSalt = Bytes.concat(
|
|
199
202
|
operationalIdentityProtectionKey,
|
|
200
|
-
await Crypto.
|
|
203
|
+
await Crypto.computeSha256([cx.bytes, sigma2Bytes, sigma3Bytes])
|
|
201
204
|
);
|
|
202
205
|
const secureSession = await this.#sessions.createSecureSession({
|
|
203
206
|
sessionId: responderSessionId,
|
|
@@ -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,OAAO,QAAQ,oBAAoB,QAAQ,WAAW,2BAA2B;AAG1F,SAAS,QAAQ,oBAAoB,kCAAkD;AACvF,SAAS,iCAAiC;AAC1C,SAAwB,2BAA2B;AAGnD,SAAS,kCAAkC;AAC3C;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,2BAA2B;AAEpC,MAAM,SAAS,OAAO,IAAI,YAAY;AAE/B,MAAM,WAAsC;AAAA,EACtC,KAAK;AAAA,EACL,wBAAwB;AAAA,EAEjC;AAAA,EACA;AAAA,EAEA,YAAY,UAA0B,SAAwB;AAC1D,SAAK,YAAY;AACjB,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,MAAM,cAAc,UAA2B;AAC3C,UAAM,YAAY,IAAI,oBAAoB,QAAQ;AAClD,QAAI;AACA,YAAM,KAAK,cAAc,SAAS;AAAA,IACtC,SAAS,OAAO;AACZ,aAAO,MAAM,8CAA8C,KAAK;AAEhE,UAAI,iBAAiB,qBAAqB;AACtC,cAAM,UAAU,UAAU,mBAAmB,kBAAkB;AAAA,MACnE,WAES,EAAE,iBAAiB,6BAA6B;AACrD,cAAM,UAAU,UAAU,mBAAmB,YAAY;AAAA,MAC7D;AAAA,IACJ,UAAE;AAEE,YAAM,SAAS,QAAQ,QAAQ;AAAA,IACnC;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,WAAgC;AAChD,WAAO,KAAK,iCAAiC,UAAU,eAAe,CAAC,EAAE;AAGzE,UAAM,EAAE,aAAa,OAAO,IAAI,MAAM,UAAU,WAAW;AAC3D,UAAM,mBACF,OAAO,iBAAiB,UAAa,OAAO,uBAAuB,SAC7D,KAAK,UAAU,yBAAyB,OAAO,YAAY,IAC3D;AAEV,UAAM,UAAU,IAAI,cAAc,WAAW,aAAa,QAAQ,gBAAgB;AAGlF,QAAI,MAAM,KAAK,QAAQ,OAAO,GAAG;AAC7B;AAAA,IACJ;AAGA,QAAI,MAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,qDAAqD,UAAU,eAAe,CAAC;AAAA,MAC/E,QAAQ;AAAA,MACR,QAAQ;AAAA,IACZ;AAEA,UAAM,IAAI,oBAAoB,sCAAsC;AAAA,EACxE;AAAA,EAEA,MAAM,QAAQ,IAAmB;AAC7B,QAAI,GAAG,qBAAqB,UAAa,GAAG,kBAAkB,UAAa,GAAG,qBAAqB,QAAW;AAC1G,aAAO;AAAA,IACX;AAEA,UAAM,EAAE,cAAc,QAAQ,YAAY,sBAAsB,IAAI,GAAG;AACvE,UAAM,gBAAgB,MAAM,OAAO;AAAA,MAC/B;AAAA,MACA,MAAM,OAAO,GAAG,YAAY,GAAG,gBAAgB;AAAA,MAC/C;AAAA,IACJ;AAEA,QAAI;AACA,aAAO,QAAQ,eAAe,GAAG,eAAe,iBAAiB;AAAA,IACrE,SAAS,GAAG;AACR,yBAAmB,OAAO,CAAC;AAG3B,SAAG,mBAAmB,GAAG,gBAAgB;AAEzC,aAAO;AAAA,IACX;AAGA,UAAM,qBAAqB,MAAM,KAAK,UAAU,0BAA0B;AAC1E,UAAM,oBAAoB,MAAM,OAAO,GAAG,YAAY,GAAG,gBAAgB;AACzE,UAAM,gBAAgB,MAAM,KAAK,UAAU,oBAAoB;AAAA,MAC3D,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,eAAe,GAAG;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,GAAG;AAAA,MAC1B;AAAA,IACJ,CAAC;AAGD,UAAM,aAAa,MAAM,OAAO,GAAG,YAAY,GAAG,iBAAiB;AACnE,UAAM,YAAY,MAAM,OAAO,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaseClient.d.ts","sourceRoot":"","sources":["../../../../src/session/pase/PaseClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6B,eAAe,EAAgC,MAAM,UAAU,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,qBAAa,UAAU;;gBAGP,QAAQ,EAAE,cAAc;WAIvB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;IAKhG,MAAM,CAAC,sBAAsB;IAS7B,MAAM,CAAC,2BAA2B;IAI5B,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"PaseClient.d.ts","sourceRoot":"","sources":["../../../../src/session/pase/PaseClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6B,eAAe,EAAgC,MAAM,UAAU,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,qBAAa,UAAU;;gBAGP,QAAQ,EAAE,cAAc;WAIvB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;IAKhG,MAAM,CAAC,sBAAsB;IAS7B,MAAM,CAAC,2BAA2B;IAI5B,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM;CA6E/F"}
|
|
@@ -58,7 +58,10 @@ class PaseClient {
|
|
|
58
58
|
...responderSessionParams ?? {}
|
|
59
59
|
};
|
|
60
60
|
const { w0, w1 } = await Spake2p.computeW0W1(pbkdfParameters, setupPin);
|
|
61
|
-
const spake2p = Spake2p.create(
|
|
61
|
+
const spake2p = Spake2p.create(
|
|
62
|
+
await Crypto.computeSha256([SPAKE_CONTEXT, requestPayload, responsePayload]),
|
|
63
|
+
w0
|
|
64
|
+
);
|
|
62
65
|
const X = spake2p.computeX();
|
|
63
66
|
await messenger.sendPasePake1({ x: X });
|
|
64
67
|
const { y: Y, verifier } = await messenger.readPasePake2();
|
|
@@ -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,OAAO,QAAQ,IAAI,QAAyB,SAAS,2BAA2B;AAEzF,SAAS,sBAAsB,QAAQ,0BAA0B;AAGjE,SAAS,qBAAqB,qBAAqB,qBAAqB;AAExE,MAAM,EAAE,gBAAgB,IAAI;AAE5B,MAAM,SAAS,OAAO,IAAI,YAAY;AAE/B,MAAM,WAAW;AAAA,EACpB;AAAA,EAEA,YAAY,UAA0B;AAClC,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,aAAa,6BAA6B,cAAsB,iBAAkC;AAC9F,UAAM,EAAE,IAAI,EAAE,IAAI,MAAM,QAAQ,WAAW,iBAAiB,YAAY;AACxE,WAAO,MAAM,OAAO,gBAAgB,IAAI,EAAE,GAAG,CAAC;AAAA,EAClD;AAAA,EAEA,OAAO,yBAAyB;AAC5B,QAAI;AACJ,eAAY,OAAO,gBAAgB,IAAI,WAAY;AACnD,QAAI,qBAAqB,oBAAoB,SAAS,QAAQ,GAAG;AAC7D,kBAAY;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,8BAA8B;AACjC,WAAO,OAAO,gBAAgB,IAAI;AAAA,EACtC;AAAA,EAEA,MAAM,KAAK,mBAAsC,UAA2B,UAAkB;AAC1F,UAAM,YAAY,IAAI,oBAAoB,QAAQ;AAClD,UAAM,kBAAkB,OAAO,UAAU;AACzC,UAAM,qBAAqB,MAAM,KAAK,UAAU,0BAA0B;AAG1E,UAAM,eACF,kBAAkB,qBAAqB,aACvC,kBAAkB,qBAAqB,aACvC;AACJ,UAAM,iBAAiB,MAAM,UAAU,sBAAsB;AAAA,MACzD;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,oBAAoB;AAAA,MACpB,wBAAwB;AAAA,QACpB,GAAG;AAAA;AAAA;AAAA,QAGH,mBAAmB,eAAe,kBAAkB,oBAAoB;AAAA,MAC5E;AAAA,IACJ,CAAC;AACD,UAAM;AAAA,MACF;AAAA,MACA,UAAU,EAAE,iBAAiB,oBAAoB,uBAAuB;AAAA,IAC5E,IAAI,MAAM,UAAU,uBAAuB;AAC3C,QAAI,oBAAoB,QAAW;AAG/B,YAAM,UAAU,UAAU,mBAAmB,YAAY;AACzD,YAAM,IAAI,oBAAoB,0EAA0E;AAAA,IAC5G;AAGA,wBAAoB;AAAA,MAChB,GAAG,SAAS,QAAQ;AAAA,MACpB,GAAI,0BAA0B,CAAC;AAAA,IACnC;AAGA,UAAM,EAAE,IAAI,GAAG,IAAI,MAAM,QAAQ,YAAY,iBAAiB,QAAQ;AACtE,UAAM,UAAU,QAAQ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaseServer.d.ts","sourceRoot":"","sources":["../../../../src/session/pase/PaseServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKH,eAAe,EACf,eAAe,EAKlB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,OAAO,EAAuB,mBAAmB,EAAiB,MAAM,oBAAoB,CAAC;AAS7F,qBAAa,oCAAqC,SAAQ,eAAe;CAAG;AAE5E,qBAAa,UAAW,YAAW,eAAe;;IAuB1C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAzBrC,QAAQ,CAAC,EAAE,KAA8B;IACzC,QAAQ,CAAC,qBAAqB,SAAS;WAK1B,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;IAKrG,MAAM,CAAC,qBAAqB,CACxB,QAAQ,EAAE,cAAc,EACxB,iBAAiB,EAAE,UAAU,EAC7B,eAAe,CAAC,EAAE,eAAe;gBAQzB,QAAQ,EAAE,cAAc,EACf,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,UAAU,EACb,eAAe,CAAC,EAAE,eAAe,YAAA;IAGhD,aAAa,CAAC,QAAQ,EAAE,eAAe;YAuC/B,oBAAoB;
|
|
1
|
+
{"version":3,"file":"PaseServer.d.ts","sourceRoot":"","sources":["../../../../src/session/pase/PaseServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKH,eAAe,EACf,eAAe,EAKlB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,OAAO,EAAuB,mBAAmB,EAAiB,MAAM,oBAAoB,CAAC;AAS7F,qBAAa,oCAAqC,SAAQ,eAAe;CAAG;AAE5E,qBAAa,UAAW,YAAW,eAAe;;IAuB1C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAzBrC,QAAQ,CAAC,EAAE,KAA8B;IACzC,QAAQ,CAAC,qBAAqB,SAAS;WAK1B,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;IAKrG,MAAM,CAAC,qBAAqB,CACxB,QAAQ,EAAE,cAAc,EACxB,iBAAiB,EAAE,UAAU,EAC7B,eAAe,CAAC,EAAE,eAAe;gBAQzB,QAAQ,EAAE,cAAc,EACf,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,UAAU,EACb,eAAe,CAAC,EAAE,eAAe,YAAA;IAGhD,aAAa,CAAC,QAAQ,EAAE,eAAe;YAuC/B,oBAAoB;IAgF5B,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,UAAO;IAU9D,KAAK;CAGd"}
|
|
@@ -107,7 +107,10 @@ class PaseServer {
|
|
|
107
107
|
maxTcpMessageSize: tcpSupported ? responderSessionParams.maxTcpMessageSize : void 0
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
|
-
const spake2p = Spake2p.create(
|
|
110
|
+
const spake2p = Spake2p.create(
|
|
111
|
+
await Crypto.computeSha256([SPAKE_CONTEXT, requestPayload, responsePayload]),
|
|
112
|
+
this.w0
|
|
113
|
+
);
|
|
111
114
|
const { x: X } = await messenger.readPasePake1();
|
|
112
115
|
const Y = spake2p.computeY();
|
|
113
116
|
const { Ke, hAY, hBX } = await spake2p.computeSecretAndVerifiersFromX(this.L, X, Y);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/session/pase/PaseServer.ts"],
|
|
4
|
-
"mappings": "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
|
|
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.
|
|
3
|
+
"version": "0.15.0-alpha.0-20250613-a55f991d4",
|
|
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.
|
|
44
|
-
"@matter/model": "0.
|
|
45
|
-
"@matter/types": "0.
|
|
43
|
+
"@matter/general": "0.15.0-alpha.0-20250613-a55f991d4",
|
|
44
|
+
"@matter/model": "0.15.0-alpha.0-20250613-a55f991d4",
|
|
45
|
+
"@matter/types": "0.15.0-alpha.0-20250613-a55f991d4"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@matter/tools": "0.
|
|
49
|
-
"@matter/testing": "0.
|
|
48
|
+
"@matter/tools": "0.15.0-alpha.0-20250613-a55f991d4",
|
|
49
|
+
"@matter/testing": "0.15.0-alpha.0-20250613-a55f991d4"
|
|
50
50
|
},
|
|
51
51
|
"files": [
|
|
52
52
|
"dist/**/*",
|
|
@@ -53,7 +53,7 @@ export class AttestationCertificateManager {
|
|
|
53
53
|
|
|
54
54
|
static async create(vendorId: VendorId) {
|
|
55
55
|
const key = await Crypto.createKeyPair();
|
|
56
|
-
const identifier = await Crypto.
|
|
56
|
+
const identifier = await Crypto.computeSha256(key.publicKey);
|
|
57
57
|
return new AttestationCertificateManager(vendorId, key, identifier.slice(0, 20));
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -167,7 +167,7 @@ export class AttestationCertificateManager {
|
|
|
167
167
|
keyUsage: {
|
|
168
168
|
digitalSignature: true,
|
|
169
169
|
},
|
|
170
|
-
subjectKeyIdentifier: (await Crypto.
|
|
170
|
+
subjectKeyIdentifier: (await Crypto.computeSha256(publicKey)).slice(0, 20),
|
|
171
171
|
authorityKeyIdentifier: this.#paiKeyIdentifier,
|
|
172
172
|
},
|
|
173
173
|
};
|
|
@@ -49,17 +49,17 @@ export class CertificateAuthority {
|
|
|
49
49
|
return this.#construction;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
static async create(options
|
|
52
|
+
static async create(options?: StorageContext | CertificateAuthority.Configuration) {
|
|
53
53
|
return asyncNew(CertificateAuthority, options);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
constructor(options
|
|
56
|
+
constructor(options?: StorageContext | CertificateAuthority.Configuration) {
|
|
57
57
|
this.#construction = Construction(this, async () => {
|
|
58
58
|
// Use provided CA config or read from storage, otherwise initialize and store
|
|
59
|
-
const certValues = options instanceof StorageContext ? await options.values() : options;
|
|
59
|
+
const certValues = options instanceof StorageContext ? await options.values() : (options ?? {});
|
|
60
60
|
|
|
61
61
|
this.#rootKeyPair = await Crypto.createKeyPair();
|
|
62
|
-
this.#rootKeyIdentifier = (await Crypto.
|
|
62
|
+
this.#rootKeyIdentifier = (await Crypto.computeSha256(this.#rootKeyPair.publicKey)).slice(0, 20);
|
|
63
63
|
this.#rootCertBytes = await this.#generateRootCert();
|
|
64
64
|
|
|
65
65
|
if (
|
|
@@ -135,7 +135,7 @@ export class CertificateAuthority {
|
|
|
135
135
|
authorityKeyIdentifier: this.#initializedRootKeyIdentifier,
|
|
136
136
|
},
|
|
137
137
|
};
|
|
138
|
-
const signature = await Crypto.
|
|
138
|
+
const signature = await Crypto.signEcdsa(
|
|
139
139
|
this.#initializedRootKeyPair,
|
|
140
140
|
CertificateManager.rootCertToAsn1(unsignedCertificate),
|
|
141
141
|
);
|
|
@@ -166,12 +166,12 @@ export class CertificateAuthority {
|
|
|
166
166
|
digitalSignature: true,
|
|
167
167
|
},
|
|
168
168
|
extendedKeyUsage: [2, 1],
|
|
169
|
-
subjectKeyIdentifier: (await Crypto.
|
|
169
|
+
subjectKeyIdentifier: (await Crypto.computeSha256(publicKey)).slice(0, 20),
|
|
170
170
|
authorityKeyIdentifier: this.#initializedRootKeyIdentifier,
|
|
171
171
|
},
|
|
172
172
|
};
|
|
173
173
|
|
|
174
|
-
const signature = await Crypto.
|
|
174
|
+
const signature = await Crypto.signEcdsa(
|
|
175
175
|
this.#initializedRootKeyPair,
|
|
176
176
|
CertificateManager.nodeOperationalCertToAsn1(unsignedCertificate),
|
|
177
177
|
);
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
BitByteArray,
|
|
9
8
|
Bytes,
|
|
10
9
|
ContextTagged,
|
|
11
10
|
ContextTaggedBytes,
|
|
12
11
|
Crypto,
|
|
13
12
|
DatatypeOverride,
|
|
13
|
+
DerBitString,
|
|
14
14
|
DerCodec,
|
|
15
15
|
DerKey,
|
|
16
16
|
DerObject,
|
|
@@ -666,10 +666,11 @@ export namespace CertificateManager {
|
|
|
666
666
|
|
|
667
667
|
export async function deviceAttestationCertToAsn1(cert: Unsigned<DeviceAttestationCertificate>, key: Key) {
|
|
668
668
|
const certificate = genericBuildAsn1Structure(cert);
|
|
669
|
+
const signature = await Crypto.signEcdsa(key, DerCodec.encode(certificate), "der");
|
|
669
670
|
const certBytes = DerCodec.encode({
|
|
670
671
|
certificate,
|
|
671
672
|
signAlgorithm: X962.EcdsaWithSHA256,
|
|
672
|
-
signature:
|
|
673
|
+
signature: DerBitString(signature),
|
|
673
674
|
});
|
|
674
675
|
assertCertificateDerSize(certBytes);
|
|
675
676
|
return certBytes;
|
|
@@ -680,10 +681,11 @@ export namespace CertificateManager {
|
|
|
680
681
|
key: Key,
|
|
681
682
|
) {
|
|
682
683
|
const certificate = genericBuildAsn1Structure(cert);
|
|
684
|
+
const signature = await Crypto.signEcdsa(key, DerCodec.encode(certificate), "der");
|
|
683
685
|
const certBytes = DerCodec.encode({
|
|
684
686
|
certificate,
|
|
685
687
|
signAlgorithm: X962.EcdsaWithSHA256,
|
|
686
|
-
signature:
|
|
688
|
+
signature: DerBitString(signature),
|
|
687
689
|
});
|
|
688
690
|
assertCertificateDerSize(certBytes);
|
|
689
691
|
return certBytes;
|
|
@@ -697,13 +699,13 @@ export namespace CertificateManager {
|
|
|
697
699
|
const certBytes = DerCodec.encode({
|
|
698
700
|
certificate,
|
|
699
701
|
signAlgorithm: X962.EcdsaWithSHA256,
|
|
700
|
-
signature:
|
|
702
|
+
signature: DerBitString(await Crypto.signEcdsa(key, DerCodec.encode(certificate), "der")),
|
|
701
703
|
});
|
|
702
704
|
assertCertificateDerSize(certBytes);
|
|
703
705
|
return certBytes;
|
|
704
706
|
}
|
|
705
707
|
|
|
706
|
-
export function certificationDeclarationToAsn1(
|
|
708
|
+
export async function certificationDeclarationToAsn1(
|
|
707
709
|
eContent: Uint8Array,
|
|
708
710
|
subjectKeyIdentifier: Uint8Array,
|
|
709
711
|
privateKey: JsonWebKey,
|
|
@@ -718,7 +720,7 @@ export namespace CertificateManager {
|
|
|
718
720
|
subjectKeyIdentifier: ContextTaggedBytes(0, subjectKeyIdentifier),
|
|
719
721
|
digestAlgorithm: SHA256_CMS,
|
|
720
722
|
signatureAlgorithm: X962.EcdsaWithSHA256,
|
|
721
|
-
signature: Crypto.
|
|
723
|
+
signature: await Crypto.signEcdsa(privateKey, eContent, "der"),
|
|
722
724
|
},
|
|
723
725
|
],
|
|
724
726
|
};
|
|
@@ -861,7 +863,11 @@ export namespace CertificateManager {
|
|
|
861
863
|
);
|
|
862
864
|
}
|
|
863
865
|
|
|
864
|
-
await Crypto.
|
|
866
|
+
await Crypto.verifyEcdsa(
|
|
867
|
+
PublicKey(rootCert.ellipticCurvePublicKey),
|
|
868
|
+
rootCertToAsn1(rootCert),
|
|
869
|
+
rootCert.signature,
|
|
870
|
+
);
|
|
865
871
|
}
|
|
866
872
|
|
|
867
873
|
/**
|
|
@@ -985,7 +991,7 @@ export namespace CertificateManager {
|
|
|
985
991
|
);
|
|
986
992
|
}
|
|
987
993
|
|
|
988
|
-
await Crypto.
|
|
994
|
+
await Crypto.verifyEcdsa(
|
|
989
995
|
PublicKey((icaCert ?? rootCert).ellipticCurvePublicKey),
|
|
990
996
|
nodeOperationalCertToAsn1(nocCert),
|
|
991
997
|
nocCert.signature,
|
|
@@ -1103,7 +1109,7 @@ export namespace CertificateManager {
|
|
|
1103
1109
|
);
|
|
1104
1110
|
}
|
|
1105
1111
|
|
|
1106
|
-
await Crypto.
|
|
1112
|
+
await Crypto.verifyEcdsa(
|
|
1107
1113
|
PublicKey(rootCert.ellipticCurvePublicKey),
|
|
1108
1114
|
intermediateCaCertToAsn1(icaCert),
|
|
1109
1115
|
icaCert.signature,
|
|
@@ -1121,7 +1127,7 @@ export namespace CertificateManager {
|
|
|
1121
1127
|
return DerCodec.encode({
|
|
1122
1128
|
request,
|
|
1123
1129
|
signAlgorithm: X962.EcdsaWithSHA256,
|
|
1124
|
-
signature:
|
|
1130
|
+
signature: DerBitString(await Crypto.signEcdsa(key, DerCodec.encode(request), "der")),
|
|
1125
1131
|
});
|
|
1126
1132
|
}
|
|
1127
1133
|
|
|
@@ -1153,7 +1159,12 @@ export namespace CertificateManager {
|
|
|
1153
1159
|
)
|
|
1154
1160
|
)
|
|
1155
1161
|
throw new CertificateError("Unsupported signature type");
|
|
1156
|
-
await Crypto.
|
|
1162
|
+
await Crypto.verifyEcdsa(
|
|
1163
|
+
PublicKey(publicKey),
|
|
1164
|
+
DerCodec.encode(requestNode),
|
|
1165
|
+
signatureNode[DerKey.Bytes],
|
|
1166
|
+
"der",
|
|
1167
|
+
);
|
|
1157
1168
|
|
|
1158
1169
|
return publicKey;
|
|
1159
1170
|
}
|
|
@@ -55,7 +55,7 @@ export class DeviceCertification {
|
|
|
55
55
|
privateKey: PrivateKey(dacKeyPair.privateKey),
|
|
56
56
|
certificate: dac,
|
|
57
57
|
intermediateCertificate: await paa.getPAICert(),
|
|
58
|
-
declaration: CertificationDeclarationManager.generate(product.vendorId, product.productId),
|
|
58
|
+
declaration: await CertificationDeclarationManager.generate(product.vendorId, product.productId),
|
|
59
59
|
};
|
|
60
60
|
};
|
|
61
61
|
}
|
|
@@ -71,8 +71,10 @@ export class DeviceCertification {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
sign(session: NodeSession, data: Uint8Array) {
|
|
75
|
-
|
|
74
|
+
async sign(session: NodeSession, data: Uint8Array) {
|
|
75
|
+
const { privateKey } = this.#assertInitialized();
|
|
76
|
+
const signature = await Crypto.signEcdsa(privateKey, [data, session.attestationChallengeKey]);
|
|
77
|
+
return signature;
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
/**
|
|
@@ -49,7 +49,6 @@ export interface OccurrenceManagerContext {
|
|
|
49
49
|
*/
|
|
50
50
|
export class OccurrenceManager {
|
|
51
51
|
#store: EventStore;
|
|
52
|
-
#storedEventCount = 0;
|
|
53
52
|
#bufferConfig: OccurrenceManager.BufferConfig;
|
|
54
53
|
#cull?: Promise<void>;
|
|
55
54
|
#iteratingValuesInProgress = false;
|
|
@@ -87,7 +86,6 @@ export class OccurrenceManager {
|
|
|
87
86
|
|
|
88
87
|
this.#construction = Construction(this, () => {
|
|
89
88
|
return MaybePromise.then(this.#store.load(), index => {
|
|
90
|
-
this.#storedEventCount = index.length;
|
|
91
89
|
// To be sure, sort the entries by number
|
|
92
90
|
index.sort(
|
|
93
91
|
// sort that way because Bigint & Number mix
|
|
@@ -108,7 +106,6 @@ export class OccurrenceManager {
|
|
|
108
106
|
async clear() {
|
|
109
107
|
await this.construction;
|
|
110
108
|
await this.#store.clear();
|
|
111
|
-
this.#storedEventCount = 0;
|
|
112
109
|
this.#occurrences.length = 0;
|
|
113
110
|
}
|
|
114
111
|
|
|
@@ -282,8 +279,7 @@ export class OccurrenceManager {
|
|
|
282
279
|
return MaybePromise.then(this.#store.add(occurrence), entry => {
|
|
283
280
|
logger.debug(`Recorded event #${entry.number}: ${Diagnostic.json(occurrence)}`);
|
|
284
281
|
this.#occurrences.push(entry);
|
|
285
|
-
this.#
|
|
286
|
-
if (this.#storedEventCount > this.#bufferConfig.maxEventAllowance) {
|
|
282
|
+
if (this.#occurrences.length > this.#bufferConfig.maxEventAllowance) {
|
|
287
283
|
this.#startCull();
|
|
288
284
|
}
|
|
289
285
|
const numberedOccurrence = {
|
|
@@ -295,6 +291,19 @@ export class OccurrenceManager {
|
|
|
295
291
|
});
|
|
296
292
|
}
|
|
297
293
|
|
|
294
|
+
remove(number: EventNumber) {
|
|
295
|
+
const index = this.#occurrences.findIndex(entry => entry.number === number);
|
|
296
|
+
if (index === -1) {
|
|
297
|
+
// Should not happen but just in case
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
this.#occurrences.splice(index, 1);
|
|
301
|
+
if (this.#cull) {
|
|
302
|
+
return this.#cull.then(() => this.#store.delete(number));
|
|
303
|
+
}
|
|
304
|
+
return this.#store.delete(number);
|
|
305
|
+
}
|
|
306
|
+
|
|
298
307
|
#startCull() {
|
|
299
308
|
if (this.#cull || this.#iteratingValuesInProgress) {
|
|
300
309
|
return;
|
|
@@ -306,7 +315,7 @@ export class OccurrenceManager {
|
|
|
306
315
|
}
|
|
307
316
|
|
|
308
317
|
#dropOldOccurrences() {
|
|
309
|
-
let toDelete = this.#
|
|
318
|
+
let toDelete = this.#occurrences.length - this.#bufferConfig.minEventAllowance;
|
|
310
319
|
if (toDelete <= 0) {
|
|
311
320
|
return;
|
|
312
321
|
}
|
|
@@ -357,7 +366,7 @@ export class OccurrenceManager {
|
|
|
357
366
|
const occurrences = this.#occurrences as Array<OccurrenceSummary | undefined>;
|
|
358
367
|
for (const priority of [EventPriority.Debug, EventPriority.Info, EventPriority.Critical]) {
|
|
359
368
|
const checkUpTo =
|
|
360
|
-
priority === EventPriority.Critical ? this.#
|
|
369
|
+
priority === EventPriority.Critical ? this.#occurrences.length : prioData[priority].minPosition;
|
|
361
370
|
if (checkUpTo === -1) {
|
|
362
371
|
// We have less than the minimum of this event type, so we can not remove any
|
|
363
372
|
continue;
|
|
@@ -382,8 +391,6 @@ export class OccurrenceManager {
|
|
|
382
391
|
}
|
|
383
392
|
this.#occurrences = occurrences.filter(entry => entry) as OccurrenceSummary[];
|
|
384
393
|
|
|
385
|
-
this.#storedEventCount = this.#occurrences.length;
|
|
386
|
-
|
|
387
394
|
if (asyncDrops.length) {
|
|
388
395
|
return MatterAggregateError.allSettled(asyncDrops, "Error dropping occurrences")
|
|
389
396
|
.then(() => {})
|
package/src/fabric/Fabric.ts
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
Bytes,
|
|
16
16
|
Crypto,
|
|
17
17
|
DataWriter,
|
|
18
|
+
Diagnostic,
|
|
18
19
|
Endian,
|
|
19
20
|
ImplementationError,
|
|
20
21
|
InternalError,
|
|
@@ -26,7 +27,8 @@ import {
|
|
|
26
27
|
PrivateKey,
|
|
27
28
|
StorageContext,
|
|
28
29
|
} from "#general";
|
|
29
|
-
import {
|
|
30
|
+
import { FabricGroups, GROUP_SECURITY_INFO } from "#groups/FabricGroups.js";
|
|
31
|
+
import { FabricAccessControl } from "#interaction/FabricAccessControl.js";
|
|
30
32
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
31
33
|
import { Session } from "#session/Session.js";
|
|
32
34
|
import { CaseAuthenticatedTag, FabricId, FabricIndex, GroupId, NodeId, VendorId } from "#types";
|
|
@@ -61,7 +63,8 @@ export class Fabric {
|
|
|
61
63
|
readonly operationalCert: Uint8Array;
|
|
62
64
|
readonly #keyPair: Key;
|
|
63
65
|
readonly #sessions = new Set<Session>();
|
|
64
|
-
readonly #groupManager:
|
|
66
|
+
readonly #groupManager: FabricGroups;
|
|
67
|
+
readonly #aclManager: FabricAccessControl;
|
|
65
68
|
#label: string;
|
|
66
69
|
#removeCallbacks = new Array<() => MaybePromise<void>>();
|
|
67
70
|
#persistCallback: ((isUpdate?: boolean) => MaybePromise<void>) | undefined;
|
|
@@ -82,7 +85,8 @@ export class Fabric {
|
|
|
82
85
|
this.operationalCert = config.operationalCert;
|
|
83
86
|
this.#label = config.label;
|
|
84
87
|
this.#keyPair = PrivateKey(config.keyPair);
|
|
85
|
-
this.#
|
|
88
|
+
this.#aclManager = new FabricAccessControl(this);
|
|
89
|
+
this.#groupManager = new FabricGroups(this);
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
get config(): Fabric.Config {
|
|
@@ -132,12 +136,16 @@ export class Fabric {
|
|
|
132
136
|
return this.#groupManager;
|
|
133
137
|
}
|
|
134
138
|
|
|
139
|
+
get acl() {
|
|
140
|
+
return this.#aclManager;
|
|
141
|
+
}
|
|
142
|
+
|
|
135
143
|
get publicKey() {
|
|
136
144
|
return this.#keyPair.publicKey;
|
|
137
145
|
}
|
|
138
146
|
|
|
139
147
|
sign(data: Uint8Array) {
|
|
140
|
-
return Crypto.
|
|
148
|
+
return Crypto.signEcdsa(this.#keyPair, data);
|
|
141
149
|
}
|
|
142
150
|
|
|
143
151
|
async verifyCredentials(operationalCert: Uint8Array, intermediateCACert?: Uint8Array) {
|
|
@@ -174,21 +182,21 @@ export class Fabric {
|
|
|
174
182
|
}
|
|
175
183
|
|
|
176
184
|
/**
|
|
177
|
-
* Returns the destination IDs for a given nodeId, random value and optional groupId.
|
|
178
|
-
*
|
|
185
|
+
* Returns the destination IDs for a given nodeId, random value and optional groupId. When groupId is provided, it
|
|
186
|
+
* returns the time-wise valid operational keys for that groupId.
|
|
179
187
|
*/
|
|
180
188
|
async currentDestinationIdFor(nodeId: NodeId, random: Uint8Array) {
|
|
181
|
-
return await Crypto.
|
|
189
|
+
return await Crypto.signHmac(this.groups.keySets.currentKeyForId(0).key, this.#generateSalt(nodeId, random));
|
|
182
190
|
}
|
|
183
191
|
|
|
184
192
|
/**
|
|
185
|
-
* Returns the destination IDs for a given nodeId, random value and optional groupId.
|
|
186
|
-
*
|
|
193
|
+
* Returns the destination IDs for a given nodeId, random value and optional groupId. When groupId is provided, it
|
|
194
|
+
* returns all operational keys for that groupId.
|
|
187
195
|
*/
|
|
188
196
|
async destinationIdsFor(nodeId: NodeId, random: Uint8Array) {
|
|
189
197
|
const salt = this.#generateSalt(nodeId, random);
|
|
190
198
|
// Check all keys of keyset 0 - typically it is only the IPK
|
|
191
|
-
const destinationIds = this.groups.keySets.allKeysForId(0).map(({ key }) => Crypto.
|
|
199
|
+
const destinationIds = this.groups.keySets.allKeysForId(0).map(({ key }) => Crypto.signHmac(key, salt));
|
|
192
200
|
return await Promise.all(destinationIds);
|
|
193
201
|
}
|
|
194
202
|
|
|
@@ -306,18 +314,19 @@ export class FabricBuilder {
|
|
|
306
314
|
ellipticCurvePublicKey,
|
|
307
315
|
} = TlvOperationalCertificate.decode(operationalCert);
|
|
308
316
|
logger.debug(
|
|
309
|
-
|
|
317
|
+
"Installing operational certificate",
|
|
318
|
+
Diagnostic.dict({ nodeId, fabricId, caseAuthenticatedTags }),
|
|
310
319
|
);
|
|
311
320
|
if (caseAuthenticatedTags !== undefined) {
|
|
312
321
|
CaseAuthenticatedTag.validateNocTagList(caseAuthenticatedTags);
|
|
313
322
|
}
|
|
314
323
|
|
|
315
324
|
if (!Bytes.areEqual(ellipticCurvePublicKey, this.#keyPair.publicKey)) {
|
|
316
|
-
throw new PublicKeyError("Operational
|
|
325
|
+
throw new PublicKeyError("Operational certificate does not match public key");
|
|
317
326
|
}
|
|
318
327
|
|
|
319
328
|
if (this.#rootCert === undefined) {
|
|
320
|
-
throw new MatterFlowError("Root
|
|
329
|
+
throw new MatterFlowError("Root certificate needs to be set first");
|
|
321
330
|
}
|
|
322
331
|
|
|
323
332
|
const rootCert = TlvRootCertificate.decode(this.#rootCert);
|
|
@@ -401,7 +410,7 @@ export class FabricBuilder {
|
|
|
401
410
|
this.#fabricIndex = fabricIndex;
|
|
402
411
|
const saltWriter = new DataWriter();
|
|
403
412
|
saltWriter.writeUInt64(this.#fabricId);
|
|
404
|
-
const operationalId = await Crypto.
|
|
413
|
+
const operationalId = await Crypto.createHkdfKey(
|
|
405
414
|
this.#rootPublicKey.slice(1),
|
|
406
415
|
saltWriter.toByteArray(),
|
|
407
416
|
COMPRESSED_FABRIC_ID_INFO,
|
|
@@ -419,7 +428,7 @@ export class FabricBuilder {
|
|
|
419
428
|
rootVendorId: this.#rootVendorId,
|
|
420
429
|
rootCert: this.#rootCert,
|
|
421
430
|
identityProtectionKey: this.#identityProtectionKey, // Epoch Key
|
|
422
|
-
operationalIdentityProtectionKey: await Crypto.
|
|
431
|
+
operationalIdentityProtectionKey: await Crypto.createHkdfKey(
|
|
423
432
|
this.#identityProtectionKey,
|
|
424
433
|
operationalId,
|
|
425
434
|
GROUP_SECURITY_INFO,
|