Files
ts-scripts/libraries/deno-teencrypt-mod.ts
2026-01-11 20:29:07 +08:00

46 lines
1.5 KiB
TypeScript

import {
getHomeDirOrDie,
hexStringToUint8Array,
uint8ArrayToHexString,
} from "https://global.hatter.ink/script/get/@6/deno-commons-mod.ts";
const COMMONS_LOCAL_ENCRYPT_TINY_ENCRYPT_MASTER_KEY_FILE = getHomeDirOrDie() +
"/.cache/commons-local-encrypt-tiny-encrypt-master-key";
interface TinyEncryptSimpleDecryptObject {
code: number;
result: string;
}
async function loadMasterKey(): Promise<Uint8Array> {
const masterKeyContent = Deno.readTextFileSync(
COMMONS_LOCAL_ENCRYPT_TINY_ENCRYPT_MASTER_KEY_FILE,
);
const command = new Deno.Command("tiny-encrypt", {
args: ["simple-decrypt", "--value", masterKeyContent],
});
const { code, stdout, stderr } = command.outputSync();
if (code !== 0) {
console.error(`Execute command tiny-encrypt simple-decrypt failed:
code: ${code}
stdout: ${new TextDecoder().decode(stdout)}
stderr: ${new TextDecoder().decode(stderr)}`);
throw new Error(`Decrypt master key failed, code: ${code}`);
}
const tinyEncryptSimpleDecryptObject = JSON.parse(
new TextDecoder().decode(stdout),
) as TinyEncryptSimpleDecryptObject;
if (tinyEncryptSimpleDecryptObject.code !== 0) {
throw new Error(
`Decrypt master key failed, response code: ${tinyEncryptSimpleDecryptObject.code}`,
);
}
return hexStringToUint8Array(tinyEncryptSimpleDecryptObject.result);
}
async function main() {
// TODO ...
console.log(uint8ArrayToHexString(await loadMasterKey()));
}
await main();