diff --git a/script-meta-v2.json b/script-meta-v2.json index 74b3b68..dc00d1c 100644 --- a/script-meta-v2.json +++ b/script-meta-v2.json @@ -18,6 +18,13 @@ "script_full_url": "https://git.hatter.ink/hatter/ts-scripts/raw/branch/main/single-scripts/print-env.ts", "single_script_file": true }, + "publickey.ts": { + "script_name": "publickey.ts", + "script_length": 1138, + "script_sha256": "28bfa62a68cf9a2142048f605a0b2e769f89b48c5c25af9bb0f9b6081bcf8954", + "script_full_url": "https://git.hatter.ink/hatter/ts-scripts/raw/branch/main/single-scripts/publickey.ts", + "single_script_file": true + }, "sigstore-verify.ts": { "script_name": "sigstore-verify.ts", "script_length": 3511, diff --git a/single-scripts/publickey.ts b/single-scripts/publickey.ts new file mode 100755 index 0000000..1cd8439 --- /dev/null +++ b/single-scripts/publickey.ts @@ -0,0 +1,35 @@ +#!/usr/bin/env -S deno run --allow-env + +// 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 + +const {X509Certificate, createPublicKey} = await import('node:crypto'); + +if (Deno.args.length === 0) { + console.log("Usage: certificate.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"})); +// } + +try { + const publicKey = createPublicKey(Deno.args[0]); + + console.log('JWK:'); + const exportedJwk = publicKey.export({format: "jwk"}); + console.log(JSON.stringify(exportedJwk, null, 4)); + console.log(); + console.log("PEM:"); + console.log(publicKey.export({format: "pem", type: "spki"})); +} catch (e) { + console.error(`Parse certificate or public key failed: ${e}`); +}