54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
import {
|
|
arrayBufferToString,
|
|
toBase64,
|
|
} from "pvutils";
|
|
import { formatPEM } from "./formatPEM.js";
|
|
|
|
export function pkijsToBase64(pkijsObj) {
|
|
return new Promise(async (resolve, reject) => {
|
|
switch(pkijsObj.__proto__.constructor.name) {
|
|
case "CryptoKey":
|
|
let arrayBuf = new ArrayBuffer(0);
|
|
|
|
if (pkijsObj.type == "private")
|
|
arrayBuf = await window.cryptoEngine.exportKey("pkcs8", pkijsObj);
|
|
else
|
|
arrayBuf = await window.cryptoEngine.exportKey("spki", pkijsObj);
|
|
|
|
resolve(toBase64(arrayBufferToString(arrayBuf)));
|
|
break;
|
|
|
|
case "CertificationRequest":
|
|
resolve(toBase64(arrayBufferToString(pkijsObj.toSchema().toBER(false))));
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
export function pkijsToPem(pkijsObj) {
|
|
return new Promise(async (resolve, reject) => {
|
|
switch(pkijsObj.__proto__.constructor.name) {
|
|
case "CryptoKey":
|
|
let privKeyExported = await window.cryptoEngine.exportKey("pkcs8", pkijsObj);
|
|
let privKeyBody = formatPEM(
|
|
toBase64(
|
|
String.fromCharCode.apply(null, new Uint8Array(privKeyExported))
|
|
)
|
|
);
|
|
resolve(`-----BEGIN PRIVATE KEY-----\r\n${privKeyBody}\r\n-----END PRIVATE KEY-----\r\n`);
|
|
break;
|
|
|
|
case "CertificationRequest":
|
|
let resPem = "-----BEGIN CERTIFICATE REQUEST-----\r\n";
|
|
resPem = `${resPem}${formatPEM(
|
|
toBase64(arrayBufferToString(pkijsObj.toSchema().toBER(false)))
|
|
)}`;
|
|
resolve(`${resPem}\r\n-----END CERTIFICATE REQUEST-----\r\n`);
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
export function pemToBase64(pem) {
|
|
return pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, "");
|
|
} |