#!/usr/bin/env -S deno run --allow-env --allow-import // Reference: // - https://docs.deno.com/examples/command_line_arguments/ // - https://docs.deno.com/api/node/crypto/~/X509Certificate#property_issuercertificate // - https://docs.deno.com/api/node/crypto/~/createPublicKey import { log } from "https://hatter.ink/script/get/@1/deno-commons-mod.ts"; const { X509Certificate, createPublicKey } = await import("node:crypto"); if (Deno.args.length === 0) { console.log("Usage: publickey.ts "); Deno.exit(1); } // function tryParseCertificate() { // const x509 = new X509Certificate(Deno.args[0]); // // const exportedJwk = x509.publicKey.export({format: "jwk"}); // console.log(JSON.stringify(exportedJwk, null, 4)); // // console.log(x509.publicKey.export({format: "pem", type: "spki"})); // } // deno-lint-ignore no-explicit-any function printPublicKey(publicKey: any) { const exportedJwk = publicKey.export({ format: "jwk" }); const exportedJwkJson = JSON.stringify(exportedJwk, null, 4); const exportedPem = publicKey.export({ format: "pem", type: "spki" }); log.success(`JWK\n${exportedJwkJson}`); log.success(`PEM:\n${exportedPem}`); } const firstArgument = Deno.args[0]; try { const publicKey = createPublicKey(firstArgument); printPublicKey(publicKey); Deno.exit(0); } catch (e) { // try jwk try { const key = JSON.parse(firstArgument); const publicKey = createPublicKey({ key, format: "jwk" }); printPublicKey(publicKey); Deno.exit(0); } catch (_e) { // IGNORE } log.error(`Parse certificate or public key failed: ${e}`); Deno.exit(1); } // @SCRIPT-SIGNATURE-V1: yk-r1.ES256.20250123T002653+08:00.MEYCIQDEZ6yTqWRQct3V0nOY // yBHWFTZCMuKzXYAQp/OETEpmlQIhANnCSv7U4du/w5c+46GJ2XHqRih+pQFIVxsy2sGYqsgJ