mirror of
https://github.com/kmc7468/arkvault.git
synced 2025-12-12 21:08:46 +00:00
pubKeyStore와 privKeyStore를 keyPairStore로 통합
This commit is contained in:
@@ -1,21 +1,21 @@
|
|||||||
import { Dexie, type EntityTable } from "dexie";
|
import { Dexie, type EntityTable } from "dexie";
|
||||||
|
|
||||||
interface ClientKeyPair {
|
interface KeyPair {
|
||||||
type: "publicKey" | "privateKey";
|
type: "publicKey" | "privateKey";
|
||||||
key: CryptoKey;
|
key: CryptoKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
const keyStore = new Dexie("keyStore") as Dexie & {
|
const keyStore = new Dexie("keyStore") as Dexie & {
|
||||||
clientKeyPairs: EntityTable<ClientKeyPair, "type">;
|
keyPair: EntityTable<KeyPair, "type">;
|
||||||
};
|
};
|
||||||
|
|
||||||
keyStore.version(1).stores({
|
keyStore.version(1).stores({
|
||||||
clientKeyPairs: "type",
|
keyPair: "type",
|
||||||
});
|
});
|
||||||
|
|
||||||
export const getKeyPairFromIndexedDB = async () => {
|
export const getKeyPairFromIndexedDB = async () => {
|
||||||
const pubKey = await keyStore.clientKeyPairs.get("publicKey");
|
const pubKey = await keyStore.keyPair.get("publicKey");
|
||||||
const privKey = await keyStore.clientKeyPairs.get("privateKey");
|
const privKey = await keyStore.keyPair.get("privateKey");
|
||||||
return {
|
return {
|
||||||
pubKey: pubKey?.key ?? null,
|
pubKey: pubKey?.key ?? null,
|
||||||
privKey: privKey?.key ?? null,
|
privKey: privKey?.key ?? null,
|
||||||
@@ -23,7 +23,10 @@ export const getKeyPairFromIndexedDB = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const storeKeyPairIntoIndexedDB = async (pubKey: CryptoKey, privKey: CryptoKey) => {
|
export const storeKeyPairIntoIndexedDB = async (pubKey: CryptoKey, privKey: CryptoKey) => {
|
||||||
await keyStore.clientKeyPairs.bulkPut([
|
if (!pubKey.extractable) throw new Error("Public key must be extractable");
|
||||||
|
if (privKey.extractable) throw new Error("Private key must be non-extractable");
|
||||||
|
|
||||||
|
await keyStore.keyPair.bulkPut([
|
||||||
{ type: "publicKey", key: pubKey },
|
{ type: "publicKey", key: pubKey },
|
||||||
{ type: "privateKey", key: privKey },
|
{ type: "privateKey", key: privKey },
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
|
|
||||||
export const pubKeyStore = writable<CryptoKey | null>(null);
|
export const keyPairStore = writable<CryptoKeyPair | null>(null);
|
||||||
export const privKeyStore = writable<CryptoKey | null>(null);
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { storeKeyPairIntoIndexedDB } from "$lib/indexedDB";
|
import { storeKeyPairIntoIndexedDB } from "$lib/indexedDB";
|
||||||
import { pubKeyStore, privKeyStore } from "$lib/stores";
|
import { keyPairStore } from "$lib/stores";
|
||||||
|
|
||||||
type KeyType = "public" | "private";
|
type KeyType = "public" | "private";
|
||||||
|
|
||||||
@@ -42,12 +42,13 @@ const exportKeyToBase64 = async (key: CryptoKey, type: KeyType) => {
|
|||||||
|
|
||||||
export const generateKeyPair = async () => {
|
export const generateKeyPair = async () => {
|
||||||
const keyPair = await generateRSAKeyPair();
|
const keyPair = await generateRSAKeyPair();
|
||||||
const privKeySecure = await makeRSAKeyNonextractable(keyPair.privateKey, "private");
|
const privKeySecured = await makeRSAKeyNonextractable(keyPair.privateKey, "private");
|
||||||
|
|
||||||
pubKeyStore.set(keyPair.publicKey);
|
keyPairStore.set({
|
||||||
privKeyStore.set(privKeySecure);
|
publicKey: keyPair.publicKey,
|
||||||
|
privateKey: privKeySecured,
|
||||||
await storeKeyPairIntoIndexedDB(keyPair.publicKey, privKeySecure);
|
});
|
||||||
|
await storeKeyPairIntoIndexedDB(keyPair.publicKey, privKeySecured);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
pubKeyBase64: await exportKeyToBase64(keyPair.publicKey, "public"),
|
pubKeyBase64: await exportKeyToBase64(keyPair.publicKey, "public"),
|
||||||
|
|||||||
@@ -18,5 +18,5 @@ export const POST: RequestHandler = async ({ request, cookies }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await registerPubKey(userId, zodRes.data.pubKey);
|
await registerPubKey(userId, zodRes.data.pubKey);
|
||||||
return text("Public key registered");
|
return text("Public key registered", { headers: { "Content-Type": "text/plain" } });
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user