2.0 KiB
keys/parse
Purpose
Public dispatcher entry-point unifying the four key-format parsers
(PKCS#1, SPKI, PKCS#8, JWK) under one ergonomic call. Selects the
underlying parser via a format discriminator on the options object,
matching the round-trip pattern used elsewhere in the crypto
family.
Features
parseRsaPublicKey(input, { format: "pkcs1" | "spki" | "jwk" }).parseRsaPrivateKey(input, { format: "pkcs1" | "pkcs8" | "jwk" }).- Binary formats accept
Uint8Array; JWK accepts object / JSON string / UTF-8 bytes. defaultbranches surfaceCRYPTO_RSA.UNSUPPORTED_FORMATso any future format added to the type union without a switch arm fails loudly.
Usage: Basic Example
import { parseRsaPublicKey } from "@suaveplan/crypto-rsa";
const key = parseRsaPublicKey(spkiBytes, { format: "spki" });
Usage: Advanced Example
import {
parseRsaPrivateKey,
parseRsaPublicKey,
} from "@suaveplan/crypto-rsa";
const fromPkcs8 = parseRsaPrivateKey(pkcs8Bytes, { format: "pkcs8" });
const fromJwk = parseRsaPrivateKey(jwkObject, { format: "jwk" });
const fromJsonJwk = parseRsaPrivateKey(jwkJsonString, { format: "jwk" });
API Reference
parseRsaPublicKey(input, options): RsaPublicKey
Throws CRYPTO_RSA.INVALID_KEY when a non-Uint8Array is passed for the
binary formats.
parseRsaPrivateKey(input, options): RsaPrivateKey
Same input/error contract on the private side.
Implementation Notes
The dispatcher is exhaustive over the literal union via assertNeverFormat,
which TypeScript verifies statically. Adding a new format requires both a
new type member and a new switch arm — the compiler enforces both. This is
the only safe way to evolve a discriminated dispatcher without silently
falling through to a default branch.
The requireBytes helper is shared between the PKCS#1/SPKI/PKCS#8 paths
because they all consume Uint8Array. JWK input is forwarded through the
JWK parser which handles its own normalisation.