( arrBuf: ArrayBuffer, password: string, rounds: number = DEFAULT_ITER )
| 74 | }; |
| 75 | |
| 76 | export const decryptArrayBuffer = async ( |
| 77 | arrBuf: ArrayBuffer, |
| 78 | password: string, |
| 79 | rounds: number = DEFAULT_ITER |
| 80 | ) => { |
| 81 | const prefix = arrBuf.slice(0, 8); |
| 82 | const salt = arrBuf.slice(8, 16); |
| 83 | const derivedKey = await getKeyIVFromPassword( |
| 84 | new Uint8Array(salt), |
| 85 | password, |
| 86 | rounds |
| 87 | ); |
| 88 | const key = derivedKey.slice(0, 32); |
| 89 | const iv = derivedKey.slice(32, 32 + 16); |
| 90 | |
| 91 | const keyCrypt = await window.crypto.subtle.importKey( |
| 92 | "raw", |
| 93 | key, |
| 94 | { name: "AES-CBC" }, |
| 95 | false, |
| 96 | ["encrypt", "decrypt"] |
| 97 | ); |
| 98 | |
| 99 | const dec = (await window.crypto.subtle.decrypt( |
| 100 | { name: "AES-CBC", iv }, |
| 101 | keyCrypt, |
| 102 | arrBuf.slice(16) |
| 103 | )) as ArrayBuffer; |
| 104 | |
| 105 | return dec; |
| 106 | }; |
| 107 | |
| 108 | export const encryptStringToBase32 = async ( |
| 109 | text: string, |
no test coverage detected