@peculiar/certificates-viewer 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/cjs/{certification_request-e1997ebf.js → certification_request-b5fe8a57.js} +129 -151
  2. package/dist/cjs/{crl-f1ee43bc.js → crl-a1ac7534.js} +11 -2
  3. package/dist/cjs/l10n-17c96aba.js +169 -0
  4. package/dist/cjs/peculiar-attribute-certificate-viewer_3.cjs.entry.js +23 -8
  5. package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +4 -4
  6. package/dist/cjs/peculiar-certificate-summary_3.cjs.entry.js +1 -1
  7. package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +4 -4
  8. package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +3 -3
  9. package/dist/cjs/{public_key-ba538d77.js → public_key-3d4ae164.js} +2 -2
  10. package/dist/cjs/{x509_certificate-42b478d2.js → x509_certificate-29a3636a.js} +2 -2
  11. package/dist/collection/components/crl-viewer/crl-viewer.js +1 -1
  12. package/dist/collection/components/crl-viewer/revoked_certificates.js +20 -3
  13. package/dist/collection/crypto/crl.js +9 -0
  14. package/dist/collection/crypto/utils.js +5 -4
  15. package/dist/collection/locales/en.json +3 -2
  16. package/dist/esm/{certification_request-5d982d92.js → certification_request-35ade000.js} +125 -147
  17. package/dist/esm/{crl-f2110716.js → crl-42d5e233.js} +11 -2
  18. package/dist/esm/l10n-a68d5748.js +165 -0
  19. package/dist/esm/peculiar-attribute-certificate-viewer_3.entry.js +23 -8
  20. package/dist/esm/peculiar-certificate-decoder.entry.js +4 -4
  21. package/dist/esm/peculiar-certificate-summary_3.entry.js +1 -1
  22. package/dist/esm/peculiar-certificate-viewer.entry.js +4 -4
  23. package/dist/esm/peculiar-certificates-viewer.entry.js +3 -3
  24. package/dist/esm/{public_key-0a3091a5.js → public_key-b2dba162.js} +2 -2
  25. package/dist/esm/{x509_certificate-6b243207.js → x509_certificate-2503dcc1.js} +2 -2
  26. package/dist/peculiar/locales/en.json +3 -2
  27. package/dist/peculiar/p-1a8379f0.entry.js +26 -0
  28. package/dist/peculiar/{p-e535a666.entry.js → p-3d0fdbd5.entry.js} +1 -1
  29. package/dist/peculiar/{p-f8dc3232.js → p-54171e39.js} +3 -3
  30. package/dist/peculiar/{p-3aea9dde.js → p-6cd6e6da.js} +5 -5
  31. package/dist/peculiar/{p-86116b1f.entry.js → p-7a0fb5a8.entry.js} +1 -1
  32. package/dist/peculiar/{p-49ab6f8c.entry.js → p-870c3592.entry.js} +1 -1
  33. package/dist/peculiar/{p-bce2bbe0.js → p-a5d07697.js} +7 -7
  34. package/dist/peculiar/{p-db6e24c6.js → p-b7045733.js} +1 -1
  35. package/dist/peculiar/{p-34e2d6be.entry.js → p-cb9b9f9c.entry.js} +1 -1
  36. package/dist/peculiar/p-fec9d812.js +12 -0
  37. package/dist/peculiar/peculiar.esm.js +1 -1
  38. package/dist/types/components/crl-viewer/revoked_certificates.d.ts +2 -2
  39. package/dist/types/crypto/crl.d.ts +7 -1
  40. package/dist/types/utils/l10n.d.ts +2 -1
  41. package/package.json +19 -19
  42. package/dist/cjs/l10n-638a7577.js +0 -167
  43. package/dist/esm/l10n-da0dd100.js +0 -163
  44. package/dist/peculiar/p-35e7a514.js +0 -12
  45. package/dist/peculiar/p-ca0c34ca.entry.js +0 -26
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  const download = require('./download-a97f4cb2.js');
7
- require('./l10n-638a7577.js');
7
+ require('./l10n-17c96aba.js');
8
8
 
