Files
suaveplan/packages/security-stack/crypto/crypto-rsa/src/pem/parse-public.md
2026-05-27 23:47:53 +01:00

1.6 KiB

pem/parse-public

Purpose

Parse an RSA public key from RFC 7468 PEM textual encoding. Accepts both canonical armor labels — "PUBLIC KEY" (SPKI per RFC 5280) and "RSA PUBLIC KEY" (PKCS#1 per RFC 8017) — and dispatches to the appropriate DER parser. Mismatched BEGIN/END, unknown labels, or non-base64 body content surface as CRYPTO_RSA.PEM_MALFORMED.

Features

  • Dual-label support ("PUBLIC KEY" and "RSA PUBLIC KEY").
  • Delegates to existing DER parsers — no DER logic duplicated.
  • Strict-grammar body validation via decodePem.

Usage: Basic Example

import { parseRsaPublicKeyPem } from "@suaveplan/crypto-rsa/pem";

const key = parseRsaPublicKeyPem(`
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----
`);

Usage: Advanced Example

import { parseRsaPublicKeyPem } from "@suaveplan/crypto-rsa/pem";

// Either label is accepted.
const fromSpki = parseRsaPublicKeyPem(spkiPem);
const fromPkcs1 = parseRsaPublicKeyPem(pkcs1Pem);

API Reference

parseRsaPublicKeyPem(pem: string): RsaPublicKey

Throws CryptoRsaError(CRYPTO_RSA.PEM_MALFORMED) on framing errors and CryptoRsaError(CRYPTO_RSA.INVALID_KEY | CRYPTO_RSA.UNSUPPORTED_FORMAT) on inner-DER errors per the underlying DER parsers.

Implementation Notes

The dispatcher is a Record<string, parser> lookup keyed by label. Building the allowed-label list from the dispatcher's keys ensures the codec's allowlist and the dispatcher's coverage cannot drift — adding a new label requires changing exactly one place.