Initial Commit
This commit is contained in:
@@ -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) } }
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user