-
Notifications
You must be signed in to change notification settings - Fork 0
/
EncryptionUtils.ts
52 lines (44 loc) · 1.84 KB
/
EncryptionUtils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
* This is a wrapper library around:
* - expo-file-system
* - crypto-es
*
* That gives utilities for easily decrypting and encrypting files.
*/
import * as FileSystem from "expo-file-system";
import CryptoES from "crypto-es";
export async function encrypt(filePath: string, outputPath: string, password: string): Promise<void> {
const startTime = Date.now();
try {
const fileContentBase64 = await FileSystem.readAsStringAsync(filePath, {
encoding: FileSystem.EncodingType.Base64,
});
const encrypted = CryptoES.AES.encrypt(fileContentBase64, password);
// console.log(encrypted, "\n---- ✅ encrypted ----\n\n");
await FileSystem.writeAsStringAsync(outputPath, encrypted.toString(), { encoding: FileSystem.EncodingType.Base64 });
} catch (error) {
console.error("Encryption failed:", error);
} finally {
const endTime = Date.now();
const timePassed = endTime - startTime;
console.log(`Time passed in encrypt function: ${timePassed} milliseconds`);
}
}
export async function decrypt(encryptedPath: string, outputPath: string, password: string): Promise<void> {
const startTime = Date.now();
try {
const fileContentB64 = await FileSystem.readAsStringAsync(encryptedPath, {
encoding: FileSystem.EncodingType.Base64,
});
const decryptedBytes = CryptoES.AES.decrypt(fileContentB64, password).toString(CryptoES.enc.Utf8);
// console.log(decryptedBytes, "\n ----- 😭 decryptedBytes ------ \n\n");
await FileSystem.writeAsStringAsync(outputPath, decryptedBytes, { encoding: FileSystem.EncodingType.Base64 });
} catch (error) {
console.error("Decryption failed:", error);
} finally {
const endTime = Date.now();
const timePassed = endTime - startTime;
console.log(`Time passed in decrypt function: ${timePassed} milliseconds`);
}
}
export default { encrypt, decrypt };