@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.
Files changed (450) hide show
  1. package/components/actions.js.map +1 -1
  2. package/components/arrow_top.js.map +1 -1
  3. package/components/attribute-certificate-viewer.js +2 -4
  4. package/components/attribute-certificate-viewer.js.map +1 -1
  5. package/components/attribute.js.map +1 -1
  6. package/components/button-menu.js +1 -3
  7. package/components/button-menu.js.map +1 -1
  8. package/components/button.js +2 -2
  9. package/components/button.js.map +1 -1
  10. package/components/certificate-chain-viewer.js +0 -1
  11. package/components/certificate-chain-viewer.js.map +1 -1
  12. package/components/certificate-viewer.js +3 -8
  13. package/components/certificate-viewer.js.map +1 -1
  14. package/components/circular-progress.js +2 -6
  15. package/components/circular-progress.js.map +1 -1
  16. package/components/crl-viewer.js +0 -2
  17. package/components/crl-viewer.js.map +1 -1
  18. package/components/cross.js.map +1 -1
  19. package/components/csr-viewer.js +0 -4
  20. package/components/csr-viewer.js.map +1 -1
  21. package/components/download.js +49 -23
  22. package/components/download.js.map +1 -1
  23. package/components/highlight-words.js +1 -1
  24. package/components/highlight-words.js.map +1 -1
  25. package/components/index2.js +2 -1
  26. package/components/index2.js.map +1 -1
  27. package/components/issuer_name.js +3 -1
  28. package/components/issuer_name.js.map +1 -1
  29. package/components/miscellaneous.js +15 -16
  30. package/components/miscellaneous.js.map +1 -1
  31. package/components/peculiar-certificate-decoder.js +7 -8
  32. package/components/peculiar-certificate-decoder.js.map +1 -1
  33. package/components/peculiar-certificates-viewer.js +44 -43
  34. package/components/peculiar-certificates-viewer.js.map +1 -1
  35. package/components/peculiar-text-hider.js +1 -1
  36. package/components/peculiar-text-hider.js.map +1 -1
  37. package/components/pkcs10_certificate_request.js.map +1 -1
  38. package/components/read_file.js.map +1 -1
  39. package/components/subject_name.js.map +1 -1
  40. package/dist/cjs/actions-Dl4HXXlI.js.map +1 -1
  41. package/dist/cjs/arrow_top-DBMPHVlB.js.map +1 -1
  42. package/dist/cjs/{button-C5jDF-CZ.js → button-B0CduHSE.js} +4 -4
  43. package/dist/cjs/button-B0CduHSE.js.map +1 -0
  44. package/dist/cjs/{certification_request-Bipg1Az7.js → certification_request-DaJSDP3R.js} +50 -24
  45. package/dist/cjs/certification_request-DaJSDP3R.js.map +1 -0
  46. package/dist/cjs/cross-pi7K0cHC.js.map +1 -1
  47. package/dist/cjs/download-D9skkVoT.js.map +1 -1
  48. package/dist/cjs/index.cjs.js +4 -4
  49. package/dist/cjs/{link-CwLq-Nge.js → link-kgbgxxVh.js} +4 -4
  50. package/dist/cjs/link-kgbgxxVh.js.map +1 -0
  51. package/dist/cjs/{miscellaneous-C0sOAo-1.js → miscellaneous-Ce9aGjKB.js} +23 -22
  52. package/dist/cjs/miscellaneous-Ce9aGjKB.js.map +1 -0
  53. package/dist/cjs/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.cjs.js.map +1 -1
  54. package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js +8 -16
  55. package/dist/cjs/peculiar-attribute-certificate-viewer_4.cjs.entry.js.map +1 -1
  56. package/dist/cjs/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.cjs.js.map +1 -1
  57. package/dist/cjs/peculiar-button-menu_3.cjs.entry.js +5 -11
  58. package/dist/cjs/peculiar-button-menu_3.cjs.entry.js.map +1 -1
  59. package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js +12 -13
  60. package/dist/cjs/peculiar-certificate-decoder.cjs.entry.js.map +1 -1
  61. package/dist/cjs/peculiar-certificate-decoder.entry.cjs.js.map +1 -1
  62. package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js +5 -7
  63. package/dist/cjs/peculiar-certificate-viewer.cjs.entry.js.map +1 -1
  64. package/dist/cjs/peculiar-certificate-viewer.entry.cjs.js.map +1 -1
  65. package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js +47 -46
  66. package/dist/cjs/peculiar-certificates-viewer.cjs.entry.js.map +1 -1
  67. package/dist/cjs/peculiar-certificates-viewer.entry.cjs.js.map +1 -1
  68. package/dist/cjs/peculiar-text-hider.cjs.entry.js +2 -2
  69. package/dist/cjs/peculiar-text-hider.cjs.entry.js.map +1 -1
  70. package/dist/cjs/peculiar-text-hider.entry.cjs.js.map +1 -1
  71. package/dist/cjs/{pkcs10_certificate_request-BDz0P_px.js → pkcs10_certificate_request-D13Ssi7Z.js} +3 -3
  72. package/dist/cjs/pkcs10_certificate_request-D13Ssi7Z.js.map +1 -0
  73. package/dist/cjs/read_file-DWtcn3zU.js.map +1 -1
  74. package/dist/cjs/{x509_certificate-DRvXOszL.js → x509_certificate-h5GZArG6.js} +6 -9
  75. package/dist/cjs/x509_certificate-h5GZArG6.js.map +1 -0
  76. package/dist/cjs/{x509_crl-DVGVym_S.js → x509_crl-CDPt6P1z.js} +6 -6
  77. package/dist/cjs/x509_crl-CDPt6P1z.js.map +1 -0
  78. package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js +4 -6
  79. package/dist/collection/components/attribute-certificate-viewer/attribute-certificate-viewer.js.map +1 -1
  80. package/dist/collection/components/button/button.js +3 -3
  81. package/dist/collection/components/button/button.js.map +1 -1
  82. package/dist/collection/components/button/index.js.map +1 -1
  83. package/dist/collection/components/button-menu/button-menu.js +5 -7
  84. package/dist/collection/components/button-menu/button-menu.js.map +1 -1
  85. package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js +1 -2
  86. package/dist/collection/components/certificate-chain-viewer/certificate-chain-viewer.js.map +1 -1
  87. package/dist/collection/components/certificate-decoder/certificate-decoder.js +4 -1
  88. package/dist/collection/components/certificate-decoder/certificate-decoder.js.map +1 -1
  89. package/dist/collection/components/certificate-details-parts/attributes/activity_description_attribute.js.map +1 -1
  90. package/dist/collection/components/certificate-details-parts/attributes/as_string_attribute.js.map +1 -1
  91. package/dist/collection/components/certificate-details-parts/attributes/basic_attribute.js.map +1 -1
  92. package/dist/collection/components/certificate-details-parts/attributes/challenge_password_attribute.js.map +1 -1
  93. package/dist/collection/components/certificate-details-parts/attributes/index.js +1 -1
  94. package/dist/collection/components/certificate-details-parts/attributes/index.js.map +1 -1
  95. package/dist/collection/components/certificate-details-parts/attributes/insurance_value_attribute.js.map +1 -1
  96. package/dist/collection/components/certificate-details-parts/attributes/name_attribute.js.map +1 -1
  97. package/dist/collection/components/certificate-details-parts/attributes/name_part.js +1 -0
  98. package/dist/collection/components/certificate-details-parts/attributes/name_part.js.map +1 -1
  99. package/dist/collection/components/certificate-details-parts/attributes/type_relationship_attribute.js.map +1 -1
  100. package/dist/collection/components/certificate-details-parts/attributes/unstructured_name_attribute.js.map +1 -1
  101. package/dist/collection/components/certificate-details-parts/attributes/valuation_ranking_attribute.js.map +1 -1
  102. package/dist/collection/components/certificate-details-parts/attributes/web_gdpr_attribute.js.map +1 -1
  103. package/dist/collection/components/certificate-details-parts/basic_information.js.map +1 -1
  104. package/dist/collection/components/certificate-details-parts/extensions/archive_rev_info_extension.js.map +1 -1
  105. package/dist/collection/components/certificate-details-parts/extensions/as_string_extension.js.map +1 -1
  106. package/dist/collection/components/certificate-details-parts/extensions/authority_key_identifier_extension.js +1 -1
  107. package/dist/collection/components/certificate-details-parts/extensions/authority_key_identifier_extension.js.map +1 -1
  108. package/dist/collection/components/certificate-details-parts/extensions/basic_constraints_extension.js.map +1 -1
  109. package/dist/collection/components/certificate-details-parts/extensions/basic_extension.js.map +1 -1
  110. package/dist/collection/components/certificate-details-parts/extensions/biometric_syntax_extension.js.map +1 -1
  111. package/dist/collection/components/certificate-details-parts/extensions/ca_version_extension.js.map +1 -1
  112. package/dist/collection/components/certificate-details-parts/extensions/cabforganization_identifier_extension.js +1 -1
  113. package/dist/collection/components/certificate-details-parts/extensions/cabforganization_identifier_extension.js.map +1 -1
  114. package/dist/collection/components/certificate-details-parts/extensions/certificate_policies_extension.js +1 -1
  115. package/dist/collection/components/certificate-details-parts/extensions/certificate_policies_extension.js.map +1 -1
  116. package/dist/collection/components/certificate-details-parts/extensions/certificate_template_extension.js.map +1 -1
  117. package/dist/collection/components/certificate-details-parts/extensions/certificate_transparency_extension.js.map +1 -1
  118. package/dist/collection/components/certificate-details-parts/extensions/crl_distribution_points_extension.js.map +1 -1
  119. package/dist/collection/components/certificate-details-parts/extensions/crl_number_extension.js.map +1 -1
  120. package/dist/collection/components/certificate-details-parts/extensions/crl_reason_extension.js.map +1 -1
  121. package/dist/collection/components/certificate-details-parts/extensions/enroll_cert_type_extension.js.map +1 -1
  122. package/dist/collection/components/certificate-details-parts/extensions/entrust_version_info_extension.js.map +1 -1
  123. package/dist/collection/components/certificate-details-parts/extensions/extended_key_usage_extension.js.map +1 -1
  124. package/dist/collection/components/certificate-details-parts/extensions/general_name_part.js +3 -3
  125. package/dist/collection/components/certificate-details-parts/extensions/general_name_part.js.map +1 -1
  126. package/dist/collection/components/certificate-details-parts/extensions/index.js +2 -2
  127. package/dist/collection/components/certificate-details-parts/extensions/index.js.map +1 -1
  128. package/dist/collection/components/certificate-details-parts/extensions/info_access_syntax_extension.js.map +1 -1
  129. package/dist/collection/components/certificate-details-parts/extensions/issuing_distribution_point_extension.js +0 -1
  130. package/dist/collection/components/certificate-details-parts/extensions/issuing_distribution_point_extension.js.map +1 -1
  131. package/dist/collection/components/certificate-details-parts/extensions/key_description_extension.js +2 -2
  132. package/dist/collection/components/certificate-details-parts/extensions/key_description_extension.js.map +1 -1
  133. package/dist/collection/components/certificate-details-parts/extensions/key_usage_extension.js.map +1 -1
  134. package/dist/collection/components/certificate-details-parts/extensions/lei_extension.js.map +1 -1
  135. package/dist/collection/components/certificate-details-parts/extensions/lei_role_extennsion.js.map +1 -1
  136. package/dist/collection/components/certificate-details-parts/extensions/logotype_extension.js.map +1 -1
  137. package/dist/collection/components/certificate-details-parts/extensions/name_constraints_extension.js.map +1 -1
  138. package/dist/collection/components/certificate-details-parts/extensions/netscape_cert_type_extension.js.map +1 -1
  139. package/dist/collection/components/certificate-details-parts/extensions/netscape_comment_extension.js.map +1 -1
  140. package/dist/collection/components/certificate-details-parts/extensions/policy_constraints_extension.js.map +1 -1
  141. package/dist/collection/components/certificate-details-parts/extensions/policy_mappings_extension.js.map +1 -1
  142. package/dist/collection/components/certificate-details-parts/extensions/private_key_usage_period_extension.js.map +1 -1
  143. package/dist/collection/components/certificate-details-parts/extensions/qc_statements_extension.js.map +1 -1
  144. package/dist/collection/components/certificate-details-parts/extensions/subject_alternative_name_extension.js.map +1 -1
  145. package/dist/collection/components/certificate-details-parts/extensions/subject_directory_attributes_extension.js.map +1 -1
  146. package/dist/collection/components/certificate-details-parts/extensions/subject_key_identifier_extension.js +1 -1
  147. package/dist/collection/components/certificate-details-parts/extensions/subject_key_identifier_extension.js.map +1 -1
  148. package/dist/collection/components/certificate-details-parts/extensions/timestamp_extension.js.map +1 -1
  149. package/dist/collection/components/certificate-details-parts/extensions/tn_auth_list_extension.js.map +1 -1
  150. package/dist/collection/components/certificate-details-parts/holder.js +1 -1
  151. package/dist/collection/components/certificate-details-parts/holder.js.map +1 -1
  152. package/dist/collection/components/certificate-details-parts/issuer.js.map +1 -1
  153. package/dist/collection/components/certificate-details-parts/issuer_name.js +3 -1
  154. package/dist/collection/components/certificate-details-parts/issuer_name.js.map +1 -1
  155. package/dist/collection/components/certificate-details-parts/miscellaneous.js +2 -2
  156. package/dist/collection/components/certificate-details-parts/miscellaneous.js.map +1 -1
  157. package/dist/collection/components/certificate-details-parts/public_key.js +1 -1
  158. package/dist/collection/components/certificate-details-parts/public_key.js.map +1 -1
  159. package/dist/collection/components/certificate-details-parts/revoked_certificates.js +3 -3
  160. package/dist/collection/components/certificate-details-parts/revoked_certificates.js.map +1 -1
  161. package/dist/collection/components/certificate-details-parts/row.js +3 -3
  162. package/dist/collection/components/certificate-details-parts/row.js.map +1 -1
  163. package/dist/collection/components/certificate-details-parts/signature.js +1 -1
  164. package/dist/collection/components/certificate-details-parts/signature.js.map +1 -1
  165. package/dist/collection/components/certificate-details-parts/subject_name.js.map +1 -1
  166. package/dist/collection/components/certificate-details-parts/thumbprints.js.map +1 -1
  167. package/dist/collection/components/certificate-summary/certificate-summary.js.map +1 -1
  168. package/dist/collection/components/certificate-viewer/certificate-viewer.js +5 -7
  169. package/dist/collection/components/certificate-viewer/certificate-viewer.js.map +1 -1
  170. package/dist/collection/components/certificates-viewer/certificates-viewer.js +44 -43
  171. package/dist/collection/components/certificates-viewer/certificates-viewer.js.map +1 -1
  172. package/dist/collection/components/circular-progress/circular-progress.js +2 -6
  173. package/dist/collection/components/circular-progress/circular-progress.js.map +1 -1
  174. package/dist/collection/components/crl-viewer/crl-viewer.js +4 -6
  175. package/dist/collection/components/crl-viewer/crl-viewer.js.map +1 -1
  176. package/dist/collection/components/csr-viewer/csr-viewer.js +4 -8
  177. package/dist/collection/components/csr-viewer/csr-viewer.js.map +1 -1
  178. package/dist/collection/components/highlight-words/highlight-words.js +1 -1
  179. package/dist/collection/components/highlight-words/highlight-words.js.map +1 -1
  180. package/dist/collection/components/icons/actions.js.map +1 -1
  181. package/dist/collection/components/icons/arrow_bottom.js.map +1 -1
  182. package/dist/collection/components/icons/arrow_top.js.map +1 -1
  183. package/dist/collection/components/icons/cross.js.map +1 -1
  184. package/dist/collection/components/icons/details.js.map +1 -1
  185. package/dist/collection/components/icons/download.js.map +1 -1
  186. package/dist/collection/components/icons/link.js.map +1 -1
  187. package/dist/collection/components/link/link.js +1 -1
  188. package/dist/collection/components/link/link.js.map +1 -1
  189. package/dist/collection/components/text-hider/text-hider.js +1 -1
  190. package/dist/collection/components/text-hider/text-hider.js.map +1 -1
  191. package/dist/collection/components/typography/typography.js.map +1 -1
  192. package/dist/collection/constants/oids.js +21 -3
  193. package/dist/collection/constants/oids.js.map +1 -1
  194. package/dist/collection/crypto/asn_data.js +1 -1
  195. package/dist/collection/crypto/asn_data.js.map +1 -1
  196. package/dist/collection/crypto/attribute.js.map +1 -1
  197. package/dist/collection/crypto/extension.js.map +1 -1
  198. package/dist/collection/crypto/name.js.map +1 -1
  199. package/dist/collection/crypto/pem_converter.js +13 -8
  200. package/dist/collection/crypto/pem_converter.js.map +1 -1
  201. package/dist/collection/crypto/pkcs10_certificate_request.js.map +1 -1
  202. package/dist/collection/crypto/provider.js +7 -3
  203. package/dist/collection/crypto/provider.js.map +1 -1
  204. package/dist/collection/crypto/utils.js +1 -1
  205. package/dist/collection/crypto/utils.js.map +1 -1
  206. package/dist/collection/crypto/x509_attribute_certificate.js +2 -2
  207. package/dist/collection/crypto/x509_attribute_certificate.js.map +1 -1
  208. package/dist/collection/crypto/x509_certificate.js +3 -6
  209. package/dist/collection/crypto/x509_certificate.js.map +1 -1
  210. package/dist/collection/crypto/x509_certificates.js +3 -7
  211. package/dist/collection/crypto/x509_certificates.js.map +1 -1
  212. package/dist/collection/crypto/x509_crl.js.map +1 -1
  213. package/dist/collection/utils/download.js +1 -0
  214. package/dist/collection/utils/download.js.map +1 -1
  215. package/dist/collection/utils/download_from_buffer.js +3 -3
  216. package/dist/collection/utils/download_from_buffer.js.map +1 -1
  217. package/dist/collection/utils/l10n.js +1 -3
  218. package/dist/collection/utils/l10n.js.map +1 -1
  219. package/dist/collection/utils/read_file.js.map +1 -1
  220. package/dist/esm/actions-DzoPRObK.js.map +1 -1
  221. package/dist/esm/arrow_top-CF9pv-tQ.js.map +1 -1
  222. package/dist/esm/{button-Djn8UI82.js → button-Do0R_8PZ.js} +4 -4
  223. package/dist/esm/button-Do0R_8PZ.js.map +1 -0
  224. package/dist/esm/{certification_request-BTbyumBe.js → certification_request-DazysL_f.js} +50 -24
  225. package/dist/esm/certification_request-DazysL_f.js.map +1 -0
  226. package/dist/esm/cross-DdCuR1F2.js.map +1 -1
  227. package/dist/esm/download-Cqfc-Sxf.js.map +1 -1
  228. package/dist/esm/index.js +4 -4
  229. package/dist/esm/{link-BfDk078v.js → link-qg3yKAoS.js} +4 -4
  230. package/dist/esm/link-qg3yKAoS.js.map +1 -0
  231. package/dist/esm/{miscellaneous-CGtCg3Q9.js → miscellaneous-BJPX0Hs_.js} +23 -22
  232. package/dist/esm/miscellaneous-BJPX0Hs_.js.map +1 -0
  233. package/dist/esm/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +1 -1
  234. package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js +8 -16
  235. package/dist/esm/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -1
  236. package/dist/esm/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.js.map +1 -1
  237. package/dist/esm/peculiar-button-menu_3.entry.js +5 -11
  238. package/dist/esm/peculiar-button-menu_3.entry.js.map +1 -1
  239. package/dist/esm/peculiar-certificate-decoder.entry.js +12 -13
  240. package/dist/esm/peculiar-certificate-decoder.entry.js.map +1 -1
  241. package/dist/esm/peculiar-certificate-viewer.entry.js +5 -7
  242. package/dist/esm/peculiar-certificate-viewer.entry.js.map +1 -1
  243. package/dist/esm/peculiar-certificates-viewer.entry.js +47 -46
  244. package/dist/esm/peculiar-certificates-viewer.entry.js.map +1 -1
  245. package/dist/esm/peculiar-text-hider.entry.js +2 -2
  246. package/dist/esm/peculiar-text-hider.entry.js.map +1 -1
  247. package/dist/esm/{pkcs10_certificate_request-CrA_WcgY.js → pkcs10_certificate_request-SQcYKma2.js} +3 -3
  248. package/dist/esm/pkcs10_certificate_request-SQcYKma2.js.map +1 -0
  249. package/dist/esm/read_file-F2F0McJX.js.map +1 -1
  250. package/dist/esm/{x509_certificate-DX7sKoAD.js → x509_certificate-Dmgw53TR.js} +6 -9
  251. package/dist/esm/x509_certificate-Dmgw53TR.js.map +1 -0
  252. package/dist/esm/{x509_crl-DRjoh8Yp.js → x509_crl-B5TRu79b.js} +6 -6
  253. package/dist/esm/x509_crl-B5TRu79b.js.map +1 -0
  254. package/dist/esm-es5/actions-DzoPRObK.js.map +1 -1
  255. package/dist/esm-es5/arrow_top-CF9pv-tQ.js.map +1 -1
  256. package/dist/esm-es5/{button-Djn8UI82.js → button-Do0R_8PZ.js} +2 -2
  257. package/dist/esm-es5/button-Do0R_8PZ.js.map +1 -0
  258. package/dist/esm-es5/{certification_request-BTbyumBe.js → certification_request-DazysL_f.js} +15 -15
  259. package/dist/esm-es5/certification_request-DazysL_f.js.map +1 -0
  260. package/dist/esm-es5/cross-DdCuR1F2.js.map +1 -1
  261. package/dist/esm-es5/download-Cqfc-Sxf.js.map +1 -1
  262. package/dist/esm-es5/index.js +1 -1
  263. package/dist/esm-es5/{link-BfDk078v.js → link-qg3yKAoS.js} +3 -3
  264. package/dist/esm-es5/link-qg3yKAoS.js.map +1 -0
  265. package/dist/esm-es5/{miscellaneous-CGtCg3Q9.js → miscellaneous-BJPX0Hs_.js} +3 -3
  266. package/dist/esm-es5/miscellaneous-BJPX0Hs_.js.map +1 -0
  267. package/dist/esm-es5/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.js.map +1 -1
  268. package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js +1 -1
  269. package/dist/esm-es5/peculiar-attribute-certificate-viewer_4.entry.js.map +1 -1
  270. package/dist/esm-es5/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.js.map +1 -1
  271. package/dist/esm-es5/peculiar-button-menu_3.entry.js +1 -1
  272. package/dist/esm-es5/peculiar-button-menu_3.entry.js.map +1 -1
  273. package/dist/esm-es5/peculiar-certificate-decoder.entry.js +1 -1
  274. package/dist/esm-es5/peculiar-certificate-decoder.entry.js.map +1 -1
  275. package/dist/esm-es5/peculiar-certificate-viewer.entry.js +1 -1
  276. package/dist/esm-es5/peculiar-certificate-viewer.entry.js.map +1 -1
  277. package/dist/esm-es5/peculiar-certificates-viewer.entry.js +2 -2
  278. package/dist/esm-es5/peculiar-certificates-viewer.entry.js.map +1 -1
  279. package/dist/esm-es5/peculiar-text-hider.entry.js +1 -1
  280. package/dist/esm-es5/peculiar-text-hider.entry.js.map +1 -1
  281. package/dist/esm-es5/{pkcs10_certificate_request-CrA_WcgY.js → pkcs10_certificate_request-SQcYKma2.js} +2 -2
  282. package/dist/esm-es5/pkcs10_certificate_request-SQcYKma2.js.map +1 -0
  283. package/dist/esm-es5/read_file-F2F0McJX.js.map +1 -1
  284. package/dist/esm-es5/{x509_certificate-DX7sKoAD.js → x509_certificate-Dmgw53TR.js} +3 -3
  285. package/dist/esm-es5/x509_certificate-Dmgw53TR.js.map +1 -0
  286. package/dist/esm-es5/{x509_crl-DRjoh8Yp.js → x509_crl-B5TRu79b.js} +4 -4
  287. package/dist/esm-es5/x509_crl-B5TRu79b.js.map +1 -0
  288. package/dist/peculiar/index.esm.js +1 -1
  289. package/dist/peculiar/p--Pej0I-A.system.js.map +1 -0
  290. package/dist/peculiar/{p-CpTwQbPC.js → p-0HZUc9Ix.js} +3 -3
  291. package/dist/peculiar/p-0HZUc9Ix.js.map +1 -0
  292. package/dist/peculiar/p-15c2b820.entry.js +5 -0
  293. package/dist/peculiar/{p-f4490197.entry.js.map → p-15c2b820.entry.js.map} +1 -1
  294. package/dist/peculiar/{p-ab220e36.system.entry.js → p-16aa5600.system.entry.js} +2 -2
  295. package/dist/peculiar/p-16aa5600.system.entry.js.map +1 -0
  296. package/dist/peculiar/{p-e7266b0a.entry.js → p-1cbb0d6b.entry.js} +15 -15
  297. package/dist/peculiar/p-1cbb0d6b.entry.js.map +1 -0
  298. package/dist/peculiar/{p-85667993.entry.js → p-218364f2.entry.js} +2 -2
  299. package/dist/peculiar/p-218364f2.entry.js.map +1 -0
  300. package/dist/peculiar/{p-Bw_icgVx.js → p-3zhoLQno.js} +4 -4
  301. package/dist/peculiar/p-3zhoLQno.js.map +1 -0
  302. package/dist/peculiar/{p-73a75d1e.system.entry.js → p-44648a8e.system.entry.js} +3 -3
  303. package/dist/peculiar/p-44648a8e.system.entry.js.map +1 -0
  304. package/dist/peculiar/{p-092074e8.system.entry.js → p-52444a44.system.entry.js} +2 -2
  305. package/dist/peculiar/p-52444a44.system.entry.js.map +1 -0
  306. package/dist/peculiar/{p-c2a805b3.entry.js → p-5b843427.entry.js} +3 -3
  307. package/dist/peculiar/p-5b843427.entry.js.map +1 -0
  308. package/dist/peculiar/{p-12d2e080.entry.js → p-7b0e7f43.entry.js} +2 -2
  309. package/dist/peculiar/p-7b0e7f43.entry.js.map +1 -0
  310. package/dist/peculiar/p-B2YrZuK2.system.js.map +1 -1
  311. package/dist/peculiar/p-BA8os2l6.system.js.map +1 -0
  312. package/dist/peculiar/p-BAB4EyrL.system.js.map +1 -0
  313. package/dist/peculiar/{p-B7TxZGea.system.js → p-BBZwtkNN.system.js} +4 -4
  314. package/dist/peculiar/p-BBZwtkNN.system.js.map +1 -0
  315. package/dist/peculiar/p-BBgwMHRZ.system.js.map +1 -1
  316. package/dist/peculiar/p-BHBizfwo.js.map +1 -1
  317. package/dist/peculiar/{p-lnQq6VON.system.js → p-BKKflyKt.system.js} +5 -5
  318. package/dist/peculiar/p-BKKflyKt.system.js.map +1 -0
  319. package/dist/peculiar/p-BOSH9vjy.system.js.map +1 -1
  320. package/dist/peculiar/p-BP2bmYR2.system.js.map +1 -1
  321. package/dist/peculiar/p-BcFnjn1R.system.js.map +1 -0
  322. package/dist/peculiar/{p-vMACJe_C.system.js → p-BmIps4bV.system.js} +22 -22
  323. package/dist/peculiar/p-BmIps4bV.system.js.map +1 -0
  324. package/dist/peculiar/{p-B0CjUC4o.system.js → p-CDh6shXP.system.js} +9 -9
  325. package/dist/peculiar/p-CDh6shXP.system.js.map +1 -0
  326. package/dist/peculiar/{p-BisXzAqN.js → p-CEHpBNWe.js} +3 -3
  327. package/dist/peculiar/p-CEHpBNWe.js.map +1 -0
  328. package/dist/peculiar/{p-Ct0zEUB_.js → p-CJro0Exb.js} +12 -12
  329. package/dist/peculiar/p-CJro0Exb.js.map +1 -0
  330. package/dist/peculiar/p-CWs-Ocvt.system.js.map +1 -0
  331. package/dist/peculiar/p-CeKqQ13Z.js.map +1 -1
  332. package/dist/peculiar/{p-BCATfe_H.js → p-CkwiD_ia.js} +2 -2
  333. package/dist/peculiar/p-CkwiD_ia.js.map +1 -0
  334. package/dist/peculiar/{p-BRhx1gbw.system.js → p-Cm-ylIxb.system.js} +2 -2
  335. package/dist/peculiar/p-Cm-ylIxb.system.js.map +1 -0
  336. package/dist/peculiar/p-D2QB-8Q6.system.js.map +1 -1
  337. package/dist/peculiar/p-D5BWI7FK.system.js +1 -1
  338. package/dist/peculiar/p-DJRm54BZ.system.js.map +1 -0
  339. package/dist/peculiar/{p-DxdVL_Kj.system.js → p-DRoyzOgk.system.js} +3 -3
  340. package/dist/peculiar/p-DRoyzOgk.system.js.map +1 -0
  341. package/dist/peculiar/{p-BTbyumBe.js → p-DazysL_f.js} +9 -9
  342. package/dist/peculiar/p-DazysL_f.js.map +1 -0
  343. package/dist/peculiar/p-DhdG07f8.js.map +1 -1
  344. package/dist/peculiar/p-DkAhB3Vy.js.map +1 -1
  345. package/dist/peculiar/{p-4IvcYmU7.js → p-DzItK48Y.js} +4 -4
  346. package/dist/peculiar/p-DzItK48Y.js.map +1 -0
  347. package/dist/peculiar/p-F2F0McJX.js.map +1 -1
  348. package/dist/peculiar/{p-wgYkE8CV.system.js → p-YHrZ3f_s.system.js} +2 -2
  349. package/dist/peculiar/p-YHrZ3f_s.system.js.map +1 -0
  350. package/dist/peculiar/p-a3c0f753.system.entry.js +5 -0
  351. package/dist/peculiar/{p-cae95996.system.entry.js.map → p-a3c0f753.system.entry.js.map} +1 -1
  352. package/dist/peculiar/{p-80fc5538.entry.js → p-ab6a8a44.entry.js} +2 -2
  353. package/dist/peculiar/p-ab6a8a44.entry.js.map +1 -0
  354. package/dist/peculiar/{p-1af57833.system.entry.js → p-d16ddef8.system.entry.js} +2 -2
  355. package/dist/peculiar/p-d16ddef8.system.entry.js.map +1 -0
  356. package/dist/peculiar/{p-1b3855ec.system.entry.js → p-d9013293.system.entry.js} +16 -16
  357. package/dist/peculiar/p-d9013293.system.entry.js.map +1 -0
  358. package/dist/peculiar/{p-B859JpGw.system.js → p-wYK0iVYg.system.js} +2 -2
  359. package/dist/peculiar/p-wYK0iVYg.system.js.map +1 -0
  360. package/dist/peculiar/peculiar-attribute-certificate-viewer.peculiar-certificate-chain-viewer.peculiar-crl-viewer.peculiar-csr-viewer.entry.esm.js.map +1 -1
  361. package/dist/peculiar/peculiar-button-menu.peculiar-circular-progress.peculiar-highlight-words.entry.esm.js.map +1 -1
  362. package/dist/peculiar/peculiar-certificate-decoder.entry.esm.js.map +1 -1
  363. package/dist/peculiar/peculiar-certificate-viewer.entry.esm.js.map +1 -1
  364. package/dist/peculiar/peculiar-certificates-viewer.entry.esm.js.map +1 -1
  365. package/dist/peculiar/peculiar-text-hider.entry.esm.js.map +1 -1
  366. package/dist/peculiar/peculiar.esm.js +1 -1
  367. package/dist/types/components/attribute-certificate-viewer/attribute-certificate-viewer.d.ts +3 -3
  368. package/dist/types/components/button/button.d.ts +2 -2
  369. package/dist/types/components/button/index.d.ts +1 -1
  370. package/dist/types/components/button-menu/button-menu.d.ts +5 -5
  371. package/dist/types/components/certificate-details-parts/miscellaneous.d.ts +2 -2
  372. package/dist/types/components/certificate-summary/certificate-summary.d.ts +2 -2
  373. package/dist/types/components/certificate-viewer/certificate-viewer.d.ts +3 -3
  374. package/dist/types/components/certificates-viewer/certificates-viewer.d.ts +3 -2
  375. package/dist/types/components/crl-viewer/crl-viewer.d.ts +3 -3
  376. package/dist/types/components/csr-viewer/csr-viewer.d.ts +3 -3
  377. package/dist/types/components/icons/actions.d.ts +2 -2
  378. package/dist/types/components/icons/arrow_bottom.d.ts +2 -2
  379. package/dist/types/components/icons/arrow_top.d.ts +2 -2
  380. package/dist/types/components/icons/cross.d.ts +2 -2
  381. package/dist/types/components/icons/details.d.ts +2 -2
  382. package/dist/types/components/icons/download.d.ts +2 -2
  383. package/dist/types/components/icons/link.d.ts +2 -2
  384. package/dist/types/components/link/link.d.ts +4 -4
  385. package/dist/types/components/typography/typography.d.ts +5 -5
  386. package/dist/types/components.d.ts +20 -20
  387. package/dist/types/constants/oids.d.ts +20 -3
  388. package/dist/types/crypto/asn_data.d.ts +1 -3
  389. package/dist/types/crypto/pem_converter.d.ts +7 -19
  390. package/dist/types/crypto/provider.d.ts +1 -6
  391. package/dist/types/interface.d.ts +3 -3
  392. package/dist/types/utils/l10n.d.ts +6 -6
  393. package/dist/types/utils/read_file.d.ts +7 -7
  394. package/hydrate/index.js +132 -124
  395. package/hydrate/index.mjs +132 -124
  396. package/package.json +2 -2
  397. package/dist/cjs/button-C5jDF-CZ.js.map +0 -1
  398. package/dist/cjs/certification_request-Bipg1Az7.js.map +0 -1
  399. package/dist/cjs/link-CwLq-Nge.js.map +0 -1
  400. package/dist/cjs/miscellaneous-C0sOAo-1.js.map +0 -1
  401. package/dist/cjs/pkcs10_certificate_request-BDz0P_px.js.map +0 -1
  402. package/dist/cjs/x509_certificate-DRvXOszL.js.map +0 -1
  403. package/dist/cjs/x509_crl-DVGVym_S.js.map +0 -1
  404. package/dist/esm/button-Djn8UI82.js.map +0 -1
  405. package/dist/esm/certification_request-BTbyumBe.js.map +0 -1
  406. package/dist/esm/link-BfDk078v.js.map +0 -1
  407. package/dist/esm/miscellaneous-CGtCg3Q9.js.map +0 -1
  408. package/dist/esm/pkcs10_certificate_request-CrA_WcgY.js.map +0 -1
  409. package/dist/esm/x509_certificate-DX7sKoAD.js.map +0 -1
  410. package/dist/esm/x509_crl-DRjoh8Yp.js.map +0 -1
  411. package/dist/esm-es5/button-Djn8UI82.js.map +0 -1
  412. package/dist/esm-es5/certification_request-BTbyumBe.js.map +0 -1
  413. package/dist/esm-es5/link-BfDk078v.js.map +0 -1
  414. package/dist/esm-es5/miscellaneous-CGtCg3Q9.js.map +0 -1
  415. package/dist/esm-es5/pkcs10_certificate_request-CrA_WcgY.js.map +0 -1
  416. package/dist/esm-es5/x509_certificate-DX7sKoAD.js.map +0 -1
  417. package/dist/esm-es5/x509_crl-DRjoh8Yp.js.map +0 -1
  418. package/dist/peculiar/p-092074e8.system.entry.js.map +0 -1
  419. package/dist/peculiar/p-12d2e080.entry.js.map +0 -1
  420. package/dist/peculiar/p-1af57833.system.entry.js.map +0 -1
  421. package/dist/peculiar/p-1b3855ec.system.entry.js.map +0 -1
  422. package/dist/peculiar/p-4IvcYmU7.js.map +0 -1
  423. package/dist/peculiar/p-73a75d1e.system.entry.js.map +0 -1
  424. package/dist/peculiar/p-7Nmqck4T.system.js.map +0 -1
  425. package/dist/peculiar/p-80fc5538.entry.js.map +0 -1
  426. package/dist/peculiar/p-85667993.entry.js.map +0 -1
  427. package/dist/peculiar/p-B0CjUC4o.system.js.map +0 -1
  428. package/dist/peculiar/p-B7TxZGea.system.js.map +0 -1
  429. package/dist/peculiar/p-B859JpGw.system.js.map +0 -1
  430. package/dist/peculiar/p-BCATfe_H.js.map +0 -1
  431. package/dist/peculiar/p-BRhx1gbw.system.js.map +0 -1
  432. package/dist/peculiar/p-BTbyumBe.js.map +0 -1
  433. package/dist/peculiar/p-BX9qW3ww.system.js.map +0 -1
  434. package/dist/peculiar/p-BbPo3hge.system.js.map +0 -1
  435. package/dist/peculiar/p-BisXzAqN.js.map +0 -1
  436. package/dist/peculiar/p-Bw_icgVx.js.map +0 -1
  437. package/dist/peculiar/p-C_7Koml8.system.js.map +0 -1
  438. package/dist/peculiar/p-CpTwQbPC.js.map +0 -1
  439. package/dist/peculiar/p-Ct0zEUB_.js.map +0 -1
  440. package/dist/peculiar/p-DxdVL_Kj.system.js.map +0 -1
  441. package/dist/peculiar/p-FVz6FuoZ.system.js.map +0 -1
  442. package/dist/peculiar/p-RW7UbzcZ.system.js.map +0 -1
  443. package/dist/peculiar/p-ab220e36.system.entry.js.map +0 -1
  444. package/dist/peculiar/p-c2a805b3.entry.js.map +0 -1
  445. package/dist/peculiar/p-cae95996.system.entry.js +0 -5
  446. package/dist/peculiar/p-e7266b0a.entry.js.map +0 -1
  447. package/dist/peculiar/p-f4490197.entry.js +0 -5
  448. package/dist/peculiar/p-lnQq6VON.system.js.map +0 -1
  449. package/dist/peculiar/p-vMACJe_C.system.js.map +0 -1
  450. package/dist/peculiar/p-wgYkE8CV.system.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["BasicAttribute","props","children","attribute","h","RowValue","name","value","getStringByOID","asn","type","colSpan","class","NamePart","map","relativeDistinguishedName","attributeTypeAndValue","OIDs","toString","NameAttribute","ActivityDescriptionAttribute","camelCaseToWords","TableRowTable","GeneralNamePart","generalName","codeAuthority","getDNSNameLink","getIPAddressLink","codeId","shortName","shortDescription","WebGdprAttribute","assessmentAuthority","assessmentLocation","assessmentRef","dataStorageTerritory","description","InsuranceValueAttribute","concat","base","degree","location","TypeRelationshipAttribute","Object","keys","keyName","toNumber","l10n","getString","getValueRank","ratio","ValuationRankingAttribute","values","AsStringAttribute","monospace","UnstructuredNameAttribute","utf8String","ChallengePasswordAttribute","Attributes","attributes","length","RowTitle","Name","ActivityDescription","WebGDPR","InsuranceValue","TypeRelationship","ValuationRanking","UnstructuredName","ChallengePassword","error","console","RevokedCertificates","revokedCertificates","certificate","Convert","ToHex","userCertificate","dateShort","revocationDate","getTime","crlEntryExtensions","extension","CRLReason","extnID","toJSON","reason","InvalidityDate","CertificateIssuer","gn","extnValue","Holder","holder","baseCertificateID","objectDigestInfo","issuer","item","serial","digestAlgorithm","algorithm","objectDigest","digestedObjectType","Issuer","certificateViewerCss","AttributeCertificateViewer","exports","class_1","hostRef","_this","this","mobileMediaQueryString","mobileScreenView","isDecodeInProcess","getAuthKeyIdParentLink","_a","authKeyIdParentLink","replace","getAuthKeyIdSiblingsLink","authKeyIdSiblingsLink","getSubjectKeyIdChildrenLink","subjectKeyIdChildrenLink","getSubjectKeyIdSiblingsLink","subjectKeyIdSiblingsLink","prototype","handleMediaQueryChange","event","matches","componentWillLoad","decodeCertificate","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","X509AttributeCertificate","certificateDecoded","parseExtensions","parseAttributes","getThumbprint","_b","sent","certificateDecodeError","error_1","watchCertificateAndDecode","newValue","oldValue","serialNumber","renderErrorState","Typography","renderEmptyState","render","Host","String","BasicInformation","assign","Signature","signature","Thumbprints","thumbprints","getLEILink","Extensions","extensions","download","Miscellaneous","certificateChainViewerCss","CertificateChainViewer","class_2","selectedCertificateIndex","certificates","role","Array","from","index","onClick","commonName","CrlViewer","class_3","X509Crl","error_2","getIssuerDnLink","issuerDnLink","IssuerName","CsrViewer","class_4","Pkcs10CertificateRequest","error_3","SubjectName","subject","PublicKey","publicKey","title"],"sources":["src/components/certificate-details-parts/attributes/basic_attribute.tsx","src/components/certificate-details-parts/attributes/name_part.tsx","src/components/certificate-details-parts/attributes/name_attribute.tsx","src/components/certificate-details-parts/attributes/activity_description_attribute.tsx","src/components/certificate-details-parts/attributes/web_gdpr_attribute.tsx","src/components/certificate-details-parts/attributes/insurance_value_attribute.tsx","src/components/certificate-details-parts/attributes/type_relationship_attribute.tsx","src/components/certificate-details-parts/attributes/valuation_ranking_attribute.tsx","src/components/certificate-details-parts/attributes/as_string_attribute.tsx","src/components/certificate-details-parts/attributes/unstructured_name_attribute.tsx","src/components/certificate-details-parts/attributes/challenge_password_attribute.tsx","src/components/certificate-details-parts/attributes/index.tsx","src/components/certificate-details-parts/revoked_certificates.tsx","src/components/certificate-details-parts/holder.tsx","src/components/certificate-details-parts/issuer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-attribute-certificate-viewer&encapsulation=shadow","src/components/attribute-certificate-viewer/attribute-certificate-viewer.tsx","src/components/certificate-chain-viewer/certificate-chain-viewer.scss?tag=peculiar-certificate-chain-viewer&encapsulation=shadow","src/components/certificate-chain-viewer/certificate-chain-viewer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-crl-viewer&encapsulation=shadow","src/components/crl-viewer/crl-viewer.tsx","src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-csr-viewer&encapsulation=shadow","src/components/csr-viewer/csr-viewer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\n\nimport type { Attribute, TAttributeValue } from '../../../crypto/attribute';\nimport { getStringByOID } from '../../../utils';\nimport { RowValue } from '../row';\n\ninterface IBasicAttributeProps {\n attribute: Attribute<TAttributeValue>;\n}\n\nexport const BasicAttribute: FunctionalComponent<IBasicAttributeProps> = (props, children) => {\n const { attribute } = props;\n\n return ([\n <RowValue\n name=\"Name\"\n value={getStringByOID(attribute.asn.type)}\n />,\n children,\n <tr>\n <td colSpan={2} class=\"divider\">\n <span />\n </td>\n </tr>,\n ]);\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { Name } from '@peculiar/asn1-x509';\n\nimport { OIDs } from '../../../constants/oids';\nimport { RowValue } from '../row';\n\ninterface INamePartProps {\n name: Name;\n}\n\nexport const NamePart: FunctionalComponent<INamePartProps> = (props): any[] => {\n const { name } = props;\n\n if (!name) {\n return null;\n }\n\n return name.map((relativeDistinguishedName) => (\n relativeDistinguishedName.map((attributeTypeAndValue) => (\n <RowValue\n name={OIDs[attributeTypeAndValue.type] || attributeTypeAndValue.type}\n value={attributeTypeAndValue.value.toString()}\n />\n ))\n ));\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { Name } from '@peculiar/asn1-x509';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { BasicAttribute } from './basic_attribute';\nimport { NamePart } from './name_part';\n\ninterface INameAttributeProps {\n attribute: Attribute<Name>;\n}\n\nexport const NameAttribute:\nFunctionalComponent<INameAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <NamePart\n name={attribute.value}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ActivityDescription } from '@peculiar/asn1-ntqwac';\n\nimport { Attribute } from '../../../crypto/attribute';\nimport { camelCaseToWords } from '../../../utils';\nimport { GeneralNamePart } from '../extensions/general_name_part';\nimport { RowValue, TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IActivityDescriptionAttributeProps {\n attribute: Attribute<ActivityDescription>;\n}\n\nexport const ActivityDescriptionAttribute:\nFunctionalComponent<IActivityDescriptionAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name={camelCaseToWords('codeAuthority')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.codeAuthority}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('codeId')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.codeId}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('shortName')}\n value={attribute.value.shortName}\n />\n <RowValue\n name={camelCaseToWords('shortDescription')}\n value={attribute.value.shortDescription}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { WebGDPR } from '@peculiar/asn1-ntqwac';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { camelCaseToWords } from '../../../utils';\nimport { GeneralNamePart } from '../extensions/general_name_part';\nimport { RowValue, TableRowTable } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IWebGdprAttributeProps {\n attribute: Attribute<WebGDPR>;\n}\n\nexport const WebGdprAttribute:\nFunctionalComponent<IWebGdprAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name={camelCaseToWords('assessmentAuthority')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentAuthority}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('assessmentLocation')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentLocation}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('assessmentRef')}\n value=\"\"\n />\n <TableRowTable>\n <GeneralNamePart\n generalName={attribute.value.assessmentRef}\n getDNSNameLink={() => ''}\n getIPAddressLink={() => ''}\n />\n </TableRowTable>\n\n <RowValue\n name={camelCaseToWords('dataStorageTerritory')}\n value={attribute.value.dataStorageTerritory}\n />\n <RowValue\n name={camelCaseToWords('description')}\n value={attribute.value.description}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { InsuranceValue } from '@peculiar/asn1-ntqwac';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IInsuranceValueAttributeProps {\n attribute: Attribute<InsuranceValue>;\n}\n\nexport const InsuranceValueAttribute:\nFunctionalComponent<IInsuranceValueAttributeProps> = (props) => {\n const { attribute } = props;\n const value = `${attribute.value.base} * 10^${attribute.value.degree} ${attribute.value.location}`;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={value}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { TypeRelationship } from '@peculiar/asn1-ntqwac';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { l10n } from '../../../utils';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface ITypeRelationshipAttributeProps {\n attribute: Attribute<TypeRelationship>;\n}\n\nexport const TypeRelationshipAttribute:\nFunctionalComponent<ITypeRelationshipAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n {Object.keys(attribute.value).map((keyName) => (\n <RowValue\n name={keyName}\n value={attribute.value[keyName].toNumber() ? l10n.getString('yes') : l10n.getString('no')}\n />\n ))}\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ValuationRanking } from '@peculiar/asn1-ntqwac';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IValuationRankingAttributeProps {\n attribute: Attribute<ValuationRanking>;\n}\n\nconst getValueRank = (value: number): string => {\n let ratio = 1;\n\n if (value / 100 > 1) {\n ratio = 100;\n } else if (value / 10 > 1) {\n ratio = 10;\n }\n\n return `${value}/${5 * ratio}`;\n};\n\nexport const ValuationRankingAttribute:\nFunctionalComponent<IValuationRankingAttributeProps> = (props) => {\n const { attribute } = props;\n const values = Object.keys(attribute.value).map((keyName) => ([\n getValueRank(attribute.value[keyName]),\n <br />,\n ]));\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={values as any}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IAsStringAttributeProps {\n attribute: Attribute<string>;\n}\n\nexport const AsStringAttribute:\nFunctionalComponent<IAsStringAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value}\n monospace\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { UnstructuredName } from '@peculiar/asn1-pkcs9';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IUnstructuredNameAttributeProps {\n attribute: Attribute<UnstructuredName>;\n}\n\nexport const UnstructuredNameAttribute:\nFunctionalComponent<IUnstructuredNameAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value.utf8String}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport type { ChallengePassword } from '@peculiar/asn1-pkcs9';\n\nimport type { Attribute } from '../../../crypto/attribute';\nimport { RowValue } from '../row';\nimport { BasicAttribute } from './basic_attribute';\n\ninterface IChallengePasswordAttributeProps {\n attribute: Attribute<ChallengePassword>;\n}\n\nexport const ChallengePasswordAttribute:\nFunctionalComponent<IChallengePasswordAttributeProps> = (props) => {\n const { attribute } = props;\n\n return (\n <BasicAttribute\n attribute={attribute}\n >\n <RowValue\n name=\"Value\"\n value={attribute.value.toString()}\n />\n </BasicAttribute>\n );\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { Name } from '@peculiar/asn1-x509';\nimport {\n TypeRelationship,\n ActivityDescription,\n WebGDPR,\n InsuranceValue,\n ValuationRanking,\n} from '@peculiar/asn1-ntqwac';\nimport {\n UnstructuredName,\n ChallengePassword,\n} from '@peculiar/asn1-pkcs9';\n\nimport type { Attribute, TAttributeValue } from '../../../crypto/attribute';\nimport { RowTitle } from '../row';\nimport { NameAttribute } from './name_attribute';\nimport { ActivityDescriptionAttribute } from './activity_description_attribute';\nimport { WebGdprAttribute } from './web_gdpr_attribute';\nimport { InsuranceValueAttribute } from './insurance_value_attribute';\nimport { TypeRelationshipAttribute } from './type_relationship_attribute';\nimport { ValuationRankingAttribute } from './valuation_ranking_attribute';\nimport { BasicAttribute } from './basic_attribute';\nimport { AsStringAttribute } from './as_string_attribute';\nimport { UnstructuredNameAttribute } from './unstructured_name_attribute';\nimport { ChallengePasswordAttribute } from './challenge_password_attribute';\n\ninterface IAttributesPtops extends\n IGeneralNameOptions,\n ILeiOptions,\n IAuthorityKeyIdentifierOptions,\n ISubjectKeyIdentifierOptions {\n attributes: Attribute<TAttributeValue>[];\n}\n\nexport const Attributes: FunctionalComponent<IAttributesPtops> = (props) => {\n const { attributes } = props;\n\n if (!attributes || !attributes.length) {\n return null;\n }\n\n return ([\n <RowTitle\n value=\"Attributes\"\n />,\n attributes.map((attribute) => {\n try {\n if (attribute.value instanceof Name) {\n return (\n <NameAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof ActivityDescription) {\n return (\n <ActivityDescriptionAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof WebGDPR) {\n return (\n <WebGdprAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof InsuranceValue) {\n return (\n <InsuranceValueAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof TypeRelationship) {\n return (\n <TypeRelationshipAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof ValuationRanking) {\n return (\n <ValuationRankingAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof UnstructuredName) {\n return (\n <UnstructuredNameAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (attribute.value instanceof ChallengePassword) {\n return (\n <ChallengePasswordAttribute\n attribute={attribute as any}\n />\n );\n }\n\n if (typeof attribute.value === 'string') {\n return (\n <AsStringAttribute\n attribute={attribute as any}\n />\n );\n }\n\n return (\n <BasicAttribute\n attribute={attribute}\n />\n );\n } catch (error) {\n console.error('Error render attribute:', attribute.asn.type);\n\n return null;\n }\n }),\n ]);\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { CRLReason, InvalidityDate, CertificateIssuer } from '@peculiar/asn1-x509';\nimport { Convert } from 'pvtsutils';\n\nimport { dateShort, l10n, getStringByOID } from '../../utils';\nimport { IRevokedCertificate } from '../../crypto';\nimport { GeneralNamePart } from './extensions/general_name_part';\nimport { RowTitle, RowValue, TableRowTable } from './row';\n\ninterface IRevokedCertificatesProps extends IGeneralNameOptions {\n revokedCertificates: IRevokedCertificate[];\n}\n\nexport const RevokedCertificates: FunctionalComponent<IRevokedCertificatesProps> = (props) => {\n const {\n revokedCertificates,\n getDNSNameLink,\n getIPAddressLink,\n } = props;\n\n if (!revokedCertificates || !revokedCertificates.length) {\n return null;\n }\n\n return [\n <RowTitle\n value={l10n.getString('revokedCertificates')}\n />,\n revokedCertificates.map((certificate) => ([\n <RowValue\n name={l10n.getString('serialNumber')}\n value={Convert.ToHex(certificate.userCertificate)}\n monospace\n />,\n <RowValue\n name={l10n.getString('revocationDate')}\n value={dateShort(certificate.revocationDate.getTime())}\n />,\n (certificate.crlEntryExtensions && certificate.crlEntryExtensions.length && ([\n <RowValue\n name={`${l10n.getString('crlEntryExtensions')}:`}\n value=\"\"\n />,\n <TableRowTable>\n {\n certificate.crlEntryExtensions.map((extension) => {\n if (extension.value instanceof CRLReason) {\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={extension.value.toJSON() || extension.value.reason}\n />\n );\n }\n\n if (extension.value instanceof InvalidityDate) {\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={extension.value.value.getTime()}\n />\n );\n }\n\n if (extension.value instanceof CertificateIssuer && extension.value.length) {\n return ([\n <RowValue\n name={`${getStringByOID(extension.asn.extnID)}:`}\n value=\"\"\n />,\n extension.value.map((gn) => (\n <TableRowTable>\n <GeneralNamePart\n generalName={gn}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n />\n </TableRowTable>\n )),\n ]);\n }\n\n return (\n <RowValue\n name={getStringByOID(extension.asn.extnID)}\n value={Convert.ToHex(extension.asn.extnValue)}\n monospace\n />\n );\n })\n }\n </TableRowTable>,\n ])),\n <tr>\n <td colSpan={2} class=\"divider\">\n <span />\n </td>\n </tr>,\n ])),\n ];\n};\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { h, FunctionalComponent } from '@stencil/core';\nimport { Convert } from 'pvtsutils';\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","@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';\n\nimport {\n X509Certificates,\n} from '../../crypto';\nimport { Typography } from '../typography';\nimport {\n Miscellaneous,\n} 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: number = 0;\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 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","@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 { X509Crl } from '../../crypto';\nimport { getDNSNameLink, getIPAddressLink, getLEILink } from '../../utils/third_party_links';\nimport {\n BasicInformation,\n IssuerName,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n RevokedCertificates,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type CrlProp = string | X509Crl;\n\n@Component({\n tag: 'peculiar-crl-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class CrlViewer {\n private certificateDecoded: X509Crl;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: CrlProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop() download?: boolean;\n\n /**\n * Authority Key Identifier extension parent link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.subject_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdParentLink?: string;\n\n /**\n * Authority Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{authKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{authKeyId}}\n */\n @Prop({ reflect: true }) authKeyIdSiblingsLink?: string;\n\n /**\n * Issuer DN link.\n * **NOTE**: HTML component attribute must be `issuer-dn-link`.\n */\n @Prop({ reflect: true }) issuerDnLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView: 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: CrlProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof X509Crl) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new X509Crl(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseExtensions();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n private getAuthKeyIdParentLink = (value: string) => this.authKeyIdParentLink\n ?.replace('{{authKeyId}}', value);\n\n private getAuthKeyIdSiblingsLink = (value: string) => this.authKeyIdSiblingsLink\n ?.replace('{{authKeyId}}', value);\n\n private getIssuerDnLink() {\n return this.issuerDnLink;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(\n newValue: CrlProp,\n oldValue: CrlProp,\n ) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (\n newValue instanceof X509Crl\n && oldValue instanceof X509Crl\n ) {\n if (newValue.commonName !== oldValue.commonName) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n // 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 revocation list.\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 revocation list available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <IssuerName\n name={this.certificateDecoded.issuer}\n issuerDnLink={this.getIssuerDnLink()}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n />\n\n <RevokedCertificates\n revokedCertificates={this.certificateDecoded.revokedCertificates}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n />\n\n {this.download && (\n <Miscellaneous\n certificate={this.certificateDecoded}\n />\n )}\n </table>\n </Host>\n );\n }\n}\n","@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 { Pkcs10CertificateRequest } from '../../crypto';\nimport { getDNSNameLink, getIPAddressLink, getLEILink } from '../../utils/third_party_links';\nimport {\n BasicInformation,\n SubjectName,\n Signature,\n Thumbprints,\n Extensions,\n Miscellaneous,\n PublicKey,\n Attributes,\n} from '../certificate-details-parts';\nimport { Typography } from '../typography';\n\nexport type CsrProp = string | Pkcs10CertificateRequest;\n\n@Component({\n tag: 'peculiar-csr-viewer',\n styleUrl: '../certificate-viewer/certificate-viewer.scss',\n shadow: true,\n})\nexport class CsrViewer {\n private certificateDecoded: Pkcs10CertificateRequest;\n\n private certificateDecodeError: Error;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * The certificate value for decode and show details. Use PEM or DER.\n */\n @Prop({ reflect: true }) certificate: CsrProp;\n\n /**\n * If `true` - component will show split-button to download certificate as PEM or DER.\n */\n @Prop() download?: boolean;\n\n /**\n * Subject Key Identifier extension children link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://censys.io/certificates?q=parsed.extensions.authority_key_id:%20{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdChildrenLink?: string;\n\n /**\n * Subject Key Identifier extension siblings link.\n * <br />\n * **NOTE**: `{{subjectKeyId}}` will be replaced to value from the extension.\n * @example\n * https://some.com/{{subjectKeyId}}\n */\n @Prop({ reflect: true }) subjectKeyIdSiblingsLink?: string;\n\n /**\n * Mobile media query string to control screen view change.\n * <br />\n * **NOTE**: Based on https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia.\n * @example\n * (max-width: 900px)\n */\n @Prop({ reflect: false }) mobileMediaQueryString?: string = '(max-width: 900px)';\n\n @State() mobileScreenView: 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: CsrProp) {\n this.isDecodeInProcess = true;\n\n try {\n if (certificate instanceof Pkcs10CertificateRequest) {\n this.certificateDecoded = certificate;\n } else if (typeof certificate === 'string') {\n this.certificateDecoded = new Pkcs10CertificateRequest(certificate);\n } else {\n return;\n }\n\n this.certificateDecoded.parseAttributes();\n await this.certificateDecoded.getThumbprint('SHA-1');\n await this.certificateDecoded.getThumbprint('SHA-256');\n } catch (error) {\n this.certificateDecodeError = error;\n\n console.error('Error certificate parse:', error);\n }\n\n this.isDecodeInProcess = false;\n }\n\n /**\n * Rerun decodeCertificate if previuos value not equal current value\n */\n @Watch('certificate')\n watchCertificateAndDecode(\n newValue: CsrProp,\n oldValue: CsrProp,\n ) {\n if (typeof newValue === 'string' && typeof oldValue === 'string') {\n if (newValue !== oldValue) {\n this.decodeCertificate(newValue);\n }\n\n return;\n }\n\n if (\n newValue instanceof Pkcs10CertificateRequest\n && oldValue instanceof Pkcs10CertificateRequest\n ) {\n if (newValue.commonName !== oldValue.commonName) {\n this.decodeCertificate(newValue);\n }\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n private getAuthKeyIdParentLink = (value: string) => value;\n\n // eslint-disable-next-line class-methods-use-this\n private getAuthKeyIdSiblingsLink = (value: string) => value;\n\n private getSubjectKeyIdChildrenLink = (value: string) => this.subjectKeyIdChildrenLink\n ?.replace('{{subjectKeyId}}', value);\n\n private getSubjectKeyIdSiblingsLink = (value: string) => this.subjectKeyIdSiblingsLink\n ?.replace('{{subjectKeyId}}', value);\n\n // 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 request.\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 request available.\n </Typography>\n </div>\n );\n }\n\n render() {\n if (this.certificateDecodeError) {\n return this.renderErrorState();\n }\n\n if (!this.certificateDecoded) {\n return this.renderEmptyState();\n }\n\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n <table>\n <BasicInformation\n {...this.certificateDecoded}\n />\n\n <SubjectName\n name={this.certificateDecoded.subject}\n />\n\n <PublicKey\n publicKey={this.certificateDecoded.publicKey}\n />\n\n <Signature\n signature={this.certificateDecoded.signature}\n />\n\n <Thumbprints\n thumbprints={this.certificateDecoded.thumbprints}\n />\n\n <Attributes\n attributes={this.certificateDecoded.attributes}\n getLEILink={getLEILink}\n getDNSNameLink={getDNSNameLink}\n getIPAddressLink={getIPAddressLink}\n getAuthKeyIdParentLink={this.getAuthKeyIdParentLink}\n getAuthKeyIdSiblingsLink={this.getAuthKeyIdSiblingsLink}\n getSubjectKeyIdChildrenLink={this.getSubjectKeyIdChildrenLink}\n getSubjectKeyIdSiblingsLink={this.getSubjectKeyIdSiblingsLink}\n />\n\n <Extensions\n extensions={this.certificateDecoded.extensions}\n title=\"Extension Request\"\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"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"p-4IvcYmU7.js","sources":["src/crypto/attribute.ts","src/crypto/pkcs10_certificate_request.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';\n\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;\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","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AsnConvert } from '@peculiar/asn1-schema';\nimport { ECParameters, id_ecPublicKey } from '@peculiar/asn1-ecc';\nimport { id_rsaEncryption, RSAPublicKey } from '@peculiar/asn1-rsa';\nimport { CertificationRequest } from '@peculiar/asn1-csr';\nimport {\n id_pkcs9_at_extensionRequest,\n ExtensionRequest,\n} from '@peculiar/asn1-pkcs9';\nimport { Convert } from 'pvtsutils';\n\nimport { Download } from '../utils';\n\nimport { AsnData } from './asn_data';\nimport { Name, INameJSON } from './name';\nimport { Attribute, TAttributeValue } from './attribute';\nimport { Extension, TExtensionValue } from './extension';\nimport { PemConverter } from './pem_converter';\nimport {\n certificateRawToBuffer,\n getCertificateThumbprint,\n} from './utils';\n\ninterface ISignature {\n algorithm: string;\n value: BufferSource;\n}\n\ninterface IPublicKey {\n algorithm: string;\n value: BufferSource;\n params?: ECParameters | RSAPublicKey;\n}\n\nexport class Pkcs10CertificateRequest extends AsnData<CertificationRequest> {\n public readonly subject: INameJSON[];\n\n public readonly version: number;\n\n public attributes: Attribute<TAttributeValue>[];\n\n public extensions: Extension<TExtensionValue>[];\n\n public thumbprints: Record<string, string> = {};\n\n public readonly type = 'PKCS#10 Certificate Request';\n\n public readonly tag = PemConverter.CertificateRequestTag;\n\n constructor(raw: string) {\n super(certificateRawToBuffer(raw), CertificationRequest);\n\n const { certificationRequestInfo } = this.asn;\n\n this.subject = new Name(certificationRequestInfo.subject).toJSON();\n this.version = certificationRequestInfo.version;\n }\n\n public get publicKey(): IPublicKey {\n const { subjectPublicKey, algorithm } = this.asn.certificationRequestInfo.subjectPKInfo;\n let params;\n\n if (algorithm.algorithm === id_ecPublicKey && algorithm.parameters) {\n params = AsnConvert.parse(algorithm.parameters, ECParameters);\n }\n\n if (algorithm.algorithm === id_rsaEncryption) {\n params = AsnConvert.parse(subjectPublicKey, RSAPublicKey);\n }\n\n const spki = AsnConvert.serialize(this.asn.certificationRequestInfo.subjectPKInfo);\n\n return {\n params,\n value: spki,\n algorithm: algorithm.algorithm,\n };\n }\n\n public get signature(): ISignature {\n const { signature, signatureAlgorithm } = this.asn;\n\n return {\n value: signature,\n algorithm: signatureAlgorithm.algorithm,\n };\n }\n\n public get commonName(): string {\n if (!this.subject) {\n return '';\n }\n\n for (let i = 0; i < this.subject.length; i += 1) {\n const name = this.subject[i];\n\n if (name.shortName === 'CN' || name.shortName === 'E' || name.shortName === 'O') {\n return name.value;\n }\n }\n\n return '';\n }\n\n public async getThumbprint(\n algorithm: string = 'SHA-1',\n ): Promise<void> {\n try {\n const thumbprint = await getCertificateThumbprint(algorithm, this.raw);\n\n if (thumbprint) {\n this.thumbprints[algorithm] = Convert.ToHex(thumbprint);\n }\n } catch (error) {\n console.error('Error thumbprint get:', error);\n }\n }\n\n public parseAttributes() {\n const { certificationRequestInfo } = this.asn;\n\n if (certificationRequestInfo.attributes) {\n this.attributes = certificationRequestInfo.attributes\n .map((e) => new Attribute(AsnConvert.serialize(e)));\n\n const extensionRequestAttribute = this.attributes.find(\n (attribute) => attribute.asn.type === id_pkcs9_at_extensionRequest,\n ) as Attribute<ExtensionRequest>;\n\n if (extensionRequestAttribute) {\n this.extensions = extensionRequestAttribute.value\n .map((e) => new Extension(AsnConvert.serialize(e)));\n }\n }\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return PemConverter.encode(this.raw, this.tag);\n case 'base64url':\n return Convert.ToBase64Url(this.raw);\n default:\n return Convert.ToBase64(this.raw);\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.csr.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.csr.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n"],"names":["AsnAttribute","Convert"],"mappings":";;;;;AAAA;;;;;;AAMG;AA8CH,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;AAKK,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;;AClGD;;;;;;AAMG;AAmCG,MAAO,wBAAyB,SAAQ,OAA6B,CAAA;AAezE,IAAA,WAAA,CAAY,GAAW,EAAA;QACrB,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;QAPnD,IAAW,CAAA,WAAA,GAA2B,EAAE;QAE/B,IAAI,CAAA,IAAA,GAAG,6BAA6B;AAEpC,QAAA,IAAA,CAAA,GAAG,GAAG,YAAY,CAAC,qBAAqB;AAKtD,QAAA,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAC,GAAG;AAE7C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAClE,QAAA,IAAI,CAAC,OAAO,GAAG,wBAAwB,CAAC,OAAO;;AAGjD,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,aAAa;AACvF,QAAA,IAAI,MAAM;QAEV,IAAI,SAAS,CAAC,SAAS,KAAK,cAAc,IAAI,SAAS,CAAC,UAAU,EAAE;YAClE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC;;AAG/D,QAAA,IAAI,SAAS,CAAC,SAAS,KAAK,gBAAgB,EAAE;YAC5C,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC;;AAG3D,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,aAAa,CAAC;QAElF,OAAO;YACL,MAAM;AACN,YAAA,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B;;AAGH,IAAA,IAAW,SAAS,GAAA;QAClB,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,GAAG;QAElD,OAAO;AACL,YAAA,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,kBAAkB,CAAC,SAAS;SACxC;;AAGH,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,EAAE;;AAGX,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE5B,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE;gBAC/E,OAAO,IAAI,CAAC,KAAK;;;AAIrB,QAAA,OAAO,EAAE;;AAGJ,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;;;IAI1C,eAAe,GAAA;AACpB,QAAA,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAC,GAAG;AAE7C,QAAA,IAAI,wBAAwB,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,GAAG,wBAAwB,CAAC;AACxC,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAErD,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACpD,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,4BAA4B,CACpC;YAEhC,IAAI,yBAAyB,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,yBAAyB,CAAC;AACzC,qBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAKpD,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,GAAG,CAAC,KAAK,CAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpB,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB;;AAGI,IAAA,aAAa,CAAC,IAAa,EAAA;AAChC,QAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAChB,IAAI,CAAC,GAAG,EACR,IAAI,IAAI,IAAI,CAAC,UAAU,CACxB;;AAEJ;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["CertificateSummary","props","certificate","showIssuer","renderRow","name","value","h","Typography","variant","color","l10n","getString","subjectToString","issuerToString","serialNumber","version","validity","dateShort","notBefore","notAfter","certificatesViewerCss","CertificatesViewer","exports","class_1","hostRef","_this","this","isHasRoots","certificates","filterWithSearch","highlightWithSearch","mobileMediaQueryString","mobileScreenView","search","certificatesDecoded","isDecodeInProcess","handleClickDetails","certificateSelectedForDetails","detailsOpen","emit","handleModalClose","undefined","detailsClose","handleSearch","event","target","trim","prototype","handleMediaQueryChange","matches","componentWillLoad","certificatesDecodeAndSet","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","watchCertificates","newValue","oldValue","JSON","stringify","hasRoots","Array","isArray","data","_d","_i","length","decoded","X509Certificate","getThumbprint","_e","sent","push","body","tests","isRoot","console","error","error_1","handleClickDownloadAsPem","downloadAsPEM","commonName","handleClickDownloadAsDer","downloadAsDER","handleClickRow","index","isExpandedRowClicked","expandedRow","getMaxColSpanValue","colSpan","renderCertificateButtonActions","isHasTestURLs","expired","revoked","valid","class","groups","__spreadArray","title","options","text","startIcon","DetailsIcon","onClick","DownloadIcon","_a","href","LinkIcon","_b","_c","renderExpandedRow","renderCertificatesRows","searchHighlight","content","forEach","isExpandedRow","publicKeyValue","OIDs","signature","algorithm","certificateStringForSearch","issuerCommonName","thumbprints","join","toLowerCase","indexOf","certificate_row","m_expanded","key","Button","ArrowTopIcon","ArrowBottomIcon","renderCertificateDetailsModal","role","part","CrossIcon","renderSearch","onInput","type","disabled","placeholder","renderEmptyState","renderEmptySearchState","renderLoadingState","renderTableBody","certificatesRows","render","Host","String"],"sources":["src/components/certificate-summary/certificate-summary.tsx","src/components/certificates-viewer/certificates-viewer.scss?tag=peculiar-certificates-viewer&encapsulation=shadow","src/components/certificates-viewer/certificates-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 { FunctionalComponent, h } from '@stencil/core';\nimport type { X509Certificate } from '../../crypto';\nimport { dateShort, l10n } from '../../utils';\nimport { Typography } from '../typography';\n\ninterface CertificateSummaryProps {\n certificate: X509Certificate;\n showIssuer?: boolean;\n}\n\nexport const CertificateSummary: FunctionalComponent<CertificateSummaryProps> = (props) => {\n const {\n certificate,\n showIssuer,\n } = props;\n\n const renderRow = (name: string | string[], value: string | number) => (\n <tr>\n <td>\n <Typography\n variant=\"b2\"\n color=\"gray-9\"\n >\n {name}\n </Typography>\n </td>\n <td>\n <Typography\n variant=\"b2\"\n color=\"black\"\n >\n {value}\n </Typography>\n </td>\n </tr>\n );\n\n return (\n <table>\n <tbody>\n {renderRow(\n l10n.getString('subjectName'),\n certificate.subjectToString(),\n )}\n {showIssuer && renderRow(\n l10n.getString('issuerName'),\n certificate.issuerToString(),\n )}\n\n {renderRow(\n l10n.getString('serialNumber'),\n certificate.serialNumber,\n )}\n {renderRow(\n l10n.getString('version'),\n certificate.version,\n )}\n {renderRow(\n l10n.getString('validity'),\n certificate.validity,\n )}\n {renderRow(\n l10n.getString('issued'),\n dateShort(certificate.notBefore),\n )}\n {renderRow(\n l10n.getString('expired'),\n dateShort(certificate.notAfter),\n )}\n </tbody>\n </table>\n );\n};\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n word-wrap: break-word;\n min-width: 280px;\n overflow: auto;\n position: relative;\n}\n\n.search_section {\n padding: var(--pv-size-base-4);\n border-bottom: 1px solid var(--pv-color-gray-4);\n}\n\n.input_search {\n height: var(--pv-size-base-8);\n width: 100%;\n outline: none;\n background-color: var(--pv-color-gray-1);\n padding: 0 var(--pv-size-base-2);\n border: 1px solid var(--pv-color-gray-7);\n border-radius: 4px;\n transition: background-color 200ms ease 0s, color 200ms ease 0s, border-color 200ms ease 0s;\n &::placeholder {\n color: var(--pv-color-gray-9);\n }\n}\n\ntable {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n border-spacing: 0;\n\n td, th {\n border-bottom: 1px solid var(--pv-color-gray-4);\n vertical-align: top;\n text-align: left;\n\n &:first-child {\n padding-right: 0;\n width: var(--pv-size-base-10);\n }\n &:last-child {\n padding-left: 0;\n width: var(--pv-size-base-10);\n }\n }\n\n th {\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n\n &.col_action {\n padding: 0;\n }\n }\n\n td {\n padding: var(--pv-size-base-4);\n }\n\n tr {\n &.m_expanded {\n background: var(--pv-color-gray-1);\n\n > td {\n border-bottom: none;\n }\n }\n\n &.expanded_summary {\n background: var(--pv-color-gray-1);\n\n table {\n table-layout: initial;\n\n td {\n border-bottom: none;\n padding: var(--pv-size-base-2);\n\n &:first-child {\n width: 200px;\n }\n\n &:last-child {\n width: auto;\n }\n }\n }\n }\n }\n}\n\n.button_table_cell {\n margin-top: -3px;\n}\n\n.status_wrapper {\n text-align: center;\n height: var(--pv-size-base-16);\n vertical-align: middle;\n}\n\n.modal_wrapper {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n animation: fadeIn 200ms;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.modal_backdrop {\n background: var(--pv-color-black);\n z-index: -1;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n opacity: 0.5;\n}\n\n.modal_container {\n background: var(--pv-color-white);\n width: 100%;\n display: flex;\n max-height: calc(100% - 60px);\n flex-direction: column;\n margin: var(--pv-size-base-6);\n position: relative;\n outline: none;\n box-shadow: var(--pv-shadow-dark-hight);\n overflow: hidden;\n border: 0px;\n padding: 0px;\n max-width: 640px;\n border-radius: 4px;\n}\n\n.modal_header {\n padding: var(--pv-size-base-3) var(--pv-size-base-4);\n display: flex;\n flex: 0 0 auto;\n -webkit-box-pack: justify;\n justify-content: space-between;\n gap: var(--pv-size-base-2);\n border-bottom: 1px solid var(--pv-color-gray-5);\n}\n\n.modal_content {\n flex: 1 1 auto;\n overflow: auto;\n}\n\n:host([data-mobile-screen-view=\"true\"]) {\n table, tbody, tr, td {\n display: block;\n width: 100% !important;\n padding: 0;\n border: none;\n }\n\n thead {\n display: none;\n }\n\n table {\n tr {\n padding: var(--pv-size-base-2) 0;\n }\n\n .expanded_summary {\n padding: 0;\n }\n\n .certificate_row {\n border-bottom: 1px solid var(--pv-color-gray-5);\n padding: var(--pv-size-base-2) var(--pv-size-base-4);\n }\n\n .certificate_row_actions {\n padding-top: var(--pv-size-base-6);\n\n td {\n display: flex;\n justify-content: right;\n gap: var(--pv-size-base-4);\n }\n }\n }\n\n .button_table_cell {\n margin-top: 0;\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 Event,\n EventEmitter,\n Build,\n} from '@stencil/core';\n\nimport { X509Certificate } from '../../crypto';\nimport { OIDs } from '../../constants/oids';\nimport { l10n } from '../../utils';\nimport { Typography } from '../typography';\nimport { CertificateSummary } from '../certificate-summary';\nimport { Button } from '../button';\nimport {\n DownloadIcon,\n LinkIcon,\n DetailsIcon,\n ArrowBottomIcon,\n ArrowTopIcon,\n CrossIcon,\n} from '../icons';\n\nexport interface ICertificate {\n value: string;\n name?: string;\n tests?: {\n valid?: string;\n revoked?: string;\n expired?: string;\n };\n}\n\ninterface ICertificateDecoded {\n body: X509Certificate;\n tests?: ICertificate['tests'];\n name?: string;\n}\n\n@Component({\n tag: 'peculiar-certificates-viewer',\n styleUrl: 'certificates-viewer.scss',\n shadow: true,\n})\nexport class CertificatesViewer {\n private isHasRoots: boolean = false;\n\n private mobileMediaQuery: MediaQueryList;\n\n /**\n * List of certificates values for decode and show in the list.\n * <br />\n * **NOTE**: If you do not provide a `name` value when\n * invocing the component it will take the first Subject CN value.\n * <br />\n * **NOTE**: If you do not provide a `tests` this column will be ommited from the rendered page.\n * <br />\n * **NOTE**: If the supplied certificates are self-signed the issuer column will be ommited.\n */\n @Prop() certificates: ICertificate[] = [];\n\n /**\n * Use filter in the list when search is changed.\n */\n @Prop() filterWithSearch: boolean = true;\n\n /**\n * Use highlight chapters in the list when search is changed.\n */\n @Prop() highlightWithSearch: boolean = true;\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 /**\n * Emitted when the user open certificate details modal.\n */\n @Event() detailsOpen!: EventEmitter<X509Certificate>;\n\n /**\n * Emitted when the user close certificate details modal.\n */\n @Event() detailsClose!: EventEmitter<void>;\n\n @State() mobileScreenView: boolean = false;\n\n @State() search: string = '';\n\n @State() certificatesDecoded: ICertificateDecoded[] = [];\n\n @State() expandedRow?: number;\n\n @State() certificateSelectedForDetails?: X509Certificate;\n\n @State() isDecodeInProcess: boolean = true;\n\n private handleMediaQueryChange(event: MediaQueryListEvent) {\n this.mobileScreenView = event.matches;\n }\n\n componentWillLoad() {\n this.certificatesDecodeAndSet();\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 @Watch('certificates')\n watchCertificates(newValue: ICertificate[], oldValue: ICertificate[]) {\n /**\n * Prevent rerender after set the same `certificates` prop.\n */\n if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {\n this.certificatesDecodeAndSet();\n }\n }\n\n async certificatesDecodeAndSet() {\n let hasRoots = false;\n\n if (!Array.isArray(this.certificates)) {\n return;\n }\n\n const data: ICertificateDecoded[] = [];\n\n // eslint-disable-next-line no-restricted-syntax\n for (const certificate of this.certificates) {\n try {\n const decoded = new X509Certificate(certificate.value);\n\n await decoded.getThumbprint('SHA-1');\n\n data.push({\n body: decoded,\n tests: certificate.tests,\n name: certificate.name,\n });\n\n if (!hasRoots && decoded.isRoot) {\n hasRoots = true;\n }\n } catch (error) {\n console.error('Error certificate parse:', error);\n }\n }\n\n this.isHasRoots = hasRoots;\n this.isDecodeInProcess = false;\n this.certificatesDecoded = data;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private handleClickDownloadAsPem(certificate: ICertificateDecoded) {\n certificate.body.downloadAsPEM(certificate.name || certificate.body.commonName);\n }\n\n // eslint-disable-next-line class-methods-use-this\n private handleClickDownloadAsDer(certificate: ICertificateDecoded) {\n certificate.body.downloadAsDER(certificate.name || certificate.body.commonName);\n }\n\n private handleClickDetails = (certificate: X509Certificate) => {\n this.certificateSelectedForDetails = certificate;\n this.detailsOpen.emit(certificate);\n };\n\n private handleModalClose = () => {\n this.certificateSelectedForDetails = undefined;\n\n this.detailsClose.emit();\n };\n\n private handleClickRow(index: number) {\n const isExpandedRowClicked = this.expandedRow === index;\n\n this.expandedRow = isExpandedRowClicked\n ? undefined\n : index;\n }\n\n private handleSearch = (event: any) => {\n this.search = event.target.value.trim();\n };\n\n private getMaxColSpanValue() {\n let colSpan = 5;\n\n if (!this.isHasRoots) {\n colSpan += 1;\n }\n\n return colSpan;\n }\n\n private renderCertificateButtonActions(certificate: ICertificateDecoded) {\n const isHasTestURLs = certificate.tests\n && (certificate.tests.expired || certificate.tests.revoked || certificate.tests.valid);\n\n return (\n <peculiar-button-menu\n class=\"button_table_cell\"\n groups={[\n {\n title: l10n.getString('previewCertificate'),\n options: [\n {\n text: l10n.getString('viewDetails'),\n startIcon: <DetailsIcon />,\n onClick: () => this.handleClickDetails(certificate.body),\n },\n ],\n },\n {\n title: l10n.getString('downloadOptions'),\n options: [\n {\n text: l10n.getString('download.pem'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsPem(certificate),\n },\n {\n text: l10n.getString('download.der'),\n startIcon: <DownloadIcon />,\n onClick: () => this.handleClickDownloadAsDer(certificate),\n },\n ],\n },\n ...(isHasTestURLs ? [{\n title: l10n.getString('testURLs'),\n options: [\n ...(certificate.tests?.valid ? [{\n text: l10n.getString('valid'),\n href: certificate.tests.valid,\n startIcon: <LinkIcon />,\n }] : []),\n ...(certificate.tests?.revoked ? [{\n text: l10n.getString('revoked'),\n href: certificate.tests.revoked,\n startIcon: <LinkIcon />,\n }] : []),\n ...(certificate.tests?.expired ? [{\n text: l10n.getString('expired'),\n href: certificate.tests.expired,\n startIcon: <LinkIcon />,\n }] : []),\n ],\n }] : []),\n ]}\n />\n );\n }\n\n private renderExpandedRow(certificate: X509Certificate) {\n const colSpan = this.getMaxColSpanValue() - 2;\n\n return (\n <tr class=\"expanded_summary\">\n <td />\n <td colSpan={colSpan}>\n <CertificateSummary\n certificate={certificate}\n showIssuer={!certificate.isRoot}\n />\n </td>\n <td />\n </tr>\n );\n }\n\n private renderCertificatesRows() {\n const searchHighlight = this.highlightWithSearch\n ? this.search\n : '';\n const content = [];\n\n this.certificatesDecoded.forEach((certificate, index) => {\n const isExpandedRow = index === this.expandedRow;\n const publicKeyValue = OIDs[certificate.body.signature.algorithm]\n || certificate.body.signature.algorithm;\n\n if (this.filterWithSearch && this.search) {\n const certificateStringForSearch = [\n publicKeyValue,\n certificate.body.issuerCommonName,\n certificate.name,\n certificate.body.commonName,\n certificate.body.thumbprints['SHA-1'],\n ]\n .join(' ')\n .toLowerCase();\n\n if (certificateStringForSearch.indexOf(this.search.toLowerCase()) === -1) {\n return;\n }\n }\n\n if (this.mobileScreenView) {\n content.push([\n <tr\n class={{\n certificate_row: true,\n m_expanded: isExpandedRow,\n }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <table>\n <tbody>\n {!this.isHasRoots && (\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('issuer')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n )}\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('name')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.name || certificate.body.commonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('publicKey')}\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n <tr>\n <td>\n <Typography variant=\"b2\" color=\"gray-9\">\n {l10n.getString('fingerprint')}\n &nbsp; (SHA-1)\n </Typography>\n </td>\n <td>\n <Typography variant=\"b2\" color=\"black\">\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n </tr>\n {isExpandedRow && this.renderExpandedRow(certificate.body)}\n <tr class=\"certificate_row_actions\">\n <td>\n {this.renderCertificateButtonActions(certificate)}\n <Button\n // eslint-disable-next-line react/jsx-no-bind\n onClick={this.handleClickRow.bind(this, index)}\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>,\n ]);\n\n return;\n }\n\n content.push([\n <tr\n class={{\n m_expanded: isExpandedRow,\n }}\n key={certificate.body.thumbprints['SHA-1']}\n >\n <td>\n <Button\n class=\"button_table_cell\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={this.handleClickRow.bind(this, index)}\n startIcon={isExpandedRow ? <ArrowTopIcon /> : <ArrowBottomIcon />}\n />\n </td>\n {!this.isHasRoots && (\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.issuerCommonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n )}\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.name || certificate.body.commonName}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {publicKeyValue}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n <Typography>\n <peculiar-highlight-words search={searchHighlight}>\n {certificate.body.thumbprints['SHA-1']}\n </peculiar-highlight-words>\n </Typography>\n </td>\n <td>\n {this.renderCertificateButtonActions(certificate)}\n </td>\n </tr>,\n isExpandedRow && this.renderExpandedRow(certificate.body),\n ]);\n });\n\n return content;\n }\n\n private renderCertificateDetailsModal() {\n if (!this.certificateSelectedForDetails) {\n return null;\n }\n\n return (\n <div\n class=\"modal_wrapper\"\n role=\"presentation\"\n aria-hidden=\"false\"\n part=\"presentation\"\n >\n <div\n class=\"modal_backdrop\"\n onClick={this.handleModalClose}\n aria-hidden=\"true\"\n />\n <div\n class=\"modal_container\"\n role=\"dialog\"\n part=\"presentation_container\"\n >\n <header class=\"modal_header\">\n <Typography\n variant=\"h4\"\n >\n {l10n.getString('certificateDetails')}\n </Typography>\n <Button\n onClick={this.handleModalClose}\n startIcon={<CrossIcon />}\n />\n </header>\n <div class=\"modal_content\">\n <peculiar-certificate-viewer\n certificate={this.certificateSelectedForDetails}\n mobileMediaQueryString={this.mobileMediaQueryString}\n />\n </div>\n </div>\n </div>\n );\n }\n\n private renderSearch() {\n if (!this.filterWithSearch && !this.highlightWithSearch) {\n return null;\n }\n\n return (\n <div class=\"search_section\">\n <input\n onInput={this.handleSearch}\n type=\"search\"\n value=\"\"\n class=\"input_search t-b3 c-black\"\n disabled={!this.certificatesDecoded.length}\n placeholder=\"Search\"\n />\n </div>\n );\n }\n\n private renderEmptyState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n There are no certificates available.\n </Typography>\n </td>\n </tr>\n );\n }\n\n private renderEmptySearchState() {\n const colSpan = this.getMaxColSpanValue();\n\n return (\n <tr>\n <td\n class=\"status_wrapper\"\n colSpan={colSpan}\n >\n <Typography\n variant=\"b1\"\n >\n No results found for &ldquo;\n {this.search}\n &ldquo;\n </Typography>\n </td>\n </tr>\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n private renderLoadingState() {\n return (\n <div class=\"loading_container\">\n <peculiar-circular-progress />\n </div>\n );\n }\n\n private renderTableBody() {\n if (this.isDecodeInProcess) {\n return null;\n }\n\n if (!this.certificatesDecoded.length) {\n return this.renderEmptyState();\n }\n\n const certificatesRows = this.renderCertificatesRows();\n\n if (this.search && !certificatesRows.length) {\n return this.renderEmptySearchState();\n }\n\n return certificatesRows;\n }\n\n render() {\n return (\n <Host\n data-mobile-screen-view={String(this.mobileScreenView)}\n >\n {this.renderSearch()}\n <table>\n {!this.mobileScreenView && (\n <thead>\n <tr>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <th />\n {!this.isHasRoots && (\n <th class=\"col_issuer\">\n <Typography variant=\"s2\">\n {l10n.getString('issuer')}\n </Typography>\n </th>\n )}\n <th class=\"col_name\">\n <Typography variant=\"s2\">\n {l10n.getString('name')}\n </Typography>\n </th>\n <th class=\"col_public_key\">\n <Typography variant=\"s2\">\n {l10n.getString('publicKey')}\n </Typography>\n </th>\n <th class=\"col_fingerprint\">\n <Typography variant=\"s2\">\n {l10n.getString('fingerprint')}\n &nbsp; (SHA-1)\n </Typography>\n </th>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <th />\n </tr>\n </thead>\n )}\n <tbody>\n {this.renderTableBody()}\n </tbody>\n </table>\n\n {this.renderCertificateDetailsModal()}\n {this.isDecodeInProcess && this.renderLoadingState()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"p-7Nmqck4T.system.js","sources":["src/components/button-menu/button-menu.scss?tag=peculiar-button-menu&encapsulation=scoped","src/components/button-menu/button-menu.tsx","src/components/circular-progress/circular-progress.scss?tag=peculiar-circular-progress&encapsulation=shadow","src/components/circular-progress/circular-progress.tsx","src/components/highlight-words/highlight-words.scss?tag=peculiar-highlight-words&encapsulation=shadow","src/components/highlight-words/highlight-words.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, ButtonProps } from '../button';\nimport { Typography } from '../typography';\nimport { ActionsIcon } from '../icons';\n\nexport interface ButtonMenuGroupOptions extends ButtonProps {\n text: string | string[];\n}\n\nexport interface ButtonMenuGroup {\n title: string | string[];\n options: ButtonMenuGroupOptions[];\n}\n\n@Component({\n tag: 'peculiar-button-menu',\n styleUrl: 'button-menu.scss',\n scoped: true,\n})\nexport class ButtonMenu {\n @Prop() groups: ButtonMenuGroup[] = [];\n\n @State() open: boolean = false;\n\n handleClick = () => {\n this.open = !this.open;\n };\n\n render() {\n return (\n <Host\n class={{\n is_shown: this.open,\n }}\n >\n <Button\n class=\"button_popover\"\n onClick={this.handleClick}\n startIcon={<ActionsIcon />}\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",":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: number = 24;\n\n /**\n * Stroke width of progress bar circle.\n */\n @Prop() width: number = 4;\n\n private box: number = 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={{\n strokeWidth: `${this.width}px`,\n }}\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={{\n strokeWidth: `${this.width}px`,\n }}\n />\n </svg>\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: inline;\n}\n\n::slotted(mark) {\n background-color: var(--pv-color-attention-tint-4);\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, Host, h, Element, Prop,\n} from '@stencil/core';\n\n@Component({\n tag: 'peculiar-highlight-words',\n styleUrl: 'highlight-words.scss',\n shadow: true,\n})\nexport class HighlightWords {\n @Element() host: HTMLElement;\n\n @Prop() search: string;\n\n private tag: string = 'mark';\n\n componentDidLoad() {\n this.handleHighlightSearch();\n }\n\n componentDidUpdate() {\n this.handleHighlightSearch();\n }\n\n handleHighlightSearch() {\n const basicString = this.resetHighlightSearch(this.host.innerHTML);\n let result = basicString;\n\n if (this.search) {\n const substring = new RegExp(`(${this.search})`, 'gi');\n\n result = basicString.replace(substring, `<${this.tag}>$1</${this.tag}>`);\n }\n\n this.host.innerHTML = result;\n }\n\n resetHighlightSearch(source: string) {\n // eslint-disable-next-line no-useless-escape\n const substring = new RegExp(`<\\/?${this.tag}>`, 'g');\n\n return source.replace(substring, '');\n }\n\n render() {\n return (\n <Host>\n <slot />\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["id_data","id_signedData","X509Certificates","Array","constructor","raw","super","rawItems","PemConverter","isPem","decode","map","value","Convert","ToBase64Url","split","length","Error","item","this","push","X509Certificate","commonName","from","o","join","signedData","SignedData","version","encapContentInfo","eContentType","eContent","EncapsulatedContent","single","OctetString","certificates","CertificateSet","CertificateChoices","certificate","AsnConvert","parse","Certificate","cms","ContentInfo","contentType","content","serialize","toString","format","downloadAsPEM","name","Download","cert","asPEM","downloadAsDER","asDER","certificateDecoderCss","CertificateDecoder","hostRef","handleClickDecode","inputPaste","handleClickClear","clearValue","handleChangeInputFile","async","event","element","target","files","file","readAsBinaryString","handleChangeExample","handleDropFile","stopPropagation","preventDefault","dataTransfer","componentDidLoad","certificateToDecode","setTimeout","certificateDecoded","clearCertificate","emit","setValue","successParse","Promise","resolve","catch","X509AttributeCertificate","Pkcs10CertificateRequest","X509Crl","then","res","error","console","log","alert","renderCertificate","h","download","render","Host","key","placeholder","class","ref","el","onDrop","Typography","variant","color","type","accept","onChange","_a","certificateExamples","example","title","Button","onClick"],"sources":["../../node_modules/@peculiar/asn1-cms/build/es2015/object_identifiers.js","src/crypto/x509_certificates.ts","src/components/certificate-decoder/certificate-decoder.scss?tag=peculiar-certificate-decoder&encapsulation=shadow","src/components/certificate-decoder/certificate-decoder.tsx"],"sourcesContent":["export const id_ct_contentInfo = \"1.2.840.113549.1.9.16.1.6\";\nexport const id_data = \"1.2.840.113549.1.7.1\";\nexport const id_signedData = \"1.2.840.113549.1.7.2\";\nexport const id_envelopedData = \"1.2.840.113549.1.7.3\";\nexport const id_digestedData = \"1.2.840.113549.1.7.5\";\nexport const id_encryptedData = \"1.2.840.113549.1.7.6\";\nexport const id_authData = \"1.2.840.113549.1.9.16.1.2\";\n","import { Convert } from 'pvtsutils';\nimport {\n SignedData,\n id_data,\n EncapsulatedContent,\n CertificateSet,\n CertificateChoices,\n ContentInfo,\n id_signedData,\n} from '@peculiar/asn1-cms';\nimport { Certificate } from '@peculiar/asn1-x509';\nimport { AsnConvert, OctetString } from '@peculiar/asn1-schema';\n\nimport { Download } from '../utils';\n\nimport { PemConverter } from './pem_converter';\nimport { X509Certificate } from './x509_certificate';\n\nexport class X509Certificates extends Array<X509Certificate> {\n constructor(raw: string) {\n super();\n\n const rawItems = PemConverter.isPem(raw)\n ? PemConverter.decode(raw).map((value) => Convert.ToBase64Url(value))\n : raw.split(',');\n\n if (rawItems.length < 2) {\n throw new Error('Unable to parse string. The array of elements is less than 2');\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const item of rawItems) {\n this.push(new X509Certificate(item));\n }\n }\n\n public get commonName(): string {\n return Array.from(this)\n .map((o) => o.commonName)\n .join('_');\n }\n\n public get raw(): ArrayBuffer {\n const signedData = new SignedData();\n\n signedData.version = 1;\n signedData.encapContentInfo.eContentType = id_data;\n signedData.encapContentInfo.eContent = new EncapsulatedContent({\n single: new OctetString(),\n });\n signedData.certificates = new CertificateSet(\n Array.from(this).map((o) => new CertificateChoices({\n certificate: AsnConvert.parse(o.raw, Certificate),\n })),\n );\n\n const cms = new ContentInfo({\n contentType: id_signedData,\n content: AsnConvert.serialize(signedData),\n });\n\n return AsnConvert.serialize(cms);\n }\n\n public toString(format: 'pem' | 'base64' | 'base64url' = 'pem'): string {\n switch (format) {\n case 'pem':\n return Array.from(this)\n .map((o) => o.toString('pem'))\n .join('\\n');\n case 'base64url':\n return Array.from(this)\n .map((o) => o.toString('base64url'))\n .join(',');\n default:\n return Array.from(this)\n .map((o) => o.toString('base64'))\n .join(',');\n }\n }\n\n public downloadAsPEM(name?: string) {\n Download.cert.asPEM(\n this.toString('pem'),\n name || this.commonName,\n );\n }\n\n public downloadAsDER(name?: string) {\n Download.cert.asDER(\n this.raw,\n name || this.commonName,\n );\n }\n}\n","@import '../../css/base.scss';\n\n:host {\n display: block;\n width: 100%;\n}\n\n.textarea {\n min-height: 300px;\n width: 100%;\n border-radius: 4px;\n border: 1px solid var(--pv-color-gray-5);;\n padding: 14px;\n font-family: monospace;\n resize: vertical;\n}\n\n.controls {\n margin-top: var(--pv-size-base-2);\n display: flex;\n flex-direction: column;\n gap: var(--pv-size-base-2);\n margin-bottom: var(--pv-size-base-12);\n}\n\n.control_row {\n display: flex;\n align-items: center;\n gap: var(--pv-size-base);\n}\n","/**\n * @license\n * Copyright (c) Peculiar Ventures, LLC.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Host,\n h,\n State,\n Prop,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nimport { readAsBinaryString } from '../../utils';\nimport {\n X509Certificate,\n X509AttributeCertificate,\n Pkcs10CertificateRequest,\n X509Crl,\n X509Certificates,\n} from '../../crypto';\nimport { Button } from '../button';\nimport { Typography } from '../typography';\n\n@Component({\n tag: 'peculiar-certificate-decoder',\n styleUrl: 'certificate-decoder.scss',\n shadow: true,\n})\nexport class CertificateDecoder {\n private inputPaste?: HTMLTextAreaElement;\n\n /**\n * The example certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateExamples?: {\n title: string;\n value: string;\n }[];\n\n /**\n * The default certificate value for decode and show details. Use PEM or DER.\n */\n @Prop() certificateToDecode?: string;\n\n @State() certificateDecoded: X509Certificates\n | X509Certificate\n | X509AttributeCertificate\n | Pkcs10CertificateRequest\n | X509Crl;\n\n /**\n * Emitted when the certificate has been successfully parsed.\n */\n @Event() successParse!: EventEmitter<string>;\n\n /**\n * Emitted when the certificate has been removed.\n */\n @Event() clearCertificate!: EventEmitter<void>;\n\n componentDidLoad() {\n if (this.certificateToDecode) {\n /**\n * Prevent Stencil warning about re-render\n */\n setTimeout(() => this.decode(this.certificateToDecode), 100);\n }\n }\n\n private handleClickDecode = () => {\n const { value } = this.inputPaste;\n\n if (value) {\n this.decode(value);\n }\n };\n\n private handleClickClear = () => {\n this.clearValue();\n };\n\n private handleChangeInputFile = async (event: any) => {\n const element = event.target;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n\n element.value = '';\n }\n };\n\n private handleChangeExample = (event: any) => {\n if (event.target.value) {\n this.decode(event.target.value);\n } else {\n this.clearValue();\n }\n };\n\n private handleDropFile = async (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.dataTransfer;\n\n if (element.files) {\n const file = await readAsBinaryString(element.files[0]);\n\n if (typeof file.value === 'string') {\n this.decode(file.value);\n }\n }\n };\n\n clearValue() {\n this.inputPaste.value = '';\n this.certificateDecoded = null;\n this.clearCertificate.emit();\n }\n\n setValue(value: typeof this.certificateDecoded) {\n this.certificateDecoded = value;\n this.inputPaste.value = value.toString('pem');\n this.successParse.emit(value.toString('base64url'));\n }\n\n decode(value: string) {\n new Promise<X509Certificates>((resolve) => {\n resolve(new X509Certificates(value));\n })\n .catch(() => new X509Certificate(value))\n .catch(() => new X509AttributeCertificate(value))\n .catch(() => new Pkcs10CertificateRequest(value))\n .catch(() => new X509Crl(value))\n .then((res: typeof this.certificateDecoded) => this.setValue(res))\n .catch((error) => {\n console.log(error);\n\n alert(`Error decoding certificate:\\n\"${value}\"\\n\\nPlease try to use Certificate/AttributeCertificate/CertificateRequest/CRL.`);\n });\n }\n\n renderCertificate() {\n if (this.certificateDecoded instanceof X509Certificates) {\n return (\n <peculiar-certificate-chain-viewer\n certificates={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Certificate) {\n return (\n <peculiar-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509AttributeCertificate) {\n return (\n <peculiar-attribute-certificate-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof Pkcs10CertificateRequest) {\n return (\n <peculiar-csr-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n if (this.certificateDecoded instanceof X509Crl) {\n return (\n <peculiar-crl-viewer\n certificate={this.certificateDecoded}\n download\n />\n );\n }\n\n return null;\n }\n\n render() {\n return (\n <Host>\n <textarea\n placeholder=\"Certificate DER or PEM\"\n class=\"textarea t-b2 c-black\"\n ref={(el) => { this.inputPaste = el; }}\n onDrop={this.handleDropFile}\n />\n <div class=\"controls\">\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Drag or load file:\n </Typography>\n <input\n type=\"file\"\n accept=\"application/pkix-cert,application/x-x509-ca-cert,application/x-x509-user-cert,application/pkcs10,application/pkix-crl,.csr,.req,.crl\"\n onChange={this.handleChangeInputFile}\n value=\"\"\n />\n </div>\n {this.certificateExamples?.length && (\n <div class=\"control_row\">\n <Typography\n variant=\"b3\"\n color=\"secondary-tint-2\"\n >\n Load examples:\n </Typography>\n <select onChange={this.handleChangeExample}>\n <option value=\"\">None</option>\n {this.certificateExamples.map((example) => (\n <option value={example.value}>\n {example.title}\n </option>\n ))}\n </select>\n </div>\n )}\n <div class=\"control_row\">\n <Button\n onClick={this.handleClickDecode}\n >\n Decode\n </Button>\n <Button\n onClick={this.handleClickClear}\n >\n Clear\n </Button>\n </div>\n </div>\n {this.renderCertificate()}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["certificateViewerCss","CertificateViewer","constructor","hostRef","this","mobileMediaQueryString","mobileScreenView","isDecodeInProcess","getAuthKeyIdParentLink","value","_a","authKeyIdParentLink","replace","getAuthKeyIdSiblingsLink","authKeyIdSiblingsLink","getSubjectKeyIdChildrenLink","subjectKeyIdChildrenLink","getSubjectKeyIdSiblingsLink","subjectKeyIdSiblingsLink","handleMediaQueryChange","event","matches","componentWillLoad","decodeCertificate","certificate","mobileMediaQuery","window","matchMedia","addEventListener","bind","disconnectedCallback","removeEventListener","X509Certificate","certificateDecoded","parseExtensions","getThumbprint","error","certificateDecodeError","console","watchCertificateAndDecode","newValue","oldValue","serialNumber","getIssuerDnLink","issuerDnLink","renderErrorState","h","class","Typography","renderEmptyState","render","Host","String","BasicInformation","Object","assign","SubjectName","name","subject","IssuerName","issuer","PublicKey","publicKey","Signature","signature","Thumbprints","thumbprints","Extensions","extensions","getLEILink","getDNSNameLink","getIPAddressLink","download","Miscellaneous"],"sources":["src/components/certificate-viewer/certificate-viewer.scss?tag=peculiar-certificate-viewer&encapsulation=shadow","src/components/certificate-viewer/certificate-viewer.tsx"],"sourcesContent":["@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"],"mappings":"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","ignoreList":[]}