UNPKG

r2-shared-js

Version:

Readium 2 'shared' for NodeJS (TypeScript)

60 lines 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransformerObfAdobe = void 0; const tslib_1 = require("tslib"); const BufferUtils_1 = require("r2-utils-js/dist/es7-es2016/src/_utils/stream/BufferUtils"); class TransformerObfAdobe { supports(_publication, link) { return link.Properties && link.Properties.Encrypted && link.Properties.Encrypted.Algorithm === "http://ns.adobe.com/pdf/enc#RC"; } transformStream(publication, link, _url, stream, _isPartialByteRangeRequest, _partialByteBegin, _partialByteEnd, _sessionInfo) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let data; try { data = yield (0, BufferUtils_1.streamToBufferPromise)(stream.stream); } catch (err) { return Promise.reject(err); } let buff; try { buff = yield this.transformBuffer(publication, link, data); } catch (err) { return Promise.reject(err); } const sal = { length: buff.length, reset: () => tslib_1.__awaiter(this, void 0, void 0, function* () { return Promise.resolve(sal); }), stream: (0, BufferUtils_1.bufferToStream)(buff), }; return Promise.resolve(sal); }); } transformBuffer(publication, _link, data) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let pubID = publication.Metadata.Identifier; pubID = pubID.replace("urn:uuid:", ""); pubID = pubID.replace(/-/g, ""); pubID = pubID.replace(/\s/g, ""); const key = []; for (let i = 0; i < 16; i++) { const byteHex = pubID.substr(i * 2, 2); const byteNumer = parseInt(byteHex, 16); key.push(byteNumer); } const prefixLength = 1024; const zipDataPrefix = data.slice(0, prefixLength); for (let i = 0; i < prefixLength; i++) { zipDataPrefix[i] = zipDataPrefix[i] ^ (key[i % key.length]); } const zipDataRemainder = data.slice(prefixLength); return Promise.resolve(Buffer.concat([zipDataPrefix, zipDataRemainder])); }); } } exports.TransformerObfAdobe = TransformerObfAdobe; //# sourceMappingURL=transformer-obf-adobe.js.map