all files / core/security/encryptors/ secureHash-algorithm1.js

13.85% Statements 9/65
0% Branches 0/6
33.33% Functions 2/6
13.85% Lines 9/65
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89                                                                                                                                                                
define(["require", "exports", "../digital-signature/signature/pdf-accumulator"], function (require, exports, pdf_accumulator_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var _Sha1 = (function () {
        function _Sha1() {
        }
        _Sha1.prototype._startChunkedConversion = function (outputSink) {
            return new pdf_accumulator_1._PdfNativeHashInput(this, outputSink);
        };
        _Sha1.prototype._rotateLeft = function (x, n) {
            return (x << n) | (x >>> (32 - n));
        };
        _Sha1.prototype._hash = function (data, offset, length) {
            var paddedLength = ((length + 9 + 63) >> 6) << 6;
            var padded = new Uint8Array(paddedLength);
            var i = 0;
            for (; i < length; ++i) {
                padded[i] = data[offset++];
            }
            padded[i++] = 0x80;
            var bitLength = length * 8;
            padded[paddedLength - 4] = (bitLength >>> 24) & 0xff;
            padded[paddedLength - 3] = (bitLength >>> 16) & 0xff;
            padded[paddedLength - 2] = (bitLength >>> 8) & 0xff;
            padded[paddedLength - 1] = bitLength & 0xff;
            var h0 = 0x67452301;
            var h1 = 0xefcdab89;
            var h2 = 0x98badcfe;
            var h3 = 0x10325476;
            var h4 = 0xc3d2e1f0;
            var w = new Uint32Array(80);
            for (var j = 0; j < paddedLength; j += 64) {
                for (var k = 0; k < 16; ++k) {
                    var idx = j + k * 4;
                    w[k] = (padded[idx] << 24) | (padded[idx + 1] << 16) | (padded[idx + 2] << 8) | padded[idx + 3];
                }
                for (var k = 16; k < 80; ++k) {
                    w[k] = this._rotateLeft(w[k - 3] ^ w[k - 8] ^ w[k - 14] ^ w[k - 16], 1);
                }
                var a = h0;
                var b = h1;
                var c = h2;
                var d = h3;
                var e = h4;
                for (var k = 0; k < 80; ++k) {
                    var f = void 0;
                    var kConst = void 0;
                    if (k < 20) {
                        f = (b & c) | (~b & d);
                        kConst = 0x5a827999;
                    }
                    else if (k < 40) {
                        f = b ^ c ^ d;
                        kConst = 0x6ed9eba1;
                    }
                    else if (k < 60) {
                        f = (b & c) | (b & d) | (c & d);
                        kConst = 0x8f1bbcdc;
                    }
                    else {
                        f = b ^ c ^ d;
                        kConst = 0xca62c1d6;
                    }
                    var temp = (this._rotateLeft(a, 5) + f + e + kConst + w[k]) >>> 0;
                    e = d;
                    d = c;
                    c = this._rotateLeft(b, 30);
                    b = a;
                    a = temp;
                }
                h0 = (h0 + a) >>> 0;
                h1 = (h1 + b) >>> 0;
                h2 = (h2 + c) >>> 0;
                h3 = (h3 + d) >>> 0;
                h4 = (h4 + e) >>> 0;
            }
            return new Uint8Array([
                (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, h0 & 0xff,
                (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, h1 & 0xff,
                (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, h2 & 0xff,
                (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, h3 & 0xff,
                (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, h4 & 0xff
            ]);
        };
        return _Sha1;
    }());
    exports._Sha1 = _Sha1;
});