mirror of
https://github.com/kmc7468/arkvault.git
synced 2025-12-14 22:08:45 +00:00
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import { callAPI } from "$lib/hooks";
|
|
import { storeClientKey } from "$lib/indexedDB";
|
|
import { encodeToBase64, signRequest } from "$lib/modules/crypto";
|
|
import type { ClientKeys } from "$lib/stores";
|
|
|
|
export { requestTokenUpgrade } from "$lib/services/auth";
|
|
export { requestClientRegistration } from "$lib/services/key";
|
|
|
|
type ExportedKeyPairs = {
|
|
generator: "ArkVault";
|
|
exportedAt: Date;
|
|
} & {
|
|
version: 1;
|
|
encryptKey: string;
|
|
decryptKey: string;
|
|
signKey: string;
|
|
verifyKey: string;
|
|
};
|
|
|
|
export const exportClientKeys = (
|
|
encryptKeyBase64: string,
|
|
decryptKeyBase64: string,
|
|
signKeyBase64: string,
|
|
verifyKeyBase64: string,
|
|
) => {
|
|
return {
|
|
version: 1,
|
|
generator: "ArkVault",
|
|
exportedAt: new Date(),
|
|
encryptKey: encryptKeyBase64,
|
|
decryptKey: decryptKeyBase64,
|
|
signKey: signKeyBase64,
|
|
verifyKey: verifyKeyBase64,
|
|
} satisfies ExportedKeyPairs;
|
|
};
|
|
|
|
export const storeClientKeys = async (clientKeys: ClientKeys) => {
|
|
await storeClientKey(clientKeys.encryptKey, "encrypt");
|
|
await storeClientKey(clientKeys.decryptKey, "decrypt");
|
|
await storeClientKey(clientKeys.signKey, "sign");
|
|
await storeClientKey(clientKeys.verifyKey, "verify");
|
|
};
|
|
|
|
export const requestInitialMasterKeyRegistration = async (
|
|
masterKeyWrapped: ArrayBuffer,
|
|
signKey: CryptoKey,
|
|
) => {
|
|
const res = await callAPI("/api/mek/register/initial", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: await signRequest(
|
|
{
|
|
mek: encodeToBase64(masterKeyWrapped),
|
|
},
|
|
signKey,
|
|
),
|
|
});
|
|
return res.ok || res.status === 409;
|
|
};
|