@peculiar/certificates-viewer 4.3.1 → 4.3.2
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 +5 -5
- package/components/attribute-certificate-viewer.js.map +1 -1
- package/components/attribute.js +1 -1
- package/components/certificate-chain-viewer.js +66 -0
- package/components/certificate-chain-viewer.js.map +1 -0
- package/components/certificate-viewer.js +5 -5
- package/components/certificate-viewer.js.map +1 -1
- package/components/circular-progress.js +3 -3
- package/components/crl-viewer.js +5 -5
- package/components/crl-viewer.js.map +1 -1
- package/components/download.js +185 -45
- package/components/download.js.map +1 -1
- package/components/highlight-words.js +1 -1
- package/components/index2.js +1 -1
- package/components/issuer_name.js +1 -1
- package/components/miscellaneous.js +1 -1
- package/components/miscellaneous.js.map +1 -1
- package/components/peculiar-certificate-chain-viewer.d.ts +11 -0
- package/components/peculiar-certificate-chain-viewer.js +11 -0
- package/components/peculiar-certificate-chain-viewer.js.map +1 -0
- package/components/peculiar-certificate-decoder.js +105 -19
- package/components/peculiar-certificate-decoder.js.map +1 -1
- package/components/peculiar-certificates-viewer.js +2 -2
- package/components/peculiar-certificates-viewer.js.map +1 -1
- package/components/peculiar-text-hider.js +1 -1
- package/components/pkcs10_certificate_request.js +5 -5
- package/components/pkcs10_certificate_request.js.map +1 -1
- package/components/subject_name.js +1 -1
- package/dist/cjs/{actions-789906f5.js → actions-64ce3326.js} +2 -2
- package/dist/cjs/{actions-789906f5.js.map → actions-64ce3326.js.map} +1 -1
- package/dist/cjs/{arrow_top-76e4261e.js → arrow_top-b9b9f280.js} +2 -2
- package/dist/cjs/{arrow_top-76e4261e.js.map → arrow_top-b9b9f280.js.map} +1 -1
- package/dist/cjs/{button-87086210.js → button-61bb8305.js} +2 -2
- package/dist/cjs/{button-87086210.js.map → button-61bb8305.js.map} +1 -1
- package/dist/cjs/{certification_request-ad267278.js → certification_request-393a843d.js} +207 -65
- package/dist/cjs/certification_request-393a843d.js.map +1 -0
- package/dist/cjs/{cross-bd099933.js → cross-3aeffd04.js} +2 -2
- package/dist/cjs/{cross-bd099933.js.map → cross-3aeffd04.js.map} +1 -1
- package/dist/cjs/{download-820d66ba.js → download-c2836546.js} +2 -2
- package/dist/cjs/{download-820d66ba.js.map → download-c2836546.js.map} +1 -1
- package/dist/cjs/index-484a84a0.js +2113 -0
- package/dist/cjs/index-484a84a0.js.map +1 -0
- package/dist/cjs/index.cjs.js +9 -9
- package/dist/cjs/{link-a3d3799d.js → link-dad7195a.js} +3 -3
- package/dist/cjs/{link-a3d3799d.js.map → link-dad7195a.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{miscellaneous-67439e59.js → miscellaneous-ca06fb81.js} +6 -6
- package/dist/cjs/{miscellaneous-67439e59.js.map → miscellaneous-ca06fb81.js.map} +1 -1
- package/dist/cjs/{peculiar-attribute-certificate-viewer_3.cjs.entry.js → peculiar-attribute-certificate-viewer_4.cjs.entry.js} +40 -9
- package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js.map +1 -0
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js +7 -7
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +101 -21
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +7 -7
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +8 -8
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-text-hider.cjs.entry.js +4 -4
- package/dist/cjs/peculiar.cjs.js +10 -10
- package/dist/cjs/peculiar.cjs.js.map +1 -1
- package/dist/cjs/{pkcs10_certificate_request-64898c88.js → pkcs10_certificate_request-56990e4f.js} +6 -6
- package/dist/cjs/pkcs10_certificate_request-56990e4f.js.map +1 -0
- package/dist/cjs/{x509_certificate-4b0894c2.js → x509_certificate-d162984c.js} +6 -6
- package/dist/cjs/x509_certificate-d162984c.js.map +1 -0
- package/dist/cjs/{x509_crl-fc8d41a1.js → x509_crl-13322e13.js} +11 -11
- package/dist/cjs/x509_crl-13322e13.js.map +1 -0
- package/dist/collection/collection-manifest.json +3 -2
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js +14 -0
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js.map +1 -1
- package/dist/collection/components/button-menu/button-menu.js +2 -0
- package/dist/collection/components/button-menu/button-menu.js.map +1 -1
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.css +1019 -0
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js +101 -0
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js.map +1 -0
- package/dist/collection/components/certificate-decoder/certificate-decoder.css +1 -4
- package/dist/collection/components/certificate-decoder/certificate-decoder.js +40 -18
- package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/miscellaneous.js.map +1 -1
- package/dist/collection/components/certificate-viewer/certificate-viewer.js +16 -0
- package/dist/collection/components/certificate-viewer/certificate-viewer.js.map +1 -1
- package/dist/collection/components/certificates-viewer/certificates-viewer.js +9 -1
- package/dist/collection/components/certificates-viewer/certificates-viewer.js.map +1 -1
- package/dist/collection/components/circular-progress/circular-progress.js +7 -3
- package/dist/collection/components/circular-progress/circular-progress.js.map +1 -1
- package/dist/collection/components/crl-viewer/crl-viewer.js +12 -0
- package/dist/collection/components/crl-viewer/crl-viewer.js.map +1 -1
- package/dist/collection/components/csr-viewer/csr-viewer.js +10 -0
- package/dist/collection/components/csr-viewer/csr-viewer.js.map +1 -1
- package/dist/collection/components/highlight-words/highlight-words.js +3 -1
- package/dist/collection/components/highlight-words/highlight-words.js.map +1 -1
- package/dist/collection/components/text-hider/text-hider.js +1 -1
- package/dist/collection/crypto/index.js +1 -0
- package/dist/collection/crypto/index.js.map +1 -1
- package/dist/collection/crypto/pem_converter.js +169 -0
- package/dist/collection/crypto/pem_converter.js.map +1 -0
- package/dist/collection/crypto/pkcs10_certificate_request.js +6 -5
- package/dist/collection/crypto/pkcs10_certificate_request.js.map +1 -1
- package/dist/collection/crypto/utils.js +18 -21
- package/dist/collection/crypto/utils.js.map +1 -1
- package/dist/collection/crypto/x509_attribute_certificate.js +6 -5
- package/dist/collection/crypto/x509_attribute_certificate.js.map +1 -1
- package/dist/collection/crypto/x509_certificate.js +6 -5
- package/dist/collection/crypto/x509_certificate.js.map +1 -1
- package/dist/collection/crypto/x509_certificates.js +69 -0
- package/dist/collection/crypto/x509_certificates.js.map +1 -0
- package/dist/collection/crypto/x509_crl.js +6 -5
- package/dist/collection/crypto/x509_crl.js.map +1 -1
- package/dist/collection/utils/index.js +0 -2
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/collection/www-copy/index.js +123 -121
- package/dist/esm/{actions-aebcbc9d.js → actions-2e39a3b9.js} +2 -2
- package/dist/esm/{actions-aebcbc9d.js.map → actions-2e39a3b9.js.map} +1 -1
- package/dist/esm/{arrow_top-aee1ee02.js → arrow_top-72c7543a.js} +2 -2
- package/dist/esm/{arrow_top-aee1ee02.js.map → arrow_top-72c7543a.js.map} +1 -1
- package/dist/esm/{button-a2fabf9a.js → button-e0909687.js} +2 -2
- package/dist/esm/{button-a2fabf9a.js.map → button-e0909687.js.map} +1 -1
- package/dist/esm/{certification_request-a4699dcf.js → certification_request-714bd438.js} +186 -46
- package/dist/esm/certification_request-714bd438.js.map +1 -0
- package/dist/esm/{cross-1377606f.js → cross-0c62835f.js} +2 -2
- package/dist/esm/{cross-1377606f.js.map → cross-0c62835f.js.map} +1 -1
- package/dist/esm/{download-14dc1047.js → download-5686d86f.js} +2 -2
- package/dist/esm/{download-14dc1047.js.map → download-5686d86f.js.map} +1 -1
- package/dist/esm/index-38365508.js +2084 -0
- package/dist/esm/index-38365508.js.map +1 -0
- package/dist/esm/index.js +9 -9
- package/dist/esm/{link-7e4e9060.js → link-09718951.js} +3 -3
- package/dist/esm/{link-7e4e9060.js.map → link-09718951.js.map} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{miscellaneous-ba1fd2bd.js → miscellaneous-0657d00e.js} +6 -6
- package/dist/esm/{miscellaneous-ba1fd2bd.js.map → miscellaneous-0657d00e.js.map} +1 -1
- package/dist/esm/{peculiar-attribute-certificate-viewer_3.entry.js → peculiar-attribute-certificate-viewer_4.entry.js} +40 -10
- package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -0
- package/dist/esm/peculiar-button-menu_3.entry.js +7 -7
- package/dist/esm/peculiar-certificate-decoder.entry.js +101 -21
- package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-viewer.entry.js +7 -7
- package/dist/esm/peculiar-certificates-viewer.entry.js +8 -8
- package/dist/esm/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-text-hider.entry.js +4 -4
- package/dist/esm/peculiar.js +11 -11
- package/dist/esm/peculiar.js.map +1 -1
- package/dist/esm/{pkcs10_certificate_request-785a4794.js → pkcs10_certificate_request-d3871050.js} +6 -6
- package/dist/esm/pkcs10_certificate_request-d3871050.js.map +1 -0
- package/dist/esm/{x509_certificate-05a23c0e.js → x509_certificate-d0d0c5c1.js} +6 -6
- package/dist/esm/x509_certificate-d0d0c5c1.js.map +1 -0
- package/dist/esm/{x509_crl-26081461.js → x509_crl-e837f4c3.js} +11 -11
- package/dist/esm/x509_crl-e837f4c3.js.map +1 -0
- package/dist/esm-es5/{actions-aebcbc9d.js → actions-2e39a3b9.js} +2 -2
- package/dist/esm-es5/{actions-aebcbc9d.js.map → actions-2e39a3b9.js.map} +1 -1
- package/dist/esm-es5/app-globals-5e9b67e0.js.map +1 -1
- package/dist/esm-es5/{arrow_top-aee1ee02.js → arrow_top-72c7543a.js} +2 -2
- package/dist/esm-es5/{arrow_top-aee1ee02.js.map → arrow_top-72c7543a.js.map} +1 -1
- package/dist/esm-es5/{button-a2fabf9a.js → button-e0909687.js} +2 -2
- package/dist/esm-es5/{button-a2fabf9a.js.map → button-e0909687.js.map} +1 -1
- package/dist/esm-es5/{certification_request-a4699dcf.js → certification_request-714bd438.js} +19 -12
- package/dist/esm-es5/certification_request-714bd438.js.map +1 -0
- package/dist/esm-es5/{cross-1377606f.js → cross-0c62835f.js} +2 -2
- package/dist/esm-es5/{cross-1377606f.js.map → cross-0c62835f.js.map} +1 -1
- package/dist/esm-es5/{download-14dc1047.js → download-5686d86f.js} +2 -2
- package/dist/esm-es5/{download-14dc1047.js.map → download-5686d86f.js.map} +1 -1
- package/dist/esm-es5/index-38365508.js +6 -0
- package/dist/esm-es5/index-38365508.js.map +1 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/index.js.map +1 -1
- package/dist/esm-es5/{link-7e4e9060.js → link-09718951.js} +3 -3
- package/dist/esm-es5/{link-7e4e9060.js.map → link-09718951.js.map} +1 -1
- package/dist/esm-es5/loader.js +2 -2
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/{miscellaneous-ba1fd2bd.js → miscellaneous-0657d00e.js} +2 -2
- package/dist/esm-es5/{miscellaneous-ba1fd2bd.js.map → miscellaneous-0657d00e.js.map} +1 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js +110 -0
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -0
- package/dist/esm-es5/peculiar-button-menu_3.entry.js +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js +2 -2
- 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 +2 -2
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-text-hider.entry.js +1 -1
- package/dist/esm-es5/peculiar-text-hider.entry.js.map +1 -1
- package/dist/esm-es5/peculiar.js +2 -2
- package/dist/esm-es5/peculiar.js.map +1 -1
- package/dist/esm-es5/{pkcs10_certificate_request-785a4794.js → pkcs10_certificate_request-d3871050.js} +3 -3
- package/dist/esm-es5/pkcs10_certificate_request-d3871050.js.map +1 -0
- package/dist/esm-es5/read_file-bb0b1450.js.map +1 -1
- package/dist/esm-es5/x509_certificate-d0d0c5c1.js +12 -0
- package/dist/esm-es5/x509_certificate-d0d0c5c1.js.map +1 -0
- package/dist/esm-es5/x509_crl-e837f4c3.js +19 -0
- package/dist/esm-es5/x509_crl-e837f4c3.js.map +1 -0
- package/dist/peculiar/index.esm.js +1 -1
- package/dist/peculiar/index.esm.js.map +1 -1
- package/dist/peculiar/{p-5a662d6f.system.js → p-02529999.system.js} +2 -2
- package/dist/peculiar/{p-5a662d6f.system.js.map → p-02529999.system.js.map} +1 -1
- package/dist/peculiar/{p-9263e7ee.system.entry.js → p-04228f9c.system.entry.js} +3 -3
- package/dist/peculiar/{p-9263e7ee.system.entry.js.map → p-04228f9c.system.entry.js.map} +1 -1
- package/dist/peculiar/{p-1566ad92.system.entry.js → p-12bc3ebc.system.entry.js} +2 -2
- package/dist/peculiar/{p-1566ad92.system.entry.js.map → p-12bc3ebc.system.entry.js.map} +1 -1
- package/dist/peculiar/{p-afbd1c8e.entry.js → p-161f7f97.entry.js} +2 -2
- package/dist/peculiar/{p-afbd1c8e.entry.js.map → p-161f7f97.entry.js.map} +1 -1
- package/dist/peculiar/p-25a532a3.js.map +1 -1
- package/dist/peculiar/p-32cf293c.system.js +5 -0
- package/dist/peculiar/p-32cf293c.system.js.map +1 -0
- package/dist/peculiar/{p-2bc2abea.system.js → p-35cd359e.system.js} +2 -2
- package/dist/peculiar/{p-2bc2abea.system.js.map → p-35cd359e.system.js.map} +1 -1
- package/dist/peculiar/p-39bbe0b9.system.entry.js +5 -0
- package/dist/peculiar/{p-b5389885.system.entry.js.map → p-39bbe0b9.system.entry.js.map} +1 -1
- package/dist/peculiar/p-41eacbcd.system.entry.js +111 -0
- package/dist/peculiar/p-41eacbcd.system.entry.js.map +1 -0
- package/dist/peculiar/p-47b7dd9e.entry.js +110 -0
- package/dist/peculiar/p-47b7dd9e.entry.js.map +1 -0
- package/dist/peculiar/{p-8bbee8f4.system.js → p-4ee5beee.system.js} +2 -2
- package/dist/peculiar/{p-8bbee8f4.system.js.map → p-4ee5beee.system.js.map} +1 -1
- package/dist/peculiar/p-55303453.system.js.map +1 -1
- package/dist/peculiar/{p-ae91d778.js → p-562652dd.js} +2 -2
- package/dist/peculiar/{p-ae91d778.js.map → p-562652dd.js.map} +1 -1
- package/dist/peculiar/p-5b4db88b.system.js +5 -0
- package/dist/peculiar/p-5b4db88b.system.js.map +1 -0
- package/dist/peculiar/{p-e4ad4f13.system.entry.js → p-67452b74.system.entry.js} +2 -2
- package/dist/peculiar/{p-e4ad4f13.system.entry.js.map → p-67452b74.system.entry.js.map} +1 -1
- package/dist/peculiar/p-684b7f0f.system.js +142 -0
- package/dist/peculiar/p-684b7f0f.system.js.map +1 -0
- package/dist/peculiar/{p-bafd67f3.entry.js → p-6eb92f5a.entry.js} +2 -2
- package/dist/peculiar/{p-bafd67f3.entry.js.map → p-6eb92f5a.entry.js.map} +1 -1
- package/dist/peculiar/p-8dd6d1ee.entry.js +5 -0
- package/dist/peculiar/p-8dd6d1ee.entry.js.map +1 -0
- package/dist/peculiar/{p-a9487007.js → p-90c3a063.js} +2 -2
- package/dist/peculiar/{p-a9487007.js.map → p-90c3a063.js.map} +1 -1
- package/dist/peculiar/{p-6e2ad7eb.js → p-90f461c0.js} +13 -13
- package/dist/peculiar/{p-6e2ad7eb.js.map → p-90f461c0.js.map} +1 -1
- package/dist/peculiar/{p-99efefea.js → p-92f9641a.js} +2 -2
- package/dist/peculiar/{p-99efefea.js.map → p-92f9641a.js.map} +1 -1
- package/dist/peculiar/p-93e299aa.system.entry.js +5 -0
- package/dist/peculiar/p-93e299aa.system.entry.js.map +1 -0
- package/dist/peculiar/p-9987b899.js +19 -0
- package/dist/peculiar/{p-4bc5ddbe.js.map → p-9987b899.js.map} +1 -1
- package/dist/peculiar/p-9b64adaa.system.js +13 -0
- package/dist/peculiar/p-9b64adaa.system.js.map +1 -0
- package/dist/peculiar/{p-243244af.system.js → p-9ca02302.system.js} +2 -2
- package/dist/peculiar/{p-243244af.system.js.map → p-9ca02302.system.js.map} +1 -1
- package/dist/peculiar/p-a1adb881.js +6 -0
- package/dist/peculiar/p-a1adb881.js.map +1 -0
- package/dist/peculiar/{p-eea904d7.system.js → p-a3054d6e.system.js} +2 -2
- package/dist/peculiar/{p-eea904d7.system.js.map → p-a3054d6e.system.js.map} +1 -1
- package/dist/peculiar/{p-32807e5e.js → p-a55fd6f1.js} +19 -12
- package/dist/peculiar/p-a55fd6f1.js.map +1 -0
- package/dist/peculiar/p-a87e1a0e.js +12 -0
- package/dist/peculiar/{p-e6a6e602.js.map → p-a87e1a0e.js.map} +1 -1
- package/dist/peculiar/p-a9ea6c79.system.js +20 -0
- package/dist/peculiar/p-a9ea6c79.system.js.map +1 -0
- package/dist/peculiar/{p-67e82386.entry.js → p-b01c70cf.entry.js} +3 -3
- package/dist/peculiar/{p-67e82386.entry.js.map → p-b01c70cf.entry.js.map} +1 -1
- package/dist/peculiar/p-b5674f82.js +19 -0
- package/dist/peculiar/p-b5674f82.js.map +1 -0
- package/dist/peculiar/{p-27ca6743.js → p-ba3dfc03.js} +2 -2
- package/dist/peculiar/{p-27ca6743.js.map → p-ba3dfc03.js.map} +1 -1
- package/dist/peculiar/p-bc91996c.system.js +6 -0
- package/dist/peculiar/p-bc91996c.system.js.map +1 -0
- package/dist/peculiar/p-c2995a63.system.js.map +1 -1
- package/dist/peculiar/p-c5d3333c.system.js +19 -0
- package/dist/peculiar/p-c5d3333c.system.js.map +1 -0
- package/dist/peculiar/p-cb8a0b79.js +19 -0
- package/dist/peculiar/p-cb8a0b79.js.map +1 -0
- package/dist/peculiar/{p-c241e4ba.system.js → p-d46670fa.system.js} +2 -2
- package/dist/peculiar/{p-c241e4ba.system.js.map → p-d46670fa.system.js.map} +1 -1
- package/dist/peculiar/{p-9712b827.system.js → p-d9145ee8.system.js} +2 -2
- package/dist/peculiar/{p-9712b827.system.js.map → p-d9145ee8.system.js.map} +1 -1
- package/dist/peculiar/p-dac867e8.js.map +1 -1
- package/dist/peculiar/p-f456fe47.js +12 -0
- package/dist/peculiar/p-f456fe47.js.map +1 -0
- package/dist/peculiar/p-f6ec61db.entry.js +5 -0
- package/dist/peculiar/{p-713563fb.entry.js.map → p-f6ec61db.entry.js.map} +1 -1
- package/dist/peculiar/peculiar.esm.js +1 -1
- package/dist/peculiar/peculiar.esm.js.map +1 -1
- package/dist/peculiar/peculiar.js +1 -1
- package/dist/types/components/certificate-chain-viewer/certificate-chain-viewer.d.ts +21 -0
- package/dist/types/components/certificate-decoder/certificate-decoder.d.ts +5 -4
- package/dist/types/components/certificate-details-parts/miscellaneous.d.ts +2 -2
- package/dist/types/components/typography/typography.d.ts +0 -1
- package/dist/types/components.d.ts +33 -4
- package/dist/types/crypto/index.d.ts +1 -0
- package/dist/types/crypto/pem_converter.d.ts +71 -0
- package/dist/types/crypto/pkcs10_certificate_request.d.ts +2 -2
- package/dist/types/crypto/utils.d.ts +7 -3
- package/dist/types/crypto/x509_attribute_certificate.d.ts +2 -2
- package/dist/types/crypto/x509_certificate.d.ts +2 -2
- package/dist/types/crypto/x509_certificates.d.ts +9 -0
- package/dist/types/crypto/x509_crl.d.ts +2 -2
- package/dist/types/stencil-public-runtime.d.ts +9 -10
- package/dist/types/utils/index.d.ts +0 -2
- package/hydrate/index.d.ts +36 -12
- package/hydrate/index.js +25131 -15090
- package/hydrate/index.mjs +34931 -0
- package/hydrate/package.json +7 -1
- package/loader/cdn.js +1 -1
- package/loader/index.cjs.js +1 -1
- package/loader/index.d.ts +3 -0
- package/loader/index.es2017.js +1 -1
- package/loader/index.js +1 -1
- package/package.json +13 -10
- package/dist/cjs/certification_request-ad267278.js.map +0 -1
- package/dist/cjs/index-e2ae280a.js +0 -2730
- package/dist/cjs/index-e2ae280a.js.map +0 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_3.cjs.entry.js.map +0 -1
- package/dist/cjs/pkcs10_certificate_request-64898c88.js.map +0 -1
- package/dist/cjs/x509_certificate-4b0894c2.js.map +0 -1
- package/dist/cjs/x509_crl-fc8d41a1.js.map +0 -1
- package/dist/collection/utils/validator.js +0 -25
- package/dist/collection/utils/validator.js.map +0 -1
- package/dist/esm/certification_request-a4699dcf.js.map +0 -1
- package/dist/esm/index-ae188432.js +0 -2701
- package/dist/esm/index-ae188432.js.map +0 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_3.entry.js.map +0 -1
- package/dist/esm/pkcs10_certificate_request-785a4794.js.map +0 -1
- package/dist/esm/x509_certificate-05a23c0e.js.map +0 -1
- package/dist/esm/x509_crl-26081461.js.map +0 -1
- package/dist/esm-es5/certification_request-a4699dcf.js.map +0 -1
- package/dist/esm-es5/index-ae188432.js +0 -6
- package/dist/esm-es5/index-ae188432.js.map +0 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_3.entry.js +0 -110
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_3.entry.js.map +0 -1
- package/dist/esm-es5/pkcs10_certificate_request-785a4794.js.map +0 -1
- package/dist/esm-es5/x509_certificate-05a23c0e.js +0 -12
- package/dist/esm-es5/x509_certificate-05a23c0e.js.map +0 -1
- package/dist/esm-es5/x509_crl-26081461.js +0 -19
- package/dist/esm-es5/x509_crl-26081461.js.map +0 -1
- package/dist/peculiar/p-32807e5e.js.map +0 -1
- package/dist/peculiar/p-3cb79cd9.js +0 -6
- package/dist/peculiar/p-3cb79cd9.js.map +0 -1
- package/dist/peculiar/p-4bc5ddbe.js +0 -19
- package/dist/peculiar/p-5d1d4a96.entry.js +0 -110
- package/dist/peculiar/p-5d1d4a96.entry.js.map +0 -1
- package/dist/peculiar/p-713563fb.entry.js +0 -5
- package/dist/peculiar/p-7ddd9a82.system.js +0 -19
- package/dist/peculiar/p-7ddd9a82.system.js.map +0 -1
- package/dist/peculiar/p-821bdcdc.system.js +0 -6
- package/dist/peculiar/p-821bdcdc.system.js.map +0 -1
- package/dist/peculiar/p-8393399a.system.js +0 -5
- package/dist/peculiar/p-8393399a.system.js.map +0 -1
- package/dist/peculiar/p-98e3a016.system.js +0 -13
- package/dist/peculiar/p-98e3a016.system.js.map +0 -1
- package/dist/peculiar/p-9ad547d2.system.entry.js +0 -5
- package/dist/peculiar/p-9ad547d2.system.entry.js.map +0 -1
- package/dist/peculiar/p-a1a48332.system.js +0 -5
- package/dist/peculiar/p-a1a48332.system.js.map +0 -1
- package/dist/peculiar/p-ab5a4988.js +0 -12
- package/dist/peculiar/p-ab5a4988.js.map +0 -1
- package/dist/peculiar/p-ae44c2b0.system.js +0 -20
- package/dist/peculiar/p-ae44c2b0.system.js.map +0 -1
- package/dist/peculiar/p-b5389885.system.entry.js +0 -5
- package/dist/peculiar/p-cd1b1876.entry.js +0 -5
- package/dist/peculiar/p-cd1b1876.entry.js.map +0 -1
- package/dist/peculiar/p-d5ba4fc2.js +0 -19
- package/dist/peculiar/p-d5ba4fc2.js.map +0 -1
- package/dist/peculiar/p-e37e4df2.system.js +0 -135
- package/dist/peculiar/p-e37e4df2.system.js.map +0 -1
- package/dist/peculiar/p-e6a6e602.js +0 -12
- package/dist/peculiar/p-f8c91ee4.js +0 -19
- package/dist/peculiar/p-f8c91ee4.js.map +0 -1
- package/dist/peculiar/p-f9c07207.system.entry.js +0 -111
- package/dist/peculiar/p-f9c07207.system.entry.js.map +0 -1
- package/dist/types/utils/validator.d.ts +0 -10
|
@@ -0,0 +1,169 @@
|
|
|
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 { BufferSourceConverter, Convert } from "pvtsutils";
|
|
12
|
+
const rPaddingTag = '-{5}';
|
|
13
|
+
const rEolChars = '\\n';
|
|
14
|
+
const rNameTag = `[^${rEolChars}]+`;
|
|
15
|
+
const rBeginTag = `${rPaddingTag}BEGIN (${rNameTag}(?=${rPaddingTag}))${rPaddingTag}`;
|
|
16
|
+
const rEndTag = `${rPaddingTag}END \\1${rPaddingTag}`;
|
|
17
|
+
const rEolGroup = '\\n';
|
|
18
|
+
const rHeaderKey = `[^:${rEolChars}]+`;
|
|
19
|
+
const rHeaderValue = `(?:[^${rEolChars}]+${rEolGroup}(?: +[^${rEolChars}]+${rEolGroup})*)`;
|
|
20
|
+
const rBase64Chars = '[a-zA-Z0-9=+/]+';
|
|
21
|
+
const rBase64 = `(?:${rBase64Chars}${rEolGroup})+`;
|
|
22
|
+
const rPem = `${rBeginTag}${rEolGroup}(?:((?:${rHeaderKey}: ${rHeaderValue})+))?${rEolGroup}?(${rBase64})${rEndTag}`;
|
|
23
|
+
/**
|
|
24
|
+
* Represents PEM Converter.
|
|
25
|
+
*/
|
|
26
|
+
export class PemConverter {
|
|
27
|
+
static isPem(data) {
|
|
28
|
+
return typeof data === 'string'
|
|
29
|
+
&& new RegExp(rPem, 'g').test(data);
|
|
30
|
+
}
|
|
31
|
+
static decodeWithHeaders(pem) {
|
|
32
|
+
// eslint-disable-next-line no-param-reassign
|
|
33
|
+
pem = pem.replace(/\r/g, ''); // CRLF -> LF
|
|
34
|
+
const pattern = new RegExp(rPem, 'g');
|
|
35
|
+
const res = [];
|
|
36
|
+
let matches = null;
|
|
37
|
+
// eslint-disable-next-line no-cond-assign
|
|
38
|
+
while (matches = pattern.exec(pem)) {
|
|
39
|
+
// prepare pem encoded message
|
|
40
|
+
const base64 = matches[3]
|
|
41
|
+
.replace(new RegExp(`[${rEolChars}]+`, 'g'), '');
|
|
42
|
+
const pemStruct = {
|
|
43
|
+
type: matches[1],
|
|
44
|
+
headers: [],
|
|
45
|
+
rawData: Convert.FromBase64(base64),
|
|
46
|
+
};
|
|
47
|
+
// read headers
|
|
48
|
+
const headersString = matches[2];
|
|
49
|
+
if (headersString) {
|
|
50
|
+
const headers = headersString.split(new RegExp(rEolGroup, 'g'));
|
|
51
|
+
let lastHeader = null;
|
|
52
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
53
|
+
for (const header of headers) {
|
|
54
|
+
const [key, value] = header.split(/:(.*)/);
|
|
55
|
+
if (value === undefined) {
|
|
56
|
+
// value
|
|
57
|
+
if (!lastHeader) {
|
|
58
|
+
throw new Error('Cannot parse PEM string. Incorrect header value');
|
|
59
|
+
}
|
|
60
|
+
lastHeader.value += key.trim();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// key and value
|
|
64
|
+
if (lastHeader) {
|
|
65
|
+
pemStruct.headers.push(lastHeader);
|
|
66
|
+
}
|
|
67
|
+
lastHeader = { key, value: value.trim() };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// add last header
|
|
71
|
+
if (lastHeader) {
|
|
72
|
+
pemStruct.headers.push(lastHeader);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
res.push(pemStruct);
|
|
76
|
+
}
|
|
77
|
+
return res;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Decodes PEM to a list of raws
|
|
81
|
+
* @param pem message in PEM format
|
|
82
|
+
*/
|
|
83
|
+
static decode(pem) {
|
|
84
|
+
const blocks = this.decodeWithHeaders(pem);
|
|
85
|
+
return blocks.map((o) => o.rawData);
|
|
86
|
+
}
|
|
87
|
+
static encode(rawData, tag) {
|
|
88
|
+
if (Array.isArray(rawData)) {
|
|
89
|
+
const raws = new Array();
|
|
90
|
+
if (tag) {
|
|
91
|
+
// encode BufferSource[]
|
|
92
|
+
rawData.forEach((element) => {
|
|
93
|
+
if (!BufferSourceConverter.isBufferSource(element)) {
|
|
94
|
+
throw new TypeError('Cannot encode array of BufferSource in PEM format. Not all items of the array are BufferSource');
|
|
95
|
+
}
|
|
96
|
+
raws.push(this.encodeStruct({
|
|
97
|
+
type: tag,
|
|
98
|
+
rawData: BufferSourceConverter.toArrayBuffer(element),
|
|
99
|
+
}));
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// encode PemStruct[]
|
|
104
|
+
rawData.forEach((element) => {
|
|
105
|
+
if (!('type' in element)) {
|
|
106
|
+
throw new TypeError('Cannot encode array of PemStruct in PEM format. Not all items of the array are PemStrut');
|
|
107
|
+
}
|
|
108
|
+
raws.push(this.encodeStruct(element));
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return raws.join('\n');
|
|
112
|
+
}
|
|
113
|
+
if (!tag) {
|
|
114
|
+
throw new Error("Required argument 'tag' is missed");
|
|
115
|
+
}
|
|
116
|
+
return this.encodeStruct({
|
|
117
|
+
type: tag,
|
|
118
|
+
rawData: BufferSourceConverter.toArrayBuffer(rawData),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Encodes PEMStruct in PEM block
|
|
123
|
+
* @param pem PEM structure for encoding
|
|
124
|
+
* @returns Returns PEM encoded block
|
|
125
|
+
*/
|
|
126
|
+
static encodeStruct(pem) {
|
|
127
|
+
var _a;
|
|
128
|
+
const upperCaseType = pem.type.toLocaleUpperCase();
|
|
129
|
+
const res = [];
|
|
130
|
+
res.push(`-----BEGIN ${upperCaseType}-----`);
|
|
131
|
+
if ((_a = pem.headers) === null || _a === void 0 ? void 0 : _a.length) {
|
|
132
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
133
|
+
for (const header of pem.headers) {
|
|
134
|
+
res.push(`${header.key}: ${header.value}`);
|
|
135
|
+
}
|
|
136
|
+
res.push(''); // blank line
|
|
137
|
+
}
|
|
138
|
+
const base64 = Convert.ToBase64(pem.rawData);
|
|
139
|
+
let sliced;
|
|
140
|
+
let offset = 0;
|
|
141
|
+
const rows = Array();
|
|
142
|
+
while (offset < base64.length) {
|
|
143
|
+
if (base64.length - offset < 64) {
|
|
144
|
+
sliced = base64.substring(offset);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
sliced = base64.substring(offset, offset + 64);
|
|
148
|
+
offset += 64;
|
|
149
|
+
}
|
|
150
|
+
if (sliced.length !== 0) {
|
|
151
|
+
rows.push(sliced);
|
|
152
|
+
if (sliced.length < 64) {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
res.push(...rows);
|
|
161
|
+
res.push(`-----END ${upperCaseType}-----`);
|
|
162
|
+
return res.join('\n');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
PemConverter.CertificateTag = 'CERTIFICATE';
|
|
166
|
+
PemConverter.CrlTag = 'CRL';
|
|
167
|
+
PemConverter.CertificateRequestTag = 'CERTIFICATE REQUEST';
|
|
168
|
+
PemConverter.AttributeCertificateTag = 'ATTRIBUTE CERTIFICATE';
|
|
169
|
+
//# sourceMappingURL=pem_converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pem_converter.js","sourceRoot":"","sources":["../../src/crypto/pem_converter.ts"],"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 { BufferSourceConverter, Convert } from 'pvtsutils';\n\nconst rPaddingTag = '-{5}';\nconst rEolChars = '\\\\n';\nconst rNameTag = `[^${rEolChars}]+`;\nconst rBeginTag = `${rPaddingTag}BEGIN (${rNameTag}(?=${rPaddingTag}))${rPaddingTag}`;\nconst rEndTag = `${rPaddingTag}END \\\\1${rPaddingTag}`;\nconst rEolGroup = '\\\\n';\nconst rHeaderKey = `[^:${rEolChars}]+`;\nconst rHeaderValue = `(?:[^${rEolChars}]+${rEolGroup}(?: +[^${rEolChars}]+${rEolGroup})*)`;\nconst rBase64Chars = '[a-zA-Z0-9=+/]+';\nconst rBase64 = `(?:${rBase64Chars}${rEolGroup})+`;\nconst rPem = `${rBeginTag}${rEolGroup}(?:((?:${rHeaderKey}: ${rHeaderValue})+))?${rEolGroup}?(${rBase64})${rEndTag}`;\n\nexport interface PemHeader {\n key: string;\n value: string;\n}\n\n/**\n * Represents PEM structure\n */\nexport interface PemStruct {\n /**\n * Type\n */\n type: string;\n /**\n * Headers\n */\n headers: PemHeader[];\n\n /**\n * Decoded message data\n */\n rawData: ArrayBuffer;\n}\n\ntype AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;\n\nexport type PemStructEncodeParams = AtLeast<PemStruct, 'type' | 'rawData'>;\n\n/**\n * Represents PEM Converter.\n */\nexport class PemConverter {\n public static CertificateTag = 'CERTIFICATE';\n\n public static CrlTag = 'CRL';\n\n public static CertificateRequestTag = 'CERTIFICATE REQUEST';\n\n public static AttributeCertificateTag = 'ATTRIBUTE CERTIFICATE';\n\n public static isPem(data: string): boolean {\n return typeof data === 'string'\n && new RegExp(rPem, 'g').test(data);\n }\n\n public static decodeWithHeaders(pem: string): PemStruct[] {\n // eslint-disable-next-line no-param-reassign\n pem = pem.replace(/\\r/g, ''); // CRLF -> LF\n const pattern = new RegExp(rPem, 'g');\n\n const res: PemStruct[] = [];\n\n let matches: RegExpExecArray | null = null;\n // eslint-disable-next-line no-cond-assign\n while (matches = pattern.exec(pem)) {\n // prepare pem encoded message\n const base64 = matches[3]\n .replace(new RegExp(`[${rEolChars}]+`, 'g'), '');\n const pemStruct: PemStruct = {\n type: matches[1],\n headers: [],\n rawData: Convert.FromBase64(base64),\n };\n\n // read headers\n const headersString = matches[2];\n\n if (headersString) {\n const headers = headersString.split(new RegExp(rEolGroup, 'g'));\n let lastHeader: PemHeader | null = null;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const header of headers) {\n const [key, value] = header.split(/:(.*)/);\n if (value === undefined) {\n // value\n if (!lastHeader) {\n throw new Error('Cannot parse PEM string. Incorrect header value');\n }\n lastHeader.value += key.trim();\n } else {\n // key and value\n if (lastHeader) {\n pemStruct.headers.push(lastHeader);\n }\n lastHeader = { key, value: value.trim() };\n }\n }\n // add last header\n if (lastHeader) {\n pemStruct.headers.push(lastHeader);\n }\n }\n\n res.push(pemStruct);\n }\n\n return res;\n }\n\n /**\n * Decodes PEM to a list of raws\n * @param pem message in PEM format\n */\n public static decode(pem: string): ArrayBuffer[] {\n const blocks = this.decodeWithHeaders(pem);\n\n return blocks.map((o) => o.rawData);\n }\n\n /**\n * Encodes a list of PemStruct in PEM format\n * @param structs A list of PemStruct\n * @param tag PEM tag\n */\n public static encode(structs: PemStructEncodeParams[]): string;\n /**\n * Encodes a raw data in PEM format\n * @param rawData Raw data\n * @param tag PEM tag\n */\n public static encode(rawData: BufferSource, tag: string): string;\n /**\n * Encodes a list of raws in PEM format\n * @param raws A list of raws\n * @param tag PEM tag\n */\n public static encode(rawData: BufferSource[], tag: string): string;\n public static encode(\n rawData: BufferSource | BufferSource[] | PemStructEncodeParams[],\n tag?: string,\n ) {\n if (Array.isArray(rawData)) {\n const raws = new Array<string>();\n\n if (tag) {\n // encode BufferSource[]\n rawData.forEach((element) => {\n if (!BufferSourceConverter.isBufferSource(element)) {\n throw new TypeError('Cannot encode array of BufferSource in PEM format. Not all items of the array are BufferSource');\n }\n\n raws.push(this.encodeStruct({\n type: tag,\n rawData: BufferSourceConverter.toArrayBuffer(element),\n }));\n });\n } else {\n // encode PemStruct[]\n rawData.forEach((element) => {\n if (!('type' in element)) {\n throw new TypeError('Cannot encode array of PemStruct in PEM format. Not all items of the array are PemStrut');\n }\n\n raws.push(this.encodeStruct(element));\n });\n }\n\n return raws.join('\\n');\n }\n\n if (!tag) {\n throw new Error(\"Required argument 'tag' is missed\");\n }\n\n return this.encodeStruct({\n type: tag,\n rawData: BufferSourceConverter.toArrayBuffer(rawData),\n });\n }\n\n /**\n * Encodes PEMStruct in PEM block\n * @param pem PEM structure for encoding\n * @returns Returns PEM encoded block\n */\n private static encodeStruct(pem: PemStructEncodeParams): string {\n const upperCaseType = pem.type.toLocaleUpperCase();\n\n const res: string[] = [];\n res.push(`-----BEGIN ${upperCaseType}-----`);\n\n if (pem.headers?.length) {\n // eslint-disable-next-line no-restricted-syntax\n for (const header of pem.headers) {\n res.push(`${header.key}: ${header.value}`);\n }\n\n res.push(''); // blank line\n }\n\n const base64 = Convert.ToBase64(pem.rawData);\n let sliced: string;\n let offset = 0;\n const rows = Array<string>();\n\n while (offset < base64.length) {\n if (base64.length - offset < 64) {\n sliced = base64.substring(offset);\n } else {\n sliced = base64.substring(offset, offset + 64);\n offset += 64;\n }\n\n if (sliced.length !== 0) {\n rows.push(sliced);\n\n if (sliced.length < 64) {\n break;\n }\n } else {\n break;\n }\n }\n\n res.push(...rows);\n res.push(`-----END ${upperCaseType}-----`);\n\n return res.join('\\n');\n }\n}\n"]}
|
|
@@ -19,13 +19,14 @@ import { AsnData } from "./asn_data";
|
|
|
19
19
|
import { Name } from "./name";
|
|
20
20
|
import { Attribute } from "./attribute";
|
|
21
21
|
import { Extension } from "./extension";
|
|
22
|
-
import {
|
|
22
|
+
import { PemConverter } from "./pem_converter";
|
|
23
|
+
import { certificateRawToBuffer, getCertificateThumbprint, } from "./utils";
|
|
23
24
|
export class Pkcs10CertificateRequest extends AsnData {
|
|
24
25
|
constructor(raw) {
|
|
25
26
|
super(certificateRawToBuffer(raw), CertificationRequest);
|
|
26
27
|
this.thumbprints = {};
|
|
27
28
|
this.type = 'PKCS#10 Certificate Request';
|
|
28
|
-
this.tag =
|
|
29
|
+
this.tag = PemConverter.CertificateRequestTag;
|
|
29
30
|
const { certificationRequestInfo } = this.asn;
|
|
30
31
|
this.subject = new Name(certificationRequestInfo.subject).toJSON();
|
|
31
32
|
this.version = certificationRequestInfo.version;
|
|
@@ -90,10 +91,10 @@ export class Pkcs10CertificateRequest extends AsnData {
|
|
|
90
91
|
}
|
|
91
92
|
toString(format = 'pem') {
|
|
92
93
|
switch (format) {
|
|
93
|
-
case 'hex':
|
|
94
|
-
return hexFormat(Convert.ToHex(this.raw));
|
|
95
94
|
case 'pem':
|
|
96
|
-
return
|
|
95
|
+
return PemConverter.encode(this.raw, this.tag);
|
|
96
|
+
case 'base64url':
|
|
97
|
+
return Convert.ToBase64Url(this.raw);
|
|
97
98
|
default:
|
|
98
99
|
return Convert.ToBase64(this.raw);
|
|
99
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkcs10_certificate_request.js","sourceRoot":"","sources":["../../src/crypto/pkcs10_certificate_request.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,4BAA4B,GAE7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"pkcs10_certificate_request.js","sourceRoot":"","sources":["../../src/crypto/pkcs10_certificate_request.ts"],"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 { AsnConvert } from '@peculiar/asn1-schema';\nimport { ECParameters, id_ecPublicKey } from '@peculiar/asn1-ecc';\nimport { id_rsaEncryption, RSAPublicKey } from '@peculiar/asn1-rsa';\nimport { CertificationRequest } from '@peculiar/asn1-csr';\nimport {\n id_pkcs9_at_extensionRequest,\n ExtensionRequest,\n} from '@peculiar/asn1-pkcs9';\nimport { Convert } from 'pvtsutils';\n\nimport { Download } from '../utils';\n\nimport { AsnData } from './asn_data';\nimport { Name, INameJSON } from './name';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { Extension, TExtensionValue } from './extension';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\ninterface IPublicKey {\n algorithm: string;\n value: BufferSource;\n params?: ECParameters | RSAPublicKey;\n}\n\nexport class Pkcs10CertificateRequest extends AsnData<CertificationRequest> {\n public readonly subject: INameJSON[];\n\n public readonly version: number;\n\n public attributes: Attribute<TAttributeValue>[];\n\n public extensions: Extension<TExtensionValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'PKCS#10 Certificate Request';\n\n public readonly tag = PemConverter.CertificateRequestTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), CertificationRequest);\n\n const { certificationRequestInfo } = this.asn;\n\n this.subject = new Name(certificationRequestInfo.subject).toJSON();\n this.version = certificationRequestInfo.version;\n }\n\n public get publicKey(): IPublicKey {\n const { subjectPublicKey, algorithm } = this.asn.certificationRequestInfo.subjectPKInfo;\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 const spki = AsnConvert.serialize(this.asn.certificationRequestInfo.subjectPKInfo);\n\n return {\n params,\n value: spki,\n algorithm: algorithm.algorithm,\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.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 async getThumbprint(\n algorithm: string = '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 parseAttributes() {\n const { certificationRequestInfo } = this.asn;\n\n if (certificationRequestInfo.attributes) {\n this.attributes = certificationRequestInfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n\n const extensionRequestAttribute = this.attributes.find(\n (attribute) => attribute.asn.type === id_pkcs9_at_extensionRequest,\n ) as Attribute<ExtensionRequest>;\n\n if (extensionRequestAttribute) {\n this.extensions = extensionRequestAttribute.value\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\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.csr.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.csr.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"]}
|
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* © Peculiar Ventures https://peculiarventures.com/ - MIT License
|
|
3
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
|
+
*/
|
|
4
11
|
import { Convert } from "pvtsutils";
|
|
5
|
-
import {
|
|
12
|
+
import { PemConverter } from "./pem_converter";
|
|
6
13
|
import { cryptoProvider } from "./provider";
|
|
7
|
-
const base64Re = /-----BEGIN [^-]+-----([A-Za-z0-9+/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+/=\s]+)====/;
|
|
8
|
-
export const base64Clarify = (base64) => {
|
|
9
|
-
const execArray = base64Re.exec(base64);
|
|
10
|
-
return execArray ? (execArray[1] || execArray[2]) : base64;
|
|
11
|
-
};
|
|
12
|
-
export const hexFormat = (hex) => (hex
|
|
13
|
-
.replace(/(.{32})/g, '$1\n')
|
|
14
|
-
.replace(/(.{4})/g, '$1 ')
|
|
15
|
-
.trim());
|
|
16
|
-
export const base64Format = (base64) => (base64
|
|
17
|
-
.replace(/(.{64})/g, '$1\n'));
|
|
18
14
|
export const certificateRawToBuffer = (raw) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
if (PemConverter.isPem(raw)) {
|
|
16
|
+
return PemConverter.decode(raw)[0];
|
|
17
|
+
}
|
|
18
|
+
if (Convert.isHex(raw)) {
|
|
19
|
+
return Convert.FromHex(raw);
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
if (Convert.isBase64(raw)) {
|
|
22
|
+
return Convert.FromBase64(raw);
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
if (Convert.isBase64Url(raw)) {
|
|
25
|
+
return Convert.FromBase64Url(raw);
|
|
29
26
|
}
|
|
30
|
-
|
|
27
|
+
throw new TypeError("Unsupported format of 'raw' argument. Must be one of DER, PEM, HEX, Base64, or Base4Url");
|
|
31
28
|
};
|
|
32
29
|
export const getCertificateThumbprint = async (algorithm, data) => {
|
|
33
30
|
const crypto = cryptoProvider.get();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/crypto/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/crypto/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAe,EAAE;IACjE,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,yFAAyF,CAAC,CAAC;AACjH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,SAAyC,EACzC,IAAiB,EACiB,EAAE;IACpC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC;IAEpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,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 { Convert } from 'pvtsutils';\nimport { PemConverter } from './pem_converter';\n\nimport { cryptoProvider } from './provider';\n\nexport const certificateRawToBuffer = (raw: string): ArrayBuffer => {\n if (PemConverter.isPem(raw)) {\n return PemConverter.decode(raw)[0];\n }\n\n if (Convert.isHex(raw)) {\n return Convert.FromHex(raw);\n }\n\n if (Convert.isBase64(raw)) {\n return Convert.FromBase64(raw);\n }\n\n if (Convert.isBase64Url(raw)) {\n return Convert.FromBase64Url(raw);\n }\n\n throw new TypeError(\"Unsupported format of 'raw' argument. Must be one of DER, PEM, HEX, Base64, or Base4Url\");\n};\n\nexport const getCertificateThumbprint = async (\n algorithm: globalThis.AlgorithmIdentifier,\n data: ArrayBuffer,\n): Promise<ArrayBuffer | undefined> => {\n const crypto = cryptoProvider.get();\n\n if (crypto.subtle) {\n return crypto.subtle.digest(algorithm, data);\n }\n\n return undefined;\n};\n"]}
|
|
@@ -15,14 +15,15 @@ import { dateDiff, Download } from "../utils";
|
|
|
15
15
|
import { AsnData } from "./asn_data";
|
|
16
16
|
import { Extension } from "./extension";
|
|
17
17
|
import { Attribute } from "./attribute";
|
|
18
|
-
import {
|
|
18
|
+
import { PemConverter } from "./pem_converter";
|
|
19
|
+
import { certificateRawToBuffer, getCertificateThumbprint, } from "./utils";
|
|
19
20
|
export class X509AttributeCertificate extends AsnData {
|
|
20
21
|
constructor(raw) {
|
|
21
22
|
var _a;
|
|
22
23
|
super(certificateRawToBuffer(raw), AttributeCertificate);
|
|
23
24
|
this.thumbprints = {};
|
|
24
25
|
this.type = 'X.509 Attribute Certificate';
|
|
25
|
-
this.tag =
|
|
26
|
+
this.tag = PemConverter.AttributeCertificateTag;
|
|
26
27
|
const { acinfo } = this.asn;
|
|
27
28
|
this.serialNumber = Convert.ToHex(acinfo.serialNumber);
|
|
28
29
|
this.version = acinfo.version;
|
|
@@ -77,10 +78,10 @@ export class X509AttributeCertificate extends AsnData {
|
|
|
77
78
|
}
|
|
78
79
|
toString(format = 'pem') {
|
|
79
80
|
switch (format) {
|
|
80
|
-
case 'hex':
|
|
81
|
-
return hexFormat(Convert.ToHex(this.raw));
|
|
82
81
|
case 'pem':
|
|
83
|
-
return
|
|
82
|
+
return PemConverter.encode(this.raw, this.tag);
|
|
83
|
+
case 'base64url':
|
|
84
|
+
return Convert.ToBase64Url(this.raw);
|
|
84
85
|
default:
|
|
85
86
|
return Convert.ToBase64(this.raw);
|
|
86
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x509_attribute_certificate.js","sourceRoot":"","sources":["../../src/crypto/x509_attribute_certificate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAU,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"x509_attribute_certificate.js","sourceRoot":"","sources":["../../src/crypto/x509_attribute_certificate.ts"],"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 { AsnConvert } from '@peculiar/asn1-schema';\nimport type { GeneralName } from '@peculiar/asn1-x509';\nimport { AttributeCertificate, Holder } from '@peculiar/asn1-x509-attr';\nimport { Convert } from 'pvtsutils';\n\nimport { dateDiff, Download } from '../utils';\n\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: string = '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"]}
|
|
@@ -18,13 +18,14 @@ import { dateDiff, Download } from "../utils";
|
|
|
18
18
|
import { Name } from "./name";
|
|
19
19
|
import { Extension } from "./extension";
|
|
20
20
|
import { AsnData } from "./asn_data";
|
|
21
|
-
import {
|
|
21
|
+
import { PemConverter } from "./pem_converter";
|
|
22
|
+
import { certificateRawToBuffer, getCertificateThumbprint, } from "./utils";
|
|
22
23
|
export class X509Certificate extends AsnData {
|
|
23
24
|
constructor(raw) {
|
|
24
25
|
super(certificateRawToBuffer(raw), Certificate);
|
|
25
26
|
this.thumbprints = {};
|
|
26
27
|
this.type = 'X.509 Certificate';
|
|
27
|
-
this.tag =
|
|
28
|
+
this.tag = PemConverter.CertificateTag;
|
|
28
29
|
const { tbsCertificate } = this.asn;
|
|
29
30
|
this.serialNumber = Convert.ToHex(tbsCertificate.serialNumber);
|
|
30
31
|
this.subject = new Name(tbsCertificate.subject).toJSON();
|
|
@@ -147,10 +148,10 @@ export class X509Certificate extends AsnData {
|
|
|
147
148
|
}
|
|
148
149
|
toString(format = 'pem') {
|
|
149
150
|
switch (format) {
|
|
150
|
-
case 'hex':
|
|
151
|
-
return hexFormat(Convert.ToHex(this.raw));
|
|
152
151
|
case 'pem':
|
|
153
|
-
return
|
|
152
|
+
return PemConverter.encode(this.raw, this.tag);
|
|
153
|
+
case 'base64url':
|
|
154
|
+
return Convert.ToBase64Url(this.raw);
|
|
154
155
|
default:
|
|
155
156
|
return Convert.ToBase64(this.raw);
|
|
156
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x509_certificate.js","sourceRoot":"","sources":["../../src/crypto/x509_certificate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAwB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,YAAY,EACZ,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAiBjB,MAAM,OAAO,eAAgB,SAAQ,OAAoB;IAuBvD,YAAY,GAAW;QACrB,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;QAP3C,gBAAW,GAA2B,EAAE,CAAC;QAEhC,SAAI,GAAG,mBAAmB,CAAC;QAE3B,QAAG,GAAG,aAAa,CAAC;QAKlC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAEpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO;eACtD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;QAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;eACpD,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAEM,eAAe;QACpB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAEpC,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU;iBACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,aAAmC;QAC1D,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QACtD,IAAI,MAAM,CAAC;QAEX,IAAI,SAAS,CAAC,SAAS,KAAK,cAAc,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACnE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,SAAS,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAC7C,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,SAAS,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAC7C,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;YAEhE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEjD,OAAO;YACL,MAAM;YACN,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B,CAAC;IACJ,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAC7E,CAAC;IAED,IAAW,SAAS;QAClB,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACxD,IAAI,MAAM,CAAC;QAEX,IAAI,kBAAkB,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YACtD,MAAM,wBAAwB,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;YAC3F,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YAEzF,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,iCAC1C,KAAK,KACR,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,IACtC,CAAC,CAAC;QACN,CAAC;QAED,OAAO;YACL,MAAM;YACN,KAAK,EAAE,cAAc;YACrB,SAAS,EAAE,kBAAkB,CAAC,SAAS;SACxC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,YAAoB,OAAO;QAE3B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEvE,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAW,UAAU;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;gBAChF,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAW,gBAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,OAAO;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACb,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAClC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACb,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAClC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEM,QAAQ,CAAC,SAAmC,KAAK;QACtD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,KAAK;gBACR,OAAO,cAAc,IAAI,CAAC,GAAG,UAAU,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,cAAc,IAAI,CAAC,GAAG,OAAO,CAAC;YAC5G;gBACE,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,IAAa;QAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,IAAa;QAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CACjB,IAAI,CAAC,GAAG,EACR,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB,CAAC;IACJ,CAAC;CACF","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';\n\nimport { dateDiff, Download } from '../utils';\n\nimport { Name, INameJSON } from './name';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport {\n certificateRawToBuffer,\n hexFormat,\n base64Format,\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 = 'CERTIFICATE';\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: string = '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') {\n return name.value;\n }\n\n if (name.shortName === 'E') {\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: 'hex' | 'pem' | 'base64' = 'pem'): string {\n switch (format) {\n case 'hex':\n return hexFormat(Convert.ToHex(this.raw));\n case 'pem':\n return `-----BEGIN ${this.tag}-----\\n${base64Format(this.toString('base64'))}\\n-----END ${this.tag}-----`;\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"]}
|
|
1
|
+
{"version":3,"file":"x509_certificate.js","sourceRoot":"","sources":["../../src/crypto/x509_certificate.ts"],"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 { 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';\n\nimport { dateDiff, Download } from '../utils';\n\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: string = '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') {\n return name.value;\n }\n\n if (name.shortName === 'E') {\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"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © Peculiar Ventures https://peculiarventures.com/ - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { Convert } from "pvtsutils";
|
|
5
|
+
import { SignedData, id_data, EncapsulatedContent, CertificateSet, CertificateChoices, ContentInfo, id_signedData, } from "@peculiar/asn1-cms";
|
|
6
|
+
import { Certificate } from "@peculiar/asn1-x509";
|
|
7
|
+
import { AsnConvert, OctetString } from "@peculiar/asn1-schema";
|
|
8
|
+
import { Download } from "../utils";
|
|
9
|
+
import { PemConverter } from "./pem_converter";
|
|
10
|
+
import { X509Certificate } from "./x509_certificate";
|
|
11
|
+
export class X509Certificates extends Array {
|
|
12
|
+
constructor(raw) {
|
|
13
|
+
super();
|
|
14
|
+
const rawItems = PemConverter.isPem(raw)
|
|
15
|
+
? PemConverter.decode(raw).map((value) => Convert.ToBase64Url(value))
|
|
16
|
+
: raw.split(',');
|
|
17
|
+
if (rawItems.length < 2) {
|
|
18
|
+
throw new Error('Unable to parse string. The array of elements is less than 2');
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
21
|
+
for (const item of rawItems) {
|
|
22
|
+
this.push(new X509Certificate(item));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get commonName() {
|
|
26
|
+
return Array.from(this)
|
|
27
|
+
.map((o) => o.commonName)
|
|
28
|
+
.join('_');
|
|
29
|
+
}
|
|
30
|
+
get raw() {
|
|
31
|
+
const signedData = new SignedData();
|
|
32
|
+
signedData.version = 1;
|
|
33
|
+
signedData.encapContentInfo.eContentType = id_data;
|
|
34
|
+
signedData.encapContentInfo.eContent = new EncapsulatedContent({
|
|
35
|
+
single: new OctetString(),
|
|
36
|
+
});
|
|
37
|
+
signedData.certificates = new CertificateSet(Array.from(this).map((o) => new CertificateChoices({
|
|
38
|
+
certificate: AsnConvert.parse(o.raw, Certificate),
|
|
39
|
+
})));
|
|
40
|
+
const cms = new ContentInfo({
|
|
41
|
+
contentType: id_signedData,
|
|
42
|
+
content: AsnConvert.serialize(signedData),
|
|
43
|
+
});
|
|
44
|
+
return AsnConvert.serialize(cms);
|
|
45
|
+
}
|
|
46
|
+
toString(format = 'pem') {
|
|
47
|
+
switch (format) {
|
|
48
|
+
case 'pem':
|
|
49
|
+
return Array.from(this)
|
|
50
|
+
.map((o) => o.toString('pem'))
|
|
51
|
+
.join('\n');
|
|
52
|
+
case 'base64url':
|
|
53
|
+
return Array.from(this)
|
|
54
|
+
.map((o) => o.toString('base64url'))
|
|
55
|
+
.join(',');
|
|
56
|
+
default:
|
|
57
|
+
return Array.from(this)
|
|
58
|
+
.map((o) => o.toString('base64'))
|
|
59
|
+
.join(',');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
downloadAsPEM(name) {
|
|
63
|
+
Download.cert.asPEM(this.toString('pem'), name || this.commonName);
|
|
64
|
+
}
|
|
65
|
+
downloadAsDER(name) {
|
|
66
|
+
Download.cert.asDER(this.raw, name || this.commonName);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=x509_certificates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x509_certificates.js","sourceRoot":"","sources":["../../src/crypto/x509_certificates.ts"],"names":[],"mappings":"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","sourcesContent":["import { Convert } from 'pvtsutils';\nimport {\n SignedData,\n id_data,\n EncapsulatedContent,\n CertificateSet,\n CertificateChoices,\n ContentInfo,\n id_signedData,\n} from '@peculiar/asn1-cms';\nimport { Certificate } from '@peculiar/asn1-x509';\nimport { AsnConvert, OctetString } from '@peculiar/asn1-schema';\n\nimport { Download } from '../utils';\n\nimport { PemConverter } from './pem_converter';\nimport { X509Certificate } from './x509_certificate';\n\nexport class X509Certificates extends Array<X509Certificate> {\n constructor(raw: string) {\n super();\n\n const rawItems = PemConverter.isPem(raw)\n ? PemConverter.decode(raw).map((value) => Convert.ToBase64Url(value))\n : raw.split(',');\n\n if (rawItems.length < 2) {\n throw new Error('Unable to parse string. The array of elements is less than 2');\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const item of rawItems) {\n this.push(new X509Certificate(item));\n }\n }\n\n public get commonName(): string {\n return Array.from(this)\n .map((o) => o.commonName)\n .join('_');\n }\n\n public get raw(): ArrayBuffer {\n const signedData = new SignedData();\n\n signedData.version = 1;\n signedData.encapContentInfo.eContentType = id_data;\n signedData.encapContentInfo.eContent = new EncapsulatedContent({\n single: new OctetString(),\n });\n signedData.certificates = new CertificateSet(\n Array.from(this).map((o) => new CertificateChoices({\n certificate: AsnConvert.parse(o.raw, Certificate),\n })),\n );\n\n const cms = new ContentInfo({\n contentType: id_signedData,\n content: AsnConvert.serialize(signedData),\n });\n\n return AsnConvert.serialize(cms);\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return Array.from(this)\n .map((o) => o.toString('pem'))\n .join('\\n');\n case 'base64url':\n return Array.from(this)\n .map((o) => o.toString('base64url'))\n .join(',');\n default:\n return Array.from(this)\n .map((o) => o.toString('base64'))\n .join(',');\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"]}
|
|
@@ -15,13 +15,14 @@ import { Download } from "../utils";
|
|
|
15
15
|
import { Extension } from "./extension";
|
|
16
16
|
import { AsnData } from "./asn_data";
|
|
17
17
|
import { Name } from "./name";
|
|
18
|
-
import {
|
|
18
|
+
import { PemConverter } from "./pem_converter";
|
|
19
|
+
import { certificateRawToBuffer, getCertificateThumbprint, } from "./utils";
|
|
19
20
|
export class X509Crl extends AsnData {
|
|
20
21
|
constructor(raw) {
|
|
21
22
|
super(certificateRawToBuffer(raw), CertificateList);
|
|
22
23
|
this.thumbprints = {};
|
|
23
24
|
this.type = 'X.509 Certificate Revocation List';
|
|
24
|
-
this.tag =
|
|
25
|
+
this.tag = PemConverter.CrlTag;
|
|
25
26
|
const { tbsCertList } = this.asn;
|
|
26
27
|
this.issuer = new Name(tbsCertList.issuer).toJSON();
|
|
27
28
|
this.version = tbsCertList.version + 1;
|
|
@@ -76,10 +77,10 @@ export class X509Crl extends AsnData {
|
|
|
76
77
|
}
|
|
77
78
|
toString(format = 'pem') {
|
|
78
79
|
switch (format) {
|
|
79
|
-
case 'hex':
|
|
80
|
-
return hexFormat(Convert.ToHex(this.raw));
|
|
81
80
|
case 'pem':
|
|
82
|
-
return
|
|
81
|
+
return PemConverter.encode(this.raw, this.tag);
|
|
82
|
+
case 'base64url':
|
|
83
|
+
return Convert.ToBase64Url(this.raw);
|
|
83
84
|
default:
|
|
84
85
|
return Convert.ToBase64(this.raw);
|
|
85
86
|
}
|