KeyRing.prototype.import = function(tar, passphrase, writeflag, callback) { var self = this; var read = fs.createReadStream(tar); var parse = targz().createParseStream(); if (typeof writeflag === 'function') { callback = writeflag; writeflag = false; } function worker(entry, done) { var key = path.basename(entry.path); var keyPath = path.join(self._keyFolder, key); if (!utils.existsSync(keyPath) || writeflag === true) { var buf = ''; entry.on('data', function(data) { buf += data; }); entry.resume(); entry.on('end', function() { var decrypted; if (key === 'key.ring' || key === '.DS_Store') { return entry.abort(); } try { decrypted = self._encrypt( KeyRing.prototype._decrypt.call({ _pass: passphrase }, buf) ); } catch (err) { parse.removeAllListeners('end'); return callback(new Error('Failed to decrypt keyring')); } fs.writeFileSync(keyPath, decrypted, done); }); } } parse.on('entry', worker).on('end', callback); read.pipe(parse); };
KeyRing.prototype.export = function(tar, callback) { var read = targz().createReadStream(this._keyFolder); var write = fs.createWriteStream(tar); read.pipe(write).on('finish', callback).on('error', callback); };