UNPKG

r2-shared-js

Version:

Readium 2 'shared' for NodeJS (TypeScript)

79 lines 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransformerObfAdobe = void 0; var tslib_1 = require("tslib"); var BufferUtils_1 = require("r2-utils-js/dist/es5/src/_utils/stream/BufferUtils"); var TransformerObfAdobe = (function () { function TransformerObfAdobe() { } TransformerObfAdobe.prototype.supports = function (_publication, link) { return link.Properties && link.Properties.Encrypted && link.Properties.Encrypted.Algorithm === "http://ns.adobe.com/pdf/enc#RC"; }; TransformerObfAdobe.prototype.transformStream = function (publication, link, _url, stream, _isPartialByteRangeRequest, _partialByteBegin, _partialByteEnd, _sessionInfo) { return tslib_1.__awaiter(this, void 0, void 0, function () { var data, err_1, buff, err_2, sal; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4, (0, BufferUtils_1.streamToBufferPromise)(stream.stream)]; case 1: data = _a.sent(); return [3, 3]; case 2: err_1 = _a.sent(); return [2, Promise.reject(err_1)]; case 3: _a.trys.push([3, 5, , 6]); return [4, this.transformBuffer(publication, link, data)]; case 4: buff = _a.sent(); return [3, 6]; case 5: err_2 = _a.sent(); return [2, Promise.reject(err_2)]; case 6: sal = { length: buff.length, reset: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { return [2, Promise.resolve(sal)]; }); }); }, stream: (0, BufferUtils_1.bufferToStream)(buff), }; return [2, Promise.resolve(sal)]; } }); }); }; TransformerObfAdobe.prototype.transformBuffer = function (publication, _link, data) { return tslib_1.__awaiter(this, void 0, void 0, function () { var pubID, key, i, byteHex, byteNumer, prefixLength, zipDataPrefix, i, zipDataRemainder; return tslib_1.__generator(this, function (_a) { pubID = publication.Metadata.Identifier; pubID = pubID.replace("urn:uuid:", ""); pubID = pubID.replace(/-/g, ""); pubID = pubID.replace(/\s/g, ""); key = []; for (i = 0; i < 16; i++) { byteHex = pubID.substr(i * 2, 2); byteNumer = parseInt(byteHex, 16); key.push(byteNumer); } prefixLength = 1024; zipDataPrefix = data.slice(0, prefixLength); for (i = 0; i < prefixLength; i++) { zipDataPrefix[i] = zipDataPrefix[i] ^ (key[i % key.length]); } zipDataRemainder = data.slice(prefixLength); return [2, Promise.resolve(Buffer.concat([zipDataPrefix, zipDataRemainder]))]; }); }); }; return TransformerObfAdobe; }()); exports.TransformerObfAdobe = TransformerObfAdobe; //# sourceMappingURL=transformer-obf-adobe.js.map