proxy file hashing through comlink

This commit is contained in:
Abhinav 2022-06-23 19:59:57 +05:30
parent 14b743e0f7
commit 55ebb509c2
2 changed files with 27 additions and 18 deletions

View file

@ -252,33 +252,30 @@ export async function hash(input: string) {
); );
} }
export async function cryptoGenericHash(stream: ReadableStream) { export async function initChunkHashing() {
await sodium.ready; await sodium.ready;
const hashState = sodium.crypto_generichash_init(
const state = sodium.crypto_generichash_init(
null, null,
sodium.crypto_generichash_BYTES_MAX sodium.crypto_generichash_BYTES_MAX
); );
return hashState;
}
const reader = stream.getReader(); export async function hashFileChunk(
hashState: sodium.StateAddress,
let isDone = false; chunk: Uint8Array
while (!isDone) { ) {
const { done, value: chunk } = await reader.read(); await sodium.ready;
if (done) { sodium.crypto_generichash_update(hashState, chunk);
isDone = true; }
break;
}
const buffer = Uint8Array.from(chunk);
sodium.crypto_generichash_update(state, buffer);
}
export async function completeChunkHashing(hashState: sodium.StateAddress) {
await sodium.ready;
const hash = sodium.crypto_generichash_final( const hash = sodium.crypto_generichash_final(
state, hashState,
sodium.crypto_generichash_BYTES_MAX sodium.crypto_generichash_BYTES_MAX
); );
const hashString = sodium.to_base64(hash, sodium.base64_variants.ORIGINAL); const hashString = toB64(hash);
return hashString; return hashString;
} }

View file

@ -76,6 +76,18 @@ export class Crypto {
return libsodium.verifyHash(hash, input); return libsodium.verifyHash(hash, input);
} }
async initChunkHashing() {
return libsodium.initChunkHashing();
}
async hashFileChunk(hashState, chunk) {
return libsodium.hashFileChunk(hashState, chunk);
}
async completeChunkHashing(hashState) {
return libsodium.completeChunkHashing(hashState);
}
async deriveKey(passphrase, salt, opsLimit, memLimit) { async deriveKey(passphrase, salt, opsLimit, memLimit) {
return libsodium.deriveKey(passphrase, salt, opsLimit, memLimit); return libsodium.deriveKey(passphrase, salt, opsLimit, memLimit);
} }