UNPKG

@syncfusion/ej2-pdf

Version:

Feature-rich JavaScript PDF library with built-in support for loading and manipulating PDF document.

115 lines (114 loc) 4.46 kB
/** * MD5 hash implementation used internally by PDF cryptography helpers. * * @private */ var _MD5 = /** @class */ (function () { function _MD5() { /** * Rotation amounts per round. * * @private */ this._r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); /** * K constants for MD5. * * @private */ this._k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); } /** * Compute the MD5 hash for the provided data slice. * * @private * @param {Uint8Array} data bytes. * @param {number} offset offset in `data`. * @param {number} length of bytes to hash. * @returns {Uint8Array} The 16-byte MD5 digest as `Uint8Array`. */ _MD5.prototype.hash = function (data, offset, length) { var h0 = 1732584193; var h1 = -271733879; var h2 = -1732584194; var h3 = 271733878; var paddedLength = (length + 72) & ~63; var padded = new Uint8Array(paddedLength); var i = 0; var j = 0; for (; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; var n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = (length << 3) & 0xff; padded[i++] = (length >> 5) & 0xff; padded[i++] = (length >> 13) & 0xff; padded[i++] = (length >> 21) & 0xff; padded[i++] = (length >>> 29) & 0xff; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; var w = new Int32Array(16); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j, i += 4) { w[j] = padded[i] | (padded[i + 1] << 8) | (padded[i + 2] << 16) | (padded[i + 3] << 24); } var a = h0; var b = h1; var c = h2; var d = h3; var e = void 0; var f = void 0; for (j = 0; j < 64; ++j) { if (j < 16) { e = (b & c) | (~b & d); f = j; } else if (j < 32) { e = (d & b) | (~d & c); f = (5 * j + 1) & 15; } else if (j < 48) { e = b ^ c ^ d; f = (3 * j + 5) & 15; } else { e = c ^ (b | ~d); f = (7 * j) & 15; } var previous = d; var current = (a + e + this._k[j] + w[f]) | 0; var rotate = this._r[j]; d = c; c = b; b = (b + ((current << rotate) | (current >>> (32 - rotate)))) | 0; a = previous; } h0 = (h0 + a) | 0; h1 = (h1 + b) | 0; h2 = (h2 + c) | 0; h3 = (h3 + d) | 0; } return new Uint8Array([h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF, h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF, h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF, h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF ]); }; return _MD5; }()); export { _MD5 };