MCPcopy
hub / github.com/remotely-save/remotely-save / encryptArrayBuffer

Function encryptArrayBuffer

src/encryptOpenSSL.ts:38–74  ·  view source on GitHub ↗
(
  arrBuf: ArrayBuffer,
  password: string,
  rounds: number = DEFAULT_ITER,
  saltHex = ""
)

Source from the content-addressed store, hash-verified

36};
37
38export const encryptArrayBuffer = async (
39 arrBuf: ArrayBuffer,
40 password: string,
41 rounds: number = DEFAULT_ITER,
42 saltHex = ""
43) => {
44 let salt: Uint8Array;
45 if (saltHex !== "") {
46 salt = hexStringToTypedArray(saltHex);
47 } else {
48 salt = window.crypto.getRandomValues(new Uint8Array(8));
49 }
50
51 const derivedKey = await getKeyIVFromPassword(salt, password, rounds);
52 const key = derivedKey.slice(0, 32);
53 const iv = derivedKey.slice(32, 32 + 16);
54
55 const keyCrypt = await window.crypto.subtle.importKey(
56 "raw",
57 key,
58 { name: "AES-CBC" },
59 false,
60 ["encrypt", "decrypt"]
61 );
62
63 const enc = (await window.crypto.subtle.encrypt(
64 { name: "AES-CBC", iv },
65 keyCrypt,
66 arrBuf
67 )) as ArrayBuffer;
68
69 const prefix = new TextEncoder().encode("Salted__");
70
71 const res = new Uint8Array([...prefix, ...salt, ...new Uint8Array(enc)]);
72
73 return bufferToArrayBuffer(res);
74};
75
76export const decryptArrayBuffer = async (
77 arrBuf: ArrayBuffer,

Callers 3

encryptStringToBase32Function · 0.85
encryptStringToBase64urlFunction · 0.85

Calls 3

hexStringToTypedArrayFunction · 0.90
bufferToArrayBufferFunction · 0.90
getKeyIVFromPasswordFunction · 0.85

Tested by

no test coverage detected