add password prompt to ZK viewer for wrapped uploads
This commit is contained in:
@@ -4,6 +4,7 @@ import { api } from '@/plugins/axios';
|
||||
import type { GetZkUploadCiphertextResult } from '@/types/upload/GetZkUploadCiphertextResult';
|
||||
import { base64ToBytes } from '@/utils/encoding/base64ToBytes';
|
||||
import { toArrayBuffer } from '@/utils/toArrayBuffer';
|
||||
import { decryptPasswordProtectedZkUpload } from '@/utils/upload/decryptPasswordProtectedZkUpload';
|
||||
import { decryptZkUpload } from '@/utils/upload/decryptZkUpload';
|
||||
|
||||
export const useViewStore = defineStore('view', () => {
|
||||
@@ -22,13 +23,43 @@ export const useViewStore = defineStore('view', () => {
|
||||
return data;
|
||||
};
|
||||
|
||||
const loadZk = async (payload: GetZkUploadCiphertextResult, fragmentKey: string): Promise<void> => {
|
||||
const loadZk = async (
|
||||
payload: GetZkUploadCiphertextResult,
|
||||
fragmentKey: string,
|
||||
password?: string
|
||||
): Promise<void> => {
|
||||
clearImage();
|
||||
|
||||
const iv = base64ToBytes(payload.iv);
|
||||
const ciphertext = base64ToBytes(payload.ciphertext);
|
||||
|
||||
const plaintext = await decryptZkUpload(ciphertext, iv, fragmentKey);
|
||||
let plaintext: Uint8Array;
|
||||
|
||||
if (payload.passwordProtected) {
|
||||
if (!password) {
|
||||
throw new Error('Password required');
|
||||
}
|
||||
|
||||
if (!payload.wrappedDek || !payload.wrapIv || !payload.salt) {
|
||||
throw new Error('Incomplete password protection data');
|
||||
}
|
||||
|
||||
const wrappedDek = base64ToBytes(payload.wrappedDek);
|
||||
const wrapIv = base64ToBytes(payload.wrapIv);
|
||||
const salt = base64ToBytes(payload.salt);
|
||||
|
||||
plaintext = await decryptPasswordProtectedZkUpload(
|
||||
ciphertext,
|
||||
iv,
|
||||
fragmentKey,
|
||||
password,
|
||||
wrappedDek,
|
||||
wrapIv,
|
||||
salt
|
||||
);
|
||||
} else {
|
||||
plaintext = await decryptZkUpload(ciphertext, iv, fragmentKey);
|
||||
}
|
||||
|
||||
const buffer = toArrayBuffer(plaintext);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user