9
9
  /**
10
10
  * @license
@@ -3385,6 +3385,102 @@ var AsnPropTypes;
3385
3385
  AsnPropTypes[AsnPropTypes["Null"] = 27] = "Null";
3386
3386
  })(AsnPropTypes || (AsnPropTypes = {}));
3387
3387
 
3388
+ class BitString {
3389
+ constructor(params, unusedBits = 0) {
3390
+ this.unusedBits = 0;
3391
+ this.value = new ArrayBuffer(0);
3392
+ if (params) {
3393
+ if (typeof params === "number") {
3394
+ this.fromNumber(params);
3395
+ }
3396
+ else if (download.build.BufferSourceConverter.isBufferSource(params)) {
3397
+ this.unusedBits = unusedBits;
3398
+ this.value = download.build.BufferSourceConverter.toArrayBuffer(params);
3399
+ }
3400
+ else {
3401
+ throw TypeError("Unsupported type of 'params' argument for BitString");
3402
+ }
3403
+ }
3404
+ }
3405
+ fromASN(asn) {
3406
+ if (!(asn instanceof BitString$1)) {
3407
+ throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");
3408
+ }
3409
+ this.unusedBits = asn.valueBlock.unusedBits;
3410
+ this.value = asn.valueBlock.valueHex;
3411
+ return this;
3412
+ }
3413
+ toASN() {
3414
+ return new BitString$1({ unusedBits: this.unusedBits, valueHex: this.value });
3415
+ }
3416
+ toSchema(name) {
3417
+ return new BitString$1({ name });
3418
+ }
3419
+ toNumber() {
3420
+ let res = "";
3421
+ const uintArray = new Uint8Array(this.value);
3422
+ for (const octet of uintArray) {
3423
+ res += octet.toString(2).padStart(8, "0");
3424
+ }
3425
+ res = res.split("").reverse().join("");
3426
+ if (this.unusedBits) {
3427
+ res = res.slice(this.unusedBits).padStart(this.unusedBits, "0");
3428
+ }
3429
+ return parseInt(res, 2);
3430
+ }
3431
+ fromNumber(value) {
3432
+ let bits = value.toString(2);
3433
+ const octetSize = (bits.length + 7) >> 3;
3434
+ this.unusedBits = (octetSize << 3) - bits.length;
3435
+ const octets = new Uint8Array(octetSize);
3436
+ bits = bits.padStart(octetSize << 3, "0").split("").reverse().join("");
3437
+ let index = 0;
3438
+ while (index < octetSize) {
3439
+ octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);
3440
+ index++;
3441
+ }
3442
+ this.value = octets.buffer;
3443
+ }
3444
+ }
3445
+
3446
+ class OctetString {
3447
+ constructor(param) {
3448
+ if (typeof param === "number") {
3449
+ this.buffer = new ArrayBuffer(param);
3450
+ }
3451
+ else {
3452
+ if (download.build.BufferSourceConverter.isBufferSource(param)) {
3453
+ this.buffer = download.build.BufferSourceConverter.toArrayBuffer(param);
3454
+ }
3455
+ else if (Array.isArray(param)) {
3456
+ this.buffer = new Uint8Array(param);
3457
+ }
3458
+ else {
3459
+ this.buffer = new ArrayBuffer(0);
3460
+ }
3461
+ }
3462
+ }
3463
+ get byteLength() {
3464
+ return this.buffer.byteLength;
3465
+ }
3466
+ get byteOffset() {
3467
+ return 0;
3468
+ }
3469
+ fromASN(asn) {
3470
+ if (!(asn instanceof OctetString$1)) {
3471
+ throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");
3472
+ }
3473
+ this.buffer = asn.valueBlock.valueHex;
3474
+ return this;
3475
+ }
3476
+ toASN() {
3477
+ return new OctetString$1({ valueHex: this.buffer });
3478
+ }
3479
+ toSchema(name) {
3480
+ return new OctetString$1({ name });
3481
+ }
3482
+ }
3483
+
3388
3484
  const AsnAnyConverter = {
3389
3485
  fromASN: (value) => value instanceof Null ? null : value.valueBeforeDecodeView,
3390
3486
  toASN: (value) => {
@@ -3428,6 +3524,10 @@ const AsnOctetStringConverter = {
3428
3524
  fromASN: (value) => value.valueBlock.valueHexView,
3429
3525
  toASN: (value) => new OctetString$1({ valueHex: value }),
3430
3526
  };
3527
+ const AsnConstructedOctetStringConverter = {
3528
+ fromASN: (value) => new OctetString(value.getValue()),
3529
+ toASN: (value) => value.toASN(),
3530
+ };
3431
3531
  function createStringConverter(Asn1Type) {
3432
3532
  return {
3433
3533
  fromASN: (value) => value.valueBlock.value,
@@ -3511,102 +3611,6 @@ function defaultConverter(type) {
3511
3611
  }
3512
3612
  }
3513
3613
 
3514
- class BitString {
3515
- constructor(params, unusedBits = 0) {
3516
- this.unusedBits = 0;
3517
- this.value = new ArrayBuffer(0);
3518
- if (params) {
3519
- if (typeof params === "number") {
3520
- this.fromNumber(params);
3521
- }
3522
- else if (download.build.BufferSourceConverter.isBufferSource(params)) {
3523
- this.unusedBits = unusedBits;
3524
- this.value = download.build.BufferSourceConverter.toArrayBuffer(params);
3525
- }
3526
- else {
3527
- throw TypeError("Unsupported type of 'params' argument for BitString");
3528
- }
3529
- }
3530
- }
3531
- fromASN(asn) {
3532
- if (!(asn instanceof BitString$1)) {
3533
- throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");
3534
- }
3535
- this.unusedBits = asn.valueBlock.unusedBits;
3536
- this.value = asn.valueBlock.valueHex;
3537
- return this;
3538
- }
3539
- toASN() {
3540
- return new BitString$1({ unusedBits: this.unusedBits, valueHex: this.value });
3541
- }
3542
- toSchema(name) {
3543
- return new BitString$1({ name });
3544
- }
3545
- toNumber() {
3546
- let res = "";
3547
- const uintArray = new Uint8Array(this.value);
3548
- for (const octet of uintArray) {
3549
- res += octet.toString(2).padStart(8, "0");
3550
- }
3551
- res = res.split("").reverse().join("");
3552
- if (this.unusedBits) {
3553
- res = res.slice(this.unusedBits).padStart(this.unusedBits, "0");
3554
- }
3555
- return parseInt(res, 2);
3556
- }
3557
- fromNumber(value) {
3558
- let bits = value.toString(2);
3559
- const octetSize = (bits.length + 7) >> 3;
3560
- this.unusedBits = (octetSize << 3) - bits.length;
3561
- const octets = new Uint8Array(octetSize);
3562
- bits = bits.padStart(octetSize << 3, "0").split("").reverse().join("");
3563
- let index = 0;
3564
- while (index < octetSize) {
3565
- octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);
3566
- index++;
3567
- }
3568
- this.value = octets.buffer;
3569
- }
3570
- }
3571
-
3572
- class OctetString {
3573
- constructor(param) {
3574
- if (typeof param === "number") {
3575
- this.buffer = new ArrayBuffer(param);
3576
- }
3577
- else {
3578
- if (download.build.BufferSourceConverter.isBufferSource(param)) {
3579
- this.buffer = download.build.BufferSourceConverter.toArrayBuffer(param);
3580
- }
3581
- else if (Array.isArray(param)) {
3582
- this.buffer = new Uint8Array(param);
3583
- }
3584
- else {
3585
- this.buffer = new ArrayBuffer(0);
3586
- }
3587
- }
3588
- }
3589
- get byteLength() {
3590
- return this.buffer.byteLength;
3591
- }
3592
- get byteOffset() {
3593
- return 0;
3594
- }
3595
- fromASN(asn) {
3596
- if (!(asn instanceof OctetString$1)) {
3597
- throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");
3598
- }
3599
- this.buffer = asn.valueBlock.valueHex;
3600
- return this;
3601
- }
3602
- toASN() {
3603
- return new OctetString$1({ valueHex: this.buffer });
3604
- }
3605
- toSchema(name) {
3606
- return new OctetString$1({ name });
3607
- }
3608
- }
3609
-
3610
3614
  function isConvertible(target) {
3611
3615
  if (typeof target === "function" && target.prototype) {
3612
3616
  if (target.prototype.toASN && target.prototype.fromASN) {
@@ -3796,7 +3800,7 @@ class AsnSchemaStorage {
3796
3800
  return this;
3797
3801
  }
3798
3802
  findParentSchema(target) {
3799
- const parent = target.__proto__;
3803
+ const parent = Object.getPrototypeOf(target);
3800
3804
  if (parent) {
3801
3805
  const schema = this.items.get(parent);
3802
3806
  return schema || this.findParentSchema(parent);
@@ -5761,7 +5765,7 @@ InhibitAnyPolicy = __decorate([
5761
5765
  ], InhibitAnyPolicy);
5762
5766
 
5763
5767
  const id_ce_invalidityDate = `${id_ce}.24`;
5764
- let InvalidityDate = class InvalidityDate {
5768
+ exports.InvalidityDate = class InvalidityDate {
5765
5769
  constructor(value) {
5766
5770
  this.value = new Date();
5767
5771
  if (value) {
@@ -5771,10 +5775,10 @@ let InvalidityDate = class InvalidityDate {
5771
5775
  };
5772
5776
  __decorate([
5773
5777
  AsnProp({ type: AsnPropTypes.GeneralizedTime })
5774
- ], InvalidityDate.prototype, "value", void 0);
5775
- InvalidityDate = __decorate([
5778
+ ], exports.InvalidityDate.prototype, "value", void 0);
5779
+ exports.InvalidityDate = __decorate([
5776
5780
  AsnType({ type: AsnTypeTypes.Choice })
5777
- ], InvalidityDate);
5781
+ ], exports.InvalidityDate);
5778
5782
 
5779
5783
  var IssueAlternativeName_1;
5780
5784
  const id_ce_issuerAltName = `${id_ce}.18`;
@@ -6072,11 +6076,14 @@ __decorate([
6072
6076
  let Time = class Time {
6073
6077
  constructor(time) {
6074
6078
  if (time) {
6075
- if (typeof time === "string" || typeof time === "number") {
6076
- this.utcTime = new Date(time);
6077
- }
6078
- else if (time instanceof Date) {
6079
- this.utcTime = time;
6079
+ if (typeof time === "string" || typeof time === "number" || time instanceof Date) {
6080
+ const date = new Date(time);
6081
+ if (date.getUTCFullYear() > 2049) {
6082
+ this.generalTime = date;
6083
+ }
6084
+ else {
6085
+ this.utcTime = date;
6086
+ }
6080
6087
  }
6081
6088
  else {
6082
6089
  Object.assign(this, time);
@@ -10097,7 +10104,7 @@ class Extension extends AsnData {
10097
10104
  this.value = AsnParser.parse(asnExtnValue, InhibitAnyPolicy);
10098
10105
  break;
10099
10106
  case id_ce_invalidityDate:
10100
- this.value = AsnParser.parse(asnExtnValue, InvalidityDate);
10107
+ this.value = AsnParser.parse(asnExtnValue, exports.InvalidityDate);
10101
10108
  break;
10102
10109
  case id_ce_issuerAltName:
10103
10110
  this.value = AsnParser.parse(asnExtnValue, IssueAlternativeName);
@@ -10237,10 +10244,11 @@ class CryptoProvider {
10237
10244
  CryptoProvider.DEFAULT = 'default';
10238
10245
  const cryptoProvider = new CryptoProvider();
10239
10246
 
10240
- const base64Clarify = (base64) => (base64
10241
- .replace(/.*base64,/, '')
10242
- .replace(/-----.+-----/g, '')
10243
- .replace(/[\s\r\n]/g, ''));
10247
+ const base64Re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====/;
10248
+ const base64Clarify = (base64) => {
10249
+ const execArray = base64Re.exec(base64);
10250
+ return execArray ? (execArray[1] || execArray[2]) : base64;
10251
+ };
10244
10252
  const hexFormat = (hex) => (hex
10245
10253
  .replace(/(.{32})/g, '$1\n')
10246
10254
  .replace(/(.{4})/g, '$1 ')
@@ -10967,15 +10975,15 @@ let EncryptedContent = class EncryptedContent {
10967
10975
  }
10968
10976
  };
10969
10977
  __decorate([
10970
- AsnProp({ type: OctetString })
10971
- ], EncryptedContent.prototype, "single", void 0);
10978
+ AsnProp({ type: OctetString, context: 0, implicit: true, optional: true })
10979
+ ], EncryptedContent.prototype, "value", void 0);
10972
10980
  __decorate([
10973
- AsnProp({ type: AsnPropTypes.Any })
10974
- ], EncryptedContent.prototype, "any", void 0);
10981
+ AsnProp({ type: OctetString, converter: AsnConstructedOctetStringConverter, context: 0, implicit: true, optional: true, repeated: "sequence" })
10982
+ ], EncryptedContent.prototype, "constructedValue", void 0);
10975
10983
  EncryptedContent = __decorate([
10976
10984
  AsnType({ type: AsnTypeTypes.Choice })
10977
10985
  ], EncryptedContent);
10978
- class ImplicitEncryptedContentInfo {
10986
+ class EncryptedContentInfo {
10979
10987
  constructor(params = {}) {
10980
10988
  this.contentType = "";
10981
10989
  this.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier();
@@ -10984,43 +10992,13 @@ class ImplicitEncryptedContentInfo {
10984
10992
  }
10985
10993
  __decorate([
10986
10994
  AsnProp({ type: AsnPropTypes.ObjectIdentifier })
10987
- ], ImplicitEncryptedContentInfo.prototype, "contentType", void 0);
10995
+ ], EncryptedContentInfo.prototype, "contentType", void 0);
10988
10996
  __decorate([
10989
10997
  AsnProp({ type: ContentEncryptionAlgorithmIdentifier })
10990
- ], ImplicitEncryptedContentInfo.prototype, "contentEncryptionAlgorithm", void 0);
10998
+ ], EncryptedContentInfo.prototype, "contentEncryptionAlgorithm", void 0);
10991
10999
  __decorate([
10992
- AsnProp({ type: OctetString, context: 0, implicit: true, optional: true })
10993
- ], ImplicitEncryptedContentInfo.prototype, "encryptedContent", void 0);
10994
- class ExplicitEncryptedContentInfo {
10995
- constructor(params = {}) {
10996
- this.contentType = "";
10997
- this.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier();
10998
- Object.assign(this, params);
10999
- }
11000
- }
11001
- __decorate([
11002
- AsnProp({ type: AsnPropTypes.ObjectIdentifier })
11003
- ], ExplicitEncryptedContentInfo.prototype, "contentType", void 0);
11004
- __decorate([
11005
- AsnProp({ type: ContentEncryptionAlgorithmIdentifier })
11006
- ], ExplicitEncryptedContentInfo.prototype, "contentEncryptionAlgorithm", void 0);
11007
- __decorate([
11008
- AsnProp({ type: EncryptedContent, context: 0, optional: true })
11009
- ], ExplicitEncryptedContentInfo.prototype, "encryptedContent", void 0);
11010
- let EncryptedContentInfo = class EncryptedContentInfo {
11011
- constructor(params = {}) {
11012
- Object.assign(this, params);
11013
- }
11014
- };
11015
- __decorate([
11016
- AsnProp({ type: ImplicitEncryptedContentInfo, optional: true })
11017
- ], EncryptedContentInfo.prototype, "implicitEncryptedContentInfo", void 0);
11018
- __decorate([
11019
- AsnProp({ type: ExplicitEncryptedContentInfo, optional: true })
11020
- ], EncryptedContentInfo.prototype, "explicitEncryptedContentInfo", void 0);
11021
- EncryptedContentInfo = __decorate([
11022
- AsnType({ type: AsnTypeTypes.Choice })
11023
- ], EncryptedContentInfo);
11000
+ AsnProp({ type: EncryptedContent, optional: true })
11001
+ ], EncryptedContentInfo.prototype, "encryptedContent", void 0);
11024
11002
 
11025
11003
  class IssuerAndSerialNumber {
11026
11004
  constructor(params = {}) {
@@ -3,9 +3,9 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const certification_request = require('./certification_request-e1997ebf.js');
6
+ const certification_request = require('./certification_request-b5fe8a57.js');
7
7
  const download = require('./download-a97f4cb2.js');
8
- const l10n = require('./l10n-638a7577.js');
8
+ const l10n = require('./l10n-17c96aba.js');
9
9
 
10
10
  /**
11
11
  * @license
@@ -252,6 +252,15 @@ class CRL extends certification_request.AsnData {
252
252
  this.version = tbsCertList.version + 1;
253
253
  this.lastUpdate = tbsCertList.thisUpdate.getTime();
254
254
  this.nextUpdate = tbsCertList.nextUpdate.getTime();
255
+ this.revokedCertificates = (tbsCertList.revokedCertificates || [])
256
+ .map((revokedCertificate) => {
257
+ var _a;
258
+ return ({
259
+ revocationDate: revokedCertificate.revocationDate,
260
+ userCertificate: revokedCertificate.userCertificate,
261
+ crlEntryExtensions: (_a = revokedCertificate.crlEntryExtensions) === null || _a === void 0 ? void 0 : _a.map((e) => new certification_request.Extension(certification_request.AsnConvert.serialize(e))),
262
+ });
263
+ });
255
264
  }
256
265
  async getThumbprint(algorithm = 'SHA-1') {
257
266
  try {
@@ -0,0 +1,169 @@
1
+ /*!
2
+ * © Peculiar Ventures https://peculiarventures.com/ - MIT License
3
+ */
4
+ 'use strict';
5
+
6
+ const download$1 = require('./download-a97f4cb2.js');
7
+
8
+ var dayjs_min = download$1.createCommonjsModule(function (module, exports) {
9
+ !function(t,e){module.exports=e();}(download$1.commonjsGlobal,(function(){var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return "["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return !r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return (e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return -t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return +(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return {M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else {var a=e.name;D[a]=e,i=a;}return !r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t);}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init();},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds();},m.$utils=function(){return O},m.isValid=function(){return !(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h="set"+(this.$u?"UTC":""),l=(n={},n[a]=h+"Date",n[d]=h+"Date",n[f]=h+"Month",n[c]=h+"FullYear",n[u]=h+"Hours",n[s]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d;}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,"0")},d=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,"0"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,"0"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",f],["$y",c],["$D",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])};})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));
10
+ });
11
+
12
+ var relativeTime = download$1.createCommonjsModule(function (module, exports) {
13
+ !function(r,e){module.exports=e();}(download$1.commonjsGlobal,(function(){return function(r,e,t){r=r||{};var n=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(""+p)),a="string"==typeof v?v.replace("%d",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return "function"==typeof M?M(a):M.replace("%s",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)};}}));
14
+ });
15
+
16
+ /**
17
+ * @license
18
+ * Copyright (c) Peculiar Ventures, LLC.
19
+ *
20
+ * This source code is licensed under the MIT license found in the
21
+ * LICENSE file in the root directory of this source tree.
22
+ */
23
+ dayjs_min.extend(relativeTime);
24
+ const dateShort = (date) => (new Date(date).toUTCString());
25
+ const dateDiff = (dateStart, dateEnd) => {
26
+ if (!dateStart || !dateEnd) {
27
+ return '';
28
+ }
29
+ const start = dayjs_min(dateStart);
30
+ const end = dayjs_min(dateEnd);
31
+ return start.to(end, true);
32
+ };
33
+
34
+ const basicInformation = "Basic Information";
35
+ const subjectName = "Subject Name";
36
+ const issuerName = "Issuer Name";
37
+ const publicKeyInfo = "Public Key Info";
38
+ const signature = "Signature";
39
+ const extensions = "Extensions";
40
+ const miscellaneous = "Miscellaneous";
41
+ const download = "Download";
42
+ const serialNumber = "Serial Number";
43
+ const version = "Version";
44
+ const validity = "Validity";
45
+ const issued = "Issued";
46
+ const expired = "Expired";
47
+ const lastUpdate = "Last Update";
48
+ const nextUpdate = "Next Update";
49
+ const algorithm = "Algorithm";
50
+ const namedCurve = "Named Curve";
51
+ const exponent = "Exponent";
52
+ const modulus = "Modulus";
53
+ const value = "Value";
54
+ const valid = "Valid";
55
+ const revoked = "Revoked";
56
+ const issuer = "Issuer";
57
+ const name = "Name";
58
+ const publicKey = "Public Key";
59
+ const fingerprint = "Fingerprint";
60
+ const fingerprints = "Fingerprints";
61
+ const actions = "Actions";
62
+ const details = "Details";
63
+ const testURLs = "Test URLs";
64
+ const certificateDetails = "Certificate Details";
65
+ const holder = "Holder";
66
+ const digestInfo = "Digest Info";
67
+ const type = "Type";
68
+ const revokedCertificates = "Revoked Certificates";
69
+ const revocationDate = "Revocation Date";
70
+ const yes = "Yes";
71
+ const no = "No";
72
+ const onlyUserCertificates = "Only User Certificates";
73
+ const onlyAttributeCertificates = "Only Attribute Certificates";
74
+ const onlyCACertificates = "Only CA Certificates";
75
+ const indirectCRL = "Indirect CRL";
76
+ const onlyReasons = "Only Reasons";
77
+ const crlEntryExtensions = "CRL Entry Extensions";
78
+ const en = {
79
+ basicInformation: basicInformation,
80
+ subjectName: subjectName,
81
+ issuerName: issuerName,
82
+ publicKeyInfo: publicKeyInfo,
83
+ signature: signature,
84
+ extensions: extensions,
85
+ miscellaneous: miscellaneous,
86
+ download: download,
87
+ "download.pem": "Download PEM",
88
+ "download.der": "Download DER",
89
+ serialNumber: serialNumber,
90
+ version: version,
91
+ validity: validity,
92
+ issued: issued,
93
+ expired: expired,
94
+ lastUpdate: lastUpdate,
95
+ nextUpdate: nextUpdate,
96
+ algorithm: algorithm,
97
+ namedCurve: namedCurve,
98
+ exponent: exponent,
99
+ modulus: modulus,
100
+ value: value,
101
+ valid: valid,
102
+ revoked: revoked,
103
+ issuer: issuer,
104
+ name: name,
105
+ publicKey: publicKey,
106
+ fingerprint: fingerprint,
107
+ fingerprints: fingerprints,
108
+ actions: actions,
109
+ details: details,
110
+ testURLs: testURLs,
111
+ certificateDetails: certificateDetails,
112
+ holder: holder,
113
+ digestInfo: digestInfo,
114
+ type: type,
115
+ revokedCertificates: revokedCertificates,
116
+ revocationDate: revocationDate,
117
+ yes: yes,
118
+ no: no,
119
+ onlyUserCertificates: onlyUserCertificates,
120
+ onlyAttributeCertificates: onlyAttributeCertificates,
121
+ onlyCACertificates: onlyCACertificates,
122
+ indirectCRL: indirectCRL,
123
+ onlyReasons: onlyReasons,
124
+ crlEntryExtensions: crlEntryExtensions
125
+ };
126
+
127
+ /**
128
+ * @license
129
+ * Copyright (c) Peculiar Ventures, LLC.
130
+ *
131
+ * This source code is licensed under the MIT license found in the
132
+ * LICENSE file in the root directory of this source tree.
133
+ */
134
+ const MESSAGES_ALL = {
135
+ en,
136
+ };
137
+ class Localization {
138
+ constructor() {
139
+ this.setLocale = (locale) => {
140
+ this.locale = locale && MESSAGES_ALL[locale] ? locale : 'en';
141
+ };
142
+ this.getLocale = () => this.locale;
143
+ const language = window.navigator.language.slice(0, 2).toLowerCase();
144
+ this.setLocale(language);
145
+ }
146
+ getString(id, replacer) {
147
+ const value = MESSAGES_ALL[this.locale][id];
148
+ if (!value) {
149
+ return '';
150
+ }
151
+ if (!replacer) {
152
+ return value;
153
+ }
154
+ const splitted = value.split(replacer.pattern);
155
+ if (splitted.length > 1) {
156
+ return [
157
+ splitted[0],
158
+ replacer.replacer,
159
+ splitted[1],
160
+ ];
161
+ }
162
+ return value;
163
+ }
164
+ }
165
+ const l10n = new Localization();
166
+
167
+ exports.dateDiff = dateDiff;
168
+ exports.dateShort = dateShort;
169
+ exports.l10n = l10n;
@@ -6,11 +6,11 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-064e95c7.js');
9
- const certification_request = require('./certification_request-e1997ebf.js');
9
+ const certification_request = require('./certification_request-b5fe8a57.js');
10
10
  const download = require('./download-a97f4cb2.js');
11
- const l10n = require('./l10n-638a7577.js');
12
- const crl = require('./crl-f1ee43bc.js');
13
- const public_key = require('./public_key-ba538d77.js');
11
+ const l10n = require('./l10n-17c96aba.js');
12
+ const crl = require('./crl-a1ac7534.js');
13
+ const public_key = require('./public_key-3d4ae164.js');
14
14
 
15
15
  /**
16
16
  * @license
@@ -390,12 +390,27 @@ AttributeCertificateViewer.style = certificateViewerCss$2;
390
390
  * LICENSE file in the root directory of this source tree.
391
391
  */
392
392
  const RevokedCertificates = (props) => {
393
- const { certificates, } = props;
393
+ const { revokedCertificates, } = props;
394
+ if (!revokedCertificates || !revokedCertificates.length) {
395
+ return null;
396
+ }
394
397
  return [
395
398
  index.h(public_key.RowTitle, { value: l10n.l10n.getString('revokedCertificates') }),
396
- certificates.map((certificate) => ([
399
+ revokedCertificates.map((certificate) => ([
397
400
  index.h(public_key.RowValue, { name: l10n.l10n.getString('serialNumber'), value: download.build.Convert.ToHex(certificate.userCertificate), monospace: true }),
398
- index.h(public_key.RowValue, { name: l10n.l10n.getString('revocation'), value: l10n.dateShort(certificate.revocationDate.getTime()) }),
401
+ index.h(public_key.RowValue, { name: l10n.l10n.getString('revocationDate'), value: l10n.dateShort(certificate.revocationDate.getTime()) }),
402
+ (certificate.crlEntryExtensions && certificate.crlEntryExtensions.length && ([
403
+ index.h(public_key.RowValue, { name: `${l10n.l10n.getString('crlEntryExtensions')}:`, value: "" }),
404
+ certificate.crlEntryExtensions.map((extension) => {
405
+ if (extension.value instanceof certification_request.CRLReason) {
406
+ return (index.h(public_key.RowValue, { name: public_key.getStringByOID(extension.asn.extnID), value: extension.value.toJSON() || extension.value.reason }));
407
+ }
408
+ if (extension.value instanceof certification_request.InvalidityDate) {
409
+ return (index.h(public_key.RowValue, { name: public_key.getStringByOID(extension.asn.extnID), value: extension.value.value.getTime() }));
410
+ }
411
+ return (index.h(public_key.RowValue, { name: public_key.getStringByOID(extension.asn.extnID), value: download.build.Convert.ToHex(extension.asn.extnValue), monospace: true }));
412
+ }),
413
+ ])),
399
414
  index.h("tr", null,
400
415
  index.h("td", { colSpan: 2, class: "divider" },
401
416
  index.h("span", { class: "bg_fill" }))),
@@ -478,7 +493,7 @@ const CrlViewer = class {
478
493
  if (!this.certificateDecoded) {
479
494
  return this.renderEmptyState();
480
495
  }
481
- return (index.h(index.Host, { "data-view": this.view }, index.h("table", null, index.h(public_key.BasicInformation, Object.assign({}, this.certificateDecoded)), index.h(public_key.IssuerName, { name: this.certificateDecoded.issuer, issuerDnLink: this.getIssuerDnLink() }), index.h(public_key.Signature, { signature: this.certificateDecoded.signature }), index.h(public_key.Thumbprints, { thumbprints: this.certificateDecoded.thumbprints }), index.h(public_key.Extensions, { extensions: this.certificateDecoded.extensions, getLEILink: public_key.getLEILink, getDNSNameLink: public_key.getDNSNameLink, getIPAddressLink: public_key.getIPAddressLink, getAuthKeyIdParentLink: this.getAuthKeyIdParentLink, getAuthKeyIdSiblingsLink: this.getAuthKeyIdSiblingsLink }), this.certificateDecoded.asn.tbsCertList.revokedCertificates && (index.h(RevokedCertificates, { certificates: this.certificateDecoded.asn.tbsCertList.revokedCertificates })), this.download && (index.h(public_key.Miscellaneous, { certificate: this.certificateDecoded })))));
496
+ return (index.h(index.Host, { "data-view": this.view }, index.h("table", null, index.h(public_key.BasicInformation, Object.assign({}, this.certificateDecoded)), index.h(public_key.IssuerName, { name: this.certificateDecoded.issuer, issuerDnLink: this.getIssuerDnLink() }), index.h(public_key.Signature, { signature: this.certificateDecoded.signature }), index.h(public_key.Thumbprints, { thumbprints: this.certificateDecoded.thumbprints }), index.h(public_key.Extensions, { extensions: this.certificateDecoded.extensions, getLEILink: public_key.getLEILink, getDNSNameLink: public_key.getDNSNameLink, getIPAddressLink: public_key.getIPAddressLink, getAuthKeyIdParentLink: this.getAuthKeyIdParentLink, getAuthKeyIdSiblingsLink: this.getAuthKeyIdSiblingsLink }), index.h(RevokedCertificates, { revokedCertificates: this.certificateDecoded.revokedCertificates }), this.download && (index.h(public_key.Miscellaneous, { certificate: this.certificateDecoded })))));
482
497
  }
483
498
  static get watchers() { return {
484
499
  "certificate": ["watchCertificateAndDecode"]
@@ -6,11 +6,11 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-064e95c7.js');
9
- const certification_request = require('./certification_request-e1997ebf.js');
10
- require('./l10n-638a7577.js');
9
+ const certification_request = require('./certification_request-b5fe8a57.js');
10
+ require('./l10n-17c96aba.js');
11
11
  require('./download-a97f4cb2.js');
12
- const x509_certificate = require('./x509_certificate-42b478d2.js');
13
- const crl = require('./crl-f1ee43bc.js');
12
+ const x509_certificate = require('./x509_certificate-29a3636a.js');
13
+ const crl = require('./crl-a1ac7534.js');
14
14
 
15
15
  /**
16
16
  * @license
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-064e95c7.js');
9
- const l10n = require('./l10n-638a7577.js');
9
+ const l10n = require('./l10n-17c96aba.js');
10
10
  require('./download-a97f4cb2.js');
11
11
 
12
12
  const certificateSummaryCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}:host *,:host *:before,:host *:after{-webkit-box-sizing:inherit;box-sizing:inherit}:host{display:block;width:100%}td{border:none;padding:0}table{width:100%;border-spacing:0;border-collapse:collapse}td{vertical-align:top;padding-top:5px;padding-bottom:5px}table td:first-child{width:130px;padding-right:10px}table td:last-child{width:calc(100% - 130px)}@media (max-width: 900px){table,tr,td{display:block}table td:last-child,table td:first-child{width:100%}}";