pinecrypt-gateway-frontend/static/js/util.js

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, "");
}