@peculiar/certificates-viewer 4.4.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/actions.js.map +1 -1
- package/components/arrow_top.js.map +1 -1
- package/components/attribute-certificate-viewer.js +2 -4
- package/components/attribute-certificate-viewer.js.map +1 -1
- package/components/attribute.js.map +1 -1
- package/components/button-menu.js +1 -3
- package/components/button-menu.js.map +1 -1
- package/components/button.js +2 -2
- package/components/button.js.map +1 -1
- package/components/certificate-chain-viewer.js +0 -1
- package/components/certificate-chain-viewer.js.map +1 -1
- package/components/certificate-viewer.js +3 -8
- package/components/certificate-viewer.js.map +1 -1
- package/components/circular-progress.js +2 -6
- package/components/circular-progress.js.map +1 -1
- package/components/crl-viewer.js +0 -2
- package/components/crl-viewer.js.map +1 -1
- package/components/cross.js.map +1 -1
- package/components/csr-viewer.js +0 -4
- package/components/csr-viewer.js.map +1 -1
- package/components/download.js +49 -23
- package/components/download.js.map +1 -1
- package/components/highlight-words.js +1 -1
- package/components/highlight-words.js.map +1 -1
- package/components/index2.js +2 -1
- package/components/index2.js.map +1 -1
- package/components/issuer_name.js +3 -1
- package/components/issuer_name.js.map +1 -1
- package/components/miscellaneous.js +15 -16
- package/components/miscellaneous.js.map +1 -1
- package/components/peculiar-certificate-decoder.js +7 -8
- package/components/peculiar-certificate-decoder.js.map +1 -1
- package/components/peculiar-certificates-viewer.js +44 -43
- package/components/peculiar-certificates-viewer.js.map +1 -1
- package/components/peculiar-text-hider.js +1 -1
- package/components/peculiar-text-hider.js.map +1 -1
- package/components/pkcs10_certificate_request.js.map +1 -1
- package/components/read_file.js.map +1 -1
- package/components/subject_name.js.map +1 -1
- package/dist/cjs/actions-Dl4HXXlI.js.map +1 -1
- package/dist/cjs/arrow_top-DBMPHVlB.js.map +1 -1
- package/dist/cjs/{button-C5jDF-CZ.js → button-B0CduHSE.js} +4 -4
- package/dist/cjs/button-B0CduHSE.js.map +1 -0
- package/dist/cjs/{certification_request-Bipg1Az7.js → certification_request-DaJSDP3R.js} +50 -24
- package/dist/cjs/certification_request-DaJSDP3R.js.map +1 -0
- package/dist/cjs/cross-pi7K0cHC.js.map +1 -1
- package/dist/cjs/download-D9skkVoT.js.map +1 -1
- package/dist/cjs/index.cjs.js +4 -4
- package/dist/cjs/{link-CwLq-Nge.js → link-kgbgxxVh.js} +4 -4
- package/dist/cjs/link-kgbgxxVh.js.map +1 -0
- package/dist/cjs/{miscellaneous-C0sOAo-1.js → miscellaneous-Ce9aGjKB.js} +23 -22
- package/dist/cjs/miscellaneous-Ce9aGjKB.js.map +1 -0
- package/dist/cjs/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js +8 -16
- package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js +5 -11
- package/dist/cjs/peculiar-button-menu_3.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +12 -13
- package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-decoder.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +5 -7
- package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificate-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +47 -46
- package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-certificates-viewer.entry.cjs.js.map +1 -1
- package/dist/cjs/peculiar-text-hider.cjs.entry.js +2 -2
- package/dist/cjs/peculiar-text-hider.cjs.entry.js.map +1 -1
- package/dist/cjs/peculiar-text-hider.entry.cjs.js.map +1 -1
- package/dist/cjs/{pkcs10_certificate_request-BDz0P_px.js → pkcs10_certificate_request-D13Ssi7Z.js} +3 -3
- package/dist/cjs/pkcs10_certificate_request-D13Ssi7Z.js.map +1 -0
- package/dist/cjs/read_file-DWtcn3zU.js.map +1 -1
- package/dist/cjs/{x509_certificate-DRvXOszL.js → x509_certificate-h5GZArG6.js} +6 -9
- package/dist/cjs/x509_certificate-h5GZArG6.js.map +1 -0
- package/dist/cjs/{x509_crl-DVGVym_S.js → x509_crl-CDPt6P1z.js} +6 -6
- package/dist/cjs/x509_crl-CDPt6P1z.js.map +1 -0
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js +4 -6
- package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js.map +1 -1
- package/dist/collection/components/button/button.js +3 -3
- package/dist/collection/components/button/button.js.map +1 -1
- package/dist/collection/components/button/index.js.map +1 -1
- package/dist/collection/components/button-menu/button-menu.js +5 -7
- package/dist/collection/components/button-menu/button-menu.js.map +1 -1
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js +1 -2
- package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js.map +1 -1
- package/dist/collection/components/certificate-decoder/certificate-decoder.js +4 -1
- package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/activity_description_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/as_string_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/basic_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/challenge_password_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/index.js +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/index.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/insurance_value_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/name_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/name_part.js +1 -0
- package/dist/collection/components/certificate-details-parts/attributes/name_part.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/type_relationship_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/unstructured_name_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/valuation_ranking_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/attributes/web_gdpr_attribute.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/basic_information.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/archive_rev_info_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/as_string_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/authority_key_identifier_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/authority_key_identifier_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/basic_constraints_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/basic_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/biometric_syntax_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/ca_version_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/cabforganization_identifier_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/cabforganization_identifier_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_policies_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_policies_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_template_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/certificate_transparency_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/crl_distribution_points_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/crl_number_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/crl_reason_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/enroll_cert_type_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/entrust_version_info_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/extended_key_usage_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/general_name_part.js +3 -3
- package/dist/collection/components/certificate-details-parts/extensions/general_name_part.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/index.js +2 -2
- package/dist/collection/components/certificate-details-parts/extensions/index.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/info_access_syntax_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/issuing_distribution_point_extension.js +0 -1
- package/dist/collection/components/certificate-details-parts/extensions/issuing_distribution_point_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/key_description_extension.js +2 -2
- package/dist/collection/components/certificate-details-parts/extensions/key_description_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/key_usage_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/lei_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/lei_role_extennsion.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/logotype_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/name_constraints_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/netscape_cert_type_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/netscape_comment_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/policy_constraints_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/policy_mappings_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/private_key_usage_period_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/qc_statements_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/subject_alternative_name_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/subject_directory_attributes_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/subject_key_identifier_extension.js +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/subject_key_identifier_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/timestamp_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/extensions/tn_auth_list_extension.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/holder.js +1 -1
- package/dist/collection/components/certificate-details-parts/holder.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/issuer.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/issuer_name.js +3 -1
- package/dist/collection/components/certificate-details-parts/issuer_name.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/miscellaneous.js +2 -2
- package/dist/collection/components/certificate-details-parts/miscellaneous.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/public_key.js +1 -1
- package/dist/collection/components/certificate-details-parts/public_key.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/revoked_certificates.js +3 -3
- package/dist/collection/components/certificate-details-parts/revoked_certificates.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/row.js +3 -3
- package/dist/collection/components/certificate-details-parts/row.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/signature.js +1 -1
- package/dist/collection/components/certificate-details-parts/signature.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/subject_name.js.map +1 -1
- package/dist/collection/components/certificate-details-parts/thumbprints.js.map +1 -1
- package/dist/collection/components/certificate-summary/certificate-summary.js.map +1 -1
- package/dist/collection/components/certificate-viewer/certificate-viewer.js +5 -7
- package/dist/collection/components/certificate-viewer/certificate-viewer.js.map +1 -1
- package/dist/collection/components/certificates-viewer/certificates-viewer.js +44 -43
- package/dist/collection/components/certificates-viewer/certificates-viewer.js.map +1 -1
- package/dist/collection/components/circular-progress/circular-progress.js +2 -6
- package/dist/collection/components/circular-progress/circular-progress.js.map +1 -1
- package/dist/collection/components/crl-viewer/crl-viewer.js +4 -6
- package/dist/collection/components/crl-viewer/crl-viewer.js.map +1 -1
- package/dist/collection/components/csr-viewer/csr-viewer.js +4 -8
- package/dist/collection/components/csr-viewer/csr-viewer.js.map +1 -1
- package/dist/collection/components/highlight-words/highlight-words.js +1 -1
- package/dist/collection/components/highlight-words/highlight-words.js.map +1 -1
- package/dist/collection/components/icons/actions.js.map +1 -1
- package/dist/collection/components/icons/arrow_bottom.js.map +1 -1
- package/dist/collection/components/icons/arrow_top.js.map +1 -1
- package/dist/collection/components/icons/cross.js.map +1 -1
- package/dist/collection/components/icons/details.js.map +1 -1
- package/dist/collection/components/icons/download.js.map +1 -1
- package/dist/collection/components/icons/link.js.map +1 -1
- package/dist/collection/components/link/link.js +1 -1
- package/dist/collection/components/link/link.js.map +1 -1
- package/dist/collection/components/text-hider/text-hider.js +1 -1
- package/dist/collection/components/text-hider/text-hider.js.map +1 -1
- package/dist/collection/components/typography/typography.js.map +1 -1
- package/dist/collection/constants/oids.js +21 -3
- package/dist/collection/constants/oids.js.map +1 -1
- package/dist/collection/crypto/asn_data.js +1 -1
- package/dist/collection/crypto/asn_data.js.map +1 -1
- package/dist/collection/crypto/attribute.js.map +1 -1
- package/dist/collection/crypto/extension.js.map +1 -1
- package/dist/collection/crypto/name.js.map +1 -1
- package/dist/collection/crypto/pem_converter.js +13 -8
- package/dist/collection/crypto/pem_converter.js.map +1 -1
- package/dist/collection/crypto/pkcs10_certificate_request.js.map +1 -1
- package/dist/collection/crypto/provider.js +7 -3
- package/dist/collection/crypto/provider.js.map +1 -1
- package/dist/collection/crypto/utils.js +1 -1
- package/dist/collection/crypto/utils.js.map +1 -1
- package/dist/collection/crypto/x509_attribute_certificate.js +2 -2
- package/dist/collection/crypto/x509_attribute_certificate.js.map +1 -1
- package/dist/collection/crypto/x509_certificate.js +3 -6
- package/dist/collection/crypto/x509_certificate.js.map +1 -1
- package/dist/collection/crypto/x509_certificates.js +3 -7
- package/dist/collection/crypto/x509_certificates.js.map +1 -1
- package/dist/collection/crypto/x509_crl.js.map +1 -1
- package/dist/collection/utils/download.js +1 -0
- package/dist/collection/utils/download.js.map +1 -1
- package/dist/collection/utils/download_from_buffer.js +3 -3
- package/dist/collection/utils/download_from_buffer.js.map +1 -1
- package/dist/collection/utils/l10n.js +1 -3
- package/dist/collection/utils/l10n.js.map +1 -1
- package/dist/collection/utils/read_file.js.map +1 -1
- package/dist/esm/actions-DzoPRObK.js.map +1 -1
- package/dist/esm/arrow_top-CF9pv-tQ.js.map +1 -1
- package/dist/esm/{button-Djn8UI82.js → button-Do0R_8PZ.js} +4 -4
- package/dist/esm/button-Do0R_8PZ.js.map +1 -0
- package/dist/esm/{certification_request-BTbyumBe.js → certification_request-DazysL_f.js} +50 -24
- package/dist/esm/certification_request-DazysL_f.js.map +1 -0
- package/dist/esm/cross-DdCuR1F2.js.map +1 -1
- package/dist/esm/download-Cqfc-Sxf.js.map +1 -1
- package/dist/esm/index.js +4 -4
- package/dist/esm/{link-BfDk078v.js → link-qg3yKAoS.js} +4 -4
- package/dist/esm/link-qg3yKAoS.js.map +1 -0
- package/dist/esm/{miscellaneous-CGtCg3Q9.js → miscellaneous-BJPX0Hs_.js} +23 -22
- package/dist/esm/miscellaneous-BJPX0Hs_.js.map +1 -0
- package/dist/esm/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js +8 -16
- package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -1
- package/dist/esm/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.js.map +1 -1
- package/dist/esm/peculiar-button-menu_3.entry.js +5 -11
- package/dist/esm/peculiar-button-menu_3.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-decoder.entry.js +12 -13
- package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm/peculiar-certificate-viewer.entry.js +5 -7
- package/dist/esm/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-certificates-viewer.entry.js +47 -46
- package/dist/esm/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm/peculiar-text-hider.entry.js +2 -2
- package/dist/esm/peculiar-text-hider.entry.js.map +1 -1
- package/dist/esm/{pkcs10_certificate_request-CrA_WcgY.js → pkcs10_certificate_request-SQcYKma2.js} +3 -3
- package/dist/esm/pkcs10_certificate_request-SQcYKma2.js.map +1 -0
- package/dist/esm/read_file-F2F0McJX.js.map +1 -1
- package/dist/esm/{x509_certificate-DX7sKoAD.js → x509_certificate-Dmgw53TR.js} +6 -9
- package/dist/esm/x509_certificate-Dmgw53TR.js.map +1 -0
- package/dist/esm/{x509_crl-DRjoh8Yp.js → x509_crl-B5TRu79b.js} +6 -6
- package/dist/esm/x509_crl-B5TRu79b.js.map +1 -0
- package/dist/esm-es5/actions-DzoPRObK.js.map +1 -1
- package/dist/esm-es5/arrow_top-CF9pv-tQ.js.map +1 -1
- package/dist/esm-es5/{button-Djn8UI82.js → button-Do0R_8PZ.js} +2 -2
- package/dist/esm-es5/button-Do0R_8PZ.js.map +1 -0
- package/dist/esm-es5/{certification_request-BTbyumBe.js → certification_request-DazysL_f.js} +15 -15
- package/dist/esm-es5/certification_request-DazysL_f.js.map +1 -0
- package/dist/esm-es5/cross-DdCuR1F2.js.map +1 -1
- package/dist/esm-es5/download-Cqfc-Sxf.js.map +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/{link-BfDk078v.js → link-qg3yKAoS.js} +3 -3
- package/dist/esm-es5/link-qg3yKAoS.js.map +1 -0
- package/dist/esm-es5/{miscellaneous-CGtCg3Q9.js → miscellaneous-BJPX0Hs_.js} +3 -3
- package/dist/esm-es5/miscellaneous-BJPX0Hs_.js.map +1 -0
- package/dist/esm-es5/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js +1 -1
- package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js +1 -1
- package/dist/esm-es5/peculiar-button-menu_3.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js +1 -1
- package/dist/esm-es5/peculiar-certificate-decoder.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js +1 -1
- package/dist/esm-es5/peculiar-certificate-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js +2 -2
- package/dist/esm-es5/peculiar-certificates-viewer.entry.js.map +1 -1
- package/dist/esm-es5/peculiar-text-hider.entry.js +1 -1
- package/dist/esm-es5/peculiar-text-hider.entry.js.map +1 -1
- package/dist/esm-es5/{pkcs10_certificate_request-CrA_WcgY.js → pkcs10_certificate_request-SQcYKma2.js} +2 -2
- package/dist/esm-es5/pkcs10_certificate_request-SQcYKma2.js.map +1 -0
- package/dist/esm-es5/read_file-F2F0McJX.js.map +1 -1
- package/dist/esm-es5/{x509_certificate-DX7sKoAD.js → x509_certificate-Dmgw53TR.js} +3 -3
- package/dist/esm-es5/x509_certificate-Dmgw53TR.js.map +1 -0
- package/dist/esm-es5/{x509_crl-DRjoh8Yp.js → x509_crl-B5TRu79b.js} +4 -4
- package/dist/esm-es5/x509_crl-B5TRu79b.js.map +1 -0
- package/dist/peculiar/index.esm.js +1 -1
- package/dist/peculiar/p--Pej0I-A.system.js.map +1 -0
- package/dist/peculiar/{p-CpTwQbPC.js → p-0HZUc9Ix.js} +3 -3
- package/dist/peculiar/p-0HZUc9Ix.js.map +1 -0
- package/dist/peculiar/p-15c2b820.entry.js +5 -0
- package/dist/peculiar/{p-f4490197.entry.js.map → p-15c2b820.entry.js.map} +1 -1
- package/dist/peculiar/{p-ab220e36.system.entry.js → p-16aa5600.system.entry.js} +2 -2
- package/dist/peculiar/p-16aa5600.system.entry.js.map +1 -0
- package/dist/peculiar/{p-e7266b0a.entry.js → p-1cbb0d6b.entry.js} +15 -15
- package/dist/peculiar/p-1cbb0d6b.entry.js.map +1 -0
- package/dist/peculiar/{p-85667993.entry.js → p-218364f2.entry.js} +2 -2
- package/dist/peculiar/p-218364f2.entry.js.map +1 -0
- package/dist/peculiar/{p-Bw_icgVx.js → p-3zhoLQno.js} +4 -4
- package/dist/peculiar/p-3zhoLQno.js.map +1 -0
- package/dist/peculiar/{p-73a75d1e.system.entry.js → p-44648a8e.system.entry.js} +3 -3
- package/dist/peculiar/p-44648a8e.system.entry.js.map +1 -0
- package/dist/peculiar/{p-092074e8.system.entry.js → p-52444a44.system.entry.js} +2 -2
- package/dist/peculiar/p-52444a44.system.entry.js.map +1 -0
- package/dist/peculiar/{p-c2a805b3.entry.js → p-5b843427.entry.js} +3 -3
- package/dist/peculiar/p-5b843427.entry.js.map +1 -0
- package/dist/peculiar/{p-12d2e080.entry.js → p-7b0e7f43.entry.js} +2 -2
- package/dist/peculiar/p-7b0e7f43.entry.js.map +1 -0
- package/dist/peculiar/p-B2YrZuK2.system.js.map +1 -1
- package/dist/peculiar/p-BA8os2l6.system.js.map +1 -0
- package/dist/peculiar/p-BAB4EyrL.system.js.map +1 -0
- package/dist/peculiar/{p-B7TxZGea.system.js → p-BBZwtkNN.system.js} +4 -4
- package/dist/peculiar/p-BBZwtkNN.system.js.map +1 -0
- package/dist/peculiar/p-BBgwMHRZ.system.js.map +1 -1
- package/dist/peculiar/p-BHBizfwo.js.map +1 -1
- package/dist/peculiar/{p-lnQq6VON.system.js → p-BKKflyKt.system.js} +5 -5
- package/dist/peculiar/p-BKKflyKt.system.js.map +1 -0
- package/dist/peculiar/p-BOSH9vjy.system.js.map +1 -1
- package/dist/peculiar/p-BP2bmYR2.system.js.map +1 -1
- package/dist/peculiar/p-BcFnjn1R.system.js.map +1 -0
- package/dist/peculiar/{p-vMACJe_C.system.js → p-BmIps4bV.system.js} +22 -22
- package/dist/peculiar/p-BmIps4bV.system.js.map +1 -0
- package/dist/peculiar/{p-B0CjUC4o.system.js → p-CDh6shXP.system.js} +9 -9
- package/dist/peculiar/p-CDh6shXP.system.js.map +1 -0
- package/dist/peculiar/{p-BisXzAqN.js → p-CEHpBNWe.js} +3 -3
- package/dist/peculiar/p-CEHpBNWe.js.map +1 -0
- package/dist/peculiar/{p-Ct0zEUB_.js → p-CJro0Exb.js} +12 -12
- package/dist/peculiar/p-CJro0Exb.js.map +1 -0
- package/dist/peculiar/p-CWs-Ocvt.system.js.map +1 -0
- package/dist/peculiar/p-CeKqQ13Z.js.map +1 -1
- package/dist/peculiar/{p-BCATfe_H.js → p-CkwiD_ia.js} +2 -2
- package/dist/peculiar/p-CkwiD_ia.js.map +1 -0
- package/dist/peculiar/{p-BRhx1gbw.system.js → p-Cm-ylIxb.system.js} +2 -2
- package/dist/peculiar/p-Cm-ylIxb.system.js.map +1 -0
- package/dist/peculiar/p-D2QB-8Q6.system.js.map +1 -1
- package/dist/peculiar/p-D5BWI7FK.system.js +1 -1
- package/dist/peculiar/p-DJRm54BZ.system.js.map +1 -0
- package/dist/peculiar/{p-DxdVL_Kj.system.js → p-DRoyzOgk.system.js} +3 -3
- package/dist/peculiar/p-DRoyzOgk.system.js.map +1 -0
- package/dist/peculiar/{p-BTbyumBe.js → p-DazysL_f.js} +9 -9
- package/dist/peculiar/p-DazysL_f.js.map +1 -0
- package/dist/peculiar/p-DhdG07f8.js.map +1 -1
- package/dist/peculiar/p-DkAhB3Vy.js.map +1 -1
- package/dist/peculiar/{p-4IvcYmU7.js → p-DzItK48Y.js} +4 -4
- package/dist/peculiar/p-DzItK48Y.js.map +1 -0
- package/dist/peculiar/p-F2F0McJX.js.map +1 -1
- package/dist/peculiar/{p-wgYkE8CV.system.js → p-YHrZ3f_s.system.js} +2 -2
- package/dist/peculiar/p-YHrZ3f_s.system.js.map +1 -0
- package/dist/peculiar/p-a3c0f753.system.entry.js +5 -0
- package/dist/peculiar/{p-cae95996.system.entry.js.map → p-a3c0f753.system.entry.js.map} +1 -1
- package/dist/peculiar/{p-80fc5538.entry.js → p-ab6a8a44.entry.js} +2 -2
- package/dist/peculiar/p-ab6a8a44.entry.js.map +1 -0
- package/dist/peculiar/{p-1af57833.system.entry.js → p-d16ddef8.system.entry.js} +2 -2
- package/dist/peculiar/p-d16ddef8.system.entry.js.map +1 -0
- package/dist/peculiar/{p-1b3855ec.system.entry.js → p-d9013293.system.entry.js} +16 -16
- package/dist/peculiar/p-d9013293.system.entry.js.map +1 -0
- package/dist/peculiar/{p-B859JpGw.system.js → p-wYK0iVYg.system.js} +2 -2
- package/dist/peculiar/p-wYK0iVYg.system.js.map +1 -0
- package/dist/peculiar/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.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-certificates-viewer.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar-text-hider.entry.esm.js.map +1 -1
- package/dist/peculiar/peculiar.esm.js +1 -1
- package/dist/types/components/attribute-certificate-viewer/attribute-certificate-viewer.d.ts +3 -3
- package/dist/types/components/button/button.d.ts +2 -2
- package/dist/types/components/button/index.d.ts +1 -1
- package/dist/types/components/button-menu/button-menu.d.ts +5 -5
- package/dist/types/components/certificate-details-parts/miscellaneous.d.ts +2 -2
- package/dist/types/components/certificate-summary/certificate-summary.d.ts +2 -2
- package/dist/types/components/certificate-viewer/certificate-viewer.d.ts +3 -3
- package/dist/types/components/certificates-viewer/certificates-viewer.d.ts +3 -2
- package/dist/types/components/crl-viewer/crl-viewer.d.ts +3 -3
- package/dist/types/components/csr-viewer/csr-viewer.d.ts +3 -3
- package/dist/types/components/icons/actions.d.ts +2 -2
- package/dist/types/components/icons/arrow_bottom.d.ts +2 -2
- package/dist/types/components/icons/arrow_top.d.ts +2 -2
- package/dist/types/components/icons/cross.d.ts +2 -2
- package/dist/types/components/icons/details.d.ts +2 -2
- package/dist/types/components/icons/download.d.ts +2 -2
- package/dist/types/components/icons/link.d.ts +2 -2
- package/dist/types/components/link/link.d.ts +4 -4
- package/dist/types/components/typography/typography.d.ts +5 -5
- package/dist/types/components.d.ts +20 -20
- package/dist/types/constants/oids.d.ts +20 -3
- package/dist/types/crypto/asn_data.d.ts +1 -3
- package/dist/types/crypto/pem_converter.d.ts +7 -19
- package/dist/types/crypto/provider.d.ts +1 -6
- package/dist/types/interface.d.ts +3 -3
- package/dist/types/utils/l10n.d.ts +6 -6
- package/dist/types/utils/read_file.d.ts +7 -7
- package/hydrate/index.js +132 -124
- package/hydrate/index.mjs +132 -124
- package/package.json +2 -2
- package/dist/cjs/button-C5jDF-CZ.js.map +0 -1
- package/dist/cjs/certification_request-Bipg1Az7.js.map +0 -1
- package/dist/cjs/link-CwLq-Nge.js.map +0 -1
- package/dist/cjs/miscellaneous-C0sOAo-1.js.map +0 -1
- package/dist/cjs/pkcs10_certificate_request-BDz0P_px.js.map +0 -1
- package/dist/cjs/x509_certificate-DRvXOszL.js.map +0 -1
- package/dist/cjs/x509_crl-DVGVym_S.js.map +0 -1
- package/dist/esm/button-Djn8UI82.js.map +0 -1
- package/dist/esm/certification_request-BTbyumBe.js.map +0 -1
- package/dist/esm/link-BfDk078v.js.map +0 -1
- package/dist/esm/miscellaneous-CGtCg3Q9.js.map +0 -1
- package/dist/esm/pkcs10_certificate_request-CrA_WcgY.js.map +0 -1
- package/dist/esm/x509_certificate-DX7sKoAD.js.map +0 -1
- package/dist/esm/x509_crl-DRjoh8Yp.js.map +0 -1
- package/dist/esm-es5/button-Djn8UI82.js.map +0 -1
- package/dist/esm-es5/certification_request-BTbyumBe.js.map +0 -1
- package/dist/esm-es5/link-BfDk078v.js.map +0 -1
- package/dist/esm-es5/miscellaneous-CGtCg3Q9.js.map +0 -1
- package/dist/esm-es5/pkcs10_certificate_request-CrA_WcgY.js.map +0 -1
- package/dist/esm-es5/x509_certificate-DX7sKoAD.js.map +0 -1
- package/dist/esm-es5/x509_crl-DRjoh8Yp.js.map +0 -1
- package/dist/peculiar/p-092074e8.system.entry.js.map +0 -1
- package/dist/peculiar/p-12d2e080.entry.js.map +0 -1
- package/dist/peculiar/p-1af57833.system.entry.js.map +0 -1
- package/dist/peculiar/p-1b3855ec.system.entry.js.map +0 -1
- package/dist/peculiar/p-4IvcYmU7.js.map +0 -1
- package/dist/peculiar/p-73a75d1e.system.entry.js.map +0 -1
- package/dist/peculiar/p-7Nmqck4T.system.js.map +0 -1
- package/dist/peculiar/p-80fc5538.entry.js.map +0 -1
- package/dist/peculiar/p-85667993.entry.js.map +0 -1
- package/dist/peculiar/p-B0CjUC4o.system.js.map +0 -1
- package/dist/peculiar/p-B7TxZGea.system.js.map +0 -1
- package/dist/peculiar/p-B859JpGw.system.js.map +0 -1
- package/dist/peculiar/p-BCATfe_H.js.map +0 -1
- package/dist/peculiar/p-BRhx1gbw.system.js.map +0 -1
- package/dist/peculiar/p-BTbyumBe.js.map +0 -1
- package/dist/peculiar/p-BX9qW3ww.system.js.map +0 -1
- package/dist/peculiar/p-BbPo3hge.system.js.map +0 -1
- package/dist/peculiar/p-BisXzAqN.js.map +0 -1
- package/dist/peculiar/p-Bw_icgVx.js.map +0 -1
- package/dist/peculiar/p-C_7Koml8.system.js.map +0 -1
- package/dist/peculiar/p-CpTwQbPC.js.map +0 -1
- package/dist/peculiar/p-Ct0zEUB_.js.map +0 -1
- package/dist/peculiar/p-DxdVL_Kj.system.js.map +0 -1
- package/dist/peculiar/p-FVz6FuoZ.system.js.map +0 -1
- package/dist/peculiar/p-RW7UbzcZ.system.js.map +0 -1
- package/dist/peculiar/p-ab220e36.system.entry.js.map +0 -1
- package/dist/peculiar/p-c2a805b3.entry.js.map +0 -1
- package/dist/peculiar/p-cae95996.system.entry.js +0 -5
- package/dist/peculiar/p-e7266b0a.entry.js.map +0 -1
- package/dist/peculiar/p-f4490197.entry.js +0 -5
- package/dist/peculiar/p-lnQq6VON.system.js.map +0 -1
- package/dist/peculiar/p-vMACJe_C.system.js.map +0 -1
- package/dist/peculiar/p-wgYkE8CV.system.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"actions.js","mappings":";;;;;AAAA;;;;;;AAMG;AAKU,MAAA,WAAW,
|
|
1
|
+
{"file":"actions.js","mappings":";;;;;AAAA;;;;;;AAMG;AAKU,MAAA,WAAW,GAA4C,CAAC,KAAK,KAAI;AAC5E,IAAA,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,GAAG,KAAK;AAEnC,IAAA,QACE,CACE,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,IAAI,EAAC,MAAM,EAAA;AAEX,QAAA,CAAA,CAAA,MAAA,EAAA,EACE,IAAI,EAAE,CAAkB,eAAA,EAAA,KAAK,CAAG,CAAA,CAAA,EAChC,CAAC,EAAC,2GAA2G,EAAA,CAC7G,CACE;AAEV;;;;","names":[],"sources":["src/components/icons/actions.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 { FunctionalComponent, h } from '@stencil/core';\nimport type { TColor } from '../../interface';\n\nexport const ActionsIcon: FunctionalComponent<{ color?: TColor }> = (props) => {\n const { color = 'gray-10' } = props;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"31\"\n fill=\"none\"\n >\n <path\n fill={`var(--pv-color-${color})`}\n d=\"M15 13.5a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm-7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm14 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z\"\n />\n </svg>\n );\n};\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"arrow_top.js","mappings":";;;;;AAAA;;;;;;AAMG;AAKU,MAAA,eAAe,
|
|
1
|
+
{"file":"arrow_top.js","mappings":";;;;;AAAA;;;;;;AAMG;AAKU,MAAA,eAAe,GAA4C,CAAC,KAAK,KAAI;AAChF,IAAA,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,GAAG,KAAK;AAEnC,IAAA,QACE,CACE,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,IAAI,EAAC,MAAM,EAAA;AAEX,QAAA,CAAA,CAAA,MAAA,EAAA,EACE,MAAM,EAAE,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,CAAG,oBAEnB,OAAO,EAAA,cAAA,EACT,KAAK,EAClB,CAAC,EAAC,0DAA0D,EAC5D,CAAA,CACE;AAEV;;AC9BA;;;;;;AAMG;AAKU,MAAA,YAAY,GAA4C,CAAC,KAAK,KAAI;AAC7E,IAAA,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,GAAG,KAAK;AAEnC,IAAA,QACE,CACE,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,IAAI,EAAC,MAAM,EAAA;AAEX,QAAA,CAAA,CAAA,MAAA,EAAA,EACE,MAAM,EAAE,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,CAAG,oBAEnB,OAAO,EAAA,cAAA,EACT,KAAK,EAClB,CAAC,EAAC,wDAAwD,EAC1D,CAAA,CACE;AAEV;;;;","names":[],"sources":["src/components/icons/arrow_bottom.tsx","src/components/icons/arrow_top.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 { FunctionalComponent, h } from '@stencil/core';\nimport type { TColor } from '../../interface';\n\nexport const ArrowBottomIcon: FunctionalComponent<{ color?: TColor }> = (props) => {\n const { color = 'gray-10' } = props;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"none\"\n >\n <path\n stroke={`var(--pv-color-${color})`}\n // eslint-disable-next-line react/no-unknown-property\n stroke-linecap=\"round\"\n stroke-width=\"1.5\"\n d=\"m19.222 12.778-3.851 4.279a.2.2 0 0 1-.297 0l-3.852-4.28\"\n />\n </svg>\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 { FunctionalComponent, h } from '@stencil/core';\nimport type { TColor } from '../../interface';\n\nexport const ArrowTopIcon: FunctionalComponent<{ color?: TColor }> = (props) => {\n const { color = 'gray-10' } = props;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"none\"\n >\n <path\n stroke={`var(--pv-color-${color})`}\n // eslint-disable-next-line react/no-unknown-property\n stroke-linecap=\"round\"\n stroke-width=\"1.5\"\n d=\"m11.222 17.722 3.852-4.28a.2.2 0 0 1 .297 0l3.851 4.28\"\n />\n </svg>\n );\n};\n"],"version":3}
|
|
@@ -27,12 +27,12 @@ class X509AttributeCertificate extends AsnData {
|
|
|
27
27
|
this.version = acinfo.version;
|
|
28
28
|
const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;
|
|
29
29
|
if (!notBefore) {
|
|
30
|
-
throw new Error(
|
|
30
|
+
throw new Error('Cannot get \'notBefore\' value');
|
|
31
31
|
}
|
|
32
32
|
this.notBefore = notBefore;
|
|
33
33
|
const notAfter = acinfo.attrCertValidityPeriod.notAfterTime;
|
|
34
34
|
if (!notAfter) {
|
|
35
|
-
throw new Error(
|
|
35
|
+
throw new Error('Cannot get \'notAfter\' value');
|
|
36
36
|
}
|
|
37
37
|
this.notAfter = notAfter;
|
|
38
38
|
this.validity = dateDiff(this.notBefore, this.notAfter);
|
|
@@ -233,11 +233,9 @@ const AttributeCertificateViewer = /*@__PURE__*/ proxyCustomElement(class Attrib
|
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
|
-
// eslint-disable-next-line class-methods-use-this
|
|
237
236
|
renderErrorState() {
|
|
238
237
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There was an error decoding this attribute certificate.")));
|
|
239
238
|
}
|
|
240
|
-
// eslint-disable-next-line class-methods-use-this
|
|
241
239
|
renderEmptyState() {
|
|
242
240
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There is no attribute certificate available.")));
|
|
243
241
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"attribute-certificate-viewer.js","mappings":";;;;;;;;;;AAAA;;;;;;AAMG;AAuBG,MAAO,wBAAyB,SAAQ,OAA6B,CAAA;AAyBzE,IAAA,WAAA,CAAY,GAAW,EAAA;;QACrB,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;QAXnD,IAAW,CAAA,WAAA,GAA2B,EAAE;QAM/B,IAAI,CAAA,IAAA,GAAG,6BAA6B;AAEpC,QAAA,IAAA,CAAA,GAAG,GAAG,YAAY,CAAC,uBAAuB;AAKxD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG;QAE3B,IAAI,CAAC,YAAY,GAAGA,oBAAO,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAE7B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,aAAa;QAE7D,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;;AAGjD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,sBAAsB,CAAC,YAAY;QAE3D,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;;AAGhD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAI,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,UAAU,CAAA;AACtE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;;AAG7B,IAAA,IAAW,SAAS,GAAA;QAClB,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,GAAG;QAEvD,OAAO;AACL,YAAA,KAAK,EAAE,cAAc;YACrB,SAAS,EAAE,kBAAkB,CAAC,SAAS;SACxC;;IAGI,eAAe,GAAA;AACpB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG;AAE3B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACtB,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;IAIlD,eAAe,GAAA;AACpB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG;AAE3B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACtB,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;AAIlD,IAAA,MAAM,aAAa,CACxB,SAAA,GAAoB,OAAO,EAAA;AAE3B,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC;YAEtE,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAGA,oBAAO,CAAC,KAAK,CAAC,UAAU,CAAC;;;QAEzD,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;;;AAIjD,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,CAAA,sBAAA,EAAyB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;;IAGtD,QAAQ,CAAC,SAAyC,KAAK,EAAA;QAC5D,QAAQ,MAAM;AACZ,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AAChD,YAAA,KAAK,WAAW;gBACd,OAAOA,oBAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACtC,YAAA;gBACE,OAAOA,oBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;;AAIhC,IAAA,aAAa,CAAC,IAAa,EAAA;AAChC,QAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB;;AAGI,IAAA,aAAa,CAAC,IAAa,EAAA;AAChC,QAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CACrB,IAAI,CAAC,GAAG,EACR,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB;;AAEJ;;ACvJD;;;;;;AAMG;AAcI,MAAM,MAAM,GAAsC,CAAC,KAAK,KAAI;AACjE,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;IAExB,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,MAAM;IAEtD,OAAO;QACL,CAAC,CAAA,QAAQ,EACP,EAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC/B,CAAA;AACF,QAAA,iBAAiB,KAAK;AACpB,YAAA,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAChC,CAAC,CAAA,eAAe,IACd,WAAW,EAAE,IAAI,EACjB,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,EAAE,MAAM,EAAE,EAAA,CAC1B,CACH,CAAC;AACF,YAAA,CAAA,CAAA,IAAA,EAAA,IAAA;gBACE,CAAM,CAAA,IAAA,EAAA,IAAA,CAAA;AACN,gBAAA,CAAA,CAAA,IAAA,EAAA,IAAA,CAAM,CACH;YACL,CAAC,CAAA,QAAQ,IACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EACpC,KAAK,EAAEA,oBAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAC9C,SAAS,EACT,IAAA,EAAA,CAAA;AACF,YAAA,CAAA,CAAA,IAAA,EAAA,IAAA;gBACE,CAAM,CAAA,IAAA,EAAA,IAAA,CAAA;AACN,gBAAA,CAAA,CAAA,IAAA,EAAA,IAAA,CAAM,CACH;SACN,CAAC;AACF,QAAA,gBAAgB,KAAK;AACnB,YAAA,CAAA,CAAC,QAAQ,EAAA,EACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAClC,KAAK,EAAC,EAAE,EACR,CAAA;AACF,YAAA,CAAA,CAAC,aAAa,EAAA,IAAA;gBACZ,CAAC,CAAA,QAAQ,IACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EACjC,KAAK,EAAE,cAAc,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC,EACjE,CAAA;gBACF,CAAC,CAAA,QAAQ,IACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAC7B,KAAK,EAAEA,oBAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,EACnD,SAAS,EACT,IAAA,EAAA,CAAA;AACF,gBAAA,CAAA,CAAC,QAAQ,EACP,EAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,gBAAgB,CAAC,kBAAkB,GAC1C,CACY;SACjB,CAAC;KACH;AACH,CAAC;;AC7ED;;;;;;AAMG;AAaI,MAAM,MAAM,GAAsC,CAAC,KAAK,KAAI;AACjE,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;IAExB,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,IAAI;;IAGb,OAAO;QACL,CAAC,CAAA,QAAQ,EACP,EAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC/B,CAAA;AACF,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MACd,CAAA,CAAC,eAAe,EAAA,EACd,WAAW,EAAE,IAAI,EACjB,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,EAAE,MAAM,EAAE,EAAA,CAC1B,CACH,CAAC;KACH;AACH,CAAC;;ACtCD,MAAM,oBAAoB,GAAG,khSAAkhS;;MCuCliS,0BAA0B,iBAAAC,kBAAA,CAAA,MAAA,0BAAA,SAAA,WAAA,CAAA;AALvC,IAAA,WAAA,GAAA;;;;AA0DE;;;;;;AAMG;AACuB,QAAA,IAAsB,CAAA,sBAAA,GAAY,oBAAoB;AAEvE,QAAA,IAAgB,CAAA,gBAAA,GAAY,KAAK;AAEjC,QAAA,IAAiB,CAAA,iBAAA,GAAY,IAAI;AAuElC,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,KAAa,KAAI;;AAAC,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CACxE,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;SAAA;AAE3B,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,KAAa,KAAI;;AAAC,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAC5E,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;SAAA;AAE3B,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,KAAa,KAAI;;AAAC,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,wBAAwB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAClF,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC;SAAA;AAE9B,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,KAAa,KAAI;;AAAC,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,wBAAwB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAClF,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC;SAAA;AAyFvC;AAxKS,IAAA,sBAAsB,CAAC,KAA0B,EAAA;AACvD,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO;;IAGvC,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAExC,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACtE,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO;;;IAIzD,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;IAGrF,MAAM,iBAAiB,CAAC,WAAqC,EAAA;AACnE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,QAAA,IAAI;AACF,YAAA,IAAI,WAAW,YAAY,wBAAwB,EAAE;AACnD,gBAAA,IAAI,CAAC,kBAAkB,GAAG,WAAW;;AAChC,iBAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,wBAAwB,CAAC,WAAW,CAAC;;iBAC9D;gBACL;;AAGF,YAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;AACzC,YAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;YACzC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC;YACpD,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC;;QACtD,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAEnC,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;;AAGlD,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAGhC;;AAEG;IAEH,yBAAyB,CACvB,QAAkC,EAClC,QAAkC,EAAA;QAElC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChE,YAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;YAGlC;;QAGF,IACE,QAAQ,YAAY;eACjB,QAAQ,YAAY,wBAAwB,EAC/C;YACA,IAAI,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE;AACnD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;;;;IAkB9B,gBAAgB,GAAA;QACtB,QACE,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACzB,CAAA,CAAC,UAAU,EAAA,IAAA,EAAA,yDAAA,CAEE,CACT;;;IAKF,gBAAgB,GAAA;QACtB,QACE,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACzB,CAAA,CAAC,UAAU,EAAA,IAAA,EAAA,8CAAA,CAEE,CACT;;IAIV,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;;AAGhC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;;QAGhC,QACE,EAAC,IAAI,EAAA,EAAA,yBAAA,EACsB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAA,EAEtD,CAAA,CAAA,OAAA,EAAA,IAAA,EACE,CAAA,CAAC,gBAAgB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACX,IAAI,CAAC,kBAAkB,CAC3B,CAAA,EAEF,CAAC,CAAA,MAAM,IACL,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EACtC,CAAA,EAEF,CAAC,CAAA,MAAM,IACL,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EACtC,CAAA,EAEF,CAAC,CAAA,SAAS,IACR,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAC5C,CAAA,EAEF,CAAC,CAAA,WAAW,IACV,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAChD,CAAA,EAEF,CAAC,CAAA,UAAU,IACT,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC9C,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EACnD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EACvD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,EAC7D,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,EAC7D,CAAA,EAEF,CAAC,CAAA,UAAU,IACT,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC9C,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EACnD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EACvD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,EAC7D,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,EAC7D,CAAA,EAED,IAAI,CAAC,QAAQ,KACZ,CAAA,CAAC,aAAa,EACZ,EAAA,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAA,CACpC,CACH,CACK,CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["Convert","__stencil_proxyCustomElement"],"sources":["src/crypto/x509_attribute_certificate.ts","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"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport type { GeneralName } from '@peculiar/asn1-x509';\nimport { AttributeCertificate, Holder } from '@peculiar/asn1-x509-attr';\nimport { Convert } from 'pvtsutils';\n\nimport { dateDiff, Download } from '../utils';\n\nimport { AsnData } from './asn_data';\nimport { Extension, TExtensionValue } from './extension';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport class X509AttributeCertificate extends AsnData<AttributeCertificate> {\n public readonly serialNumber: string;\n\n public readonly version: number;\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public attributes: Attribute<TAttributeValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly issuer: GeneralName[];\n\n public holder: Holder;\n\n public readonly type = 'X.509 Attribute Certificate';\n\n public readonly tag = PemConverter.AttributeCertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), AttributeCertificate);\n\n const { acinfo } = this.asn;\n\n this.serialNumber = Convert.ToHex(acinfo.serialNumber);\n this.version = acinfo.version;\n\n const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;\n\n if (!notBefore) {\n throw new Error(\"Cannot get 'notBefore' value\");\n }\n\n this.notBefore = notBefore;\n\n const notAfter = acinfo.attrCertValidityPeriod.notAfterTime;\n\n if (!notAfter) {\n throw new Error(\"Cannot get 'notAfter' value\");\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n this.issuer = acinfo.issuer.v1Form || acinfo.issuer.v2Form?.issuerName;\n this.holder = acinfo.holder;\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n\n return {\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public parseExtensions() {\n const { acinfo } = this.asn;\n\n if (acinfo.extensions) {\n this.extensions = acinfo.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public parseAttributes() {\n const { acinfo } = this.asn;\n\n if (acinfo.attributes) {\n this.attributes = acinfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n }\n }\n\n public async getThumbprint(\n algorithm: string = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n return `attribute-certificate-${this.thumbprints['SHA-1']}`;\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.attrCert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.attrCert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","/**\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';\n\nimport type { X509AttributeCertificate } from '../../crypto';\nimport { l10n, getStringByOID } from '../../utils';\nimport { RowTitle, RowValue, TableRowTable } 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';\n\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","@import '../../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\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n td {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\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: var(--pv-size-base-2) 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: var(--pv-size-base-6);\n padding-bottom: var(--pv-size-base-2);\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: var(--pv-size-base-2) 0;\n\n &.title {\n padding-top: var(--pv-size-base-6);\n\n td {\n padding: 0 var(--pv-size-base-4);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-size-base-4);\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';\n\nimport { X509AttributeCertificate } from '../../crypto';\nimport { getDNSNameLink, getIPAddressLink, getLEILink } 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 AttributeCertificateProp = 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: AttributeCertificateProp;\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: boolean = false;\n\n @State() isDecodeInProcess: boolean = 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: AttributeCertificateProp) {\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: AttributeCertificateProp,\n oldValue: AttributeCertificateProp,\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 // eslint-disable-next-line class-methods-use-this\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 // eslint-disable-next-line class-methods-use-this\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"],"version":3}
|
|
1
|
+
{"file":"attribute-certificate-viewer.js","mappings":"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","names":["Convert","__stencil_proxyCustomElement"],"sources":["src/crypto/x509_attribute_certificate.ts","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"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport type { GeneralName } from '@peculiar/asn1-x509';\nimport { AttributeCertificate, Holder } from '@peculiar/asn1-x509-attr';\nimport { Convert } from 'pvtsutils';\nimport { dateDiff, Download } from '../utils';\nimport { AsnData } from './asn_data';\nimport { Extension, TExtensionValue } from './extension';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\nexport class X509AttributeCertificate extends AsnData<AttributeCertificate> {\n public readonly serialNumber: string;\n\n public readonly version: number;\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public attributes: Attribute<TAttributeValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly issuer: GeneralName[];\n\n public holder: Holder;\n\n public readonly type = 'X.509 Attribute Certificate';\n\n public readonly tag = PemConverter.AttributeCertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), AttributeCertificate);\n\n const { acinfo } = this.asn;\n\n this.serialNumber = Convert.ToHex(acinfo.serialNumber);\n this.version = acinfo.version;\n\n const notBefore = acinfo.attrCertValidityPeriod.notBeforeTime;\n\n if (!notBefore) {\n throw new Error('Cannot get \\'notBefore\\' value');\n }\n\n this.notBefore = notBefore;\n\n const notAfter = acinfo.attrCertValidityPeriod.notAfterTime;\n\n if (!notAfter) {\n throw new Error('Cannot get \\'notAfter\\' value');\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n this.issuer = acinfo.issuer.v1Form || acinfo.issuer.v2Form?.issuerName;\n this.holder = acinfo.holder;\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n\n return {\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public parseExtensions() {\n const { acinfo } = this.asn;\n\n if (acinfo.extensions) {\n this.extensions = acinfo.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n public parseAttributes() {\n const { acinfo } = this.asn;\n\n if (acinfo.attributes) {\n this.attributes = acinfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n }\n }\n\n public async getThumbprint(\n algorithm = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n return `attribute-certificate-${this.thumbprints['SHA-1']}`;\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.attrCert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.attrCert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\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","@import '../../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\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n td {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\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: var(--pv-size-base-2) 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: var(--pv-size-base-6);\n padding-bottom: var(--pv-size-base-2);\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: var(--pv-size-base-2) 0;\n\n &.title {\n padding-top: var(--pv-size-base-6);\n\n td {\n padding: 0 var(--pv-size-base-4);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-size-base-4);\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"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"attribute.js","mappings":";;;;;AAAA;;;;;;AAMG;
|
|
1
|
+
{"file":"attribute.js","mappings":";;;;;AAAA;;;;;;AAMG;AA6CH,MAAM,iBAAiB,GAAG;IACxB,CAAC,wBAAwB,GAAG,qBAAqB;IACjD,CAAC,gCAAgC,GAAG,6BAA6B;IACjE,CAAC,kBAAkB,GAAG,eAAe;IACrC,CAAC,8BAA8B,GAAG,2BAA2B;IAC7D,CAAC,mBAAmB,GAAG,gBAAgB;IACvC,CAAC,sBAAsB,GAAG,mBAAmB;IAC7C,CAAC,UAAU,GAAG,OAAO;IACrB,CAAC,iBAAiB,GAAG,cAAc;IACnC,CAAC,mBAAmB,GAAG,gBAAgB;IACvC,CAAC,6BAA6B,GAAG,iBAAiB;IAClD,CAAC,4BAA4B,GAAG,gBAAgB;IAChD,CAAC,4BAA4B,GAAG,gBAAgB;CACjD;AAMK,MAAO,SAAqC,SAAQ,OAAqB,CAAA;IAGrE,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;;AAG3B,IAAA,WAAA,CAAY,GAAiB,EAAA;AAC3B,QAAA,KAAK,CAAC,GAAG,EAAEA,WAAY,CAAC;AAExB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAE3C,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAE/C,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAI,YAAY,EAAE,MAAM,CAAC;;iBAChD;gBACL,OAAO,CAAC,IAAI,CAAC,CAA6B,0BAAA,EAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAc,YAAA,CAAA,CAAC;gBAEtE,IAAI,CAAC,KAAK,GAAGC,oBAAO,CAAC,KAAK,CAAC,YAAY,CAAM;;;QAE/C,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC;YAEzE,IAAI,CAAC,KAAK,GAAGA,oBAAO,CAAC,KAAK,CAAC,YAAY,CAAM;;;AAGlD;;;;","names":["AsnAttribute","Convert"],"sources":["src/crypto/attribute.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 { Convert } from 'pvtsutils';\nimport { AsnParser } from '@peculiar/asn1-schema';\nimport { Attribute as AsnAttribute } from '@peculiar/asn1-x509';\nimport {\n id_DomainNameBeneficiary,\n DomainNameBeneficiary,\n\n id_DomainNameLegalRepresentative,\n DomainNameLegalRepresentative,\n\n id_DomainNameOwner,\n DomainNameOwner,\n\n id_DomainNameTechnicalOperator,\n DomainNameTechnicalOperator,\n\n id_TypeRelationship,\n TypeRelationship,\n\n id_ActivityDescription,\n ActivityDescription,\n\n id_WebGDPR,\n WebGDPR,\n\n id_InsuranceValue,\n InsuranceValue,\n\n id_ValuationRanking,\n ValuationRanking,\n} from '@peculiar/asn1-ntqwac';\nimport {\n id_pkcs9_at_extensionRequest,\n ExtensionRequest,\n\n id_pkcs9_at_challengePassword,\n ChallengePassword,\n\n id_pkcs9_at_unstructuredName,\n UnstructuredName,\n} from '@peculiar/asn1-pkcs9';\nimport { AsnData } from './asn_data';\n\nconst attributesParsers = {\n [id_DomainNameBeneficiary]: DomainNameBeneficiary,\n [id_DomainNameLegalRepresentative]: DomainNameLegalRepresentative,\n [id_DomainNameOwner]: DomainNameOwner,\n [id_DomainNameTechnicalOperator]: DomainNameTechnicalOperator,\n [id_TypeRelationship]: TypeRelationship,\n [id_ActivityDescription]: ActivityDescription,\n [id_WebGDPR]: WebGDPR,\n [id_InsuranceValue]: InsuranceValue,\n [id_ValuationRanking]: ValuationRanking,\n [id_pkcs9_at_challengePassword]: ChallengePassword,\n [id_pkcs9_at_unstructuredName]: UnstructuredName,\n [id_pkcs9_at_extensionRequest]: ExtensionRequest,\n};\n\ntype TAttributeKeys = keyof typeof attributesParsers;\n\nexport type TAttributeValue = InstanceType<typeof attributesParsers[TAttributeKeys]> | string;\n\nexport class Attribute<T extends TAttributeValue> extends AsnData<AsnAttribute> {\n public readonly value: T;\n\n private getAsnExtnValue() {\n return this.asn.values[0];\n }\n\n constructor(raw: BufferSource) {\n super(raw, AsnAttribute);\n\n const asnExtnValue = this.getAsnExtnValue();\n\n try {\n const target = attributesParsers[this.asn.type];\n\n if (target) {\n this.value = AsnParser.parse<T>(asnExtnValue, target);\n } else {\n console.warn(`Didn't detect parser for \"${this.asn.type}\" attribute.`);\n\n this.value = Convert.ToHex(asnExtnValue) as T;\n }\n } catch (error) {\n console.error(`Error parse \"${this.asn.type}\" attribute:`, error.message);\n\n this.value = Convert.ToHex(asnExtnValue) as T;\n }\n }\n}\n"],"version":3}
|
|
@@ -18,9 +18,7 @@ const ButtonMenu = /*@__PURE__*/ proxyCustomElement(class ButtonMenu extends HTM
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
render() {
|
|
21
|
-
return (h(Host, { key: '
|
|
22
|
-
is_shown: this.open,
|
|
23
|
-
} }, h(Button, { key: '00b7864c569169633c30a69f26185891ba9c39d1', class: "button_popover", onClick: this.handleClick, startIcon: h(ActionsIcon, null) }), h("div", { key: 'afe0500732f053c8b22c65ec11bd2010546fc5e6', role: "dialog", tabIndex: -1, class: "popover", "aria-hidden": String(this.open) }, this.groups.map((group) => (h("div", { class: "group" }, h(Typography, { variant: "c2", color: "gray-9", class: "group_title" }, group.title), group.options.map((option) => (h(Button, { class: "button_option", startIcon: option.startIcon, href: option.href, onClick: (event) => {
|
|
21
|
+
return (h(Host, { key: '66dd03eaa8d6e1f6dee3d9782390e094c5804b4a', class: { is_shown: this.open } }, h(Button, { key: 'ba4e5601321b4e778937f6386a8a5220e28f5809', class: "button_popover", startIcon: h(ActionsIcon, null), onClick: this.handleClick }), h("div", { key: 'ed4d374f4a4982a24665e1cb60eaa57428ba0e4e', role: "dialog", tabIndex: -1, class: "popover", "aria-hidden": String(this.open) }, this.groups.map((group) => (h("div", { class: "group" }, h(Typography, { variant: "c2", color: "gray-9", class: "group_title" }, group.title), group.options.map((option) => (h(Button, { class: "button_option", startIcon: option.startIcon, href: option.href, onClick: (event) => {
|
|
24
22
|
event.stopPropagation();
|
|
25
23
|
this.handleClick();
|
|
26
24
|
if (option.onClick) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"button-menu.js","mappings":";;;;;;;AAAA,MAAM,aAAa,GAAG,u/BAAu/B;;MCiChgC,UAAU,iBAAAA,kBAAA,CAAA,MAAA,UAAA,SAAA,WAAA,CAAA;AALvB,IAAA,WAAA,GAAA;;;AAMU,QAAA,IAAM,CAAA,MAAA,
|
|
1
|
+
{"file":"button-menu.js","mappings":";;;;;;;AAAA,MAAM,aAAa,GAAG,u/BAAu/B;;MCiChgC,UAAU,iBAAAA,kBAAA,CAAA,MAAA,UAAA,SAAA,WAAA,CAAA;AALvB,IAAA,WAAA,GAAA;;;AAMU,QAAA,IAAM,CAAA,MAAA,GAAuB,EAAE;AAE9B,QAAA,IAAI,CAAA,IAAA,GAAG,KAAK;AAErB,QAAA,IAAW,CAAA,WAAA,GAAG,MAAK;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;AACxB,SAAC;AAmDF;IAjDC,MAAM,GAAA;AACJ,QAAA,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAA,EAE9B,CAAA,CAAC,MAAM,EACL,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,gBAAgB,EACtB,SAAS,EAAE,CAAC,CAAA,WAAW,OAAG,EAC1B,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,CAAA,EACF,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,EAAE,EACZ,KAAK,EAAC,SAAS,EACF,aAAA,EAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAE7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MACrB,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,OAAO,EAAA,EAChB,CAAA,CAAC,UAAU,EACT,EAAA,OAAO,EAAC,IAAI,EACZ,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,aAAa,IAElB,KAAK,CAAC,KAAK,CACD,EACZ,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MACxB,CAAA,CAAC,MAAM,EAAA,EACL,KAAK,EAAC,eAAe,EACrB,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,OAAO,EAAE,CAAC,KAAK,KAAI;gBACjB,KAAK,CAAC,eAAe,EAAE;gBAEvB,IAAI,CAAC,WAAW,EAAE;AAElB,gBAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,oBAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;;AAEzB,aAAC,EAEA,EAAA,MAAM,CAAC,IAAI,CACL,CACV,CAAC,CACE,CACP,CAAC,CACE,CACD;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement"],"sources":["src/components/button-menu/button-menu.scss?tag=peculiar-button-menu&encapsulation=scoped","src/components/button-menu/button-menu.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n position: relative;\n\n &.is_shown {\n .button_popover {\n &:before {\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n content: '';\n }\n }\n\n .popover {\n display: block;\n }\n }\n}\n\n.popover {\n min-width: 200px;\n position: absolute;\n top: 100%;\n right: 0;\n border-radius: 4px;\n z-index: 1;\n box-shadow: var(--pv-shadow-light-medium);\n background: var(--pv-color-white);\n padding: var(--pv-size-base-2) 0;\n margin: var(--pv-size-base) 0;\n display: none;\n}\n\n.button_option {\n width: 100%;\n justify-content: flex-start;\n border-radius: 0;\n}\n\n.group {\n &:not(:last-child) {\n border-bottom: 1px solid var(--pv-color-gray-5);\n padding-bottom: var(--pv-size-base-2);\n margin-bottom: var(--pv-size-base);\n }\n}\n\n.group_title {\n line-height: var(--pv-size-base-6);\n padding: 0 var(--pv-size-base-2);\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 State,\n Prop,\n Host,\n} from '@stencil/core';\nimport { Button, IButtonProps } from '../button';\nimport { Typography } from '../typography';\nimport { ActionsIcon } from '../icons';\n\nexport interface IButtonMenuGroupOptions extends IButtonProps {\n text: string | string[];\n}\n\nexport interface IButtonMenuGroup {\n title: string | string[];\n options: IButtonMenuGroupOptions[];\n}\n\n@Component({\n tag: 'peculiar-button-menu',\n styleUrl: 'button-menu.scss',\n scoped: true,\n})\nexport class ButtonMenu {\n @Prop() groups: IButtonMenuGroup[] = [];\n\n @State() open = false;\n\n handleClick = () => {\n this.open = !this.open;\n };\n\n render() {\n return (\n <Host\n class={{ is_shown: this.open }}\n >\n <Button\n class=\"button_popover\"\n startIcon={<ActionsIcon />}\n onClick={this.handleClick}\n />\n <div\n role=\"dialog\"\n tabIndex={-1}\n class=\"popover\"\n aria-hidden={String(this.open)}\n >\n {this.groups.map((group) => (\n <div class=\"group\">\n <Typography\n variant=\"c2\"\n color=\"gray-9\"\n class=\"group_title\"\n >\n {group.title}\n </Typography>\n {group.options.map((option) => (\n <Button\n class=\"button_option\"\n startIcon={option.startIcon}\n href={option.href}\n onClick={(event) => {\n event.stopPropagation();\n\n this.handleClick();\n\n if (option.onClick) {\n option.onClick(event);\n }\n }}\n >\n {option.text}\n </Button>\n ))}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
package/components/button.js
CHANGED
|
@@ -59,12 +59,12 @@ const Button = (props, children) => {
|
|
|
59
59
|
const { href, class: classProp, startIcon, onClick, } = props;
|
|
60
60
|
const isLink = !!href;
|
|
61
61
|
const TagType = isLink ? 'a' : 'button';
|
|
62
|
-
return (h(TagType, { type: !isLink && 'button', href: isLink && href, target: isLink && '_blank', rel: isLink && 'noreferrer noopener',
|
|
62
|
+
return (h(TagType, { type: !isLink && 'button', href: isLink && href, target: isLink && '_blank', rel: isLink && 'noreferrer noopener', class: {
|
|
63
63
|
button: true,
|
|
64
64
|
// eslint-disable-next-line react/destructuring-assignment
|
|
65
65
|
m_no_padding: children.length === 0,
|
|
66
66
|
[classProp]: Boolean(classProp),
|
|
67
|
-
} },
|
|
67
|
+
}, onClick: onClick },
|
|
68
68
|
startIcon,
|
|
69
69
|
children.length > 0 && (h(Typography, { variant: "b3", color: "black", component: "span" }, children))));
|
|
70
70
|
};
|
package/components/button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"button.js","mappings":";;;;;AAAA;;;;;;AAMG;;;;;;;;;;;;AAYH,MAAM,cAAc,
|
|
1
|
+
{"file":"button.js","mappings":";;;;;AAAA;;;;;;AAMG;;;;;;;;;;;;AAYH,MAAM,cAAc,GAAgF;AAClG,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;CACR;MAEY,UAAU,GAA0C,CAAC,KAAK,EAAE,QAAQ,KAAI;IACnF,MAAM,EACJ,SAAS,EAAE,aAAa,EACxB,OAAO,GAAG,IAAI,EACd,KAAK,GAAG,OAAO,EACf,KAAK,EAAE,SAAS,EAAA,GAEd,KAAK,EADJ,KAAK,GAAA,MAAA,CACN,KAAK,EANH,CAML,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,CAAQ;IAET,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG;AAEjE,IAAA,QACE,CAAC,CAAA,SAAS,oBACJ,KAAK,EAAA,EACT,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,CAAC,CAAK,EAAA,EAAA,OAAO,CAAE,CAAA,GAAG,IAAI;AACtB,YAAA,CAAC,CAAK,EAAA,EAAA,KAAK,CAAE,CAAA,GAAG,IAAI;AACpB,YAAA,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SAChC,EAEA,CAAA,EAAA,QAAQ,CACC;AAEhB;;AC3DA;;;;;;AAMG;MAcU,MAAM,GAAsC,CAAC,KAAK,EAAE,QAAQ,KAAI;AAC3E,IAAA,MAAM,EACJ,IAAI,EACJ,KAAK,EAAE,SAAS,EAChB,SAAS,EACT,OAAO,GACR,GAAG,KAAK;AAET,IAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI;IACrB,MAAM,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,QAAQ;AAEvC,IAAA,QACE,CAAA,CAAC,OAAO,EAAA,EACN,IAAI,EAAE,CAAC,MAAM,IAAI,QAAQ,EACzB,IAAI,EAAE,MAAM,IAAI,IAAI,EACpB,MAAM,EAAE,MAAM,IAAI,QAAQ,EAC1B,GAAG,EAAE,MAAM,IAAI,qBAAqB,EACpC,KAAK,EAAE;AACL,YAAA,MAAM,EAAE,IAAI;;AAEZ,YAAA,YAAY,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;AACnC,YAAA,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SAChC,EACD,OAAO,EAAE,OAAO,EAAA;QAEf,SAAS;QAET,QAAQ,CAAC,MAAM,GAAG,CAAC,KAClB,CAAA,CAAC,UAAU,EAAA,EACT,OAAO,EAAC,IAAI,EACZ,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,MAAM,EAEf,EAAA,QAAQ,CACE,CACd,CACO;AAEd;;;;","names":[],"sources":["src/components/typography/typography.tsx","src/components/button/button.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 { FunctionalComponent, h } from '@stencil/core';\nimport type { TTypography, TColor } from '../../interface';\n\ninterface ITypographyProps {\n component?: keyof JSX.IntrinsicElements;\n variant?: TTypography;\n color?: TColor;\n class?: string;\n}\n\nconst variantMapping: Record<TTypography, 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n s1: 'h6',\n s2: 'h6',\n b1: 'p',\n b2: 'p',\n b3: 'p',\n btn1: 'span',\n btn2: 'span',\n c1: 'p',\n c2: 'p',\n};\n\nexport const Typography: FunctionalComponent<ITypographyProps> = (props, children) => {\n const {\n component: componentProp,\n variant = 'b2',\n color = 'black',\n class: classProp,\n ...other\n } = props;\n\n const Component = componentProp || variantMapping[variant] || 'p';\n\n return (\n <Component\n {...other}\n class={{\n typography: true,\n [`t-${variant}`]: true,\n [`c-${color}`]: true,\n [classProp]: Boolean(classProp),\n }}\n >\n {children}\n </Component>\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 FunctionalComponent, h, VNode,\n} from '@stencil/core';\nimport { Typography } from '../typography';\n\nexport interface IButtonProps {\n href?: string;\n class?: string;\n startIcon?: VNode;\n onClick?: (event: MouseEvent) => void;\n}\n\nexport const Button: FunctionalComponent<IButtonProps> = (props, children) => {\n const {\n href,\n class: classProp,\n startIcon,\n onClick,\n } = props;\n\n const isLink = !!href;\n const TagType = isLink ? 'a' : 'button';\n\n return (\n <TagType\n type={!isLink && 'button'}\n href={isLink && href}\n target={isLink && '_blank'}\n rel={isLink && 'noreferrer noopener'}\n class={{\n button: true,\n // eslint-disable-next-line react/destructuring-assignment\n m_no_padding: children.length === 0,\n [classProp]: Boolean(classProp),\n }}\n onClick={onClick}\n >\n {startIcon}\n {/* eslint-disable-next-line react/destructuring-assignment */}\n {children.length > 0 && (\n <Typography\n variant=\"b3\"\n color=\"black\"\n component=\"span\"\n >\n {children}\n </Typography>\n )}\n </TagType>\n );\n};\n"],"version":3}
|
|
@@ -16,7 +16,6 @@ const CertificateChainViewer = /*@__PURE__*/ proxyCustomElement(class Certificat
|
|
|
16
16
|
this.__attachShadow();
|
|
17
17
|
this.selectedCertificateIndex = 0;
|
|
18
18
|
}
|
|
19
|
-
// eslint-disable-next-line class-methods-use-this
|
|
20
19
|
renderEmptyState() {
|
|
21
20
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There is no certificates available.")));
|
|
22
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"certificate-chain-viewer.js","mappings":";;;;;;;;;AAAA,MAAM,yBAAyB,GAAG,02jBAA02jB;;
|
|
1
|
+
{"file":"certificate-chain-viewer.js","mappings":";;;;;;;;;AAAA,MAAM,yBAAyB,GAAG,02jBAA02jB;;MCwB/3jB,sBAAsB,iBAAAA,kBAAA,CAAA,MAAA,sBAAA,SAAA,WAAA,CAAA;AALnC,IAAA,WAAA,GAAA;;;;AAgBW,QAAA,IAAwB,CAAA,wBAAA,GAAG,CAAC;AA4DtC;IA1DS,gBAAgB,GAAA;QACtB,QACE,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACzB,CAAA,CAAC,UAAU,EAAA,IAAA,EAAA,qCAAA,CAEE,CACT;;IAIV,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;;AAGhC,QAAA,QACE,EAAC,IAAI,EAAA,IAAA,EACH,CACE,CAAA,KAAA,EAAA,EAAA,IAAI,EAAC,SAAS,EACd,KAAK,EAAC,MAAM,EAEX,EAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,MACpD,CAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,KAAK,EACI,eAAA,EAAA,KAAK,KAAK,IAAI,CAAC,wBAAwB,GAAG,MAAM,GAAG,OAAO,EACzE,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;aACtC,IAEA,WAAW,CAAC,UAAU,CAChB,CACV,CAAC,CACE,EACL,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAI;AACxD,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,wBAAwB,EAAE;AAC3C,gBAAA,QACE,CACE,CAAA,6BAAA,EAAA,EAAA,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,KAAK,EACf,CAAA;;AAIN,YAAA,OAAO,IAAI;AACb,SAAC,CAAC,EAEF,CAAA,CAAA,OAAA,EAAA,IAAA,EACG,IAAI,CAAC,QAAQ,KACZ,CAAA,CAAC,aAAa,EACZ,EAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAA,CAC9B,CACH,CACK,CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement"],"sources":["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"],"sourcesContent":["@import '../../css/base.scss';\n@import '../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 var(--pv-size-base-4);\n margin-bottom: 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: var(--pv-size-base-12);\n height: 100%;\n padding: 0 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"],"version":3}
|
|
@@ -29,13 +29,13 @@ class X509Certificate extends AsnData {
|
|
|
29
29
|
const notBefore = tbsCertificate.validity.notBefore.utcTime
|
|
30
30
|
|| tbsCertificate.validity.notBefore.generalTime;
|
|
31
31
|
if (!notBefore) {
|
|
32
|
-
throw new Error(
|
|
32
|
+
throw new Error('Cannot get \'notBefore\' value');
|
|
33
33
|
}
|
|
34
34
|
this.notBefore = notBefore;
|
|
35
35
|
const notAfter = tbsCertificate.validity.notAfter.utcTime
|
|
36
36
|
|| tbsCertificate.validity.notAfter.generalTime;
|
|
37
37
|
if (!notAfter) {
|
|
38
|
-
throw new Error(
|
|
38
|
+
throw new Error('Cannot get \'notAfter\' value');
|
|
39
39
|
}
|
|
40
40
|
this.notAfter = notAfter;
|
|
41
41
|
this.validity = dateDiff(this.notBefore, this.notAfter);
|
|
@@ -113,10 +113,7 @@ class X509Certificate extends AsnData {
|
|
|
113
113
|
}
|
|
114
114
|
for (let i = 0; i < this.issuer.length; i += 1) {
|
|
115
115
|
const name = this.issuer[i];
|
|
116
|
-
if (name.shortName === 'CN') {
|
|
117
|
-
return name.value;
|
|
118
|
-
}
|
|
119
|
-
if (name.shortName === 'E') {
|
|
116
|
+
if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {
|
|
120
117
|
return name.value;
|
|
121
118
|
}
|
|
122
119
|
}
|
|
@@ -248,11 +245,9 @@ const CertificateViewer = /*@__PURE__*/ proxyCustomElement(class CertificateView
|
|
|
248
245
|
getIssuerDnLink() {
|
|
249
246
|
return this.issuerDnLink;
|
|
250
247
|
}
|
|
251
|
-
// eslint-disable-next-line class-methods-use-this
|
|
252
248
|
renderErrorState() {
|
|
253
249
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There was an error decoding this certificate.")));
|
|
254
250
|
}
|
|
255
|
-
// eslint-disable-next-line class-methods-use-this
|
|
256
251
|
renderEmptyState() {
|
|
257
252
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There is no certificate available.")));
|
|
258
253
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"certificate-viewer.js","mappings":"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","names":["Convert","__stencil_proxyCustomElement"],"sources":["src/crypto/x509_certificate.ts","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-certificate-viewer&encapsulation=shadow","src/components/certificate-viewer/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 { AsnConvert } from '@peculiar/asn1-schema';\nimport { ECParameters, id_ecPublicKey } from '@peculiar/asn1-ecc';\nimport { id_rsaEncryption, RSAPublicKey } from '@peculiar/asn1-rsa';\nimport {\n id_composite_key,\n id_alg_composite,\n CompositePublicKey,\n CompositeSignatureValue,\n CompositeParams,\n} from '@peculiar/asn1-x509-post-quantum';\nimport { Certificate, SubjectPublicKeyInfo } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\n\nimport { dateDiff, Download } from '../utils';\n\nimport { Name, INameJSON } from './name';\nimport { Extension, TExtensionValue } from './extension';\nimport { AsnData } from './asn_data';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\nexport interface ISignature {\n algorithm: string;\n value: BufferSource;\n params?: {\n algorithm: string;\n value: BufferSource;\n }[];\n}\n\nexport interface IPublicKey {\n algorithm: string;\n value: BufferSource;\n params?: ECParameters | RSAPublicKey | IPublicKey[];\n}\n\nexport class X509Certificate extends AsnData<Certificate> {\n public readonly serialNumber: string;\n\n public readonly subject: INameJSON[];\n\n public readonly issuer: INameJSON[];\n\n public readonly notBefore: Date;\n\n public readonly notAfter: Date;\n\n public readonly validity: string;\n\n public extensions: Extension<TExtensionValue>[];\n\n public readonly version: number;\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'X.509 Certificate';\n\n public readonly tag = PemConverter.CertificateTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), Certificate);\n\n const { tbsCertificate } = this.asn;\n\n this.serialNumber = Convert.ToHex(tbsCertificate.serialNumber);\n this.subject = new Name(tbsCertificate.subject).toJSON();\n this.issuer = new Name(tbsCertificate.issuer).toJSON();\n this.version = tbsCertificate.version + 1;\n\n const notBefore = tbsCertificate.validity.notBefore.utcTime\n || tbsCertificate.validity.notBefore.generalTime;\n\n if (!notBefore) {\n throw new Error(\"Cannot get 'notBefore' value\");\n }\n\n this.notBefore = notBefore;\n\n const notAfter = tbsCertificate.validity.notAfter.utcTime\n || tbsCertificate.validity.notAfter.generalTime;\n\n if (!notAfter) {\n throw new Error(\"Cannot get 'notAfter' value\");\n }\n\n this.notAfter = notAfter;\n this.validity = dateDiff(this.notBefore, this.notAfter);\n }\n\n public parseExtensions() {\n const { tbsCertificate } = this.asn;\n\n if (tbsCertificate.extensions) {\n this.extensions = tbsCertificate.extensions\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n\n private getPublicKeyInfo(publicKeyInfo: SubjectPublicKeyInfo) {\n const { subjectPublicKey, algorithm } = publicKeyInfo;\n let params;\n\n if (algorithm.algorithm === id_ecPublicKey && algorithm.parameters) {\n params = AsnConvert.parse(algorithm.parameters, ECParameters);\n }\n\n if (algorithm.algorithm === id_rsaEncryption) {\n params = AsnConvert.parse(subjectPublicKey, RSAPublicKey);\n }\n\n if (algorithm.algorithm === id_composite_key) {\n params = AsnConvert.parse(subjectPublicKey, CompositePublicKey);\n\n params = params.map((param) => this.getPublicKeyInfo(param));\n }\n\n const spki = AsnConvert.serialize(publicKeyInfo);\n\n return {\n params,\n value: spki,\n algorithm: algorithm.algorithm,\n };\n }\n\n public get publicKey(): IPublicKey {\n return this.getPublicKeyInfo(this.asn.tbsCertificate.subjectPublicKeyInfo);\n }\n\n public get signature(): ISignature {\n const { signatureValue, signatureAlgorithm } = this.asn;\n let params;\n\n if (signatureAlgorithm.algorithm === id_alg_composite) {\n const compositeSignatureValues = AsnConvert.parse(signatureValue, CompositeSignatureValue);\n const compositeParams = AsnConvert.parse(signatureAlgorithm.parameters, CompositeParams);\n\n params = compositeParams.map((param, index) => ({\n ...param,\n value: compositeSignatureValues[index],\n }));\n }\n\n return {\n params,\n value: signatureValue,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public async getThumbprint(\n algorithm: string = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public get commonName(): string {\n if (!this.subject) {\n return '';\n }\n\n for (let i = 0; i < this.subject.length; i += 1) {\n const name = this.subject[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get issuerCommonName(): string {\n if (!this.issuer) {\n return '';\n }\n\n for (let i = 0; i < this.issuer.length; i += 1) {\n const name = this.issuer[i];\n\n if (name.shortName === 'CN') {\n return name.value;\n }\n\n if (name.shortName === 'E') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public get isRoot(): boolean {\n return JSON.stringify(this.issuer) === JSON.stringify(this.subject);\n }\n\n public subjectToString() {\n if (!this.subject) {\n return '';\n }\n\n return this.subject\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public issuerToString() {\n if (!this.issuer) {\n return '';\n }\n\n return this.issuer\n .map((name) => (\n `${name.shortName}=${name.value}`\n ))\n .join(', ');\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","@import '../../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\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n td {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\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: var(--pv-size-base-2) 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: var(--pv-size-base-6);\n padding-bottom: var(--pv-size-base-2);\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: var(--pv-size-base-2) 0;\n\n &.title {\n padding-top: var(--pv-size-base-6);\n\n td {\n padding: 0 var(--pv-size-base-4);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-size-base-4);\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';\n\nimport {\n X509Certificate,\n} from '../../crypto';\nimport { getDNSNameLink, getIPAddressLink, getLEILink } 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 CertificateProp = 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: CertificateProp;\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: boolean = false;\n\n @State() isDecodeInProcess: boolean = 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: CertificateProp) {\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: CertificateProp, oldValue: CertificateProp) {\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 // eslint-disable-next-line class-methods-use-this\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 // eslint-disable-next-line class-methods-use-this\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"],"version":3}
|
|
1
|
+
{"file":"certificate-viewer.js","mappings":"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","names":["Convert","__stencil_proxyCustomElement"],"sources":["src/crypto/x509_certificate.ts","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-certificate-viewer&encapsulation=shadow","src/components/certificate-viewer/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 { 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","@import '../../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\nth, td {\n border: none;\n}\n\ntable {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n\n td {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\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: var(--pv-size-base-2) 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: var(--pv-size-base-6);\n padding-bottom: var(--pv-size-base-2);\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: var(--pv-size-base-2) 0;\n\n &.title {\n padding-top: var(--pv-size-base-6);\n\n td {\n padding: 0 var(--pv-size-base-4);\n }\n }\n }\n\n td {\n padding: 0 var(--pv-size-base-4);\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"],"version":3}
|
|
@@ -21,14 +21,10 @@ const CircularProgress = /*@__PURE__*/ proxyCustomElement(class CircularProgress
|
|
|
21
21
|
this.box = 50;
|
|
22
22
|
}
|
|
23
23
|
render() {
|
|
24
|
-
return (h(Host, { key: '
|
|
24
|
+
return (h(Host, { key: '0a7d6a83e20839fb324b3f24c7e8b1074775c6a3' }, h("div", { key: '88111c52129ca2806ab67f7862ccdbec0e55e68f', class: "circle_progress", style: {
|
|
25
25
|
width: `${this.size}px`,
|
|
26
26
|
height: `${this.size}px`,
|
|
27
|
-
} }, h("svg", { key: '
|
|
28
|
-
strokeWidth: `${this.width}px`,
|
|
29
|
-
} }), h("circle", { key: 'f61b2daa3fad404e325b787d3be59c8d7f04c118', class: "circle_progress_circle", cx: this.box / 2, cy: this.box / 2, r: (this.box / 2) - 5, fill: "none", style: {
|
|
30
|
-
strokeWidth: `${this.width}px`,
|
|
31
|
-
} })))));
|
|
27
|
+
} }, h("svg", { key: '73b6d9ef7d0b5d09049f8b0c3477e633fa6ee8a3', class: "circle_progress_svg", viewBox: `0 0 ${this.box} ${this.box}` }, h("circle", { key: '764d4d27927cd961c84631ac2d9bf2d0ca3e542f', class: "circle_progress_backdrop", cx: this.box / 2, cy: this.box / 2, r: (this.box / 2) - 5, fill: "none", style: { strokeWidth: `${this.width}px` } }), h("circle", { key: 'b24985974a66d754514f5a82b06fa6e7cae77133', class: "circle_progress_circle", cx: this.box / 2, cy: this.box / 2, r: (this.box / 2) - 5, fill: "none", style: { strokeWidth: `${this.width}px` } })))));
|
|
32
28
|
}
|
|
33
29
|
static get style() { return circularProgressCss; }
|
|
34
30
|
}, [1, "peculiar-circular-progress", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"circular-progress.js","mappings":";;;;;AAAA,MAAM,mBAAmB,GAAG,0/BAA0/B;;MCoBzgC,gBAAgB,iBAAAA,kBAAA,CAAA,MAAA,gBAAA,SAAA,WAAA,CAAA;AAL7B,IAAA,WAAA,GAAA;;;;AAME;;AAEG;AACK,QAAA,IAAI,CAAA,IAAA,
|
|
1
|
+
{"file":"circular-progress.js","mappings":";;;;;AAAA,MAAM,mBAAmB,GAAG,0/BAA0/B;;MCoBzgC,gBAAgB,iBAAAA,kBAAA,CAAA,MAAA,gBAAA,SAAA,WAAA,CAAA;AAL7B,IAAA,WAAA,GAAA;;;;AAME;;AAEG;AACK,QAAA,IAAI,CAAA,IAAA,GAAG,EAAE;AAEjB;;AAEG;AACK,QAAA,IAAK,CAAA,KAAA,GAAG,CAAC;AAET,QAAA,IAAG,CAAA,GAAA,GAAG,EAAE;AAqCjB;IAnCC,MAAM,GAAA;QACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,iBAAiB,EACvB,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,CAAI,EAAA,CAAA;AACvB,gBAAA,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,CAAI,EAAA,CAAA;AACzB,aAAA,EAAA,EAED,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,qBAAqB,EAC3B,OAAO,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAE,CAAA,EAAA,EAEtC,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,0BAA0B,EAChC,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAChB,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAChB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAI,EAAA,CAAA,EAAE,EACzC,CAAA,EACF,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,wBAAwB,EAC9B,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAChB,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAChB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAI,EAAA,CAAA,EAAE,GACzC,CACE,CACF,CACD;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement"],"sources":["src/components/circular-progress/circular-progress.scss?tag=peculiar-circular-progress&encapsulation=shadow","src/components/circular-progress/circular-progress.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n@keyframes circular-rotate {\n to {\n transform: rotate(1turn);\n }\n}\n\n@keyframes circular-dash {\n 0% {\n stroke-dasharray: 1,200;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 100,200;\n stroke-dashoffset: -15;\n }\n\n to {\n stroke-dasharray: 100,200;\n stroke-dashoffset: -120;\n }\n}\n\n.circle_progress {\n margin: 0 auto;\n}\n\n.circle_progress_svg {\n animation: circular-rotate 1.4s linear infinite;\n}\n\n.circle_progress_circle {\n stroke-linecap: round;\n animation: circular-dash 1.4s ease-in-out infinite;\n stroke-dasharray: 80,200;\n stroke-dashoffset: 0;\n stroke: var(--pv-color-secondary);\n}\n\n.circle_progress_backdrop {\n stroke: var(--pv-color-gray-3);\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} from '@stencil/core';\n\n@Component({\n tag: 'peculiar-circular-progress',\n styleUrl: 'circular-progress.scss',\n shadow: true,\n})\nexport class CircularProgress {\n /**\n * Width/height of progress circle.\n */\n @Prop() size = 24;\n\n /**\n * Stroke width of progress bar circle.\n */\n @Prop() width = 4;\n\n private box = 50;\n\n render() {\n return (\n <Host>\n <div\n class=\"circle_progress\"\n style={{\n width: `${this.size}px`,\n height: `${this.size}px`,\n }}\n >\n <svg\n class=\"circle_progress_svg\"\n viewBox={`0 0 ${this.box} ${this.box}`}\n >\n <circle\n class=\"circle_progress_backdrop\"\n cx={this.box / 2}\n cy={this.box / 2}\n r={(this.box / 2) - 5}\n fill=\"none\"\n style={{ strokeWidth: `${this.width}px` }}\n />\n <circle\n class=\"circle_progress_circle\"\n cx={this.box / 2}\n cy={this.box / 2}\n r={(this.box / 2) - 5}\n fill=\"none\"\n style={{ strokeWidth: `${this.width}px` }}\n />\n </svg>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
package/components/crl-viewer.js
CHANGED
|
@@ -215,11 +215,9 @@ const CrlViewer = /*@__PURE__*/ proxyCustomElement(class CrlViewer extends HTMLE
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
-
// eslint-disable-next-line class-methods-use-this
|
|
219
218
|
renderErrorState() {
|
|
220
219
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There was an error decoding this certificate revocation list.")));
|
|
221
220
|
}
|
|
222
|
-
// eslint-disable-next-line class-methods-use-this
|
|
223
221
|
renderEmptyState() {
|
|
224
222
|
return (h("div", { class: "status_wrapper" }, h(Typography, null, "There is no certificate revocation list available.")));
|
|
225
223
|
}
|