@hazae41/x509
Version:
Zero-copy X.509 certificates in pure modern TypeScript
51 lines (48 loc) • 1.53 kB
JavaScript
import { Base64 } from '@hazae41/base64';
var PEM;
(function (PEM) {
var _a, _b;
PEM.header = `-----BEGIN CERTIFICATE-----`;
PEM.footer = `-----END CERTIFICATE-----`;
class MissingHeaderError extends Error {
#class = _a;
name = this.#class.name;
constructor() {
super(`Missing PEM header`);
}
}
_a = MissingHeaderError;
PEM.MissingHeaderError = MissingHeaderError;
class MissingFooterError extends Error {
#class = _b;
name = this.#class.name;
constructor() {
super(`Missing PEM footer`);
}
}
_b = MissingFooterError;
PEM.MissingFooterError = MissingFooterError;
function decodeOrThrow(text) {
text = text.replaceAll(`\n`, ``);
if (!text.startsWith(PEM.header))
throw new MissingHeaderError();
if (!text.endsWith(PEM.footer))
throw new MissingFooterError();
const body = text.slice(PEM.header.length, -PEM.footer.length);
return Base64.decodePaddedOrThrow(body);
}
PEM.decodeOrThrow = decodeOrThrow;
function encodeOrThrow(bytes) {
let result = `${PEM.header}\n`;
let body = Base64.encodePaddedOrThrow(bytes);
while (body) {
result += `${body.slice(0, 64)}\n`;
body = body.slice(64);
}
result += `${PEM.footer}\n`;
return result;
}
PEM.encodeOrThrow = encodeOrThrow;
})(PEM || (PEM = {}));
export { PEM };
//# sourceMappingURL=pem.mjs.map