@peculiar/certificates-viewer 4.9.0 → 4.9.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 +1 -1
- package/components/attribute-certificate-viewer.js.map +1 -1
- package/components/certificate-chain-viewer.js +1 -1
- package/components/certificate-chain-viewer.js.map +1 -1
- package/components/certificate-viewer.js +1 -1
- package/components/certificate-viewer.js.map +1 -1
- package/components/circular-progress.js +2 -2
- package/components/crl-viewer.js +2 -2
- package/components/crl-viewer.js.map +1 -1
- package/components/csr-viewer.js +1 -1
- package/components/csr-viewer.js.map +1 -1
- package/components/download.js +83 -12
- package/components/download.js.map +1 -1
- package/components/highlight-words.js +1 -1
- package/components/miscellaneous.js +17 -1
- package/components/miscellaneous.js.map +1 -1
- package/components/peculiar-certificate-decoder.js +51 -53
- package/components/peculiar-certificate-decoder.js.map +1 -1
- package/components/peculiar-certificates-viewer.js +1 -1
- package/components/ssh-certificate-viewer.js +2 -2
- package/components/ssh-certificate-viewer.js.map +1 -1
- package/components/text-hider.js +1 -1
- package/dist/cjs/{extension-BDpdRJkE.js → extension-Ba-KQhu5.js} +4 -3
- package/dist/cjs/extension-Ba-KQhu5.js.map +1 -0
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{miscellaneous-DmTT_MGG.js → miscellaneous-CtuYfnBB.js} +19 -4
- package/dist/cjs/miscellaneous-CtuYfnBB.js.map +1 -0
- 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 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_5.cjs.entry.js +10 -10
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js +3 -3
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +54 -55
- package/dist/cjs/peculiar-certificate-decoder.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +5 -5
- package/dist/cjs/peculiar-certificate-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +3 -3
- package/dist/cjs/peculiar-text-hider.cjs.entry.js +1 -1
- package/dist/cjs/peculiar.cjs.js +1 -1
- package/dist/cjs/{pkcs10_certificate_request-DZLiHGCV.js → pkcs10_certificate_request-BDLZWqTP.js} +3 -3
- package/dist/cjs/{pkcs10_certificate_request-DZLiHGCV.js.map → pkcs10_certificate_request-BDLZWqTP.js.map} +1 -1
- package/dist/cjs/{ssh_certificate-Bh14rhzR.js → ssh_certificate-Gu4FwsRk.js} +86 -13
- package/dist/cjs/ssh_certificate-Gu4FwsRk.js.map +1 -0
- package/dist/cjs/{x509_certificate-p8RMn7Hw.js → x509_certificate-BSOf2t9Y.js} +4 -4
- package/dist/cjs/{x509_certificate-p8RMn7Hw.js.map → x509_certificate-BSOf2t9Y.js.map} +1 -1
- package/dist/cjs/{x509_crl-tjmX6l3R.js → x509_crl-BgUtqkpv.js} +5 -5
- package/dist/cjs/{x509_crl-tjmX6l3R.js.map → x509_crl-BgUtqkpv.js.map} +1 -1
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js +1 -1
- package/dist/collection/components/button-menu/button-menu.js +1 -1
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.css +6 -5
- package/dist/collection/components/certificate-decoder/certificate-decoder.js +53 -63
- package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/apple_developer_id_date_extension.js +19 -0
- package/dist/collection/components/certificate-details-parts/extensions/apple_developer_id_date_extension.js.map +1 -0
- package/dist/collection/components/certificate-details-parts/extensions/index.js +5 -1
- package/dist/collection/components/certificate-details-parts/extensions/index.js.map +1 -1
- package/dist/collection/components/certificate-viewer/certificate-viewer.css +6 -5
- package/dist/collection/components/certificate-viewer/certificate-viewer.js +1 -1
- package/dist/collection/components/certificates-viewer/certificates-viewer.js +1 -1
- package/dist/collection/components/circular-progress/circular-progress.js +2 -2
- package/dist/collection/components/crl-viewer/crl-viewer.js +1 -1
- package/dist/collection/components/csr-viewer/csr-viewer.js +1 -1
- package/dist/collection/components/highlight-words/highlight-words.js +1 -1
- package/dist/collection/components/ssh-certificate-viewer/ssh-certificate-viewer.js +1 -1
- package/dist/collection/components/text-hider/text-hider.js +1 -1
- package/dist/collection/constants/oids.js +27 -6
- package/dist/collection/constants/oids.js.map +1 -1
- package/dist/collection/crypto/extension.js +2 -1
- package/dist/collection/crypto/extension.js.map +1 -1
- package/dist/collection/crypto/extensions/apple_developer_id_date.js +53 -0
- package/dist/collection/crypto/extensions/apple_developer_id_date.js.map +1 -0
- package/dist/collection/crypto/extensions/index.js +1 -0
- package/dist/collection/crypto/extensions/index.js.map +1 -1
- package/dist/collection/www-copy/favicon.svg +1 -0
- package/dist/collection/www-copy/index.js +5 -10
- package/dist/esm/{extension-xW03sQxn.js → extension-8GydD2wh.js} +4 -3
- package/dist/esm/extension-8GydD2wh.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{miscellaneous-D-Qxv14j.js → miscellaneous-Bxm6kKwP.js} +19 -4
- package/dist/esm/miscellaneous-Bxm6kKwP.js.map +1 -0
- 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 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_5.entry.js +10 -10
- package/dist/esm/peculiar-button-menu_3.entry.js +3 -3
- package/dist/esm/peculiar-certificate-decoder.entry.js +54 -55
- package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-viewer.entry.js +5 -5
- package/dist/esm/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-certificates-viewer.entry.js +3 -3
- package/dist/esm/peculiar-text-hider.entry.js +1 -1
- package/dist/esm/peculiar.js +1 -1
- package/dist/esm/{pkcs10_certificate_request-Crr9FABo.js → pkcs10_certificate_request-B_lMfAi8.js} +3 -3
- package/dist/esm/{pkcs10_certificate_request-Crr9FABo.js.map → pkcs10_certificate_request-B_lMfAi8.js.map} +1 -1
- package/dist/esm/{ssh_certificate-CmOVFH_Z.js → ssh_certificate-Del2D5s9.js} +85 -14
- package/dist/esm/ssh_certificate-Del2D5s9.js.map +1 -0
- package/dist/esm/{x509_certificate-C2EVTspY.js → x509_certificate-DRGTrdPm.js} +4 -4
- package/dist/{esm-es5/x509_certificate-C2EVTspY.js.map → esm/x509_certificate-DRGTrdPm.js.map} +1 -1
- package/dist/esm/{x509_crl-Bdnys_YT.js → x509_crl-rO-rdi1G.js} +5 -5
- package/dist/{esm-es5/x509_crl-Bdnys_YT.js.map → esm/x509_crl-rO-rdi1G.js.map} +1 -1
- package/dist/esm-es5/extension-8GydD2wh.js +12 -0
- package/dist/esm-es5/extension-8GydD2wh.js.map +1 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/{miscellaneous-D-Qxv14j.js → miscellaneous-Bxm6kKwP.js} +10 -3
- package/dist/esm-es5/miscellaneous-Bxm6kKwP.js.map +1 -0
- 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 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_5.entry.js +5 -5
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_5.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js +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 +2 -2
- 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-text-hider.entry.js +1 -1
- package/dist/esm-es5/peculiar.js +1 -1
- package/dist/esm-es5/{pkcs10_certificate_request-Crr9FABo.js → pkcs10_certificate_request-B_lMfAi8.js} +2 -2
- package/dist/esm-es5/{pkcs10_certificate_request-Crr9FABo.js.map → pkcs10_certificate_request-B_lMfAi8.js.map} +1 -1
- package/dist/esm-es5/{ssh_certificate-CmOVFH_Z.js → ssh_certificate-Del2D5s9.js} +5 -5
- package/dist/esm-es5/ssh_certificate-Del2D5s9.js.map +1 -0
- package/dist/esm-es5/{x509_certificate-C2EVTspY.js → x509_certificate-DRGTrdPm.js} +2 -2
- package/dist/{esm/x509_certificate-C2EVTspY.js.map → esm-es5/x509_certificate-DRGTrdPm.js.map} +1 -1
- package/dist/esm-es5/{x509_crl-Bdnys_YT.js → x509_crl-rO-rdi1G.js} +2 -2
- package/dist/{esm/x509_crl-Bdnys_YT.js.map → esm-es5/x509_crl-rO-rdi1G.js.map} +1 -1
- package/dist/peculiar/index.esm.js +1 -1
- package/dist/peculiar/p-1fb833f3.entry.js +5 -0
- package/dist/peculiar/{p-3424de20.system.entry.js → p-64cc6da1.system.entry.js} +2 -2
- package/dist/peculiar/{p-09ff70a5.entry.js → p-76472b19.entry.js} +2 -2
- package/dist/peculiar/{p-09ff70a5.entry.js.map → p-76472b19.entry.js.map} +1 -1
- package/dist/peculiar/p-7b83898f.entry.js +152 -0
- package/dist/peculiar/{p-cc647eff.entry.js.map → p-7b83898f.entry.js.map} +1 -1
- package/dist/peculiar/{p-f7ee4d56.entry.js → p-7c5aa1f5.entry.js} +2 -2
- package/dist/peculiar/{p-f7ee4d56.entry.js.map → p-7c5aa1f5.entry.js.map} +1 -1
- package/dist/peculiar/p-8d36d2f8.system.entry.js +5 -0
- package/dist/peculiar/p-8d36d2f8.system.entry.js.map +1 -0
- package/dist/peculiar/{p-3a493e87.entry.js → p-95f81b6d.entry.js} +2 -2
- package/dist/peculiar/p-9ab5fa9f.entry.js +5 -0
- package/dist/peculiar/p-9ab5fa9f.entry.js.map +1 -0
- package/dist/peculiar/{p-DberG072.system.js → p-B5d7q9FD.system.js} +4 -4
- package/dist/peculiar/{p-DberG072.system.js.map → p-B5d7q9FD.system.js.map} +1 -1
- package/dist/peculiar/{p-B7cL9SBA.js → p-BAnW9WLg.js} +4 -4
- package/dist/peculiar/{p-B7cL9SBA.js.map → p-BAnW9WLg.js.map} +1 -1
- package/dist/peculiar/p-BKLsbktK.system.js +135 -0
- package/dist/peculiar/p-BKLsbktK.system.js.map +1 -0
- package/dist/peculiar/{p-vXPL1mjI.system.js.map → p-BQoMhw1w.system.js.map} +1 -1
- package/dist/peculiar/{p-1yfbC8AM.js → p-Ba1oqaJ3.js} +61 -54
- package/dist/peculiar/p-Ba1oqaJ3.js.map +1 -0
- package/dist/peculiar/{p-CGipIfjs.system.js → p-BakSwSe7.system.js} +2 -2
- package/dist/peculiar/{p-CGipIfjs.system.js.map → p-BakSwSe7.system.js.map} +1 -1
- package/dist/peculiar/p-Blt9UUmt.system.js.map +1 -0
- package/dist/peculiar/p-BpRY-zq0.system.js.map +1 -0
- package/dist/peculiar/p-CDZsc_KS.system.js.map +1 -0
- package/dist/peculiar/{p-B4vvBwd6.js → p-CH0mNFdH.js} +3 -3
- package/dist/peculiar/{p-B4vvBwd6.js.map → p-CH0mNFdH.js.map} +1 -1
- package/dist/peculiar/{p-Bfl7RVFY.system.js → p-CTj-Drej.system.js} +4 -4
- package/dist/peculiar/{p-Bfl7RVFY.system.js.map → p-CTj-Drej.system.js.map} +1 -1
- package/dist/peculiar/{p-BvX2AYI4.system.js.map → p-CgXNYogJ.system.js.map} +1 -1
- package/dist/peculiar/p-Cp20xosi.js +12 -0
- package/dist/peculiar/p-Cp20xosi.js.map +1 -0
- package/dist/peculiar/{p-Cq11_gqW.system.js → p-DPnMJlS4.system.js} +2 -2
- package/dist/peculiar/p-DPnMJlS4.system.js.map +1 -0
- package/dist/peculiar/{p-tkt_tT15.system.js → p-DcqxnCVz.system.js} +61 -54
- package/dist/peculiar/p-DcqxnCVz.system.js.map +1 -0
- package/dist/peculiar/{p-CmOVFH_Z.js → p-Del2D5s9.js} +8 -8
- package/dist/peculiar/p-Del2D5s9.js.map +1 -0
- package/dist/peculiar/{p-BxiR02Uf.js → p-DrLCyy39.js} +4 -4
- package/dist/peculiar/{p-BxiR02Uf.js.map → p-DrLCyy39.js.map} +1 -1
- package/dist/peculiar/{p-7HEye5oH.system.js.map → p-MyCIZClD.system.js.map} +1 -1
- package/dist/peculiar/p-b8bb96f4.system.entry.js +5 -0
- package/dist/peculiar/{p-83235159.system.entry.js → p-d2b87ce5.system.entry.js} +2 -2
- package/dist/peculiar/{p-83235159.system.entry.js.map → p-d2b87ce5.system.entry.js.map} +1 -1
- package/dist/peculiar/p-da018463.system.entry.js +153 -0
- package/dist/peculiar/p-da018463.system.entry.js.map +1 -0
- package/dist/peculiar/{p-4ff3d82a.system.entry.js → p-f30eb78c.system.entry.js} +2 -2
- package/dist/peculiar/p-f30eb78c.system.entry.js.map +1 -0
- package/dist/peculiar/p-hEr9Uo3G.system.js +1 -1
- package/dist/peculiar/p-itJt0J5g.system.js +12 -0
- package/dist/peculiar/p-itJt0J5g.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 -1
- 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.esm.js +1 -1
- package/dist/types/components/certificate-decoder/certificate-decoder.d.ts +8 -10
- package/dist/types/components/certificate-details-parts/extensions/apple_developer_id_date_extension.d.ts +15 -0
- package/dist/types/components.d.ts +6 -6
- package/dist/types/constants/oids.d.ts +23 -2
- package/dist/types/crypto/extension.d.ts +2 -1
- package/dist/types/crypto/extensions/apple_developer_id_date.d.ts +19 -0
- package/dist/types/crypto/extensions/index.d.ts +1 -0
- package/hydrate/index.js +158 -71
- package/hydrate/index.mjs +158 -71
- package/package.json +31 -30
- package/dist/cjs/extension-BDpdRJkE.js.map +0 -1
- package/dist/cjs/miscellaneous-DmTT_MGG.js.map +0 -1
- package/dist/cjs/ssh_certificate-Bh14rhzR.js.map +0 -1
- package/dist/collection/components/certificate-decoder/certificate-decoder.css +0 -475
- package/dist/esm/extension-xW03sQxn.js.map +0 -1
- package/dist/esm/miscellaneous-D-Qxv14j.js.map +0 -1
- package/dist/esm/ssh_certificate-CmOVFH_Z.js.map +0 -1
- package/dist/esm-es5/extension-xW03sQxn.js +0 -12
- package/dist/esm-es5/extension-xW03sQxn.js.map +0 -1
- package/dist/esm-es5/miscellaneous-D-Qxv14j.js.map +0 -1
- package/dist/esm-es5/ssh_certificate-CmOVFH_Z.js.map +0 -1
- package/dist/peculiar/p-1yfbC8AM.js.map +0 -1
- package/dist/peculiar/p-342e499f.system.entry.js +0 -5
- package/dist/peculiar/p-4ff3d82a.system.entry.js.map +0 -1
- package/dist/peculiar/p-529dac51.system.entry.js +0 -153
- package/dist/peculiar/p-529dac51.system.entry.js.map +0 -1
- package/dist/peculiar/p-64517c6e.system.entry.js +0 -5
- package/dist/peculiar/p-64517c6e.system.entry.js.map +0 -1
- package/dist/peculiar/p-7777c7dc.entry.js +0 -5
- package/dist/peculiar/p-7777c7dc.entry.js.map +0 -1
- package/dist/peculiar/p-BJbjDQRd.system.js.map +0 -1
- package/dist/peculiar/p-CLcRtCZ9.system.js +0 -135
- package/dist/peculiar/p-CLcRtCZ9.system.js.map +0 -1
- package/dist/peculiar/p-Ck3muCzg.system.js.map +0 -1
- package/dist/peculiar/p-Ckf8xErP.system.js +0 -12
- package/dist/peculiar/p-Ckf8xErP.system.js.map +0 -1
- package/dist/peculiar/p-CmOVFH_Z.js.map +0 -1
- package/dist/peculiar/p-Cq11_gqW.system.js.map +0 -1
- package/dist/peculiar/p-DXA1451q.js +0 -12
- package/dist/peculiar/p-DXA1451q.js.map +0 -1
- package/dist/peculiar/p-Drk9aw2j.system.js.map +0 -1
- package/dist/peculiar/p-cc647eff.entry.js +0 -152
- package/dist/peculiar/p-ce08fab1.entry.js +0 -5
- package/dist/peculiar/p-tkt_tT15.system.js.map +0 -1
- /package/dist/peculiar/{p-ce08fab1.entry.js.map → p-1fb833f3.entry.js.map} +0 -0
- /package/dist/peculiar/{p-3424de20.system.entry.js.map → p-64cc6da1.system.entry.js.map} +0 -0
- /package/dist/peculiar/{p-3a493e87.entry.js.map → p-95f81b6d.entry.js.map} +0 -0
- /package/dist/peculiar/{p-342e499f.system.entry.js.map → p-b8bb96f4.system.entry.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-Blt9UUmt.system.js","sources":["src/components/certificate-details-parts/attributes/basic_attribute.tsx","src/components/certificate-details-parts/attributes/name_part.tsx","src/components/certificate-details-parts/attributes/name_attribute.tsx","src/components/certificate-details-parts/attributes/activity_description_attribute.tsx","src/components/certificate-details-parts/attributes/web_gdpr_attribute.tsx","src/components/certificate-details-parts/attributes/insurance_value_attribute.tsx","src/components/certificate-details-parts/attributes/type_relationship_attribute.tsx","src/components/certificate-details-parts/attributes/valuation_ranking_attribute.tsx","src/components/certificate-details-parts/attributes/as_string_attribute.tsx","src/components/certificate-details-parts/attributes/unstructured_name_attribute.tsx","src/components/certificate-details-parts/attributes/challenge_password_attribute.tsx","src/components/certificate-details-parts/attributes/extension_request_attribute.tsx","src/components/certificate-details-parts/attributes/private_key_possession_statement_attribute.tsx","src/components/certificate-details-parts/attributes/index.tsx","src/components/certificate-details-parts/revoked_certificates.tsx","src/components/certificate-details-parts/holder.tsx","src/components/certificate-details-parts/issuer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-attribute-certificate-viewer&encapsulation=shadow","src/components/attribute-certificate-viewer/attribute-certificate-viewer.tsx","src/components/certificate-chain-viewer/certificate-chain-viewer.scss?tag=peculiar-certificate-chain-viewer&encapsulation=shadow","src/components/certificate-chain-viewer/certificate-chain-viewer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-crl-viewer&encapsulation=shadow","src/components/crl-viewer/crl-viewer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-csr-viewer&encapsulation=shadow","src/components/csr-viewer/csr-viewer.tsx","src/components/ssh-certificate-viewer/-components/basic_information.tsx","src/components/ssh-certificate-viewer/-components/public_key.tsx","src/components/ssh-certificate-viewer/-components/signature_key.tsx","src/components/ssh-certificate-viewer/-components/miscellaneous.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-ssh-certificate-viewer&encapsulation=shadow","src/components/ssh-certificate-viewer/ssh-certificate-viewer.tsx"],"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 type { Attribute, TAttributeValue } from '../../../crypto/attribute';\nimport { getStringByOID } from '../../../utils';\nimport { RowValue } from '../row';\n\ninterface IBasicAttributeProps {\n attribute: Attribute<TAttributeValue>;\n}\n\nexport const BasicAttribute: FunctionalComponent<IBasicAttributeProps> = (props, children) => {\n const { attribute } = props;\n\n return ([\n <RowValue\n name=\"Name\"\n value={getStringByOID(attribute.asn.type)}\n />,\n children,\n <tr>\n <td colSpan={2} class=\"divider\">\n <span />\n </td>\n </tr>,\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { Name } from '@peculiar/asn1-x509';\nimport { OIDs } from '../../../constants/oids';\nimport { RowValue } from '../row';\n\ninterface INamePartProps {\n name: Name;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const NamePart: FunctionalComponent<INamePartProps> = (props): any[] => {\n const { name } = props;\n\n if (!name) {\n return null;\n }\n\n return name.map((relativeDistinguishedName) => (\n relativeDistinguishedName.map((attributeTypeAndValue) => (\n <RowValue\n name={OIDs[attributeTypeAndValue.type] || attributeTypeAndValue.type}\n value={attributeTypeAndValue.value.toString()}\n />\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { Name } from '@peculiar/asn1-x509';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { BasicAttribute } from './basic_attribute';\nimport { NamePart } from './name_part';\n\ninterface INameAttributeProps {\n attribute: Attribute<Name>;\n}\n\nexport const NameAttribute:\nFunctionalComponent<INameAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <NamePart\n name={attribute.value}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ActivityDescription } from '@peculiar/asn1-ntqwac';\nimport { Attribute } from '../../../crypto/attribute';\nimport { camelCaseToWords } from '../../../utils';\nimport { GeneralNamePart } from '../extensions/general_name_part';\nimport { RowValue, TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IActivityDescriptionAttributeProps {\n attribute: Attribute<ActivityDescription>;\n}\n\nexport const ActivityDescriptionAttribute:\nFunctionalComponent<IActivityDescriptionAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name={camelCaseToWords('codeAuthority')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.codeAuthority}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('codeId')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.codeId}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('shortName')}\n value={attribute.value.shortName}\n />\n <RowValue\n name={camelCaseToWords('shortDescription')}\n value={attribute.value.shortDescription}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { WebGDPR } from '@peculiar/asn1-ntqwac';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { camelCaseToWords } from '../../../utils';\nimport { GeneralNamePart } from '../extensions/general_name_part';\nimport { RowValue, TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IWebGdprAttributeProps {\n attribute: Attribute<WebGDPR>;\n}\n\nexport const WebGdprAttribute:\nFunctionalComponent<IWebGdprAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name={camelCaseToWords('assessmentAuthority')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentAuthority}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('assessmentLocation')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentLocation}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('assessmentRef')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentRef}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('dataStorageTerritory')}\n value={attribute.value.dataStorageTerritory}\n />\n <RowValue\n name={camelCaseToWords('description')}\n value={attribute.value.description}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { InsuranceValue } from '@peculiar/asn1-ntqwac';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IInsuranceValueAttributeProps {\n attribute: Attribute<InsuranceValue>;\n}\n\nexport const InsuranceValueAttribute:\nFunctionalComponent<IInsuranceValueAttributeProps> = (props) => {\n const { attribute } = props;\n const value = `${attribute.value.base} * 10^${attribute.value.degree} ${attribute.value.location}`;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={value}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { TypeRelationship } from '@peculiar/asn1-ntqwac';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { l10n } from '../../../utils';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface ITypeRelationshipAttributeProps {\n attribute: Attribute<TypeRelationship>;\n}\n\nexport const TypeRelationshipAttribute:\nFunctionalComponent<ITypeRelationshipAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n {Object.keys(attribute.value).map((keyName) => (\n <RowValue\n name={keyName}\n value={attribute.value[keyName].toNumber() ? l10n.getString('yes') : l10n.getString('no')}\n />\n ))}\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ValuationRanking } from '@peculiar/asn1-ntqwac';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IValuationRankingAttributeProps {\n attribute: Attribute<ValuationRanking>;\n}\n\nconst getValueRank = (value: number): string => {\n let ratio = 1;\n\n if (value / 100 > 1) {\n ratio = 100;\n } else if (value / 10 > 1) {\n ratio = 10;\n }\n\n return `${value}/${5 * ratio}`;\n};\n\nexport const ValuationRankingAttribute:\nFunctionalComponent<IValuationRankingAttributeProps> = (props) => {\n const { attribute } = props;\n const values = Object.keys(attribute.value).map((keyName) => ([\n getValueRank(attribute.value[keyName]),\n <br />,\n ]));\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={values as unknown as string[]}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IAsStringAttributeProps {\n attribute: Attribute<string>;\n}\n\nexport const AsStringAttribute:\nFunctionalComponent<IAsStringAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value}\n monospace\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { UnstructuredName } from '@peculiar/asn1-pkcs9';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IUnstructuredNameAttributeProps {\n attribute: Attribute<UnstructuredName>;\n}\n\nexport const UnstructuredNameAttribute:\nFunctionalComponent<IUnstructuredNameAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value.utf8String}\n />\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ChallengePassword } from '@peculiar/asn1-pkcs9';\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IChallengePasswordAttributeProps {\n attribute: Attribute<ChallengePassword>;\n}\n\nexport const ChallengePasswordAttribute:\nFunctionalComponent<IChallengePasswordAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value.toString()}\n />\n </BasicAttribute>\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 */\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","/**\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 { h, FunctionalComponent } from '@stencil/core';\nimport { PrivateKeyPossessionStatement } from '@peculiar/asn1-private-key-stmt';\nimport { Convert } from 'pvtsutils';\nimport { Attribute } from '../../../crypto/attribute';\nimport { RowValue, TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\nimport { NamePart } from './name_part';\n\ninterface IPrivateKeyPossessionStatementAttributeProps {\n attribute: Attribute<PrivateKeyPossessionStatement>;\n}\n\nexport const PrivateKeyPossessionStatementAttribute:\nFunctionalComponent<IPrivateKeyPossessionStatementAttributeProps> = (props) => {\n const { attribute } = props;\n const certificateRaw = attribute.value.cert\n ? AsnConvert.serialize(attribute.value.cert)\n : null;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Serial Number\"\n value={Convert.ToHex(attribute.value.signer.serialNumber)}\n monospace\n />\n <RowValue\n name=\"Issuer\"\n value=\"\"\n />\n <TableRowTable>\n <NamePart\n name={attribute.value.signer.issuer}\n />\n </TableRowTable>\n {certificateRaw && [\n <RowValue\n name=\"Certificate\"\n value=\"\"\n />,\n <TableRowTable>\n <peculiar-certificate-viewer\n certificate={Convert.ToBase64(certificateRaw)}\n />\n </TableRowTable>,\n ]}\n </BasicAttribute>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { Name } from '@peculiar/asn1-x509';\nimport {\n TypeRelationship,\n ActivityDescription,\n WebGDPR,\n InsuranceValue,\n ValuationRanking,\n} from '@peculiar/asn1-ntqwac';\nimport {\n UnstructuredName,\n ChallengePassword,\n ExtensionRequest,\n} from '@peculiar/asn1-pkcs9';\nimport { PrivateKeyPossessionStatement } from '@peculiar/asn1-private-key-stmt';\nimport type { Attribute, TAttributeValue } from '../../../crypto/attribute';\nimport { RowTitle } from '../row';\nimport { NameAttribute } from './name_attribute';\nimport { ActivityDescriptionAttribute } from './activity_description_attribute';\nimport { WebGdprAttribute } from './web_gdpr_attribute';\nimport { InsuranceValueAttribute } from './insurance_value_attribute';\nimport { TypeRelationshipAttribute } from './type_relationship_attribute';\nimport { ValuationRankingAttribute } from './valuation_ranking_attribute';\nimport { BasicAttribute } from './basic_attribute';\nimport { AsStringAttribute } from './as_string_attribute';\nimport { UnstructuredNameAttribute } from './unstructured_name_attribute';\nimport { ChallengePasswordAttribute } from './challenge_password_attribute';\nimport { ExtensionRequestAttribute } from './extension_request_attribute';\nimport { PrivateKeyPossessionStatementAttribute } from './private_key_possession_statement_attribute';\n\ninterface IAttributesPtops extends\n IGeneralNameOptions,\n ILeiOptions,\n IAuthorityKeyIdentifierOptions,\n ISubjectKeyIdentifierOptions {\n attributes: Attribute<TAttributeValue>[];\n}\n\nexport const Attributes: FunctionalComponent<IAttributesPtops> = (props) => {\n const { attributes } = props;\n\n if (!attributes || !attributes.length) {\n return null;\n }\n\n return ([\n <RowTitle\n value=\"Attributes\"\n />,\n attributes.map((attribute) => {\n try {\n if (attribute.value instanceof Name) {\n return (\n <NameAttribute\n attribute={attribute as unknown as Attribute<Name>}\n />\n );\n }\n\n if (attribute.value instanceof ExtensionRequest) {\n return (\n <ExtensionRequestAttribute\n attribute={attribute as unknown as Attribute<ExtensionRequest>}\n />\n );\n }\n\n if (attribute.value instanceof ActivityDescription) {\n return (\n <ActivityDescriptionAttribute\n attribute={attribute as unknown as Attribute<ActivityDescription>}\n />\n );\n }\n\n if (attribute.value instanceof WebGDPR) {\n return (\n <WebGdprAttribute\n attribute={attribute as unknown as Attribute<WebGDPR>}\n />\n );\n }\n\n if (attribute.value instanceof InsuranceValue) {\n return (\n <InsuranceValueAttribute\n attribute={attribute as unknown as Attribute<InsuranceValue>}\n />\n );\n }\n\n if (attribute.value instanceof TypeRelationship) {\n return (\n <TypeRelationshipAttribute\n attribute={attribute as unknown as Attribute<TypeRelationship>}\n />\n );\n }\n\n if (attribute.value instanceof ValuationRanking) {\n return (\n <ValuationRankingAttribute\n attribute={attribute as unknown as Attribute<ValuationRanking>}\n />\n );\n }\n\n if (attribute.value instanceof UnstructuredName) {\n return (\n <UnstructuredNameAttribute\n attribute={attribute as unknown as Attribute<UnstructuredName>}\n />\n );\n }\n\n if (attribute.value instanceof ChallengePassword) {\n return (\n <ChallengePasswordAttribute\n attribute={attribute as unknown as Attribute<ChallengePassword>}\n />\n );\n }\n\n if (attribute.value instanceof PrivateKeyPossessionStatement) {\n return (\n <PrivateKeyPossessionStatementAttribute\n attribute={attribute as unknown as Attribute<PrivateKeyPossessionStatement>}\n />\n );\n }\n\n if (typeof attribute.value === 'string') {\n return (\n <AsStringAttribute\n attribute={attribute as unknown as Attribute<string>}\n />\n );\n }\n\n return (\n <BasicAttribute\n attribute={attribute}\n />\n );\n } catch {\n console.error('Error render attribute:', attribute.asn.type);\n\n return null;\n }\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport {\n CRLReason, InvalidityDate, CertificateIssuer,\n} from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\nimport {\n dateShort, l10n, getStringByOID,\n} from '../../utils';\nimport { IRevokedCertificate } from '../../crypto';\nimport { GeneralNamePart } from './extensions/general_name_part';\nimport {\n RowTitle, RowValue, TableRowTable,\n} from './row';\n\ninterface IRevokedCertificatesProps extends IGeneralNameOptions {\n revokedCertificates: IRevokedCertificate[];\n}\n\nexport const RevokedCertificates: FunctionalComponent<IRevokedCertificatesProps> = (props) => {\n const {\n revokedCertificates,\n getDNSNameLink,\n getIPAddressLink,\n } = props;\n\n if (!revokedCertificates || !revokedCertificates.length) {\n return null;\n }\n\n return [\n <RowTitle\n value={l10n.getString('revokedCertificates')}\n />,\n revokedCertificates.map((certificate) => ([\n <RowValue\n name={l10n.getString('serialNumber')}\n value={Convert.ToHex(certificate.userCertificate)}\n monospace\n />,\n <RowValue\n name={l10n.getString('revocationDate')}\n value={dateShort(certificate.revocationDate.getTime())}\n />,\n (certificate.crlEntryExtensions && certificate.crlEntryExtensions.length && ([\n <RowValue\n name={`${l10n.getString('crlEntryExtensions')}:`}\n value=\"\"\n />,\n <TableRowTable>\n {\n certificate.crlEntryExtensions.map((extension) => {\n if (extension.value instanceof CRLReason) {\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={extension.value.toJSON() || extension.value.reason}\n />\n );\n }\n\n if (extension.value instanceof InvalidityDate) {\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={extension.value.value.getTime()}\n />\n );\n }\n\n if (extension.value instanceof CertificateIssuer && extension.value.length) {\n return ([\n <RowValue\n name={`${getStringByOID(extension.asn.extnID)}:`}\n value=\"\"\n />,\n extension.value.map((gn) => (\n <TableRowTable>\n <GeneralNamePart\n generalName={gn}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n />\n </TableRowTable>\n )),\n ]);\n }\n\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={Convert.ToHex(extension.asn.extnValue)}\n monospace\n />\n );\n })\n }\n </TableRowTable>,\n ])),\n <tr>\n <td colSpan={2} class=\"divider\">\n <span />\n </td>\n </tr>,\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { Convert } from 'pvtsutils';\nimport type { X509AttributeCertificate } from '../../crypto';\nimport { l10n, getStringByOID } from '../../utils';\nimport {\n RowTitle, RowValue, TableRowTable,\n} from './row';\nimport { GeneralNamePart } from './extensions/general_name_part';\n\ninterface IHolderProps {\n holder: X509AttributeCertificate['holder'];\n}\n\nexport const Holder: FunctionalComponent<IHolderProps> = (props) => {\n const { holder } = props;\n\n if (!holder) {\n return null;\n }\n\n const { baseCertificateID, objectDigestInfo } = holder;\n\n return [\n <RowTitle\n value={l10n.getString('holder')}\n />,\n baseCertificateID && ([\n baseCertificateID.issuer.map((item) => (\n <GeneralNamePart\n generalName={item}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n )),\n <tr>\n <td />\n <td />\n </tr>,\n <RowValue\n name={l10n.getString('serialNumber')}\n value={Convert.ToHex(baseCertificateID.serial)}\n monospace\n />,\n <tr>\n <td />\n <td />\n </tr>,\n ]),\n objectDigestInfo && ([\n <RowValue\n name={l10n.getString('digestInfo')}\n value=\"\"\n />,\n <TableRowTable>\n <RowValue\n name={l10n.getString('algorithm')}\n value={getStringByOID(objectDigestInfo.digestAlgorithm.algorithm)}\n />\n <RowValue\n name={l10n.getString('value')}\n value={Convert.ToHex(objectDigestInfo.objectDigest)}\n monospace\n />\n <RowValue\n name={l10n.getString('type')}\n value={objectDigestInfo.digestedObjectType}\n />\n </TableRowTable>,\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { X509AttributeCertificate } from '../../crypto';\nimport { l10n } from '../../utils';\nimport { RowTitle } from './row';\nimport { GeneralNamePart } from './extensions/general_name_part';\n\ninterface IIssuerProps {\n issuer: X509AttributeCertificate['issuer'];\n}\n\nexport const Issuer: FunctionalComponent<IIssuerProps> = (props) => {\n const { issuer } = props;\n\n if (!issuer) {\n return null;\n }\n\n return [\n <RowTitle\n value={l10n.getString('issuer')}\n />,\n issuer.map((item) => (\n <GeneralNamePart\n generalName={item}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n )),\n ];\n};\n","@use '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n\n --pv-certificate-viewer-td-horizontal-padding: calc(var(--pv-size-base) * 4);\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: calc(var(--pv-size-base) * 1) var(--pv-certificate-viewer-td-horizontal-padding);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: calc(var(--pv-size-base) * 1) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: calc(var(--pv-size-base) * 6);\n padding-bottom: calc(var(--pv-size-base) * 1);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: calc(var(--pv-size-base) * 2) 0;\n\n &.title {\n padding-top: calc(var(--pv-size-base) * 6);\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\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 */\n\nimport {\n Component,\n Host,\n h,\n Prop,\n State,\n Watch,\n Build,\n} from '@stencil/core';\nimport { X509AttributeCertificate } from '../../crypto';\nimport {\n getDNSNameLink, getIPAddressLink, getLEILink,\n} from '../../utils/third_party_links';\nimport {\n BasicInformation,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n Attributes,\n Holder,\n Issuer,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type TAttributeCertificateProp = string | X509AttributeCertificate;\n\n@Component({\n tag: 'peculiar-attribute-certificate-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class AttributeCertificateViewer {\n private certificateDecoded: X509AttributeCertificate;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificate: TAttributeCertificateProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop() download?: boolean;\n\n /**\n * Authority Key Identifier extension parent link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.subject_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdParentLink?: string;\n\n /**\n * Authority Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdSiblingsLink?: string;\n\n /**\n * Subject Key Identifier extension children link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdChildrenLink?: string;\n\n /**\n * Subject Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://some.com/{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdSiblingsLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TAttributeCertificateProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof X509AttributeCertificate) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new X509AttributeCertificate(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseExtensions();\n this.certificateDecoded.parseAttributes();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(\n newValue: TAttributeCertificateProp,\n oldValue: TAttributeCertificateProp,\n ) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (\n newValue instanceof X509AttributeCertificate\n && oldValue instanceof X509AttributeCertificate\n ) {\n if (newValue.serialNumber !== oldValue.serialNumber) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private getAuthKeyIdParentLink = (value: string) => this.authKeyIdParentLink\n ?.replace('{{authKeyId}}', value);\n\n private getAuthKeyIdSiblingsLink = (value: string) => this.authKeyIdSiblingsLink\n ?.replace('{{authKeyId}}', value);\n\n private getSubjectKeyIdChildrenLink = (value: string) => this.subjectKeyIdChildrenLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getSubjectKeyIdSiblingsLink = (value: string) => this.subjectKeyIdSiblingsLink\n ?.replace('{{subjectKeyId}}', value);\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this attribute certificate.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no attribute certificate available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <Issuer\n issuer={this.certificateDecoded.issuer}\n />\n\n <Holder\n holder={this.certificateDecoded.holder}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Attributes\n attributes={this.certificateDecoded.attributes}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n","@use '../../css/base.scss';\n@use '../certificate-viewer/certificate-viewer.scss';\n\n:host {\n display: block;\n width: 100%;\n}\n\n.tabs {\n white-space: nowrap;\n overflow-x: auto;\n border-bottom: 1px solid var(--pv-color-gray-4);\n padding: 0 calc(var(--pv-size-base) * 4);\n margin-bottom: calc(var(--pv-size-base) * 6);\n}\n\n.tab {\n font-family: inherit;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n border: none;\n border-bottom: 3px solid transparent;\n min-height: calc(var(--pv-size-base) * 12);\n height: 100%;\n padding: 0 calc(var(--pv-size-base) * 3);\n background-color: transparent;\n transition: background-color 200ms, color 200ms, border-color 200ms;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n font-weight: var(--pv-text-s2-weight);\n font-size: var(--pv-text-s2-size);\n line-height: var(--pv-text-s2-height);\n letter-spacing: var(--pv-text-s2-spacing);\n color: var(--pv-color-gray-10);\n\n &:hover {\n background-color: var(--pv-color-secondary-tint-5);\n }\n\n &[aria-selected=\"true\"] {\n color: var(--pv-color-black);\n border-color: var(--pv-color-secondary);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\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 */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Host,\n} from '@stencil/core';\nimport { X509Certificates } from '../../crypto';\nimport { Typography } from '../typography';\nimport { Miscellaneous } from '../certificate-details-parts';\n\n@Component({\n tag: 'peculiar-certificate-chain-viewer',\n styleUrl: 'certificate-chain-viewer.scss',\n shadow: true,\n})\nexport class CertificateChainViewer {\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificates: X509Certificates;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop({ reflect: true }) download?: boolean;\n\n @State() selectedCertificateIndex = 0;\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificates available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (!this.certificates) {\n return this.renderEmptyState();\n }\n\n return (\n <Host>\n <div\n role=\"tablist\"\n class=\"tabs\"\n >\n {Array.from(this.certificates).map((certificate, index) => (\n <button\n type=\"button\"\n role=\"tab\"\n class=\"tab\"\n aria-selected={index === this.selectedCertificateIndex ? 'true' : 'false'}\n onClick={() => {\n this.selectedCertificateIndex = index;\n }}\n >\n {certificate.commonName}\n </button>\n ))}\n </div>\n {Array.from(this.certificates).map((certificate, index) => {\n if (index === this.selectedCertificateIndex) {\n return (\n <peculiar-certificate-viewer\n certificate={certificate}\n download={false}\n />\n );\n }\n\n return null;\n })}\n\n <table>\n {this.download && (\n <Miscellaneous\n certificate={this.certificates}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n","@use '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n\n --pv-certificate-viewer-td-horizontal-padding: calc(var(--pv-size-base) * 4);\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: calc(var(--pv-size-base) * 1) var(--pv-certificate-viewer-td-horizontal-padding);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: calc(var(--pv-size-base) * 1) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: calc(var(--pv-size-base) * 6);\n padding-bottom: calc(var(--pv-size-base) * 1);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: calc(var(--pv-size-base) * 2) 0;\n\n &.title {\n padding-top: calc(var(--pv-size-base) * 6);\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\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 */\n\nimport {\n Component,\n Host,\n h,\n Prop,\n State,\n Watch,\n Build,\n} from '@stencil/core';\nimport { X509Crl } from '../../crypto';\nimport {\n getDNSNameLink, getIPAddressLink, getLEILink,\n} from '../../utils/third_party_links';\nimport {\n BasicInformation,\n IssuerName,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n RevokedCertificates,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type TCrlProp = string | X509Crl;\n\n@Component({\n tag: 'peculiar-crl-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class CrlViewer {\n private certificateDecoded: X509Crl;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: TCrlProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop() download?: boolean;\n\n /**\n * Authority Key Identifier extension parent link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.subject_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdParentLink?: string;\n\n /**\n * Authority Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdSiblingsLink?: string;\n\n /**\n * Issuer DN link.\n * **NOTE**: HTML component attribute must be `issuer-dn-link`.\n */\n @Prop({ reflect: true }) issuerDnLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TCrlProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof X509Crl) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new X509Crl(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseExtensions();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n private getAuthKeyIdParentLink = (value: string) => this.authKeyIdParentLink\n ?.replace('{{authKeyId}}', value);\n\n private getAuthKeyIdSiblingsLink = (value: string) => this.authKeyIdSiblingsLink\n ?.replace('{{authKeyId}}', value);\n\n private getIssuerDnLink() {\n return this.issuerDnLink;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(\n newValue: TCrlProp,\n oldValue: TCrlProp,\n ) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (\n newValue instanceof X509Crl\n && oldValue instanceof X509Crl\n ) {\n if (newValue.commonName !== oldValue.commonName) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this certificate revocation list.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificate revocation list available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <IssuerName\n name={this.certificateDecoded.issuer}\n issuerDnLink={this.getIssuerDnLink()}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n />\n\n <RevokedCertificates\n revokedCertificates={this.certificateDecoded.revokedCertificates}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n","@use '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n\n --pv-certificate-viewer-td-horizontal-padding: calc(var(--pv-size-base) * 4);\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: calc(var(--pv-size-base) * 1) var(--pv-certificate-viewer-td-horizontal-padding);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: calc(var(--pv-size-base) * 1) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: calc(var(--pv-size-base) * 6);\n padding-bottom: calc(var(--pv-size-base) * 1);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: calc(var(--pv-size-base) * 2) 0;\n\n &.title {\n padding-top: calc(var(--pv-size-base) * 6);\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\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 */\n\nimport {\n Component,\n Host,\n h,\n Prop,\n State,\n Watch,\n Build,\n} from '@stencil/core';\nimport { Pkcs10CertificateRequest } from '../../crypto';\nimport {\n getDNSNameLink, getIPAddressLink, getLEILink,\n} from '../../utils/third_party_links';\nimport {\n BasicInformation,\n SubjectName,\n Signature,\n Thumbprints,\n Miscellaneous,\n PublicKey,\n Attributes,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type TCsrProp = string | Pkcs10CertificateRequest;\n\n@Component({\n tag: 'peculiar-csr-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class CsrViewer {\n private certificateDecoded: Pkcs10CertificateRequest;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: TCsrProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop() download?: boolean;\n\n /**\n * Subject Key Identifier extension children link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdChildrenLink?: string;\n\n /**\n * Subject Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://some.com/{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdSiblingsLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TCsrProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof Pkcs10CertificateRequest) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new Pkcs10CertificateRequest(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseAttributes();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(\n newValue: TCsrProp,\n oldValue: TCsrProp,\n ) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (\n newValue instanceof Pkcs10CertificateRequest\n && oldValue instanceof Pkcs10CertificateRequest\n ) {\n if (newValue.commonName !== oldValue.commonName) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private getAuthKeyIdParentLink = (value: string) => value;\n\n private getAuthKeyIdSiblingsLink = (value: string) => value;\n\n private getSubjectKeyIdChildrenLink = (value: string) => this.subjectKeyIdChildrenLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getSubjectKeyIdSiblingsLink = (value: string) => this.subjectKeyIdSiblingsLink\n ?.replace('{{subjectKeyId}}', value);\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this certificate request.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificate request available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <SubjectName\n name={this.certificateDecoded.subject}\n />\n\n <PublicKey\n publicKey={this.certificateDecoded.publicKey}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Attributes\n attributes={this.certificateDecoded.attributes}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { RowTitle, RowValue } from '../../certificate-details-parts/row';\nimport { dateShort, l10n } from '../../../utils';\n\ninterface ISshBasicInformationProps {\n serialNumber: string;\n validity: string;\n notBefore: Date;\n notAfter: Date;\n type: string;\n keyId: string;\n principals: string[];\n extensions: Record<string, string>;\n criticalOptions: Record<string, string>;\n}\n\nexport const SshBasicInformation: FunctionalComponent<ISshBasicInformationProps> = (props) => {\n const {\n serialNumber,\n validity,\n notBefore,\n notAfter,\n type,\n keyId,\n principals,\n extensions,\n criticalOptions,\n } = props;\n\n return [\n <RowTitle\n value={l10n.getString('basicInformation')}\n />,\n <RowValue\n name={l10n.getString('type')}\n value={type}\n />,\n <RowValue\n name={l10n.getString('serialNumber')}\n value={serialNumber}\n monospace\n />,\n <RowValue\n name={l10n.getString('validity')}\n value={validity}\n />,\n <RowValue\n name={l10n.getString('issued')}\n value={notBefore ? dateShort(notBefore) : undefined}\n />,\n <RowValue\n name={l10n.getString('expired')}\n value={notAfter ? dateShort(notAfter) : undefined}\n />,\n <RowValue\n name={l10n.getString('keyId')}\n value={keyId}\n />,\n <RowValue\n name={l10n.getString('principals')}\n value={principals.join(', ') || '(none)'}\n />,\n <RowValue\n name={l10n.getString('criticalOptions')}\n value={Object.keys(criticalOptions).join(', ') || '(none)'}\n />,\n <RowValue\n name={l10n.getString('extensions')}\n value={Object.keys(extensions).join(', ') || '(none)'}\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { SshCertificate } from '../../../crypto';\nimport { l10n, getStringByOID } from '../../../utils';\nimport {\n RowTitle,\n RowValue,\n} from '../../certificate-details-parts/row';\n\ninterface ISshPublicKeyProps {\n key: SshCertificate['publicKey'];\n}\n\nexport const SshPublicKey: FunctionalComponent<ISshPublicKeyProps> = (props) => {\n const { key } = props;\n\n if (!key) {\n return null;\n }\n\n return [\n <RowTitle\n value={l10n.getString('publicKeyInfo')}\n />,\n <RowValue\n name={l10n.getString('algorithm')}\n value={getStringByOID(key.algorithm)}\n />,\n <RowValue\n name=\"Thumbprint (SHA-256)\"\n value={key.thumbprint}\n monospace\n />,\n <RowValue\n name={l10n.getString('value')}\n value={key.value}\n monospace\n collapse\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { SshCertificate } from '../../../crypto';\nimport { l10n, getStringByOID } from '../../../utils';\nimport {\n RowTitle,\n RowValue,\n} from '../../certificate-details-parts/row';\n\ninterface ISshSignatureKeyProps {\n key: SshCertificate['signatureKey'];\n}\n\nexport const SshSignatureKey: FunctionalComponent<ISshSignatureKeyProps> = (props) => {\n const { key } = props;\n\n if (!key) {\n return null;\n }\n\n return [\n <RowTitle\n value={l10n.getString('signingCA')}\n />,\n <RowValue\n name={l10n.getString('algorithm')}\n value={getStringByOID(key.algorithm)}\n />,\n <RowValue\n name=\"Thumbprint (SHA-256)\"\n value={key.thumbprint}\n monospace\n />,\n <RowValue\n name={l10n.getString('value')}\n value={key.value}\n monospace\n collapse\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 */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { SshCertificate } from '../../../crypto';\nimport { l10n } from '../../../utils';\nimport { Button } from '../../button';\nimport { DownloadIcon } from '../../icons';\nimport { RowTitle } from '../../certificate-details-parts/row';\n\ninterface ISshMiscellaneousProps {\n certificate: SshCertificate;\n}\n\nexport const SshMiscellaneous: FunctionalComponent<ISshMiscellaneousProps> = (props) => {\n const { certificate } = props;\n\n return [\n <RowTitle\n value={l10n.getString('miscellaneous')}\n />,\n <tr>\n <td>\n <Button\n startIcon={<DownloadIcon />}\n onClick={() => certificate.downloadAsPub()}\n >\n {l10n.getString('download')}\n </Button>\n </td>\n </tr>,\n ];\n};\n","@use '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n\n --pv-certificate-viewer-td-horizontal-padding: calc(var(--pv-size-base) * 4);\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: calc(var(--pv-size-base) * 1) var(--pv-certificate-viewer-td-horizontal-padding);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: calc(var(--pv-size-base) * 1) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: calc(var(--pv-size-base) * 6);\n padding-bottom: calc(var(--pv-size-base) * 1);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: calc(var(--pv-size-base) * 2) 0;\n\n &.title {\n padding-top: calc(var(--pv-size-base) * 6);\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\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 */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Watch,\n Host,\n Build,\n} from '@stencil/core';\nimport { SshCertificate } from '../../crypto';\nimport { Typography } from '../typography';\nimport { SshBasicInformation } from './-components/basic_information';\nimport { SshPublicKey } from './-components/public_key';\nimport { SshSignatureKey } from './-components/signature_key';\nimport { SshMiscellaneous } from './-components/miscellaneous';\n\nexport type TSshCertificateProp = string | SshCertificate;\n\n@Component({\n tag: 'peculiar-ssh-certificate-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class SshCertificateViewer {\n private certificateDecoded: SshCertificate;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: TSshCertificateProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop({ reflect: true }) download?: boolean;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TSshCertificateProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof SshCertificate) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new SshCertificate(certificate);\n } else {\n return;\n }\n\n // this.certificateDecoded.parseExtensions();\n await this.certificateDecoded.parsePublicKey();\n await this.certificateDecoded.parseSignatureKey();\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(newValue: TSshCertificateProp, oldValue: TSshCertificateProp) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (newValue instanceof SshCertificate && oldValue instanceof SshCertificate) {\n if (newValue.serialNumber !== oldValue.serialNumber) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this certificate.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificate available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <SshBasicInformation\n {...this.certificateDecoded}\n />\n\n <SshPublicKey\n key={this.certificateDecoded.publicKey}\n />\n\n <SshSignatureKey\n key={this.certificateDecoded.signatureKey}\n />\n\n {this.download && (\n <SshMiscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n"],"names":["Convert","Name","certificateViewerCss"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-BpRY-zq0.system.js","sources":["src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-certificate-viewer&encapsulation=shadow","src/components/certificate-viewer/certificate-viewer.tsx"],"sourcesContent":["@use '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n position: relative;\n min-width: 280px;\n min-height: 300px;\n word-wrap: break-word;\n word-break: break-word;\n\n --pv-certificate-viewer-td-horizontal-padding: calc(var(--pv-size-base) * 4);\n}\n\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n tr:last-child {\n .divider {\n display: none;\n }\n }\n\n td {\n padding: calc(var(--pv-size-base) * 1) var(--pv-certificate-viewer-td-horizontal-padding);\n vertical-align: top;\n\n &:first-child {\n width: 220px;\n }\n\n &:last-child {\n width: calc(100% - 220px)\n }\n\n &.monospace {\n max-width: 0;\n }\n\n &.divider {\n padding: calc(var(--pv-size-base) * 1) 0;\n\n span {\n height: 1px;\n display: block;\n background-color: var(--pv-color-gray-4);\n }\n }\n }\n\n .title td {\n padding-top: calc(var(--pv-size-base) * 6);\n padding-bottom: calc(var(--pv-size-base) * 1);\n }\n\n table {\n border-left: 1px solid var(--pv-color-gray-5);\n }\n}\n\n.status_wrapper {\n min-height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tr, td {\n display: block;\n }\n\n table {\n tr {\n padding: calc(var(--pv-size-base) * 2) 0;\n\n &.title {\n padding-top: calc(var(--pv-size-base) * 6);\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-certificate-viewer-td-horizontal-padding);\n width: 100% !important;\n max-width: 100% !important;\n\n &.divider {\n padding: 0;\n }\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 */\n\nimport {\n Component,\n h,\n Prop,\n State,\n Watch,\n Host,\n Build,\n} from '@stencil/core';\nimport { X509Certificate } from '../../crypto';\nimport {\n getDNSNameLink, getIPAddressLink, getLEILink,\n} from '../../utils/third_party_links';\nimport {\n BasicInformation,\n SubjectName,\n IssuerName,\n PublicKey,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type TCertificateProp = string | X509Certificate;\n\n@Component({\n tag: 'peculiar-certificate-viewer',\n styleUrl: 'certificate-viewer.scss',\n shadow: true,\n})\nexport class CertificateViewer {\n private certificateDecoded: X509Certificate;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: TCertificateProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop({ reflect: true }) download?: boolean;\n\n /**\n * Authority Key Identifier extension parent link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.subject_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdParentLink?: string;\n\n /**\n * Authority Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdSiblingsLink?: string;\n\n /**\n * Subject Key Identifier extension children link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdChildrenLink?: string;\n\n /**\n * Subject Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://some.com/{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdSiblingsLink?: string;\n\n /**\n * Issuer DN link.\n * **NOTE**: HTML component attribute must be `issuer-dn-link`.\n */\n @Prop({ reflect: true }) issuerDnLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView = false;\n\n @State() isDecodeInProcess = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.decodeCertificate(this.certificate);\n\n if (Build.isBrowser) {\n this.mobileMediaQuery = window.matchMedia(this.mobileMediaQueryString);\n this.mobileMediaQuery.addEventListener('change', this.handleMediaQueryChange.bind(this));\n this.mobileScreenView = this.mobileMediaQuery.matches;\n }\n }\n\n disconnectedCallback() {\n this.mobileMediaQuery.removeEventListener('change', this.handleMediaQueryChange.bind(this));\n }\n\n private async decodeCertificate(certificate: TCertificateProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof X509Certificate) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new X509Certificate(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseExtensions();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(newValue: TCertificateProp, oldValue: TCertificateProp) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (newValue instanceof X509Certificate && oldValue instanceof X509Certificate) {\n if (newValue.serialNumber !== oldValue.serialNumber) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n private getAuthKeyIdParentLink = (value: string) => this.authKeyIdParentLink\n ?.replace('{{authKeyId}}', value);\n\n private getAuthKeyIdSiblingsLink = (value: string) => this.authKeyIdSiblingsLink\n ?.replace('{{authKeyId}}', value);\n\n private getSubjectKeyIdChildrenLink = (value: string) => this.subjectKeyIdChildrenLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getSubjectKeyIdSiblingsLink = (value: string) => this.subjectKeyIdSiblingsLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getIssuerDnLink() {\n return this.issuerDnLink;\n }\n\n private renderErrorState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There was an error decoding this certificate.\n </Typography>\n </div>\n );\n }\n\n private renderEmptyState() {\n return (\n <div class=\"status_wrapper\">\n <Typography>\n There is no certificate available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <SubjectName\n name={this.certificateDecoded.subject}\n />\n\n <IssuerName\n name={this.certificateDecoded.issuer}\n issuerDnLink={this.getIssuerDnLink()}\n />\n\n <PublicKey\n publicKey={this.certificateDecoded.publicKey}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-CDZsc_KS.system.js","sources":["../../node_modules/@peculiar/asn1-cms/build/es2015/object_identifiers.js","src/crypto/x509_certificates.ts","src/components/certificate-decoder/certificate-decoder.tsx"],"sourcesContent":["export const id_ct_contentInfo = \"1.2.840.113549.1.9.16.1.6\";\nexport const id_data = \"1.2.840.113549.1.7.1\";\nexport const id_signedData = \"1.2.840.113549.1.7.2\";\nexport const id_envelopedData = \"1.2.840.113549.1.7.3\";\nexport const id_digestedData = \"1.2.840.113549.1.7.5\";\nexport const id_encryptedData = \"1.2.840.113549.1.7.6\";\nexport const id_authData = \"1.2.840.113549.1.9.16.1.2\";\n","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';\nimport { Download } from '../utils';\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 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({ single: new OctetString() });\n signedData.certificates = new CertificateSet(\n Array.from(this)\n .map((o) => new CertificateChoices({ certificate: AsnConvert.parse(o.raw, Certificate) })),\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","/**\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';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n shadow: false,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * Pre-loaded example certificates available in the \"Load example\" dropdown.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * A certificate to decode on first load (PEM or Base64 DER).\n */\n @Prop() certificateToDecode?: string;\n\n /** The decoded certificate object; null while empty. */\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl\n | SshCertificate;\n\n /** Emitted when a certificate has been successfully parsed. */\n @Event() successParse!: EventEmitter<string>;\n\n /** Emitted when the input has been cleared. */\n @Event() clearCertificate!: EventEmitter<void>;\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n // Defer one tick to avoid Stencil re-render warning\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n // ─── Handlers ──────────────────────────────────────────────────────────────\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) this.decode(value);\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n private handleChangeInputFile = async (event: Event) => {\n const el = event.target as HTMLInputElement;\n\n if (el.files?.length) {\n const file = await readAsBinaryString(el.files[0]);\n\n if (typeof file.value === 'string') this.decode(file.value);\n el.value = '';\n }\n };\n\n private handleChangeExample = (event: Event) => {\n const val = (event.target as HTMLSelectElement).value;\n\n if (val) this.decode(val);\n else this.clearValue();\n };\n\n private handleDrop = async (event: DragEvent) => {\n event.stopPropagation();\n event.preventDefault();\n const files = event.dataTransfer?.files;\n\n if (files?.length) {\n const file = await readAsBinaryString(files[0]);\n\n if (typeof file.value === 'string') this.decode(file.value);\n }\n };\n\n // ─── Core operations ───────────────────────────────────────────────────────\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 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) => resolve(new X509Certificates(value)))\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((err) => {\n console.error(err);\n alert(`Error decoding certificate.\\n\\nSupported formats: X.509 Certificate, Attribute Certificate, PKCS#10 CSR, CRL, SSH Certificate.`);\n });\n }\n\n // ─── Render helpers ────────────────────────────────────────────────────────\n\n private renderDecodedComponent() {\n const cert = this.certificateDecoded;\n\n if (cert instanceof X509Certificates) {\n return <peculiar-certificate-chain-viewer certificates={cert} download />;\n }\n\n if (cert instanceof X509Certificate) {\n return <peculiar-certificate-viewer certificate={cert} download />;\n }\n\n if (cert instanceof X509AttributeCertificate) {\n return <peculiar-attribute-certificate-viewer certificate={cert} download />;\n }\n\n if (cert instanceof Pkcs10CertificateRequest) {\n return <peculiar-csr-viewer certificate={cert} download />;\n }\n\n if (cert instanceof X509Crl) {\n return <peculiar-crl-viewer certificate={cert} download />;\n }\n\n if (cert instanceof SshCertificate) {\n return <peculiar-ssh-certificate-viewer certificate={cert} download />;\n }\n\n return null;\n }\n\n // ─── Render ────────────────────────────────────────────────────────────────\n\n render() {\n const hasDecoded = !!this.certificateDecoded;\n\n return (\n <Host class=\"relative grid h-full min-h-0 w-full grid-cols-1 overflow-hidden bg-gray-100 font-sans min-[821px]:grid-cols-2 max-[820px]:h-auto\">\n <div\n class=\"pointer-events-none absolute inset-y-0 left-1/2 hidden w-px -translate-x-1/2 bg-gray-200 min-[821px]:block\"\n aria-hidden=\"true\"\n />\n\n {/* ══════════════════════ LEFT PANE — INPUT ══════════════════════ */}\n <div class=\"flex min-h-0 flex-col overflow-hidden bg-white max-[820px]:min-h-64 max-[820px]:border-b max-[820px]:border-gray-200\">\n\n <div class=\"flex shrink-0 items-center justify-between gap-2 border-b border-gray-200 bg-gray-100 px-4 py-2\">\n <span class=\"flex items-center gap-1.5 font-mono text-xs uppercase tracking-widest text-gray-500\">\n <svg\n width=\"12\" height=\"12\"\n class=\"shrink-0 text-blue-600 opacity-80\"\n fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n Encoded Input\n </span>\n\n <div class=\"flex shrink-0 items-center gap-1\">\n <label\n class=\"inline-flex cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-md border border-gray-300 bg-white px-2.5 py-1 font-mono text-xs tracking-wide text-gray-700 transition-all duration-150 hover:opacity-80 disabled:pointer-events-none disabled:cursor-default disabled:opacity-40\"\n title=\"Load from file\"\n >\n <svg\n width=\"11\" height=\"11\"\n fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12\"\n />\n </svg>\n Upload\n <input\n type=\"file\"\n accept=\".pem,.crt,.cer,.der,.csr,.req,.crl,.pub,application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl\"\n class=\"hidden\"\n onChange={this.handleChangeInputFile}\n />\n </label>\n\n <button\n type=\"button\"\n class=\"inline-flex cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-md border border-gray-300 bg-white px-2.5 py-1 font-mono text-xs tracking-wide text-gray-700 transition-all duration-150 hover:opacity-80 disabled:pointer-events-none disabled:cursor-default disabled:opacity-40\"\n disabled={!hasDecoded && !this.inputPaste?.value}\n onClick={this.handleClickClear}\n >\n Clear\n </button>\n\n <button\n type=\"button\"\n class=\"inline-flex cursor-pointer items-center gap-1.5 whitespace-nowrap rounded-md bg-blue-600 px-2.5 py-1 font-mono text-xs tracking-wide text-white transition-all duration-150 hover:opacity-80 disabled:pointer-events-none disabled:cursor-default disabled:opacity-40\"\n disabled={!hasDecoded && !this.inputPaste?.value}\n onClick={this.handleClickDecode}\n >\n Decode →\n </button>\n </div>\n </div>\n\n <textarea\n class=\"min-h-0 w-full flex-1 resize-none border-0 bg-gray-100 px-4 py-4 font-mono text-xs leading-snug tracking-wide text-blue-800 caret-blue-600 outline-none transition-colors duration-150 placeholder:italic placeholder:text-gray-400 focus:bg-white\"\n placeholder={'Paste a PEM or Base64 DER certificate here,\\nor drag & drop a .pem / .crt file…\\n\\n-----BEGIN CERTIFICATE-----\\nMIIFaz…\\n-----END CERTIFICATE-----'}\n ref={(el) => { this.inputPaste = el as HTMLTextAreaElement; }}\n onDrop={this.handleDrop}\n />\n </div>\n\n {/* ══════════════════════ RIGHT PANE — OUTPUT ══════════════════════ */}\n <div class=\"flex min-h-0 flex-col overflow-hidden bg-white\">\n <div class=\"flex shrink-0 items-center justify-between gap-2 border-b border-gray-200 bg-gray-100 px-4 py-2\">\n <span class=\"flex items-center gap-1.5 font-mono text-xs uppercase tracking-widest text-gray-500\">\n <svg\n width=\"12\" height=\"12\"\n class=\"shrink-0 text-blue-600 opacity-80\"\n fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\"\n />\n </svg>\n Decoded Output\n </span>\n\n {this.certificateExamples?.length > 0 && (\n <div class=\"relative max-w-xs shrink\">\n <select\n class=\"w-full max-w-xs cursor-pointer appearance-none rounded-md border border-gray-300 bg-white py-1 pl-2 pr-8 font-mono text-xs text-gray-700 transition-colors hover:border-blue-600 focus:border-blue-600 focus:outline-none\"\n onChange={this.handleChangeExample}\n >\n <option value=\"\">Load example…</option>\n {this.certificateExamples.map((ex) => (\n <option value={ex.value}>{ex.title}</option>\n ))}\n </select>\n <svg\n class=\"pointer-events-none absolute right-2 top-1/2 size-2.5 -translate-y-1/2 text-gray-500\"\n fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.5\"\n viewBox=\"0 0 10 6\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M1 1l4 4 4-4\"\n />\n </svg>\n </div>\n )}\n </div>\n\n <div class=\"min-h-0 flex-1 overflow-y-auto bg-white [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:rounded-md [&::-webkit-scrollbar-thumb]:bg-gray-300 hover:[&::-webkit-scrollbar-thumb]:bg-gray-400\">\n {!hasDecoded\n ? this.renderPlaceholder()\n : this.renderDecodedComponent()}\n </div>\n </div>\n\n </Host>\n );\n }\n\n private renderPlaceholder() {\n return (\n <div class=\"flex h-full flex-col items-center justify-center gap-3 p-10\">\n <div class=\"flex size-12 items-center justify-center rounded-full border border-gray-200 bg-gray-100 text-gray-400\">\n <svg\n width=\"24\" height=\"24\"\n fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.5\" viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n </div>\n <p class=\"text-center font-mono text-xs leading-relaxed text-gray-400\">\n Paste a certificate on the left\n <br />\n and click\n {' '}\n <strong class=\"font-semibold text-blue-600\">Decode</strong>\n {' '}\n — or load an example.\n </p>\n </div>\n );\n }\n}\n"],"names":["Convert"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* © Peculiar Ventures https://peculiarventures.com/ - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import{A as t,c as s,C as i,P as e,b as r,N as n,a,e as
|
|
4
|
+
import{A as t,c as s,C as i,P as e,b as r,N as n,a,e as o,i as h,E as u,f as c,R as f,g as l,h as m,j as g,k as p,l as b,m as w,D as C}from"./p-Del2D5s9.js";import{E}from"./p-Cp20xosi.js";
|
|
5
5
|
/**
|
|
6
6
|
* @license
|
|
7
7
|
* Copyright (c) Peculiar Ventures, LLC.
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the MIT license found in the
|
|
10
10
|
* LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/class j extends t{constructor(t){super(s(t),i);this.thumbprints={};this.type="X.509 Certificate";this.tag=e.CertificateTag;const{tbsCertificate:
|
|
12
|
-
//# sourceMappingURL=p-
|
|
11
|
+
*/class j extends t{constructor(t){super(s(t),i);this.thumbprints={};this.type="X.509 Certificate";this.tag=e.CertificateTag;const{tbsCertificate:o}=this.asn;this.serialNumber=r.Convert.ToHex(o.serialNumber);this.subject=new n(o.subject).toJSON();this.issuer=new n(o.issuer).toJSON();this.version=o.version+1;const h=o.validity.notBefore.utcTime||o.validity.notBefore.generalTime;if(!h){throw new Error("Cannot get 'notBefore' value")}this.notBefore=h;const u=o.validity.notAfter.utcTime||o.validity.notAfter.generalTime;if(!u){throw new Error("Cannot get 'notAfter' value")}this.notAfter=u;this.validity=a(this.notBefore,this.notAfter)}parseExtensions(){const{tbsCertificate:t}=this.asn;if(t.extensions){this.extensions=t.extensions.map((t=>new E(o.serialize(t))))}}getPublicKeyInfo(t){const{subjectPublicKey:s,algorithm:i}=t;let e;if(i.algorithm===h&&i.parameters){e=o.parse(i.parameters,u)}if(i.algorithm===c){e=o.parse(s,f)}if(i.algorithm===l){e=o.parse(s,m);e=e.map((t=>this.getPublicKeyInfo(t)))}const r=o.serialize(t);return{params:e,value:r,algorithm:i.algorithm}}get publicKey(){return this.getPublicKeyInfo(this.asn.tbsCertificate.subjectPublicKeyInfo)}get signature(){const{signatureValue:t,signatureAlgorithm:s}=this.asn;let i;if(s.algorithm===g){const e=o.parse(t,p);const r=o.parse(s.parameters,b);i=r.map(((t,s)=>Object.assign(Object.assign({},t),{value:e[s]})))}return{params:i,value:t,algorithm:s.algorithm}}async getThumbprint(t="SHA-1"){try{const s=await w(t,this.raw);if(s){this.thumbprints[t]=r.Convert.ToHex(s)}}catch(t){console.error("Error thumbprint get:",t)}}get commonName(){if(!this.subject){return""}for(let t=0;t<this.subject.length;t+=1){const s=this.subject[t];if(s.shortName==="CN"||s.shortName==="E"||s.shortName==="O"){return s.value}}return""}get issuerCommonName(){if(!this.issuer){return""}for(let t=0;t<this.issuer.length;t+=1){const s=this.issuer[t];if(s.shortName==="CN"||s.shortName==="E"||s.shortName==="O"){return s.value}}return""}get isRoot(){return JSON.stringify(this.issuer)===JSON.stringify(this.subject)}subjectToString(){if(!this.subject){return""}return this.subject.map((t=>`${t.shortName}=${t.value}`)).join(", ")}issuerToString(){if(!this.issuer){return""}return this.issuer.map((t=>`${t.shortName}=${t.value}`)).join(", ")}toString(t="pem"){switch(t){case"pem":return e.encode(this.raw,this.tag);case"base64url":return r.Convert.ToBase64Url(this.raw);default:return r.Convert.ToBase64(this.raw)}}downloadAsPEM(t){C.cert.asPEM(this.toString("pem"),t||this.commonName)}downloadAsDER(t){C.cert.asDER(this.raw,t||this.commonName)}}export{j as X};
|
|
12
|
+
//# sourceMappingURL=p-CH0mNFdH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-B4vvBwd6.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":["Convert"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CH0mNFdH.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":["Convert"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var __extends=this&&this.__extends||function(){var t=function(n,r){t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r))t[r]=n[r]};return t(n,r)};return function(n,r){if(typeof r!=="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(n,r);function e(){this.constructor=n}n.prototype=r===null?Object.create(r):(e.prototype=r.prototype,new e)}}();var __awaiter=this&&this.__awaiter||function(t,n,r,e){function i(t){return t instanceof r?t:new r((function(n){n(t)}))}return new(r||(r=Promise))((function(r,u){function o(t){try{
|
|
1
|
+
var __extends=this&&this.__extends||function(){var t=function(n,r){t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r))t[r]=n[r]};return t(n,r)};return function(n,r){if(typeof r!=="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(n,r);function e(){this.constructor=n}n.prototype=r===null?Object.create(r):(e.prototype=r.prototype,new e)}}();var __awaiter=this&&this.__awaiter||function(t,n,r,e){function i(t){return t instanceof r?t:new r((function(n){n(t)}))}return new(r||(r=Promise))((function(r,u){function o(t){try{f(e.next(t))}catch(t){u(t)}}function a(t){try{f(e["throw"](t))}catch(t){u(t)}}function f(t){t.done?r(t.value):i(t.value).then(o,a)}f((e=e.apply(t,n||[])).next())}))};var __generator=this&&this.__generator||function(t,n){var r={label:0,sent:function(){if(u[0]&1)throw u[1];return u[1]},trys:[],ops:[]},e,i,u,o=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return o.next=a(0),o["throw"]=a(1),o["return"]=a(2),typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(t){return function(n){return f([t,n])}}function f(a){if(e)throw new TypeError("Generator is already executing.");while(o&&(o=0,a[0]&&(r=0)),r)try{if(e=1,i&&(u=a[0]&2?i["return"]:a[0]?i["throw"]||((u=i["return"])&&u.call(i),0):i.next)&&!(u=u.call(i,a[1])).done)return u;if(i=0,u)a=[a[0]&2,u.value];switch(a[0]){case 0:case 1:u=a;break;case 4:r.label++;return{value:a[1],done:false};case 5:r.label++;i=a[1];a=[0];continue;case 7:a=r.ops.pop();r.trys.pop();continue;default:if(!(u=r.trys,u=u.length>0&&u[u.length-1])&&(a[0]===6||a[0]===2)){r=0;continue}if(a[0]===3&&(!u||a[1]>u[0]&&a[1]<u[3])){r.label=a[1];break}if(a[0]===6&&r.label<u[1]){r.label=u[1];u=a;break}if(u&&r.label<u[2]){r.label=u[2];r.ops.push(a);break}if(u[2])r.ops.pop();r.trys.pop();continue}a=n.call(t,r)}catch(t){a=[6,t];i=0}finally{e=u=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};
|
|
2
2
|
/*!
|
|
3
3
|
* © Peculiar Ventures https://peculiarventures.com/ - MIT License
|
|
4
|
-
*/System.register(["./p-
|
|
4
|
+
*/System.register(["./p-BKLsbktK.system.js","./p-itJt0J5g.system.js"],(function(t){"use strict";var n,r,e,i,u,o,a,f,c,s,h,l,v,b,m,w,g,y,p,O;return{setters:[function(t){n=t.A;r=t.c;e=t.C;i=t.P;u=t.b;o=t.N;a=t.a;f=t.e;c=t.i;s=t.E;h=t.f;l=t.R;v=t.g;b=t.h;m=t.j;w=t.k;g=t.l;y=t.m;p=t.D},function(t){O=t.E}],execute:function(){
|
|
5
5
|
/**
|
|
6
6
|
* @license
|
|
7
7
|
* Copyright (c) Peculiar Ventures, LLC.
|
|
@@ -9,5 +9,5 @@ var __extends=this&&this.__extends||function(){var t=function(n,r){t=Object.setP
|
|
|
9
9
|
* This source code is licensed under the MIT license found in the
|
|
10
10
|
* LICENSE file in the root directory of this source tree.
|
|
11
11
|
*/
|
|
12
|
-
var _=function(t){__extends(n,t);function n(n){var
|
|
13
|
-
//# sourceMappingURL=p-
|
|
12
|
+
var _=function(t){__extends(n,t);function n(n){var f=t.call(this,r(n),e)||this;f.thumbprints={};f.type="X.509 Certificate";f.tag=i.CertificateTag;var c=f.asn.tbsCertificate;f.serialNumber=u.Convert.ToHex(c.serialNumber);f.subject=new o(c.subject).toJSON();f.issuer=new o(c.issuer).toJSON();f.version=c.version+1;var s=c.validity.notBefore.utcTime||c.validity.notBefore.generalTime;if(!s){throw new Error("Cannot get 'notBefore' value")}f.notBefore=s;var h=c.validity.notAfter.utcTime||c.validity.notAfter.generalTime;if(!h){throw new Error("Cannot get 'notAfter' value")}f.notAfter=h;f.validity=a(f.notBefore,f.notAfter);return f}n.prototype.parseExtensions=function(){var t=this.asn.tbsCertificate;if(t.extensions){this.extensions=t.extensions.map((function(t){return new O(f.serialize(t))}))}};n.prototype.getPublicKeyInfo=function(t){var n=this;var r=t.subjectPublicKey,e=t.algorithm;var i;if(e.algorithm===c&&e.parameters){i=f.parse(e.parameters,s)}if(e.algorithm===h){i=f.parse(r,l)}if(e.algorithm===v){i=f.parse(r,b);i=i.map((function(t){return n.getPublicKeyInfo(t)}))}var u=f.serialize(t);return{params:i,value:u,algorithm:e.algorithm}};Object.defineProperty(n.prototype,"publicKey",{get:function(){return this.getPublicKeyInfo(this.asn.tbsCertificate.subjectPublicKeyInfo)},enumerable:false,configurable:true});Object.defineProperty(n.prototype,"signature",{get:function(){var t=this.asn,n=t.signatureValue,r=t.signatureAlgorithm;var e;if(r.algorithm===m){var i=f.parse(n,w);var u=f.parse(r.parameters,g);e=u.map((function(t,n){return Object.assign(Object.assign({},t),{value:i[n]})}))}return{params:e,value:n,algorithm:r.algorithm}},enumerable:false,configurable:true});n.prototype.getThumbprint=function(){return __awaiter(this,arguments,void 0,(function(t){var n,r;if(t===void 0){t="SHA-1"}return __generator(this,(function(e){switch(e.label){case 0:e.trys.push([0,2,,3]);return[4,y(t,this.raw)];case 1:n=e.sent();if(n){this.thumbprints[t]=u.Convert.ToHex(n)}return[3,3];case 2:r=e.sent();console.error("Error thumbprint get:",r);return[3,3];case 3:return[2]}}))}))};Object.defineProperty(n.prototype,"commonName",{get:function(){if(!this.subject){return""}for(var t=0;t<this.subject.length;t+=1){var n=this.subject[t];if(n.shortName==="CN"||n.shortName==="E"||n.shortName==="O"){return n.value}}return""},enumerable:false,configurable:true});Object.defineProperty(n.prototype,"issuerCommonName",{get:function(){if(!this.issuer){return""}for(var t=0;t<this.issuer.length;t+=1){var n=this.issuer[t];if(n.shortName==="CN"||n.shortName==="E"||n.shortName==="O"){return n.value}}return""},enumerable:false,configurable:true});Object.defineProperty(n.prototype,"isRoot",{get:function(){return JSON.stringify(this.issuer)===JSON.stringify(this.subject)},enumerable:false,configurable:true});n.prototype.subjectToString=function(){if(!this.subject){return""}return this.subject.map((function(t){return"".concat(t.shortName,"=").concat(t.value)})).join(", ")};n.prototype.issuerToString=function(){if(!this.issuer){return""}return this.issuer.map((function(t){return"".concat(t.shortName,"=").concat(t.value)})).join(", ")};n.prototype.toString=function(t){if(t===void 0){t="pem"}switch(t){case"pem":return i.encode(this.raw,this.tag);case"base64url":return u.Convert.ToBase64Url(this.raw);default:return u.Convert.ToBase64(this.raw)}};n.prototype.downloadAsPEM=function(t){p.cert.asPEM(this.toString("pem"),t||this.commonName)};n.prototype.downloadAsDER=function(t){p.cert.asDER(this.raw,t||this.commonName)};return n}(n);t("X",_)}}}));
|
|
13
|
+
//# sourceMappingURL=p-CTj-Drej.system.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-Bfl7RVFY.system.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":["Convert"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CTj-Drej.system.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":["Convert"],"mappings":"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"}
|