Files
2026-05-27 23:47:53 +01:00

1.4 KiB

pem/labels

Purpose

Centralised PEM textual labels per RFC 7468 §5/§10/§11 used by the public and private PEM parsers and serialisers in this package. Keeping the labels in one file means the parser whitelist and serialiser emission share a single source of truth.

Features

  • PEM_LABEL_PUBLIC_KEY — "PUBLIC KEY" (SPKI body).
  • PEM_LABEL_RSA_PUBLIC_KEY — "RSA PUBLIC KEY" (PKCS#1 public body).
  • PEM_LABEL_PRIVATE_KEY — "PRIVATE KEY" (PKCS#8 body).
  • PEM_LABEL_RSA_PRIVATE_KEY — "RSA PRIVATE KEY" (PKCS#1 private body).
  • PEM_LINE_LENGTH = 64 — RFC 7468 §3 maximum body line length.

Usage: Basic Example

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

const armor = `-----BEGIN ${PEM_LABEL_PUBLIC_KEY}-----`;

Usage: Advanced Example

import {
    PEM_LABEL_PRIVATE_KEY,
    PEM_LABEL_RSA_PRIVATE_KEY,
} from "@suaveplan/crypto-rsa/pem";

function classifyPrivatePem(label: string): "pkcs8" | "pkcs1" | "unknown" {
    if (label === PEM_LABEL_PRIVATE_KEY) return "pkcs8";
    if (label === PEM_LABEL_RSA_PRIVATE_KEY) return "pkcs1";
    return "unknown";
}

API Reference

All exports are string constants.

Implementation Notes

RFC 7468 §3 fixes the body line length at 64 base64 characters. Some legacy emitters use 76 (the historic RFC 1421 PEM length); we accept both on parse but always emit 64.