Files
arkvault/src/routes/(fullscreen)/key/generate/service.ts

38 lines
1.2 KiB
TypeScript

import {
generateRSAKeyPair,
makeRSAKeyNonextractable,
exportRSAKeyToBase64,
generateAESKey,
makeAESKeyNonextractable,
wrapAESKeyUsingRSA,
} from "$lib/modules/crypto";
import { clientKeyStore } from "$lib/stores";
export const generateClientKeys = async () => {
const encKeyPair = await generateRSAKeyPair("encryption");
const sigKeyPair = await generateRSAKeyPair("signature");
clientKeyStore.set({
encryptKey: encKeyPair.publicKey,
decryptKey: await makeRSAKeyNonextractable(encKeyPair.privateKey),
signKey: await makeRSAKeyNonextractable(sigKeyPair.privateKey),
verifyKey: sigKeyPair.publicKey,
});
return {
encryptKey: encKeyPair.publicKey,
encryptKeyBase64: await exportRSAKeyToBase64(encKeyPair.publicKey),
decryptKeyBase64: await exportRSAKeyToBase64(encKeyPair.privateKey),
signKeyBase64: await exportRSAKeyToBase64(sigKeyPair.privateKey),
verifyKeyBase64: await exportRSAKeyToBase64(sigKeyPair.publicKey),
};
};
export const generateInitialMasterKey = async (encryptKey: CryptoKey) => {
const masterKey = await generateAESKey();
return {
masterKey: await makeAESKeyNonextractable(masterKey),
masterKeyWrapped: await wrapAESKeyUsingRSA(masterKey, encryptKey),
};
};