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,73 @@
import { CRYPTO_RSA_CODES, CryptoRsaError } from "../errors/errors.js";
import type {
RsaJwk,
RsaPrivateKey,
RsaPrivateKeyFormat,
RsaPublicKey,
RsaPublicKeyFormat,
} from "./keys.types.js";
import {
serializeRsaPrivateKeyJwk,
serializeRsaPublicKeyJwk,
} from "./serialize-jwk.js";
import { serializeRsaPrivateKeyPkcs1 } from "./serialize-pkcs1-private.js";
import { serializeRsaPublicKeyPkcs1 } from "./serialize-pkcs1-public.js";
import { serializeRsaPrivateKeyPkcs8 } from "./serialize-pkcs8.js";
import { serializeRsaPublicKeySpki } from "./serialize-spki.js";
export interface SerializeRsaPublicKeyOptions {
readonly format: RsaPublicKeyFormat;
}
export interface SerializeRsaPrivateKeyOptions {
readonly format: RsaPrivateKeyFormat;
}
/**
* Façade dispatcher for public-key serialisation. Returns `Uint8Array` for
* binary formats (`pkcs1`, `spki`) and a structured `RsaJwk` object for the
* JWK format.
*/
export function serializeRsaPublicKey(
key: RsaPublicKey,
options: SerializeRsaPublicKeyOptions
): Uint8Array | RsaJwk {
switch (options.format) {
case "pkcs1":
return serializeRsaPublicKeyPkcs1(key);
case "spki":
return serializeRsaPublicKeySpki(key);
case "jwk":
return serializeRsaPublicKeyJwk(key);
default:
return assertNeverFormat(options.format);
}
}
/**
* Façade dispatcher for private-key serialisation. Returns `Uint8Array` for
* binary formats (`pkcs1`, `pkcs8`) and a structured `RsaJwk` for JWK.
*/
export function serializeRsaPrivateKey(
key: RsaPrivateKey,
options: SerializeRsaPrivateKeyOptions
): Uint8Array | RsaJwk {
switch (options.format) {
case "pkcs1":
return serializeRsaPrivateKeyPkcs1(key);
case "pkcs8":
return serializeRsaPrivateKeyPkcs8(key);
case "jwk":
return serializeRsaPrivateKeyJwk(key);
default:
return assertNeverFormat(options.format);
}
}
function assertNeverFormat(value: never): never {
throw new CryptoRsaError(
CRYPTO_RSA_CODES.UNSUPPORTED_FORMAT,
"error.crypto-rsa.unsupported-format.unknown",
{ context: { value: String(value) } }
);
}