@matter/protocol 0.16.0-alpha.0-20251106-4e10fd77b → 0.16.0-alpha.0-20251107-6bcb5baf4
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/advertisement/PairingHintBitmap.d.ts +2 -2
- package/dist/cjs/advertisement/PairingHintBitmap.js +1 -1
- package/dist/cjs/advertisement/PairingHintBitmap.js.map +1 -1
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js +22 -4
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
- package/dist/cjs/certificate/kinds/Icac.d.ts +2 -0
- package/dist/cjs/certificate/kinds/Icac.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/Icac.js +6 -0
- package/dist/cjs/certificate/kinds/Icac.js.map +1 -1
- package/dist/cjs/certificate/kinds/Noc.d.ts +2 -0
- package/dist/cjs/certificate/kinds/Noc.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/Noc.js +6 -0
- package/dist/cjs/certificate/kinds/Noc.js.map +1 -1
- package/dist/cjs/certificate/kinds/OperationalBase.d.ts +6 -1
- package/dist/cjs/certificate/kinds/OperationalBase.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/OperationalBase.js +14 -0
- package/dist/cjs/certificate/kinds/OperationalBase.js.map +1 -1
- package/dist/cjs/certificate/kinds/Rcac.d.ts +2 -0
- package/dist/cjs/certificate/kinds/Rcac.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/Rcac.js +6 -0
- package/dist/cjs/certificate/kinds/Rcac.js.map +1 -1
- package/dist/cjs/certificate/kinds/X509Base.d.ts +10 -3
- package/dist/cjs/certificate/kinds/X509Base.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/X509Base.js +301 -13
- package/dist/cjs/certificate/kinds/X509Base.js.map +2 -2
- package/dist/cjs/certificate/kinds/definitions/asn.d.ts +13 -0
- package/dist/cjs/certificate/kinds/definitions/asn.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/definitions/asn.js +32 -22
- package/dist/cjs/certificate/kinds/definitions/asn.js.map +2 -2
- package/dist/cjs/certificate/kinds/definitions/operational.d.ts +16 -16
- package/dist/cjs/certificate/kinds/definitions/operational.js +2 -2
- package/dist/cjs/certificate/kinds/definitions/operational.js.map +1 -1
- package/dist/cjs/mdns/MdnsConsts.d.ts +1 -1
- package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsConsts.js +1 -1
- package/dist/esm/advertisement/PairingHintBitmap.d.ts +2 -2
- package/dist/esm/advertisement/PairingHintBitmap.js +1 -1
- package/dist/esm/advertisement/PairingHintBitmap.js.map +1 -1
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +22 -4
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
- package/dist/esm/certificate/kinds/Icac.d.ts +2 -0
- package/dist/esm/certificate/kinds/Icac.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/Icac.js +6 -0
- package/dist/esm/certificate/kinds/Icac.js.map +1 -1
- package/dist/esm/certificate/kinds/Noc.d.ts +2 -0
- package/dist/esm/certificate/kinds/Noc.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/Noc.js +6 -0
- package/dist/esm/certificate/kinds/Noc.js.map +1 -1
- package/dist/esm/certificate/kinds/OperationalBase.d.ts +6 -1
- package/dist/esm/certificate/kinds/OperationalBase.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/OperationalBase.js +16 -2
- package/dist/esm/certificate/kinds/OperationalBase.js.map +1 -1
- package/dist/esm/certificate/kinds/Rcac.d.ts +2 -0
- package/dist/esm/certificate/kinds/Rcac.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/Rcac.js +6 -0
- package/dist/esm/certificate/kinds/Rcac.js.map +1 -1
- package/dist/esm/certificate/kinds/X509Base.d.ts +10 -3
- package/dist/esm/certificate/kinds/X509Base.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/X509Base.js +303 -13
- package/dist/esm/certificate/kinds/X509Base.js.map +2 -2
- package/dist/esm/certificate/kinds/definitions/asn.d.ts +13 -0
- package/dist/esm/certificate/kinds/definitions/asn.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/definitions/asn.js +32 -22
- package/dist/esm/certificate/kinds/definitions/asn.js.map +1 -1
- package/dist/esm/certificate/kinds/definitions/operational.d.ts +16 -16
- package/dist/esm/certificate/kinds/definitions/operational.js +2 -2
- package/dist/esm/certificate/kinds/definitions/operational.js.map +1 -1
- package/dist/esm/mdns/MdnsConsts.d.ts +1 -1
- package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsConsts.js +1 -1
- package/package.json +6 -6
- package/src/advertisement/PairingHintBitmap.ts +1 -1
- package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +23 -6
- package/src/certificate/kinds/Icac.ts +7 -0
- package/src/certificate/kinds/Noc.ts +7 -0
- package/src/certificate/kinds/OperationalBase.ts +18 -3
- package/src/certificate/kinds/Rcac.ts +7 -0
- package/src/certificate/kinds/X509Base.ts +422 -7
- package/src/certificate/kinds/definitions/asn.ts +48 -25
- package/src/certificate/kinds/definitions/operational.ts +2 -2
- package/src/mdns/MdnsConsts.ts +1 -1
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
FabricId_Matter,
|
|
24
24
|
FirmwareSigningId_Matter,
|
|
25
25
|
IcacId_Matter,
|
|
26
|
+
MATTER_EPOCH_OFFSET_S,
|
|
27
|
+
MATTER_OID_TO_FIELD_MAP,
|
|
26
28
|
matterToJsDate,
|
|
27
29
|
NocCat_Matter,
|
|
28
30
|
NodeId_Matter,
|
|
@@ -96,8 +98,8 @@ class X509Base {
|
|
|
96
98
|
case "commonName":
|
|
97
99
|
asn.commonName = X520.CommonName(value);
|
|
98
100
|
break;
|
|
99
|
-
case "
|
|
100
|
-
asn.
|
|
101
|
+
case "surName":
|
|
102
|
+
asn.surName = X520.SurName(value);
|
|
101
103
|
break;
|
|
102
104
|
case "serialNum":
|
|
103
105
|
asn.serialNum = X520.SerialNumber(value);
|
|
@@ -184,8 +186,8 @@ class X509Base {
|
|
|
184
186
|
case "commonNamePs":
|
|
185
187
|
asn.commonNamePs = X520.CommonName(value, true);
|
|
186
188
|
break;
|
|
187
|
-
case "
|
|
188
|
-
asn.
|
|
189
|
+
case "surNamePs":
|
|
190
|
+
asn.surNamePs = X520.SurName(value, true);
|
|
189
191
|
break;
|
|
190
192
|
case "serialNumPs":
|
|
191
193
|
asn.serialNumPs = X520.SerialNumber(value, true);
|
|
@@ -299,10 +301,9 @@ class X509Base {
|
|
|
299
301
|
extensions: ContextTagged(3, this.#extensionsToAsn1(extensions))
|
|
300
302
|
};
|
|
301
303
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
static async createCertificateSigningRequest(crypto, key) {
|
|
304
|
+
}
|
|
305
|
+
((X509Base2) => {
|
|
306
|
+
async function createCertificateSigningRequest(crypto, key) {
|
|
306
307
|
const request = {
|
|
307
308
|
version: 0,
|
|
308
309
|
subject: { organization: X520.OrganisationName("CSR") },
|
|
@@ -315,10 +316,298 @@ class X509Base {
|
|
|
315
316
|
signature: DerBitString(await crypto.signEcdsa(key, DerCodec.encode(request), "der"))
|
|
316
317
|
});
|
|
317
318
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
319
|
+
X509Base2.createCertificateSigningRequest = createCertificateSigningRequest;
|
|
320
|
+
let ExtensionOid;
|
|
321
|
+
((ExtensionOid2) => {
|
|
322
|
+
ExtensionOid2.BASIC_CONSTRAINTS = 0x551d13n;
|
|
323
|
+
ExtensionOid2.KEY_USAGE = 0x551d0fn;
|
|
324
|
+
ExtensionOid2.EXTENDED_KEY_USAGE = 0x551d25n;
|
|
325
|
+
ExtensionOid2.SUBJECT_KEY_IDENTIFIER = 0x551d0en;
|
|
326
|
+
ExtensionOid2.AUTHORITY_KEY_IDENTIFIER = 0x551d23n;
|
|
327
|
+
})(ExtensionOid || (ExtensionOid = {}));
|
|
328
|
+
let ExtendedKeyUsageOid;
|
|
329
|
+
((ExtendedKeyUsageOid2) => {
|
|
330
|
+
ExtendedKeyUsageOid2.SERVER_AUTH = 0x2b06010505070301n;
|
|
331
|
+
ExtendedKeyUsageOid2.CLIENT_AUTH = 0x2b06010505070302n;
|
|
332
|
+
ExtendedKeyUsageOid2.CODE_SIGNING = 0x2b06010505070303n;
|
|
333
|
+
ExtendedKeyUsageOid2.EMAIL_PROTECTION = 0x2b06010505070304n;
|
|
334
|
+
ExtendedKeyUsageOid2.TIME_STAMPING = 0x2b06010505070308n;
|
|
335
|
+
ExtendedKeyUsageOid2.OCSP_SIGNING = 0x2b06010505070309n;
|
|
336
|
+
})(ExtendedKeyUsageOid || (ExtendedKeyUsageOid = {}));
|
|
337
|
+
function oidToSubjectField(oid) {
|
|
338
|
+
const oidHex = Bytes.toHex(oid);
|
|
339
|
+
const field = X520.OID_TO_FIELD_MAP[oidHex] ?? MATTER_OID_TO_FIELD_MAP[oidHex];
|
|
340
|
+
if (field !== void 0) {
|
|
341
|
+
return { field, isPrintable: false };
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
function parseSubjectOrIssuer(node) {
|
|
345
|
+
const result = {};
|
|
346
|
+
const { [DerKey.Elements]: rdnSequence } = node;
|
|
347
|
+
if (!rdnSequence) {
|
|
348
|
+
throw new CertificateError("Invalid subject/issuer structure");
|
|
349
|
+
}
|
|
350
|
+
for (const rdnSet of rdnSequence) {
|
|
351
|
+
const { [DerKey.Elements]: attributeSets } = rdnSet;
|
|
352
|
+
if (!attributeSets) continue;
|
|
353
|
+
for (const attributeSet of attributeSets) {
|
|
354
|
+
const { [DerKey.Elements]: attrElements } = attributeSet;
|
|
355
|
+
if (!attrElements || attrElements.length !== 2) continue;
|
|
356
|
+
const [oidNode, valueNode] = attrElements;
|
|
357
|
+
const oid = oidNode[DerKey.Bytes];
|
|
358
|
+
const fieldInfo = oidToSubjectField(oid);
|
|
359
|
+
if (fieldInfo === void 0) continue;
|
|
360
|
+
let { field } = fieldInfo;
|
|
361
|
+
let value;
|
|
362
|
+
const valueBytes = Bytes.of(valueNode[DerKey.Bytes]);
|
|
363
|
+
const valueTag = valueNode[DerKey.TagId];
|
|
364
|
+
switch (field) {
|
|
365
|
+
case "nodeId":
|
|
366
|
+
case "fabricId": {
|
|
367
|
+
const hexString = Bytes.toString(valueBytes);
|
|
368
|
+
value = BigInt("0x" + hexString);
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
case "icacId":
|
|
372
|
+
case "rcacId":
|
|
373
|
+
case "vvsId": {
|
|
374
|
+
const hexString = Bytes.toString(valueBytes);
|
|
375
|
+
const bigIntValue = BigInt("0x" + hexString);
|
|
376
|
+
value = bigIntValue <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(bigIntValue) : bigIntValue;
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
case "firmwareSigningId":
|
|
380
|
+
case "productId":
|
|
381
|
+
case "vendorId": {
|
|
382
|
+
const hexString = Bytes.toString(valueBytes);
|
|
383
|
+
value = parseInt(hexString, 16);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
case "caseAuthenticatedTag": {
|
|
387
|
+
const hexString = Bytes.toString(valueBytes);
|
|
388
|
+
const catValue = parseInt(hexString, 16);
|
|
389
|
+
if (result.caseAuthenticatedTags !== void 0) {
|
|
390
|
+
result.caseAuthenticatedTags.push(catValue);
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
field = "caseAuthenticatedTags";
|
|
394
|
+
value = [catValue];
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
default: {
|
|
398
|
+
value = Bytes.toString(valueBytes);
|
|
399
|
+
if (valueTag === DerType.PrintableString) {
|
|
400
|
+
field += "Ps";
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
result[field] = value;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return result;
|
|
408
|
+
}
|
|
409
|
+
function parseExtensions(extensionsNode) {
|
|
410
|
+
const result = {
|
|
411
|
+
basicConstraints: { isCa: false }
|
|
412
|
+
};
|
|
413
|
+
const { [DerKey.Elements]: extensions } = extensionsNode;
|
|
414
|
+
if (!extensions) {
|
|
415
|
+
throw new CertificateError("Invalid extensions structure");
|
|
416
|
+
}
|
|
417
|
+
for (const ext of extensions) {
|
|
418
|
+
const { [DerKey.Elements]: extElements } = ext;
|
|
419
|
+
if (!extElements || extElements.length < 2) continue;
|
|
420
|
+
const oid = extElements[0][DerKey.Bytes];
|
|
421
|
+
const oidValue = Bytes.asBigInt(oid);
|
|
422
|
+
let valueIndex = 1;
|
|
423
|
+
if (extElements.length > 2 && extElements[1][DerKey.TagId] === DerType.Boolean) {
|
|
424
|
+
valueIndex = 2;
|
|
425
|
+
}
|
|
426
|
+
const valueOctetString = extElements[valueIndex][DerKey.Bytes];
|
|
427
|
+
const valueNode = DerCodec.decode(valueOctetString);
|
|
428
|
+
switch (oidValue) {
|
|
429
|
+
case ExtensionOid.BASIC_CONSTRAINTS:
|
|
430
|
+
{
|
|
431
|
+
const { [DerKey.Elements]: bcElements } = valueNode;
|
|
432
|
+
if (bcElements && bcElements.length > 0) {
|
|
433
|
+
if (bcElements[0][DerKey.TagId] === DerType.Boolean) {
|
|
434
|
+
const bcBytes = Bytes.of(bcElements[0][DerKey.Bytes]);
|
|
435
|
+
result.basicConstraints.isCa = bcBytes[0] !== 0;
|
|
436
|
+
}
|
|
437
|
+
if (bcElements.length > 1 && bcElements[1][DerKey.TagId] === DerType.Integer) {
|
|
438
|
+
const pathLenBytes = Bytes.of(bcElements[1][DerKey.Bytes]);
|
|
439
|
+
result.basicConstraints.pathLen = pathLenBytes[0];
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
break;
|
|
444
|
+
case ExtensionOid.KEY_USAGE:
|
|
445
|
+
{
|
|
446
|
+
const bitString = Bytes.of(valueNode[DerKey.Bytes]);
|
|
447
|
+
if (bitString.length >= 1) {
|
|
448
|
+
const usageByte = bitString[0];
|
|
449
|
+
result.keyUsage = {
|
|
450
|
+
digitalSignature: (usageByte & 128) !== 0,
|
|
451
|
+
nonRepudiation: (usageByte & 64) !== 0,
|
|
452
|
+
keyEncipherment: (usageByte & 32) !== 0,
|
|
453
|
+
dataEncipherment: (usageByte & 16) !== 0,
|
|
454
|
+
keyAgreement: (usageByte & 8) !== 0,
|
|
455
|
+
keyCertSign: (usageByte & 4) !== 0,
|
|
456
|
+
cRLSign: (usageByte & 2) !== 0,
|
|
457
|
+
encipherOnly: (usageByte & 1) !== 0,
|
|
458
|
+
decipherOnly: bitString.length > 1 ? (bitString[1] & 128) !== 0 : false
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
break;
|
|
463
|
+
case ExtensionOid.EXTENDED_KEY_USAGE:
|
|
464
|
+
{
|
|
465
|
+
const { [DerKey.Elements]: ekuElements } = valueNode;
|
|
466
|
+
if (ekuElements) {
|
|
467
|
+
const ekuValues = [];
|
|
468
|
+
for (const eku of ekuElements) {
|
|
469
|
+
const ekuOidValue = Bytes.asBigInt(eku[DerKey.Bytes]);
|
|
470
|
+
switch (ekuOidValue) {
|
|
471
|
+
case ExtendedKeyUsageOid.SERVER_AUTH:
|
|
472
|
+
ekuValues.push(1);
|
|
473
|
+
break;
|
|
474
|
+
case ExtendedKeyUsageOid.CLIENT_AUTH:
|
|
475
|
+
ekuValues.push(2);
|
|
476
|
+
break;
|
|
477
|
+
case ExtendedKeyUsageOid.CODE_SIGNING:
|
|
478
|
+
ekuValues.push(3);
|
|
479
|
+
break;
|
|
480
|
+
case ExtendedKeyUsageOid.EMAIL_PROTECTION:
|
|
481
|
+
ekuValues.push(4);
|
|
482
|
+
break;
|
|
483
|
+
case ExtendedKeyUsageOid.TIME_STAMPING:
|
|
484
|
+
ekuValues.push(5);
|
|
485
|
+
break;
|
|
486
|
+
case ExtendedKeyUsageOid.OCSP_SIGNING:
|
|
487
|
+
ekuValues.push(6);
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
if (ekuValues.length > 0) {
|
|
492
|
+
result.extendedKeyUsage = ekuValues;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
break;
|
|
497
|
+
case ExtensionOid.SUBJECT_KEY_IDENTIFIER:
|
|
498
|
+
result.subjectKeyIdentifier = valueNode[DerKey.Bytes];
|
|
499
|
+
break;
|
|
500
|
+
case ExtensionOid.AUTHORITY_KEY_IDENTIFIER:
|
|
501
|
+
{
|
|
502
|
+
const { [DerKey.Elements]: akiElements } = valueNode;
|
|
503
|
+
if (akiElements && akiElements.length > 0) {
|
|
504
|
+
result.authorityKeyIdentifier = akiElements[0][DerKey.Bytes];
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
if (result.basicConstraints === void 0 || result.keyUsage === void 0 || result.subjectKeyIdentifier === void 0 || result.authorityKeyIdentifier === void 0) {
|
|
511
|
+
throw new CertificateError("Missing required extensions in certificate");
|
|
512
|
+
}
|
|
513
|
+
return result;
|
|
514
|
+
}
|
|
515
|
+
function parseDate(node) {
|
|
516
|
+
const dateBytes = node[DerKey.Bytes];
|
|
517
|
+
const dateString = Bytes.toString(dateBytes);
|
|
518
|
+
const tag = node[DerKey.TagId];
|
|
519
|
+
let year, month, day, hour, minute, second;
|
|
520
|
+
if (tag === DerType.UtcDate) {
|
|
521
|
+
year = parseInt(dateString.substring(0, 2));
|
|
522
|
+
year += year >= 50 ? 1900 : 2e3;
|
|
523
|
+
month = parseInt(dateString.substring(2, 4));
|
|
524
|
+
day = parseInt(dateString.substring(4, 6));
|
|
525
|
+
hour = parseInt(dateString.substring(6, 8));
|
|
526
|
+
minute = parseInt(dateString.substring(8, 10));
|
|
527
|
+
second = parseInt(dateString.substring(10, 12));
|
|
528
|
+
} else if (tag === DerType.GeneralizedTime) {
|
|
529
|
+
year = parseInt(dateString.substring(0, 4));
|
|
530
|
+
month = parseInt(dateString.substring(4, 6));
|
|
531
|
+
day = parseInt(dateString.substring(6, 8));
|
|
532
|
+
hour = parseInt(dateString.substring(8, 10));
|
|
533
|
+
minute = parseInt(dateString.substring(10, 12));
|
|
534
|
+
second = parseInt(dateString.substring(12, 14));
|
|
535
|
+
} else {
|
|
536
|
+
throw new CertificateError(`Unsupported date type: ${tag}`);
|
|
537
|
+
}
|
|
538
|
+
const date = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
|
|
539
|
+
if (date.getTime() === X520.NON_WELL_DEFINED_DATE.getTime()) {
|
|
540
|
+
return 0;
|
|
541
|
+
}
|
|
542
|
+
return Math.floor(date.getTime() / 1e3) - MATTER_EPOCH_OFFSET_S;
|
|
543
|
+
}
|
|
544
|
+
function parseAsn1Certificate(encodedCert) {
|
|
545
|
+
const { [DerKey.Elements]: rootElements } = DerCodec.decode(encodedCert);
|
|
546
|
+
if (!rootElements || rootElements.length !== 3) {
|
|
547
|
+
throw new CertificateError(
|
|
548
|
+
`Invalid certificate structure - expected 3 root elements, got ${rootElements?.length ?? 0}`
|
|
549
|
+
);
|
|
550
|
+
}
|
|
551
|
+
const [certificateNode, , signatureNode] = rootElements;
|
|
552
|
+
const { [DerKey.Elements]: certElements } = certificateNode;
|
|
553
|
+
if (!certElements || certElements.length < 7) {
|
|
554
|
+
throw new CertificateError("Invalid TBSCertificate structure");
|
|
555
|
+
}
|
|
556
|
+
let idx = 0;
|
|
557
|
+
if (certElements[idx][DerKey.TagId] === 160) {
|
|
558
|
+
idx++;
|
|
559
|
+
}
|
|
560
|
+
const serialNumber = certElements[idx++][DerKey.Bytes];
|
|
561
|
+
const signatureAlgorithmOid = certElements[idx][DerKey.Elements]?.[0]?.[DerKey.Bytes];
|
|
562
|
+
if (!signatureAlgorithmOid) {
|
|
563
|
+
throw new CertificateError("Invalid signature algorithm structure");
|
|
564
|
+
}
|
|
565
|
+
const signatureAlgorithm = Bytes.toHex(signatureAlgorithmOid) === "2a8648ce3d040302" ? 1 : 0;
|
|
566
|
+
idx++;
|
|
567
|
+
const issuer = parseSubjectOrIssuer(certElements[idx++]);
|
|
568
|
+
const { [DerKey.Elements]: validityElements } = certElements[idx++];
|
|
569
|
+
if (!validityElements || validityElements.length !== 2) {
|
|
570
|
+
throw new CertificateError("Invalid validity structure");
|
|
571
|
+
}
|
|
572
|
+
const notBefore = parseDate(validityElements[0]);
|
|
573
|
+
const notAfter = parseDate(validityElements[1]);
|
|
574
|
+
const subject = parseSubjectOrIssuer(certElements[idx++]);
|
|
575
|
+
const { [DerKey.Elements]: publicKeyElements } = certElements[idx++];
|
|
576
|
+
if (!publicKeyElements || publicKeyElements.length !== 2) {
|
|
577
|
+
throw new CertificateError("Invalid public key structure");
|
|
578
|
+
}
|
|
579
|
+
const { [DerKey.Elements]: algorithmElements } = publicKeyElements[0];
|
|
580
|
+
if (!algorithmElements || algorithmElements.length !== 2) {
|
|
581
|
+
throw new CertificateError("Invalid public key algorithm structure");
|
|
582
|
+
}
|
|
583
|
+
const publicKeyAlgorithmOid = Bytes.toHex(algorithmElements[0][DerKey.Bytes]);
|
|
584
|
+
const publicKeyAlgorithm = publicKeyAlgorithmOid === "2a8648ce3d0201" ? 1 : 0;
|
|
585
|
+
const ellipticCurveOid = Bytes.toHex(algorithmElements[1][DerKey.Bytes]);
|
|
586
|
+
const ellipticCurveIdentifier = ellipticCurveOid === "2a8648ce3d030107" ? 1 : 0;
|
|
587
|
+
const ellipticCurvePublicKey = Bytes.of(publicKeyElements[1][DerKey.Bytes]);
|
|
588
|
+
if (idx >= certElements.length || certElements[idx][DerKey.TagId] !== 163) {
|
|
589
|
+
throw new CertificateError("Missing required extensions in certificate");
|
|
590
|
+
}
|
|
591
|
+
const extensionsBytes = certElements[idx][DerKey.Bytes];
|
|
592
|
+
const extensionsSequence = DerCodec.decode(extensionsBytes);
|
|
593
|
+
const extensions = parseExtensions(extensionsSequence);
|
|
594
|
+
const signature = Bytes.of(signatureNode[DerKey.Bytes]);
|
|
595
|
+
return {
|
|
596
|
+
serialNumber,
|
|
597
|
+
signatureAlgorithm,
|
|
598
|
+
issuer,
|
|
599
|
+
notBefore,
|
|
600
|
+
notAfter,
|
|
601
|
+
subject,
|
|
602
|
+
publicKeyAlgorithm,
|
|
603
|
+
ellipticCurveIdentifier,
|
|
604
|
+
ellipticCurvePublicKey,
|
|
605
|
+
extensions,
|
|
606
|
+
signature
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
X509Base2.parseAsn1Certificate = parseAsn1Certificate;
|
|
610
|
+
async function getPublicKeyFromCsr(crypto, encodedCsr) {
|
|
322
611
|
const { [DerKey.Elements]: rootElements } = DerCodec.decode(encodedCsr);
|
|
323
612
|
if (rootElements?.length !== 3) {
|
|
324
613
|
throw new CertificateError("Invalid CSR data");
|
|
@@ -370,7 +659,8 @@ class X509Base {
|
|
|
370
659
|
);
|
|
371
660
|
return publicKey;
|
|
372
661
|
}
|
|
373
|
-
|
|
662
|
+
X509Base2.getPublicKeyFromCsr = getPublicKeyFromCsr;
|
|
663
|
+
})(X509Base || (X509Base = {}));
|
|
374
664
|
export {
|
|
375
665
|
X509Base
|
|
376
666
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/certificate/kinds/X509Base.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["X509Base", "ExtensionOid", "ExtendedKeyUsageOid"]
|
|
6
6
|
}
|
|
@@ -4,8 +4,21 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { FabricId, NodeId, VendorId } from "#types";
|
|
7
|
+
/** Seconds from Unix epoch (1970-01-01) to Matter epoch (2000-01-01) */
|
|
8
|
+
export declare const MATTER_EPOCH_OFFSET_S: number;
|
|
7
9
|
export declare function matterToJsDate(date: number): Date;
|
|
8
10
|
export declare function jsToMatterDate(date: Date, addYears?: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Matter specific ASN.1 OIDs
|
|
13
|
+
* @see {@link MatterSpecification.v12.Core} Appendix E
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Reverse lookup map from OID hex to field name for all Matter-specific attributes
|
|
17
|
+
* (both operational and attestation certificates)
|
|
18
|
+
*/
|
|
19
|
+
export declare const MATTER_OID_TO_FIELD_MAP: {
|
|
20
|
+
[oidHex: string]: string;
|
|
21
|
+
};
|
|
9
22
|
/** matter-node-id = ASN.1 OID 1.3.6.1.4.1.37244.1.1 */
|
|
10
23
|
export declare const NodeId_Matter: (value: NodeId) => any[];
|
|
11
24
|
/** matter-firmware-signing-id = ASN.1 OID 1.3.6.1.4.1.37244.1.2 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asn.d.ts","sourceRoot":"","sources":["../../../../../src/certificate/kinds/definitions/asn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"asn.d.ts","sourceRoot":"","sources":["../../../../../src/certificate/kinds/definitions/asn.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIpD,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,QAAuB,CAAC;AAI1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,QAE1C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,SAAI,UAItD;AAuBD;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,CAAC;AAyCxE,uDAAuD;AACvD,eAAO,MAAM,aAAa,0BAAiD,CAAC;AAE5E,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,0BAA4D,CAAC;AAElG,uDAAuD;AACvD,eAAO,MAAM,aAAa,mCAA0D,CAAC;AAErF,uDAAuD;AACvD,eAAO,MAAM,aAAa,mCAA0D,CAAC;AAErF,yDAAyD;AACzD,eAAO,MAAM,eAAe,4BAAqD,CAAC;AAElF,uDAAuD;AACvD,eAAO,MAAM,aAAa,0BAA+E,CAAC;AAE1G,sDAAsD;AACtD,eAAO,MAAM,YAAY,mCAAyD,CAAC;AAEnF,uDAAuD;AACvD,eAAO,MAAM,eAAe,4BAAsE,CAAC;AAEnG,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,0BAAqE,CAAC"}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Bytes, DerObject, X520 } from "#general";
|
|
7
|
+
import { InternalError } from "@matter/general";
|
|
7
8
|
const YEAR_S = 365 * 24 * 60 * 60;
|
|
8
|
-
const
|
|
9
|
+
const MATTER_EPOCH_OFFSET_S = 10957 * 24 * 60 * 60;
|
|
9
10
|
function matterToJsDate(date) {
|
|
10
|
-
return date === 0 ? X520.NON_WELL_DEFINED_DATE : new Date((date +
|
|
11
|
+
return date === 0 ? X520.NON_WELL_DEFINED_DATE : new Date((date + MATTER_EPOCH_OFFSET_S) * 1e3);
|
|
11
12
|
}
|
|
12
13
|
function jsToMatterDate(date, addYears = 0) {
|
|
13
|
-
return date.getTime() === X520.NON_WELL_DEFINED_DATE.getTime() ? 0 : Math.floor(date.getTime() / 1e3) -
|
|
14
|
+
return date.getTime() === X520.NON_WELL_DEFINED_DATE.getTime() ? 0 : Math.floor(date.getTime() / 1e3) - MATTER_EPOCH_OFFSET_S + addYears * YEAR_S;
|
|
14
15
|
}
|
|
15
16
|
function intTo16Chars(value) {
|
|
16
17
|
const byteArray = new Uint8Array(8);
|
|
@@ -30,29 +31,38 @@ function uInt16To4Chars(value) {
|
|
|
30
31
|
dataView.setUint16(0, value);
|
|
31
32
|
return Bytes.toHex(byteArray).toUpperCase();
|
|
32
33
|
}
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
34
|
+
const MATTER_OID_TO_FIELD_MAP = {};
|
|
35
|
+
const GenericMatterObject = (oidBase, id, fieldName, valueConverter) => {
|
|
36
|
+
const oidHex = `${oidBase}${id.toString(16).padStart(2, "0")}`;
|
|
37
|
+
if (MATTER_OID_TO_FIELD_MAP[oidHex] !== void 0 && MATTER_OID_TO_FIELD_MAP[oidHex] !== fieldName) {
|
|
38
|
+
throw new InternalError(
|
|
39
|
+
`ASN.1 Matter OID mapping for ${oidHex} already exists with a different field name: "${MATTER_OID_TO_FIELD_MAP[oidHex]}" vs "${fieldName}"`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
MATTER_OID_TO_FIELD_MAP[oidHex] = fieldName;
|
|
43
|
+
return (value) => [
|
|
44
|
+
DerObject(oidHex, {
|
|
45
|
+
value: (valueConverter ?? intTo16Chars)(value)
|
|
46
|
+
})
|
|
47
|
+
];
|
|
48
|
+
};
|
|
49
|
+
const GenericMatterOpCertObject = (id, fieldName, valueConverter) => GenericMatterObject("2b0601040182a27c01", id, fieldName, valueConverter);
|
|
50
|
+
const GenericMatterAttCertObject = (id, fieldName, valueConverter) => GenericMatterObject("2b0601040182a27c02", id, fieldName, valueConverter);
|
|
51
|
+
const NodeId_Matter = GenericMatterOpCertObject(1, "nodeId");
|
|
52
|
+
const FirmwareSigningId_Matter = GenericMatterOpCertObject(2, "firmwareSigningId");
|
|
53
|
+
const IcacId_Matter = GenericMatterOpCertObject(3, "icacId");
|
|
54
|
+
const RcacId_Matter = GenericMatterOpCertObject(4, "rcacId");
|
|
55
|
+
const FabricId_Matter = GenericMatterOpCertObject(5, "fabricId");
|
|
56
|
+
const NocCat_Matter = GenericMatterOpCertObject(6, "caseAuthenticatedTag", uInt16To8Chars);
|
|
57
|
+
const VvsId_Matter = GenericMatterOpCertObject(7, "vvsId");
|
|
58
|
+
const VendorId_Matter = GenericMatterAttCertObject(1, "vendorId", uInt16To4Chars);
|
|
59
|
+
const ProductId_Matter = GenericMatterAttCertObject(2, "productId", uInt16To4Chars);
|
|
52
60
|
export {
|
|
53
61
|
FabricId_Matter,
|
|
54
62
|
FirmwareSigningId_Matter,
|
|
55
63
|
IcacId_Matter,
|
|
64
|
+
MATTER_EPOCH_OFFSET_S,
|
|
65
|
+
MATTER_OID_TO_FIELD_MAP,
|
|
56
66
|
NocCat_Matter,
|
|
57
67
|
NodeId_Matter,
|
|
58
68
|
ProductId_Matter,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/certificate/kinds/definitions/asn.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,WAAW,YAAY;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,WAAW,YAAY;AAEvC,SAAS,qBAAqB;AAE9B,MAAM,SAAS,MAAM,KAAK,KAAK;AAExB,MAAM,wBAAwB,QAAQ,KAAK,KAAK;AAIhD,SAAS,eAAe,MAAc;AACzC,SAAO,SAAS,IAAI,KAAK,wBAAwB,IAAI,MAAM,OAAO,yBAAyB,GAAI;AACnG;AAEO,SAAS,eAAe,MAAY,WAAW,GAAG;AACrD,SAAO,KAAK,QAAQ,MAAM,KAAK,sBAAsB,QAAQ,IACvD,IACA,KAAK,MAAM,KAAK,QAAQ,IAAI,GAAI,IAAI,wBAAwB,WAAW;AACjF;AAEA,SAAS,aAAa,OAAwB;AAC1C,QAAM,YAAY,IAAI,WAAW,CAAC;AAClC,QAAM,WAAW,MAAM,WAAW,SAAS;AAC3C,WAAS,aAAa,GAAG,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK,CAAC;AAC1E,SAAO,MAAM,MAAM,SAAS,EAAE,YAAY;AAC9C;AAEA,SAAS,eAAe,OAAe;AACnC,QAAM,YAAY,IAAI,WAAW,CAAC;AAClC,QAAM,WAAW,MAAM,WAAW,SAAS;AAC3C,WAAS,UAAU,GAAG,KAAK;AAC3B,SAAO,MAAM,MAAM,SAAS,EAAE,YAAY;AAC9C;AAEA,SAAS,eAAe,OAAe;AACnC,QAAM,YAAY,IAAI,WAAW,CAAC;AAClC,QAAM,WAAW,MAAM,WAAW,SAAS;AAC3C,WAAS,UAAU,GAAG,KAAK;AAC3B,SAAO,MAAM,MAAM,SAAS,EAAE,YAAY;AAC9C;AAWO,MAAM,0BAAwD,CAAC;AAMtE,MAAM,sBAAsB,CACxB,SACA,IACA,WACA,mBACC;AACD,QAAM,SAAS,GAAG,OAAO,GAAG,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAE5D,MAAI,wBAAwB,MAAM,MAAM,UAAa,wBAAwB,MAAM,MAAM,WAAW;AAChG,UAAM,IAAI;AAAA,MACN,gCAAgC,MAAM,iDAAiD,wBAAwB,MAAM,CAAC,SAAS,SAAS;AAAA,IAC5I;AAAA,EACJ;AACA,0BAAwB,MAAM,IAAI;AAClC,SAAO,CAAC,UAAa;AAAA,IACjB,UAAU,QAAQ;AAAA,MACd,QAAQ,kBAAkB,cAAc,KAAY;AAAA,IACxD,CAAC;AAAA,EACL;AACJ;AAMA,MAAM,4BAA4B,CAAI,IAAY,WAAmB,mBACjE,oBAAuB,sBAAsB,IAAI,WAAW,cAAc;AAM9E,MAAM,6BAA6B,CAAI,IAAY,WAAmB,mBAClE,oBAAuB,sBAAsB,IAAI,WAAW,cAAc;AAGvE,MAAM,gBAAgB,0BAAkC,GAAG,QAAQ;AAGnE,MAAM,2BAA2B,0BAAkC,GAAG,mBAAmB;AAGzF,MAAM,gBAAgB,0BAA2C,GAAG,QAAQ;AAG5E,MAAM,gBAAgB,0BAA2C,GAAG,QAAQ;AAG5E,MAAM,kBAAkB,0BAAoC,GAAG,UAAU;AAGzE,MAAM,gBAAgB,0BAAkC,GAAG,wBAAwB,cAAc;AAGjG,MAAM,eAAe,0BAA2C,GAAG,OAAO;AAG1E,MAAM,kBAAkB,2BAAqC,GAAG,YAAY,cAAc;AAG1F,MAAM,mBAAmB,2BAAmC,GAAG,aAAa,cAAc;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|