Back

Version 17

10/26/2024
// SPDX-License-Identifier: 0BSD
import * as asn1 from "npm:asn1js";
import ky from "npm:ky";
import { base64pad } from "npm:multiformats/bases/base64";
import * as pki from "npm:pkijs";
import * as v from "npm:valibot";

const ActorSchema = v.object({
publicKey: v.object({
id: v.string(),
publicKeyPem: v.string(),
}),
});

const data = await ky.get("https://mastodon.social/@Mastodon.json").json();
const { publicKey } = v.parse(ActorSchema, data);
console.log("keyId=%s\n", publicKey.id);
console.log("Public key in SPKI format:\n%s", publicKey.publicKeyPem.trim());
console.log();

const publicKeyInfo = pki.PublicKeyInfo.fromBER(parsePem(publicKey.publicKeyPem));
const rsaPublicKey = publicKeyInfo.parsedKey as pki.RSAPublicKey;

console.log("Public key in PKCS #1 format:");
const rsaPublicKeyPem = [
"-----BEGIN RSA PUBLIC KEY-----",
wrap(rsaPublicKey.toString("base64"), 64),
"-----END RSA PUBLIC KEY-----",
].join("\n");
console.log(rsaPublicKeyPem);

// http://oid-info.com/get/1.2.840.113549.1.1.1
// console.log(publicKeyInfo.algorithm);

// const expandedPublicKeyInfo = new pki.PublicKeyInfo({
// algorithm: publicKeyInfo.algorithm,
Updated: October 27, 2024