@peculiar/certificates-viewer 4.6.1 → 4.7.1-alpha.1
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/components/attribute-certificate-viewer.js +4 -2
- package/components/attribute-certificate-viewer.js.map +1 -1
- package/components/attribute.js +2 -1
- package/components/attribute.js.map +1 -1
- package/components/certificate-chain-viewer.js +1 -1
- package/components/certificate-viewer.js +3 -2
- package/components/certificate-viewer.js.map +1 -1
- package/components/crl-viewer.js +4 -2
- package/components/crl-viewer.js.map +1 -1
- package/components/csr-viewer.js +3 -3
- package/components/csr-viewer.js.map +1 -1
- package/components/download.js +2 -12760
- package/components/download.js.map +1 -1
- package/components/index.js +2 -1
- package/components/index.js.map +1 -1
- package/components/index2.js +51 -2
- package/components/index2.js.map +1 -1
- package/components/issuer_name.js +2 -2
- package/components/link.js +14335 -0
- package/components/link.js.map +1 -0
- package/components/miscellaneous.js +96 -72
- package/components/miscellaneous.js.map +1 -1
- package/components/peculiar-certificate-decoder.js +32 -16
- package/components/peculiar-certificate-decoder.js.map +1 -1
- package/components/peculiar-certificates-viewer.js +2 -1
- package/components/peculiar-certificates-viewer.js.map +1 -1
- package/components/peculiar-ssh-certificate-viewer.d.ts +11 -0
- package/components/peculiar-ssh-certificate-viewer.js +12 -0
- package/components/peculiar-ssh-certificate-viewer.js.map +1 -0
- package/components/peculiar-text-hider.js +1 -32
- package/components/peculiar-text-hider.js.map +1 -1
- package/components/pkcs10_certificate_request.js +2 -6
- package/components/pkcs10_certificate_request.js.map +1 -1
- package/components/row.js +87 -0
- package/components/row.js.map +1 -0
- package/components/ssh-certificate-viewer.js +193 -0
- package/components/ssh-certificate-viewer.js.map +1 -0
- package/components/subject_name.js +2 -2
- package/components/text-hider.js +40 -0
- package/components/text-hider.js.map +1 -0
- package/dist/cjs/extension-D8YKlAu4.js +110 -0
- package/dist/cjs/extension-D8YKlAu4.js.map +1 -0
- package/dist/cjs/index.cjs.js +4 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{miscellaneous-DeBEwLDy.js → miscellaneous-DvVSM5KJ.js} +187 -186
- package/dist/cjs/{miscellaneous-DeBEwLDy.js.map → miscellaneous-DvVSM5KJ.js.map} +1 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.cjs.js.map +1 -0
- package/dist/cjs/{peculiar-attribute-certificate-viewer_4.cjs.entry.js → peculiar-attribute-certificate-viewer_5.cjs.entry.js} +240 -38
- package/dist/cjs/peculiar-attribute-certificate-viewer_5.cjs.entry.js.map +1 -0
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +25 -20
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-decoder.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +4 -3
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +23 -22
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar.cjs.js +1 -1
- package/dist/cjs/pkcs10_certificate_request-BoHhadiA.js +146 -0
- package/dist/cjs/pkcs10_certificate_request-BoHhadiA.js.map +1 -0
- package/dist/cjs/{certification_request-CxHe71zR.js → ssh_certificate-s3-rwdMT.js} +1734 -126
- package/dist/cjs/ssh_certificate-s3-rwdMT.js.map +1 -0
- package/dist/cjs/{x509_certificate-CzplJQ0X.js → x509_certificate-DfXuxxZp.js} +29 -28
- package/dist/cjs/{x509_certificate-CzplJQ0X.js.map → x509_certificate-DfXuxxZp.js.map} +1 -1
- package/dist/cjs/{x509_crl-B7kFbLDV.js → x509_crl-CxJ2lyGX.js} +32 -31
- package/dist/cjs/{x509_crl-B7kFbLDV.js.map → x509_crl-CxJ2lyGX.js.map} +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/certificate-decoder/certificate-decoder.js +10 -6
- package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/extension_request_attribute.js +25 -0
- package/dist/collection/components/certificate-details-parts/attributes/extension_request_attribute.js.map +1 -0
- package/dist/collection/components/certificate-details-parts/attributes/index.js +10 -1
- package/dist/collection/components/certificate-details-parts/attributes/index.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/private_key_possession_statement_attribute.js +27 -0
- package/dist/collection/components/certificate-details-parts/attributes/private_key_possession_statement_attribute.js.map +1 -0
- package/dist/collection/components/csr-viewer/csr-viewer.js +2 -2
- package/dist/collection/components/csr-viewer/csr-viewer.js.map +1 -1
- package/dist/collection/components/ssh-certificate-viewer/-components/basic_information.js +29 -0
- package/dist/collection/components/ssh-certificate-viewer/-components/basic_information.js.map +1 -0
- package/dist/collection/components/ssh-certificate-viewer/-components/public_key.js +26 -0
- package/dist/collection/components/ssh-certificate-viewer/-components/public_key.js.map +1 -0
- package/dist/collection/components/ssh-certificate-viewer/-components/signature_key.js +26 -0
- package/dist/collection/components/ssh-certificate-viewer/-components/signature_key.js.map +1 -0
- package/dist/collection/components/ssh-certificate-viewer/ssh-certificate-viewer.js +193 -0
- package/dist/collection/components/ssh-certificate-viewer/ssh-certificate-viewer.js.map +1 -0
- package/dist/collection/constants/oids.js +2 -0
- package/dist/collection/constants/oids.js.map +1 -1
- package/dist/collection/crypto/attribute.js +2 -0
- package/dist/collection/crypto/attribute.js.map +1 -1
- package/dist/collection/crypto/index.js +1 -0
- package/dist/collection/crypto/index.js.map +1 -1
- package/dist/collection/crypto/pkcs10_certificate_request.js +0 -7
- package/dist/collection/crypto/pkcs10_certificate_request.js.map +1 -1
- package/dist/collection/crypto/ssh_certificate.js +68 -0
- package/dist/collection/crypto/ssh_certificate.js.map +1 -0
- package/dist/collection/locales/en.json +5 -1
- package/dist/esm/extension-oK2qpCU6.js +107 -0
- package/dist/esm/extension-oK2qpCU6.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{miscellaneous-bVeJt-6m.js → miscellaneous-DrmTXljc.js} +4 -3
- package/dist/{esm-es5/miscellaneous-bVeJt-6m.js.map → esm/miscellaneous-DrmTXljc.js.map} +1 -1
- package/dist/esm/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.js.map +1 -0
- package/dist/esm/{peculiar-attribute-certificate-viewer_4.entry.js → peculiar-attribute-certificate-viewer_5.entry.js} +215 -14
- package/dist/esm/peculiar-attribute-certificate-viewer_5.entry.js.map +1 -0
- package/dist/esm/peculiar-certificate-decoder.entry.js +14 -9
- package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-viewer.entry.js +4 -3
- package/dist/esm/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-certificates-viewer.entry.js +3 -2
- package/dist/esm/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar.js +1 -1
- package/dist/esm/{pkcs10_certificate_request-CK8FH47X.js → pkcs10_certificate_request-Bdt_qA_g.js} +4 -8
- package/dist/esm/pkcs10_certificate_request-Bdt_qA_g.js.map +1 -0
- package/dist/esm/{certification_request-PeMaLTUD.js → ssh_certificate-Ct-r021h.js} +1682 -115
- package/dist/esm/ssh_certificate-Ct-r021h.js.map +1 -0
- package/dist/esm/{x509_certificate-CEEWtU_T.js → x509_certificate-5DEbrOA7.js} +4 -3
- package/dist/{esm-es5/x509_certificate-CEEWtU_T.js.map → esm/x509_certificate-5DEbrOA7.js.map} +1 -1
- package/dist/esm/{x509_crl-BcZd9KVn.js → x509_crl-CPgNUkh7.js} +5 -4
- package/dist/{esm-es5/x509_crl-BcZd9KVn.js.map → esm/x509_crl-CPgNUkh7.js.map} +1 -1
- package/dist/esm-es5/extension-oK2qpCU6.js +12 -0
- package/dist/esm-es5/extension-oK2qpCU6.js.map +1 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/loader.js +2 -2
- package/dist/esm-es5/{miscellaneous-bVeJt-6m.js → miscellaneous-DrmTXljc.js} +2 -2
- package/dist/{esm/miscellaneous-bVeJt-6m.js.map → esm-es5/miscellaneous-DrmTXljc.js.map} +1 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.js.map +1 -0
- package/dist/esm-es5/{peculiar-attribute-certificate-viewer_4.entry.js → peculiar-attribute-certificate-viewer_5.entry.js} +39 -4
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_5.entry.js.map +1 -0
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js +1 -1
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js +1 -1
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js +1 -1
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar.js +1 -1
- package/dist/esm-es5/pkcs10_certificate_request-Bdt_qA_g.js +19 -0
- package/dist/esm-es5/pkcs10_certificate_request-Bdt_qA_g.js.map +1 -0
- package/dist/esm-es5/{certification_request-PeMaLTUD.js → ssh_certificate-Ct-r021h.js} +7 -14
- package/dist/esm-es5/ssh_certificate-Ct-r021h.js.map +1 -0
- package/dist/esm-es5/{x509_certificate-CEEWtU_T.js → x509_certificate-5DEbrOA7.js} +4 -4
- package/dist/{esm/x509_certificate-CEEWtU_T.js.map → esm-es5/x509_certificate-5DEbrOA7.js.map} +1 -1
- package/dist/esm-es5/{x509_crl-BcZd9KVn.js → x509_crl-CPgNUkh7.js} +2 -2
- package/dist/{esm/x509_crl-BcZd9KVn.js.map → esm-es5/x509_crl-CPgNUkh7.js.map} +1 -1
- package/dist/peculiar/index.esm.js +1 -1
- package/dist/peculiar/locales/en.json +5 -1
- package/dist/peculiar/{p-5479a530.entry.js → p-0b895a8e.entry.js} +2 -2
- package/dist/peculiar/{p-84f69023.system.entry.js → p-11434880.system.entry.js} +2 -2
- package/dist/peculiar/{p-C9sY8yng.system.js → p-2GQYAR0v.system.js} +3 -3
- package/dist/peculiar/{p-C9sY8yng.system.js.map → p-2GQYAR0v.system.js.map} +1 -1
- package/dist/peculiar/p-364fd32b.system.entry.js +5 -0
- package/dist/peculiar/{p-14fcbc5c.system.entry.js.map → p-364fd32b.system.entry.js.map} +1 -1
- package/dist/peculiar/p-5df0f22b.system.entry.js +146 -0
- package/dist/peculiar/p-5df0f22b.system.entry.js.map +1 -0
- package/dist/peculiar/p-62b723f6.entry.js +145 -0
- package/dist/peculiar/p-62b723f6.entry.js.map +1 -0
- package/dist/peculiar/p-83a53b4f.entry.js +5 -0
- package/dist/peculiar/{p-0de4837d.entry.js.map → p-83a53b4f.entry.js.map} +1 -1
- package/dist/peculiar/p-B2G7qjfV.js +369 -0
- package/dist/peculiar/{p-CGRNSrHk.js.map → p-B2G7qjfV.js.map} +1 -1
- package/dist/peculiar/{p-BypepohK.system.js.map → p-BCsPspKr.system.js.map} +1 -1
- package/dist/peculiar/p-BGASC3UX.system.js +1 -1
- package/dist/peculiar/p-BGIWeG8l.js +12 -0
- package/dist/peculiar/p-BGIWeG8l.js.map +1 -0
- package/dist/peculiar/{p-DRvp86xt.system.js → p-BQiABBi1.system.js} +5 -5
- package/dist/peculiar/{p-DRvp86xt.system.js.map → p-BQiABBi1.system.js.map} +1 -1
- package/dist/peculiar/{p-CezfC5i1.system.js → p-BeVuAzsd.system.js} +42 -42
- package/dist/peculiar/{p-CezfC5i1.system.js.map → p-BeVuAzsd.system.js.map} +1 -1
- package/dist/peculiar/{p-CZwhKPgb.system.js → p-C31rbtuG.system.js} +2 -2
- package/dist/peculiar/p-C31rbtuG.system.js.map +1 -0
- package/dist/peculiar/p-Ce-IF7_R.system.js.map +1 -0
- package/dist/peculiar/p-ClkgAXnd.system.js +135 -0
- package/dist/peculiar/p-ClkgAXnd.system.js.map +1 -0
- package/dist/peculiar/p-Ct-r021h.js +135 -0
- package/dist/peculiar/p-Ct-r021h.js.map +1 -0
- package/dist/peculiar/{p-BaebEpW0.system.js.map → p-CxtUQdcj.system.js.map} +1 -1
- package/dist/peculiar/{p-DrmgUhyv.js → p-D9qq15zG.js} +4 -4
- package/dist/peculiar/{p-DrmgUhyv.js.map → p-D9qq15zG.js.map} +1 -1
- package/dist/peculiar/{p-CjWRKsN-.js → p-DOpiv0-8.js} +3 -3
- package/dist/peculiar/{p-CjWRKsN-.js.map → p-DOpiv0-8.js.map} +1 -1
- package/dist/peculiar/p-IOtHTzYC.system.js +12 -0
- package/dist/peculiar/p-IOtHTzYC.system.js.map +1 -0
- package/dist/peculiar/p-LmKU8Smy.system.js.map +1 -0
- package/dist/peculiar/p-RWPI76Dh.js +19 -0
- package/dist/peculiar/p-RWPI76Dh.js.map +1 -0
- package/dist/peculiar/p-da9eb1e7.entry.js +5 -0
- package/dist/peculiar/p-da9eb1e7.entry.js.map +1 -0
- package/dist/peculiar/p-fd98bb82.system.entry.js +5 -0
- package/dist/peculiar/p-fd98bb82.system.entry.js.map +1 -0
- package/dist/peculiar/{p-J1t5v5N3.system.js → p-zQwWLfga.system.js} +4 -4
- package/dist/peculiar/p-zQwWLfga.system.js.map +1 -0
- package/dist/peculiar/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.peculiar-ssh-certificate-viewer.entry.esm.js.map +1 -0
- package/dist/peculiar/peculiar-certificate-decoder.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-certificate-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-certificates-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar.esm.js +1 -1
- package/dist/types/components/certificate-decoder/certificate-decoder.d.ts +4 -4
- package/dist/types/components/certificate-details-parts/attributes/extension_request_attribute.d.ts +15 -0
- package/dist/types/components/certificate-details-parts/attributes/private_key_possession_statement_attribute.d.ts +15 -0
- package/dist/types/components/ssh-certificate-viewer/-components/basic_information.d.ts +21 -0
- package/dist/types/components/ssh-certificate-viewer/-components/public_key.d.ts +14 -0
- package/dist/types/components/ssh-certificate-viewer/-components/signature_key.d.ts +14 -0
- package/dist/types/components/ssh-certificate-viewer/ssh-certificate-viewer.d.ts +43 -0
- package/dist/types/components.d.ts +43 -0
- package/dist/types/constants/oids.d.ts +2 -0
- package/dist/types/crypto/attribute.d.ts +2 -0
- package/dist/types/crypto/index.d.ts +1 -0
- package/dist/types/crypto/pkcs10_certificate_request.d.ts +0 -2
- package/dist/types/crypto/ssh_certificate.d.ts +28 -0
- package/dist/types/utils/l10n.d.ts +4 -0
- package/hydrate/index.js +1908 -33
- package/hydrate/index.mjs +1908 -33
- package/package.json +4 -2
- package/dist/cjs/certification_request-CxHe71zR.js.map +0 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.cjs.js.map +0 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js.map +0 -1
- package/dist/cjs/pkcs10_certificate_request-CHMDxe2Z.js +0 -150
- package/dist/cjs/pkcs10_certificate_request-CHMDxe2Z.js.map +0 -1
- package/dist/esm/certification_request-PeMaLTUD.js.map +0 -1
- package/dist/esm/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +0 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js.map +0 -1
- package/dist/esm/pkcs10_certificate_request-CK8FH47X.js.map +0 -1
- package/dist/esm-es5/certification_request-PeMaLTUD.js.map +0 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +0 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js.map +0 -1
- package/dist/esm-es5/pkcs10_certificate_request-CK8FH47X.js +0 -19
- package/dist/esm-es5/pkcs10_certificate_request-CK8FH47X.js.map +0 -1
- package/dist/peculiar/p-00d6f11f.system.entry.js +0 -111
- package/dist/peculiar/p-00d6f11f.system.entry.js.map +0 -1
- package/dist/peculiar/p-0de4837d.entry.js +0 -5
- package/dist/peculiar/p-14fcbc5c.system.entry.js +0 -5
- package/dist/peculiar/p-315805ce.entry.js +0 -5
- package/dist/peculiar/p-315805ce.entry.js.map +0 -1
- package/dist/peculiar/p-591a9019.system.entry.js +0 -5
- package/dist/peculiar/p-591a9019.system.entry.js.map +0 -1
- package/dist/peculiar/p-BipKYW6e.system.js +0 -142
- package/dist/peculiar/p-BipKYW6e.system.js.map +0 -1
- package/dist/peculiar/p-BloT0Xj9.system.js.map +0 -1
- package/dist/peculiar/p-CGRNSrHk.js +0 -369
- package/dist/peculiar/p-CZwhKPgb.system.js.map +0 -1
- package/dist/peculiar/p-D1eNnGDF.js +0 -19
- package/dist/peculiar/p-D1eNnGDF.js.map +0 -1
- package/dist/peculiar/p-ITVWR0oT.system.js.map +0 -1
- package/dist/peculiar/p-J1t5v5N3.system.js.map +0 -1
- package/dist/peculiar/p-PeMaLTUD.js +0 -142
- package/dist/peculiar/p-PeMaLTUD.js.map +0 -1
- package/dist/peculiar/p-c8b3766a.entry.js +0 -110
- package/dist/peculiar/p-c8b3766a.entry.js.map +0 -1
- package/dist/peculiar/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.esm.js.map +0 -1
- /package/dist/peculiar/{p-5479a530.entry.js.map → p-0b895a8e.entry.js.map} +0 -0
- /package/dist/peculiar/{p-84f69023.system.entry.js.map → p-11434880.system.entry.js.map} +0 -0
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var ssh_certificate = require('./ssh_certificate-s3-rwdMT.js');
|
|
7
|
+
var extension = require('./extension-D8YKlAu4.js');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @license
|
|
@@ -12,16 +13,16 @@ var certification_request = require('./certification_request-CxHe71zR.js');
|
|
|
12
13
|
* This source code is licensed under the MIT license found in the
|
|
13
14
|
* LICENSE file in the root directory of this source tree.
|
|
14
15
|
*/
|
|
15
|
-
class X509Certificate extends
|
|
16
|
+
class X509Certificate extends ssh_certificate.AsnData {
|
|
16
17
|
constructor(raw) {
|
|
17
|
-
super(
|
|
18
|
+
super(ssh_certificate.certificateRawToBuffer(raw), ssh_certificate.Certificate);
|
|
18
19
|
this.thumbprints = {};
|
|
19
20
|
this.type = 'X.509 Certificate';
|
|
20
|
-
this.tag =
|
|
21
|
+
this.tag = ssh_certificate.PemConverter.CertificateTag;
|
|
21
22
|
const { tbsCertificate } = this.asn;
|
|
22
|
-
this.serialNumber =
|
|
23
|
-
this.subject = new
|
|
24
|
-
this.issuer = new
|
|
23
|
+
this.serialNumber = ssh_certificate.buildExports.Convert.ToHex(tbsCertificate.serialNumber);
|
|
24
|
+
this.subject = new ssh_certificate.Name(tbsCertificate.subject).toJSON();
|
|
25
|
+
this.issuer = new ssh_certificate.Name(tbsCertificate.issuer).toJSON();
|
|
25
26
|
this.version = tbsCertificate.version + 1;
|
|
26
27
|
const notBefore = tbsCertificate.validity.notBefore.utcTime
|
|
27
28
|
|| tbsCertificate.validity.notBefore.generalTime;
|
|
@@ -35,29 +36,29 @@ class X509Certificate extends certification_request.AsnData {
|
|
|
35
36
|
throw new Error('Cannot get \'notAfter\' value');
|
|
36
37
|
}
|
|
37
38
|
this.notAfter = notAfter;
|
|
38
|
-
this.validity =
|
|
39
|
+
this.validity = ssh_certificate.dateDiff(this.notBefore, this.notAfter);
|
|
39
40
|
}
|
|
40
41
|
parseExtensions() {
|
|
41
42
|
const { tbsCertificate } = this.asn;
|
|
42
43
|
if (tbsCertificate.extensions) {
|
|
43
44
|
this.extensions = tbsCertificate.extensions
|
|
44
|
-
.map((e) => new
|
|
45
|
+
.map((e) => new extension.Extension(ssh_certificate.AsnConvert.serialize(e)));
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
getPublicKeyInfo(publicKeyInfo) {
|
|
48
49
|
const { subjectPublicKey, algorithm } = publicKeyInfo;
|
|
49
50
|
let params;
|
|
50
|
-
if (algorithm.algorithm ===
|
|
51
|
-
params =
|
|
51
|
+
if (algorithm.algorithm === ssh_certificate.id_ecPublicKey && algorithm.parameters) {
|
|
52
|
+
params = ssh_certificate.AsnConvert.parse(algorithm.parameters, ssh_certificate.ECParameters);
|
|
52
53
|
}
|
|
53
|
-
if (algorithm.algorithm ===
|
|
54
|
-
params =
|
|
54
|
+
if (algorithm.algorithm === ssh_certificate.id_rsaEncryption) {
|
|
55
|
+
params = ssh_certificate.AsnConvert.parse(subjectPublicKey, ssh_certificate.RSAPublicKey);
|
|
55
56
|
}
|
|
56
|
-
if (algorithm.algorithm ===
|
|
57
|
-
params =
|
|
57
|
+
if (algorithm.algorithm === ssh_certificate.id_composite_key) {
|
|
58
|
+
params = ssh_certificate.AsnConvert.parse(subjectPublicKey, ssh_certificate.CompositePublicKey);
|
|
58
59
|
params = params.map((param) => this.getPublicKeyInfo(param));
|
|
59
60
|
}
|
|
60
|
-
const spki =
|
|
61
|
+
const spki = ssh_certificate.AsnConvert.serialize(publicKeyInfo);
|
|
61
62
|
return {
|
|
62
63
|
params,
|
|
63
64
|
value: spki,
|
|
@@ -70,9 +71,9 @@ class X509Certificate extends certification_request.AsnData {
|
|
|
70
71
|
get signature() {
|
|
71
72
|
const { signatureValue, signatureAlgorithm } = this.asn;
|
|
72
73
|
let params;
|
|
73
|
-
if (signatureAlgorithm.algorithm ===
|
|
74
|
-
const compositeSignatureValues =
|
|
75
|
-
const compositeParams =
|
|
74
|
+
if (signatureAlgorithm.algorithm === ssh_certificate.id_alg_composite) {
|
|
75
|
+
const compositeSignatureValues = ssh_certificate.AsnConvert.parse(signatureValue, ssh_certificate.CompositeSignatureValue);
|
|
76
|
+
const compositeParams = ssh_certificate.AsnConvert.parse(signatureAlgorithm.parameters, ssh_certificate.CompositeParams);
|
|
76
77
|
params = compositeParams.map((param, index) => (Object.assign(Object.assign({}, param), { value: compositeSignatureValues[index] })));
|
|
77
78
|
}
|
|
78
79
|
return {
|
|
@@ -83,9 +84,9 @@ class X509Certificate extends certification_request.AsnData {
|
|
|
83
84
|
}
|
|
84
85
|
async getThumbprint(algorithm = 'SHA-1') {
|
|
85
86
|
try {
|
|
86
|
-
const thumbprint = await
|
|
87
|
+
const thumbprint = await ssh_certificate.getCertificateThumbprint(algorithm, this.raw);
|
|
87
88
|
if (thumbprint) {
|
|
88
|
-
this.thumbprints[algorithm] =
|
|
89
|
+
this.thumbprints[algorithm] = ssh_certificate.buildExports.Convert.ToHex(thumbprint);
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
catch (error) {
|
|
@@ -138,22 +139,22 @@ class X509Certificate extends certification_request.AsnData {
|
|
|
138
139
|
toString(format = 'pem') {
|
|
139
140
|
switch (format) {
|
|
140
141
|
case 'pem':
|
|
141
|
-
return
|
|
142
|
+
return ssh_certificate.PemConverter.encode(this.raw, this.tag);
|
|
142
143
|
case 'base64url':
|
|
143
|
-
return
|
|
144
|
+
return ssh_certificate.buildExports.Convert.ToBase64Url(this.raw);
|
|
144
145
|
default:
|
|
145
|
-
return
|
|
146
|
+
return ssh_certificate.buildExports.Convert.ToBase64(this.raw);
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
149
|
downloadAsPEM(name) {
|
|
149
|
-
|
|
150
|
+
ssh_certificate.Download.cert.asPEM(this.toString('pem'), name || this.commonName);
|
|
150
151
|
}
|
|
151
152
|
downloadAsDER(name) {
|
|
152
|
-
|
|
153
|
+
ssh_certificate.Download.cert.asDER(this.raw, name || this.commonName);
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
|
|
156
157
|
exports.X509Certificate = X509Certificate;
|
|
157
|
-
//# sourceMappingURL=x509_certificate-
|
|
158
|
+
//# sourceMappingURL=x509_certificate-DfXuxxZp.js.map
|
|
158
159
|
|
|
159
|
-
//# sourceMappingURL=x509_certificate-
|
|
160
|
+
//# sourceMappingURL=x509_certificate-DfXuxxZp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x509_certificate-CzplJQ0X.js","sources":["src/crypto/x509_certificate.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { ECParameters, id_ecPublicKey } from '@peculiar/asn1-ecc';\nimport { id_rsaEncryption, RSAPublicKey } from '@peculiar/asn1-rsa';\nimport {\n id_composite_key,\n id_alg_composite,\n CompositePublicKey,\n CompositeSignatureValue,\n CompositeParams,\n} from '@peculiar/asn1-x509-post-quantum';\nimport { Certificate, SubjectPublicKeyInfo } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\nimport { dateDiff, Download } from '../utils';\nimport { Name, INameJSON } from './name';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\nexport interface ISignature {\n algorithm: string;\n value: BufferSource;\n params?: {\n algorithm: string;\n value: BufferSource;\n }[];\n}\n\nexport interface IPublicKey {\n algorithm: string;\n value: BufferSource;\n params?: ECParameters | RSAPublicKey | IPublicKey[];\n}\n\nexport class X509Certificate extends AsnData<Certificate> {\n public readonly serialNumber: string;\n\n public readonly subject: INameJSON[];\n\n public readonly issuer: INameJSON[];\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public readonly version: number;\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'X.509 Certificate';\n\n public readonly tag = PemConverter.CertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), Certificate);\n\n const { tbsCertificate } = this.asn;\n\n this.serialNumber = Convert.ToHex(tbsCertificate.serialNumber);\n this.subject = new Name(tbsCertificate.subject).toJSON();\n this.issuer = new Name(tbsCertificate.issuer).toJSON();\n this.version = tbsCertificate.version + 1;\n\n const notBefore = tbsCertificate.validity.notBefore.utcTime\n || tbsCertificate.validity.notBefore.generalTime;\n\n if (!notBefore) {\n throw new Error('Cannot get \\'notBefore\\' value');\n }\n\n this.notBefore = notBefore;\n\n const notAfter = tbsCertificate.validity.notAfter.utcTime\n || tbsCertificate.validity.notAfter.generalTime;\n\n if (!notAfter) {\n throw new Error('Cannot get \\'notAfter\\' value');\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n }\n\n public parseExtensions() {\n const { tbsCertificate } = this.asn;\n\n if (tbsCertificate.extensions) {\n this.extensions = tbsCertificate.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n private getPublicKeyInfo(publicKeyInfo: SubjectPublicKeyInfo) {\n const { subjectPublicKey, algorithm } = publicKeyInfo;\n let params;\n\n if (algorithm.algorithm === id_ecPublicKey && algorithm.parameters) {\n params = AsnConvert.parse(algorithm.parameters, ECParameters);\n }\n\n if (algorithm.algorithm === id_rsaEncryption) {\n params = AsnConvert.parse(subjectPublicKey, RSAPublicKey);\n }\n\n if (algorithm.algorithm === id_composite_key) {\n params = AsnConvert.parse(subjectPublicKey, CompositePublicKey);\n\n params = params.map((param) => this.getPublicKeyInfo(param));\n }\n\n const spki = AsnConvert.serialize(publicKeyInfo);\n\n return {\n params,\n value: spki,\n algorithm: algorithm.algorithm,\n };\n }\n\n public get publicKey(): IPublicKey {\n return this.getPublicKeyInfo(this.asn.tbsCertificate.subjectPublicKeyInfo);\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n let params;\n\n if (signatureAlgorithm.algorithm === id_alg_composite) {\n const compositeSignatureValues = AsnConvert.parse(signatureValue, CompositeSignatureValue);\n const compositeParams = AsnConvert.parse(signatureAlgorithm.parameters, CompositeParams);\n\n params = compositeParams.map((param, index) => ({\n ...param,\n value: compositeSignatureValues[index],\n }));\n }\n\n return {\n params,\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n if (!this.subject) {\n return '';\n }\n\n for (let i = 0; i < this.subject.length; i += 1) {\n const name = this.subject[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get issuerCommonName(): string {\n if (!this.issuer) {\n return '';\n }\n\n for (let i = 0; i < this.issuer.length; i += 1) {\n const name = this.issuer[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get isRoot(): boolean {\n return JSON.stringify(this.issuer) === JSON.stringify(this.subject);\n }\n\n public subjectToString() {\n if (!this.subject) {\n return '';\n }\n\n return this.subject\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public issuerToString() {\n if (!this.issuer) {\n return '';\n }\n\n return this.issuer\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"],"names":["AsnData","certificateRawToBuffer","Certificate","PemConverter","Convert","Name","dateDiff","Extension","AsnConvert","id_ecPublicKey","ECParameters","id_rsaEncryption","RSAPublicKey","id_composite_key","CompositePublicKey","id_alg_composite","CompositeSignatureValue","CompositeParams","getCertificateThumbprint","Download"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"x509_certificate-DfXuxxZp.js","sources":["src/crypto/x509_certificate.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { ECParameters, id_ecPublicKey } from '@peculiar/asn1-ecc';\nimport { id_rsaEncryption, RSAPublicKey } from '@peculiar/asn1-rsa';\nimport {\n id_composite_key,\n id_alg_composite,\n CompositePublicKey,\n CompositeSignatureValue,\n CompositeParams,\n} from '@peculiar/asn1-x509-post-quantum';\nimport { Certificate, SubjectPublicKeyInfo } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\nimport { dateDiff, Download } from '../utils';\nimport { Name, INameJSON } from './name';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\nexport interface ISignature {\n algorithm: string;\n value: BufferSource;\n params?: {\n algorithm: string;\n value: BufferSource;\n }[];\n}\n\nexport interface IPublicKey {\n algorithm: string;\n value: BufferSource;\n params?: ECParameters | RSAPublicKey | IPublicKey[];\n}\n\nexport class X509Certificate extends AsnData<Certificate> {\n public readonly serialNumber: string;\n\n public readonly subject: INameJSON[];\n\n public readonly issuer: INameJSON[];\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public readonly version: number;\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'X.509 Certificate';\n\n public readonly tag = PemConverter.CertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), Certificate);\n\n const { tbsCertificate } = this.asn;\n\n this.serialNumber = Convert.ToHex(tbsCertificate.serialNumber);\n this.subject = new Name(tbsCertificate.subject).toJSON();\n this.issuer = new Name(tbsCertificate.issuer).toJSON();\n this.version = tbsCertificate.version + 1;\n\n const notBefore = tbsCertificate.validity.notBefore.utcTime\n || tbsCertificate.validity.notBefore.generalTime;\n\n if (!notBefore) {\n throw new Error('Cannot get \\'notBefore\\' value');\n }\n\n this.notBefore = notBefore;\n\n const notAfter = tbsCertificate.validity.notAfter.utcTime\n || tbsCertificate.validity.notAfter.generalTime;\n\n if (!notAfter) {\n throw new Error('Cannot get \\'notAfter\\' value');\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n }\n\n public parseExtensions() {\n const { tbsCertificate } = this.asn;\n\n if (tbsCertificate.extensions) {\n this.extensions = tbsCertificate.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n private getPublicKeyInfo(publicKeyInfo: SubjectPublicKeyInfo) {\n const { subjectPublicKey, algorithm } = publicKeyInfo;\n let params;\n\n if (algorithm.algorithm === id_ecPublicKey && algorithm.parameters) {\n params = AsnConvert.parse(algorithm.parameters, ECParameters);\n }\n\n if (algorithm.algorithm === id_rsaEncryption) {\n params = AsnConvert.parse(subjectPublicKey, RSAPublicKey);\n }\n\n if (algorithm.algorithm === id_composite_key) {\n params = AsnConvert.parse(subjectPublicKey, CompositePublicKey);\n\n params = params.map((param) => this.getPublicKeyInfo(param));\n }\n\n const spki = AsnConvert.serialize(publicKeyInfo);\n\n return {\n params,\n value: spki,\n algorithm: algorithm.algorithm,\n };\n }\n\n public get publicKey(): IPublicKey {\n return this.getPublicKeyInfo(this.asn.tbsCertificate.subjectPublicKeyInfo);\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n let params;\n\n if (signatureAlgorithm.algorithm === id_alg_composite) {\n const compositeSignatureValues = AsnConvert.parse(signatureValue, CompositeSignatureValue);\n const compositeParams = AsnConvert.parse(signatureAlgorithm.parameters, CompositeParams);\n\n params = compositeParams.map((param, index) => ({\n ...param,\n value: compositeSignatureValues[index],\n }));\n }\n\n return {\n params,\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n if (!this.subject) {\n return '';\n }\n\n for (let i = 0; i < this.subject.length; i += 1) {\n const name = this.subject[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get issuerCommonName(): string {\n if (!this.issuer) {\n return '';\n }\n\n for (let i = 0; i < this.issuer.length; i += 1) {\n const name = this.issuer[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get isRoot(): boolean {\n return JSON.stringify(this.issuer) === JSON.stringify(this.subject);\n }\n\n public subjectToString() {\n if (!this.subject) {\n return '';\n }\n\n return this.subject\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public issuerToString() {\n if (!this.issuer) {\n return '';\n }\n\n return this.issuer\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"],"names":["AsnData","certificateRawToBuffer","Certificate","PemConverter","Convert","Name","dateDiff","Extension","AsnConvert","id_ecPublicKey","ECParameters","id_rsaEncryption","RSAPublicKey","id_composite_key","CompositePublicKey","id_alg_composite","CompositeSignatureValue","CompositeParams","getCertificateThumbprint","Download"],"mappings":"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"}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
var
|
|
6
|
+
var ssh_certificate = require('./ssh_certificate-s3-rwdMT.js');
|
|
7
|
+
var extension = require('./extension-D8YKlAu4.js');
|
|
8
|
+
var pkcs10_certificate_request = require('./pkcs10_certificate_request-BoHhadiA.js');
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* @license
|
|
@@ -13,15 +14,15 @@ var pkcs10_certificate_request = require('./pkcs10_certificate_request-CHMDxe2Z.
|
|
|
13
14
|
* This source code is licensed under the MIT license found in the
|
|
14
15
|
* LICENSE file in the root directory of this source tree.
|
|
15
16
|
*/
|
|
16
|
-
class X509AttributeCertificate extends
|
|
17
|
+
class X509AttributeCertificate extends ssh_certificate.AsnData {
|
|
17
18
|
constructor(raw) {
|
|
18
19
|
var _a;
|
|
19
|
-
super(
|
|
20
|
+
super(ssh_certificate.certificateRawToBuffer(raw), ssh_certificate.AttributeCertificate);
|
|
20
21
|
this.thumbprints = {};
|
|
21
22
|
this.type = 'X.509 Attribute Certificate';
|
|
22
|
-
this.tag =
|
|
23
|
+
this.tag = ssh_certificate.PemConverter.AttributeCertificateTag;
|
|
23
24
|
const { acinfo } = this.asn;
|
|
24
|
-
this.serialNumber =
|
|
25
|
+
this.serialNumber = ssh_certificate.buildExports.Convert.ToHex(acinfo.serialNumber);
|
|
25
26
|
this.version = acinfo.version;
|
|
26
27
|
const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;
|
|
27
28
|
if (!notBefore) {
|
|
@@ -33,7 +34,7 @@ class X509AttributeCertificate extends certification_request.AsnData {
|
|
|
33
34
|
throw new Error('Cannot get \'notAfter\' value');
|
|
34
35
|
}
|
|
35
36
|
this.notAfter = notAfter;
|
|
36
|
-
this.validity =
|
|
37
|
+
this.validity = ssh_certificate.dateDiff(this.notBefore, this.notAfter);
|
|
37
38
|
this.issuer = acinfo.issuer.v1Form || ((_a = acinfo.issuer.v2Form) === null || _a === void 0 ? void 0 : _a.issuerName);
|
|
38
39
|
this.holder = acinfo.holder;
|
|
39
40
|
}
|
|
@@ -48,21 +49,21 @@ class X509AttributeCertificate extends certification_request.AsnData {
|
|
|
48
49
|
const { acinfo } = this.asn;
|
|
49
50
|
if (acinfo.extensions) {
|
|
50
51
|
this.extensions = acinfo.extensions
|
|
51
|
-
.map((e) => new
|
|
52
|
+
.map((e) => new extension.Extension(ssh_certificate.AsnConvert.serialize(e)));
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
parseAttributes() {
|
|
55
56
|
const { acinfo } = this.asn;
|
|
56
57
|
if (acinfo.attributes) {
|
|
57
58
|
this.attributes = acinfo.attributes
|
|
58
|
-
.map((e) => new pkcs10_certificate_request.Attribute(
|
|
59
|
+
.map((e) => new pkcs10_certificate_request.Attribute(ssh_certificate.AsnConvert.serialize(e)));
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
async getThumbprint(algorithm = 'SHA-1') {
|
|
62
63
|
try {
|
|
63
|
-
const thumbprint = await
|
|
64
|
+
const thumbprint = await ssh_certificate.getCertificateThumbprint(algorithm, this.raw);
|
|
64
65
|
if (thumbprint) {
|
|
65
|
-
this.thumbprints[algorithm] =
|
|
66
|
+
this.thumbprints[algorithm] = ssh_certificate.buildExports.Convert.ToHex(thumbprint);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
catch (error) {
|
|
@@ -75,18 +76,18 @@ class X509AttributeCertificate extends certification_request.AsnData {
|
|
|
75
76
|
toString(format = 'pem') {
|
|
76
77
|
switch (format) {
|
|
77
78
|
case 'pem':
|
|
78
|
-
return
|
|
79
|
+
return ssh_certificate.PemConverter.encode(this.raw, this.tag);
|
|
79
80
|
case 'base64url':
|
|
80
|
-
return
|
|
81
|
+
return ssh_certificate.buildExports.Convert.ToBase64Url(this.raw);
|
|
81
82
|
default:
|
|
82
|
-
return
|
|
83
|
+
return ssh_certificate.buildExports.Convert.ToBase64(this.raw);
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
downloadAsPEM(name) {
|
|
86
|
-
|
|
87
|
+
ssh_certificate.Download.attrCert.asPEM(this.toString('pem'), name || this.commonName);
|
|
87
88
|
}
|
|
88
89
|
downloadAsDER(name) {
|
|
89
|
-
|
|
90
|
+
ssh_certificate.Download.attrCert.asDER(this.raw, name || this.commonName);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
|
|
@@ -97,14 +98,14 @@ class X509AttributeCertificate extends certification_request.AsnData {
|
|
|
97
98
|
* This source code is licensed under the MIT license found in the
|
|
98
99
|
* LICENSE file in the root directory of this source tree.
|
|
99
100
|
*/
|
|
100
|
-
class X509Crl extends
|
|
101
|
+
class X509Crl extends ssh_certificate.AsnData {
|
|
101
102
|
constructor(raw) {
|
|
102
|
-
super(
|
|
103
|
+
super(ssh_certificate.certificateRawToBuffer(raw), ssh_certificate.CertificateList);
|
|
103
104
|
this.thumbprints = {};
|
|
104
105
|
this.type = 'X.509 Certificate Revocation List';
|
|
105
|
-
this.tag =
|
|
106
|
+
this.tag = ssh_certificate.PemConverter.CrlTag;
|
|
106
107
|
const { tbsCertList } = this.asn;
|
|
107
|
-
this.issuer = new
|
|
108
|
+
this.issuer = new ssh_certificate.Name(tbsCertList.issuer).toJSON();
|
|
108
109
|
this.version = tbsCertList.version + 1;
|
|
109
110
|
this.lastUpdate = tbsCertList.thisUpdate.getTime();
|
|
110
111
|
this.nextUpdate = tbsCertList.nextUpdate.getTime();
|
|
@@ -114,15 +115,15 @@ class X509Crl extends certification_request.AsnData {
|
|
|
114
115
|
return ({
|
|
115
116
|
revocationDate: revokedCertificate.revocationDate,
|
|
116
117
|
userCertificate: revokedCertificate.userCertificate,
|
|
117
|
-
crlEntryExtensions: (_a = revokedCertificate.crlEntryExtensions) === null || _a === void 0 ? void 0 : _a.map((e) => new
|
|
118
|
+
crlEntryExtensions: (_a = revokedCertificate.crlEntryExtensions) === null || _a === void 0 ? void 0 : _a.map((e) => new extension.Extension(ssh_certificate.AsnConvert.serialize(e))),
|
|
118
119
|
});
|
|
119
120
|
});
|
|
120
121
|
}
|
|
121
122
|
async getThumbprint(algorithm = 'SHA-1') {
|
|
122
123
|
try {
|
|
123
|
-
const thumbprint = await
|
|
124
|
+
const thumbprint = await ssh_certificate.getCertificateThumbprint(algorithm, this.raw);
|
|
124
125
|
if (thumbprint) {
|
|
125
|
-
this.thumbprints[algorithm] =
|
|
126
|
+
this.thumbprints[algorithm] = ssh_certificate.buildExports.Convert.ToHex(thumbprint);
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
129
|
catch (error) {
|
|
@@ -152,29 +153,29 @@ class X509Crl extends certification_request.AsnData {
|
|
|
152
153
|
const { tbsCertList } = this.asn;
|
|
153
154
|
if (tbsCertList.crlExtensions) {
|
|
154
155
|
this.extensions = tbsCertList.crlExtensions
|
|
155
|
-
.map((e) => new
|
|
156
|
+
.map((e) => new extension.Extension(ssh_certificate.AsnConvert.serialize(e)));
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
toString(format = 'pem') {
|
|
159
160
|
switch (format) {
|
|
160
161
|
case 'pem':
|
|
161
|
-
return
|
|
162
|
+
return ssh_certificate.PemConverter.encode(this.raw, this.tag);
|
|
162
163
|
case 'base64url':
|
|
163
|
-
return
|
|
164
|
+
return ssh_certificate.buildExports.Convert.ToBase64Url(this.raw);
|
|
164
165
|
default:
|
|
165
|
-
return
|
|
166
|
+
return ssh_certificate.buildExports.Convert.ToBase64(this.raw);
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
169
|
downloadAsPEM(name) {
|
|
169
|
-
|
|
170
|
+
ssh_certificate.Download.crl.asPEM(this.toString('pem'), name || this.commonName);
|
|
170
171
|
}
|
|
171
172
|
downloadAsDER(name) {
|
|
172
|
-
|
|
173
|
+
ssh_certificate.Download.crl.asDER(this.raw, name || this.commonName);
|
|
173
174
|
}
|
|
174
175
|
}
|
|
175
176
|
|
|
176
177
|
exports.X509AttributeCertificate = X509AttributeCertificate;
|
|
177
178
|
exports.X509Crl = X509Crl;
|
|
178
|
-
//# sourceMappingURL=x509_crl-
|
|
179
|
+
//# sourceMappingURL=x509_crl-CxJ2lyGX.js.map
|
|
179
180
|
|
|
180
|
-
//# sourceMappingURL=x509_crl-
|
|
181
|
+
//# sourceMappingURL=x509_crl-CxJ2lyGX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x509_crl-B7kFbLDV.js","sources":["src/crypto/x509_attribute_certificate.ts","src/crypto/x509_crl.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport type { GeneralName } from '@peculiar/asn1-x509';\nimport { AttributeCertificate, Holder } from '@peculiar/asn1-x509-attr';\nimport { Convert } from 'pvtsutils';\nimport { dateDiff, Download } from '../utils';\nimport { AsnData } from './asn_data';\nimport { Extension, TExtensionValue } from './extension';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport class X509AttributeCertificate extends AsnData<AttributeCertificate> {\n public readonly serialNumber: string;\n\n public readonly version: number;\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public attributes: Attribute<TAttributeValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly issuer: GeneralName[];\n\n public holder: Holder;\n\n public readonly type = 'X.509 Attribute Certificate';\n\n public readonly tag = PemConverter.AttributeCertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), AttributeCertificate);\n\n const { acinfo } = this.asn;\n\n this.serialNumber = Convert.ToHex(acinfo.serialNumber);\n this.version = acinfo.version;\n\n const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;\n\n if (!notBefore) {\n throw new Error('Cannot get \\'notBefore\\' value');\n }\n\n this.notBefore = notBefore;\n\n const notAfter = acinfo.attrCertValidityPeriod.notAfterTime;\n\n if (!notAfter) {\n throw new Error('Cannot get \\'notAfter\\' value');\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n this.issuer = acinfo.issuer.v1Form || acinfo.issuer.v2Form?.issuerName;\n this.holder = acinfo.holder;\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n\n return {\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public parseExtensions() {\n const { acinfo } = this.asn;\n\n if (acinfo.extensions) {\n this.extensions = acinfo.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public parseAttributes() {\n const { acinfo } = this.asn;\n\n if (acinfo.attributes) {\n this.attributes = acinfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n }\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n return `attribute-certificate-${this.thumbprints['SHA-1']}`;\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.attrCert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.attrCert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { CertificateList, Time } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\nimport { Download } from '../utils';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport { Name, INameJSON } from './name';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport interface IRevokedCertificate {\n userCertificate: ArrayBuffer;\n revocationDate: Time;\n crlEntryExtensions?: Extension<TExtensionValue>[];\n}\n\nexport class X509Crl extends AsnData<CertificateList> {\n public readonly issuer: INameJSON[];\n\n public readonly version: number;\n\n public readonly lastUpdate: Date;\n\n public readonly nextUpdate: Date;\n\n public extensions: Extension<TExtensionValue>[];\n\n public revokedCertificates: IRevokedCertificate[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'X.509 Certificate Revocation List';\n\n public readonly tag = PemConverter.CrlTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), CertificateList);\n\n const { tbsCertList } = this.asn;\n\n this.issuer = new Name(tbsCertList.issuer).toJSON();\n this.version = tbsCertList.version + 1;\n this.lastUpdate = tbsCertList.thisUpdate.getTime();\n this.nextUpdate = tbsCertList.nextUpdate.getTime();\n\n this.revokedCertificates = (tbsCertList.revokedCertificates || [])\n .map((revokedCertificate) => ({\n revocationDate: revokedCertificate.revocationDate,\n userCertificate: revokedCertificate.userCertificate,\n crlEntryExtensions: revokedCertificate.crlEntryExtensions\n ?.map((e) => new Extension(AsnConvert.serialize(e))),\n }));\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get signature(): ISignature {\n const { signature, signatureAlgorithm } = this.asn;\n\n return {\n value: signature,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public get commonName(): string {\n if (!this.issuer) {\n return '';\n }\n\n for (let i = 0; i < this.issuer.length; i += 1) {\n const name = this.issuer[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public parseExtensions() {\n const { tbsCertList } = this.asn;\n\n if (tbsCertList.crlExtensions) {\n this.extensions = tbsCertList.crlExtensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.crl.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.crl.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"],"names":["AsnData","certificateRawToBuffer","AttributeCertificate","PemConverter","Convert","dateDiff","Extension","AsnConvert","Attribute","getCertificateThumbprint","Download","CertificateList","Name"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"x509_crl-CxJ2lyGX.js","sources":["src/crypto/x509_attribute_certificate.ts","src/crypto/x509_crl.ts"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport type { GeneralName } from '@peculiar/asn1-x509';\nimport { AttributeCertificate, Holder } from '@peculiar/asn1-x509-attr';\nimport { Convert } from 'pvtsutils';\nimport { dateDiff, Download } from '../utils';\nimport { AsnData } from './asn_data';\nimport { Extension, TExtensionValue } from './extension';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport class X509AttributeCertificate extends AsnData<AttributeCertificate> {\n public readonly serialNumber: string;\n\n public readonly version: number;\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public attributes: Attribute<TAttributeValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly issuer: GeneralName[];\n\n public holder: Holder;\n\n public readonly type = 'X.509 Attribute Certificate';\n\n public readonly tag = PemConverter.AttributeCertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), AttributeCertificate);\n\n const { acinfo } = this.asn;\n\n this.serialNumber = Convert.ToHex(acinfo.serialNumber);\n this.version = acinfo.version;\n\n const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;\n\n if (!notBefore) {\n throw new Error('Cannot get \\'notBefore\\' value');\n }\n\n this.notBefore = notBefore;\n\n const notAfter = acinfo.attrCertValidityPeriod.notAfterTime;\n\n if (!notAfter) {\n throw new Error('Cannot get \\'notAfter\\' value');\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n this.issuer = acinfo.issuer.v1Form || acinfo.issuer.v2Form?.issuerName;\n this.holder = acinfo.holder;\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n\n return {\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public parseExtensions() {\n const { acinfo } = this.asn;\n\n if (acinfo.extensions) {\n this.extensions = acinfo.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public parseAttributes() {\n const { acinfo } = this.asn;\n\n if (acinfo.attributes) {\n this.attributes = acinfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n }\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n return `attribute-certificate-${this.thumbprints['SHA-1']}`;\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.attrCert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.attrCert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { CertificateList, Time } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\nimport { Download } from '../utils';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport { Name, INameJSON } from './name';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport interface IRevokedCertificate {\n userCertificate: ArrayBuffer;\n revocationDate: Time;\n crlEntryExtensions?: Extension<TExtensionValue>[];\n}\n\nexport class X509Crl extends AsnData<CertificateList> {\n public readonly issuer: INameJSON[];\n\n public readonly version: number;\n\n public readonly lastUpdate: Date;\n\n public readonly nextUpdate: Date;\n\n public extensions: Extension<TExtensionValue>[];\n\n public revokedCertificates: IRevokedCertificate[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'X.509 Certificate Revocation List';\n\n public readonly tag = PemConverter.CrlTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), CertificateList);\n\n const { tbsCertList } = this.asn;\n\n this.issuer = new Name(tbsCertList.issuer).toJSON();\n this.version = tbsCertList.version + 1;\n this.lastUpdate = tbsCertList.thisUpdate.getTime();\n this.nextUpdate = tbsCertList.nextUpdate.getTime();\n\n this.revokedCertificates = (tbsCertList.revokedCertificates || [])\n .map((revokedCertificate) => ({\n revocationDate: revokedCertificate.revocationDate,\n userCertificate: revokedCertificate.userCertificate,\n crlEntryExtensions: revokedCertificate.crlEntryExtensions\n ?.map((e) => new Extension(AsnConvert.serialize(e))),\n }));\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get signature(): ISignature {\n const { signature, signatureAlgorithm } = this.asn;\n\n return {\n value: signature,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public get commonName(): string {\n if (!this.issuer) {\n return '';\n }\n\n for (let i = 0; i < this.issuer.length; i += 1) {\n const name = this.issuer[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public parseExtensions() {\n const { tbsCertList } = this.asn;\n\n if (tbsCertList.crlExtensions) {\n this.extensions = tbsCertList.crlExtensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.crl.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.crl.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"],"names":["AsnData","certificateRawToBuffer","AttributeCertificate","PemConverter","Convert","dateDiff","Extension","AsnConvert","Attribute","getCertificateThumbprint","Download","CertificateList","Name"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"components/certificates-viewer/certificates-viewer.js",
|
|
7
7
|
"components/crl-viewer/crl-viewer.js",
|
|
8
8
|
"components/csr-viewer/csr-viewer.js",
|
|
9
|
+
"components/ssh-certificate-viewer/ssh-certificate-viewer.js",
|
|
9
10
|
"components/certificate-chain-viewer/certificate-chain-viewer.js",
|
|
10
11
|
"components/certificate-decoder/certificate-decoder.js",
|
|
11
12
|
"components/circular-progress/circular-progress.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { Host, h, } from "@stencil/core";
|
|
12
12
|
import { readAsBinaryString } from "../../utils";
|
|
13
|
-
import { X509Certificate, X509AttributeCertificate, Pkcs10CertificateRequest, X509Crl, X509Certificates, } from "../../crypto";
|
|
13
|
+
import { X509Certificate, X509AttributeCertificate, Pkcs10CertificateRequest, X509Crl, X509Certificates, SshCertificate, } from "../../crypto";
|
|
14
14
|
import { Button } from "../button";
|
|
15
15
|
import { Typography } from "../typography";
|
|
16
16
|
export class CertificateDecoder {
|
|
@@ -70,12 +70,12 @@ export class CertificateDecoder {
|
|
|
70
70
|
this.certificateDecoded = null;
|
|
71
71
|
this.clearCertificate.emit();
|
|
72
72
|
}
|
|
73
|
-
setValue(value) {
|
|
73
|
+
async setValue(value) {
|
|
74
74
|
this.certificateDecoded = value;
|
|
75
|
-
this.inputPaste.value = value.toString('pem');
|
|
76
|
-
this.successParse.emit(value.toString('base64url'));
|
|
75
|
+
this.inputPaste.value = await value.toString('pem');
|
|
76
|
+
this.successParse.emit(await value.toString('base64url'));
|
|
77
77
|
}
|
|
78
|
-
decode(value) {
|
|
78
|
+
async decode(value) {
|
|
79
79
|
new Promise((resolve) => {
|
|
80
80
|
resolve(new X509Certificates(value));
|
|
81
81
|
})
|
|
@@ -83,6 +83,7 @@ export class CertificateDecoder {
|
|
|
83
83
|
.catch(() => new X509AttributeCertificate(value))
|
|
84
84
|
.catch(() => new Pkcs10CertificateRequest(value))
|
|
85
85
|
.catch(() => new X509Crl(value))
|
|
86
|
+
.catch(() => new SshCertificate(value))
|
|
86
87
|
.then((res) => this.setValue(res))
|
|
87
88
|
.catch((error) => {
|
|
88
89
|
console.log(error);
|
|
@@ -105,11 +106,14 @@ export class CertificateDecoder {
|
|
|
105
106
|
if (this.certificateDecoded instanceof X509Crl) {
|
|
106
107
|
return (h("peculiar-crl-viewer", { certificate: this.certificateDecoded, download: true }));
|
|
107
108
|
}
|
|
109
|
+
if (this.certificateDecoded instanceof SshCertificate) {
|
|
110
|
+
return (h("peculiar-ssh-certificate-viewer", { certificate: this.certificateDecoded, download: true }));
|
|
111
|
+
}
|
|
108
112
|
return null;
|
|
109
113
|
}
|
|
110
114
|
render() {
|
|
111
115
|
var _a;
|
|
112
|
-
return (h(Host, { key: '
|
|
116
|
+
return (h(Host, { key: '9067f2d7f33a40b3ad0ba03c7338a6f800100dab' }, h("textarea", { key: '9e8962631c259fd5e144a1397d8591dde46d032f', placeholder: "Certificate DER or PEM", class: "textarea t-b2 c-black", ref: (el) => { this.inputPaste = el; }, onDrop: this.handleDropFile }), h("div", { key: '9be2b1e6c9b3de94c9d5e1e6cf31d9fb487960d8', class: "controls" }, h("div", { key: '3959b89ab5c5654a3c10a1166743c056c0340e2e', class: "control_row" }, h(Typography, { key: '3c03f42d14ff5a485264523bab40765bb4f89a8f', variant: "b3", color: "secondary-tint-2" }, "Drag or load file:"), h("input", { key: '3c8682f5de0b0e2f84e37a8a05882ebcf331daef', type: "file", accept: "application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl,.cert", value: "", onChange: this.handleChangeInputFile })), ((_a = this.certificateExamples) === null || _a === void 0 ? void 0 : _a.length) && (h("div", { key: '7c38788ccf4b038126ddf6909ec1d3de76325660', class: "control_row" }, h(Typography, { key: 'c1c13aaad3d1df51465c6c51ee24f45313de8f1c', variant: "b3", color: "secondary-tint-2" }, "Load examples:"), h("select", { key: '811c4440269bb0a0a55f488e10dfa12093b18d7b', onChange: this.handleChangeExample }, h("option", { key: 'd2e30396fe3a59d5c46c83c6cd1e5b5a58f15f73', value: "" }, "None"), this.certificateExamples.map((example) => (h("option", { value: example.value }, example.title)))))), h("div", { key: '58daae2b9d8e2dd4c698ec9ad6e7f0d8b2500883', class: "control_row" }, h(Button, { key: 'd7f813370ace60deaad975622cc26b9a497ce9d2', onClick: this.handleClickDecode }, "Decode"), h(Button, { key: 'ec2fbeb6283ffd17c7328ee78c9464926b0bbb6b', onClick: this.handleClickClear }, "Clear"))), this.renderCertificate()));
|
|
113
117
|
}
|
|
114
118
|
static get is() { return "peculiar-certificate-decoder"; }
|
|
115
119
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certificate-decoder.js","sourceRoot":"","sources":["../../../src/components/certificate-decoder/certificate-decoder.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n Prop,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport { readAsBinaryString } from '../../utils';\nimport {\n X509Certificate,\n X509AttributeCertificate,\n Pkcs10CertificateRequest,\n X509Crl,\n X509Certificates,\n} from '../../crypto';\nimport { Button } from '../button';\nimport { Typography } from '../typography';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n styleUrl: 'certificate-decoder.scss',\n shadow: true,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * The example certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * The default certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateToDecode?: string;\n\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl;\n\n /**\n * Emitted when the certificate has been successfully parsed.\n */\n @Event() successParse!: EventEmitter<string>;\n\n /**\n * Emitted when the certificate has been removed.\n */\n @Event() clearCertificate!: EventEmitter<void>;\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n /**\n * Prevent Stencil warning about re-render\n */\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) {\n this.decode(value);\n }\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeInputFile = async (event: any) => {\n const element = event.target;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n\n element.value = '';\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeExample = (event: any) => {\n if (event.target.value) {\n this.decode(event.target.value);\n } else {\n this.clearValue();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleDropFile = async (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.dataTransfer;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n }\n };\n\n clearValue() {\n this.inputPaste.value = '';\n this.certificateDecoded = null;\n this.clearCertificate.emit();\n }\n\n setValue(value: typeof this.certificateDecoded) {\n this.certificateDecoded = value;\n this.inputPaste.value = value.toString('pem');\n this.successParse.emit(value.toString('base64url'));\n }\n\n decode(value: string) {\n new Promise<X509Certificates>((resolve) => {\n resolve(new X509Certificates(value));\n })\n .catch(() => new X509Certificate(value))\n .catch(() => new X509AttributeCertificate(value))\n .catch(() => new Pkcs10CertificateRequest(value))\n .catch(() => new X509Crl(value))\n .then((res: typeof this.certificateDecoded) => this.setValue(res))\n .catch((error) => {\n console.log(error);\n\n alert(`Error decoding certificate:\\n\"${value}\"\\n\\nPlease try to use Certificate/AttributeCertificate/CertificateRequest/CRL.`);\n });\n }\n\n renderCertificate() {\n if (this.certificateDecoded instanceof X509Certificates) {\n return (\n <peculiar-certificate-chain-viewer\n certificates={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Certificate) {\n return (\n <peculiar-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509AttributeCertificate) {\n return (\n <peculiar-attribute-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof Pkcs10CertificateRequest) {\n return (\n <peculiar-csr-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Crl) {\n return (\n <peculiar-crl-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n return null;\n }\n\n render() {\n return (\n <Host>\n <textarea\n placeholder=\"Certificate DER or PEM\"\n class=\"textarea t-b2 c-black\"\n ref={(el) => { this.inputPaste = el; }}\n onDrop={this.handleDropFile}\n />\n <div class=\"controls\">\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Drag or load file:\n </Typography>\n <input\n type=\"file\"\n accept=\"application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl\"\n value=\"\"\n onChange={this.handleChangeInputFile}\n />\n </div>\n {this.certificateExamples?.length && (\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Load examples:\n </Typography>\n <select onChange={this.handleChangeExample}>\n <option value=\"\">None</option>\n {this.certificateExamples.map((example) => (\n <option value={example.value}>\n {example.title}\n </option>\n ))}\n </select>\n </div>\n )}\n <div class=\"control_row\">\n <Button\n onClick={this.handleClickDecode}\n >\n Decode\n </Button>\n <Button\n onClick={this.handleClickClear}\n >\n Clear\n </Button>\n </div>\n </div>\n {this.renderCertificate()}\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"certificate-decoder.js","sourceRoot":"","sources":["../../../src/components/certificate-decoder/certificate-decoder.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n Prop,\n Event,\n EventEmitter,\n} from '@stencil/core';\nimport { readAsBinaryString } from '../../utils';\nimport {\n X509Certificate,\n X509AttributeCertificate,\n Pkcs10CertificateRequest,\n X509Crl,\n X509Certificates,\n SshCertificate,\n} from '../../crypto';\nimport { Button } from '../button';\nimport { Typography } from '../typography';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n styleUrl: 'certificate-decoder.scss',\n shadow: true,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * The example certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * The default certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateToDecode?: string;\n\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl\n | SshCertificate;\n\n /**\n * Emitted when the certificate has been successfully parsed.\n */\n @Event() successParse!: EventEmitter<string>;\n\n /**\n * Emitted when the certificate has been removed.\n */\n @Event() clearCertificate!: EventEmitter<void>;\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n /**\n * Prevent Stencil warning about re-render\n */\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) {\n this.decode(value);\n }\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeInputFile = async (event: any) => {\n const element = event.target;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n\n element.value = '';\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleChangeExample = (event: any) => {\n if (event.target.value) {\n this.decode(event.target.value);\n } else {\n this.clearValue();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handleDropFile = async (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.dataTransfer;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n }\n };\n\n clearValue() {\n this.inputPaste.value = '';\n this.certificateDecoded = null;\n this.clearCertificate.emit();\n }\n\n async setValue(value: typeof this.certificateDecoded) {\n this.certificateDecoded = value;\n\n this.inputPaste.value = await value.toString('pem');\n this.successParse.emit(await value.toString('base64url'));\n }\n\n async decode(value: string) {\n new Promise<X509Certificates>((resolve) => {\n resolve(new X509Certificates(value));\n })\n .catch(() => new X509Certificate(value))\n .catch(() => new X509AttributeCertificate(value))\n .catch(() => new Pkcs10CertificateRequest(value))\n .catch(() => new X509Crl(value))\n .catch(() => new SshCertificate(value))\n .then((res: typeof this.certificateDecoded) => this.setValue(res))\n .catch((error) => {\n console.log(error);\n\n alert(`Error decoding certificate:\\n\"${value}\"\\n\\nPlease try to use Certificate/AttributeCertificate/CertificateRequest/CRL.`);\n });\n }\n\n renderCertificate() {\n if (this.certificateDecoded instanceof X509Certificates) {\n return (\n <peculiar-certificate-chain-viewer\n certificates={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Certificate) {\n return (\n <peculiar-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509AttributeCertificate) {\n return (\n <peculiar-attribute-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof Pkcs10CertificateRequest) {\n return (\n <peculiar-csr-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Crl) {\n return (\n <peculiar-crl-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof SshCertificate) {\n return (\n <peculiar-ssh-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n return null;\n }\n\n render() {\n return (\n <Host>\n <textarea\n placeholder=\"Certificate DER or PEM\"\n class=\"textarea t-b2 c-black\"\n ref={(el) => { this.inputPaste = el; }}\n onDrop={this.handleDropFile}\n />\n <div class=\"controls\">\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Drag or load file:\n </Typography>\n <input\n type=\"file\"\n accept=\"application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl,.cert\"\n value=\"\"\n onChange={this.handleChangeInputFile}\n />\n </div>\n {this.certificateExamples?.length && (\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Load examples:\n </Typography>\n <select onChange={this.handleChangeExample}>\n <option value=\"\">None</option>\n {this.certificateExamples.map((example) => (\n <option value={example.value}>\n {example.title}\n </option>\n ))}\n </select>\n </div>\n )}\n <div class=\"control_row\">\n <Button\n onClick={this.handleClickDecode}\n >\n Decode\n </Button>\n <Button\n onClick={this.handleClickClear}\n >\n Clear\n </Button>\n </div>\n </div>\n {this.renderCertificate()}\n </Host>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © Peculiar Ventures https://peculiarventures.com/ - MIT License
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @license
|
|
6
|
+
* Copyright (c) Peculiar Ventures, LLC.
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under the MIT license found in the
|
|
9
|
+
* LICENSE file in the root directory of this source tree.
|
|
10
|
+
*/
|
|
11
|
+
import { h } from "@stencil/core";
|
|
12
|
+
import { AsnConvert } from "@peculiar/asn1-schema";
|
|
13
|
+
import { Extension } from "../../../crypto/extension";
|
|
14
|
+
import { Extensions } from "../../certificate-details-parts";
|
|
15
|
+
import { TableRowTable } from "../row";
|
|
16
|
+
import { BasicAttribute } from "./basic_attribute";
|
|
17
|
+
export const ExtensionRequestAttribute = (props) => {
|
|
18
|
+
const { attribute } = props;
|
|
19
|
+
let extensions;
|
|
20
|
+
if (attribute.value) {
|
|
21
|
+
extensions = attribute.value.map((e) => new Extension(AsnConvert.serialize(e)));
|
|
22
|
+
}
|
|
23
|
+
return (h(BasicAttribute, { attribute: attribute }, h(TableRowTable, null, h(Extensions, { extensions: extensions, getDNSNameLink: () => '', getIPAddressLink: () => '', getLEILink: () => '' }))));
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=extension_request_attribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension_request_attribute.js","sourceRoot":"","sources":["../../../../src/components/certificate-details-parts/attributes/extension_request_attribute.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAuB,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAmB,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,MAAM,CAAC,MAAM,yBAAyB,GACiB,CAAC,KAAK,EAAE,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,UAAwC,CAAC;IAE7C,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,CACL,EAAC,cAAc,IACb,SAAS,EAAE,SAAS;QAEpB,EAAC,aAAa;YACZ,EAAC,UAAU,IACT,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,EACxB,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,EAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GACpB,CACY,CACD,CAClB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { ExtensionRequest } from '@peculiar/asn1-pkcs9';\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { Extension, TExtensionValue } from '../../../crypto/extension';\nimport { Attribute } from '../../../crypto/attribute';\nimport { Extensions } from '../../certificate-details-parts';\nimport { TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IExtensionRequestAttributeProps {\n attribute: Attribute<ExtensionRequest>;\n}\n\nexport const ExtensionRequestAttribute:\nFunctionalComponent<IExtensionRequestAttributeProps> = (props) => {\n const { attribute } = props;\n let extensions: Extension<TExtensionValue>[];\n\n if (attribute.value) {\n extensions = attribute.value.map((e) => new Extension(AsnConvert.serialize(e)));\n }\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <TableRowTable>\n <Extensions\n extensions={extensions}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n getLEILink={() => ''}\n />\n </TableRowTable>\n </BasicAttribute>\n );\n};\n"]}
|