Initial Commit

This commit is contained in:
2026-05-27 23:47:53 +01:00
parent fbc70f96e6
commit 9b28db724f
18103 changed files with 1600554 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
# `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
```ts
import { PEM_LABEL_PUBLIC_KEY } from "@suaveplan/crypto-rsa/pem";
const armor = `-----BEGIN ${PEM_LABEL_PUBLIC_KEY}-----`;
```
## Usage: Advanced Example
```ts
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.