UNPKG

node-aescrypt

Version:

A node implementation of the AES Crypt <https://www.aescrypt.com/> file encryption format.

61 lines 5.07 kB
import { createHash, createHmac } from 'crypto'; import { readFileSync } from 'fs'; import { resolve as pathResolve } from 'path'; import { Readable, Writable } from 'stream'; const readPackageJson = (path) => JSON.parse(readFileSync(path, 'utf8')); const pkg = readPackageJson(pathResolve(__dirname, '../../../package.json')); export const NAME = pkg.name; export const VERSION = pkg.version; export const AESCRYPT_FILE_FORMAT_VERSION = 2; export function getKey(iv, password) { // This is a clever trick to do all the hashing rounds into a single buffer. // Note, sha255 is always 32 bytes and unicode is 2 bytes for each character. const buffer = Buffer.alloc(32 + password.length * 2); iv.copy(buffer, 0); // Write the IV. // Looks like the algorithm expects unicode. for (let i = 0; i < password.length; ++i) { buffer.writeUInt8(password.charCodeAt(i) & 0xff, 32 + i * 2); buffer.writeUInt8(password.charCodeAt(i) >>> 8, 32 + i * 2 + 1); } let round = 8192; while (round--) { // Hash and feed back into same buffer. createHash('sha256') .update(buffer) .digest() .copy(buffer, 0); } return buffer.slice(0, 32); } export function getHMAC(key) { return createHmac('sha256', key); } export function toStream(contents) { let remaining = contents; return new Readable({ read(size) { if (size && size >= remaining.length) { this.push(remaining); this.push(null); } else { this.push(remaining.slice(0, size)); remaining = remaining.slice(size); } }, }); } export function withStream(cb) { const buffers = []; return new Writable({ write(chunk, _, callback) { buffers.push(chunk); callback(); }, final(callback) { cb(Buffer.concat(buffers)); callback(); }, }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBUSxNQUFNLFFBQVEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTVDLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFekMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUk5QyxNQUFNLFVBQVUsTUFBTSxDQUFDLEVBQVUsRUFBRSxRQUFnQjtJQUNqRCw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7SUFDcEMsNENBQTRDO0lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLE9BQU8sS0FBSyxFQUFFLEVBQUU7UUFDZCx1Q0FBdUM7UUFDdkMsVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsTUFBTSxFQUFFO2FBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNwQjtJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBVztJQUNqQyxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsUUFBeUI7SUFDaEQsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLE9BQU8sSUFBSSxRQUFRLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQXdCO1lBQzNCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7UUFDSCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUdELE1BQU0sVUFBVSxVQUFVLENBQUMsRUFBc0I7SUFDL0MsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQzdCLE9BQU8sSUFBSSxRQUFRLENBQUM7UUFDbEIsS0FBSyxDQUFDLEtBQWEsRUFBRSxDQUFDLEVBQUUsUUFBUTtZQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxDQUFDO1FBQ2IsQ0FBQztRQUNELEtBQUssQ0FBQyxRQUFRO1lBQ1osRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzQixRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIn0=