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

15.66% Statements 13/83
100% Branches 0/0
20% Functions 2/10
15.66% Lines 13/83
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121                                                                                                                                                                                                                        
define(["require", "exports", "../digital-signature/signature/pdf-accumulator"], function (require, exports, pdf_accumulator_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var _Sha256 = (function () {
        function _Sha256() {
        }
        _Sha256.prototype._startChunkedConversion = function (outputSink) {
            return new pdf_accumulator_1._PdfNativeHashInput(this, outputSink);
        };
        _Sha256.prototype._rotateRight = function (x, n) {
            return (x >>> n) | (x << (32 - n));
        };
        _Sha256.prototype._sigma = function (x) {
            return this._rotateRight(x, 2) ^ this._rotateRight(x, 13) ^ this._rotateRight(x, 22);
        };
        _Sha256.prototype._sigmaPrime = function (x) {
            return this._rotateRight(x, 6) ^ this._rotateRight(x, 11) ^ this._rotateRight(x, 25);
        };
        _Sha256.prototype._littleSigma = function (x) {
            return this._rotateRight(x, 7) ^ this._rotateRight(x, 18) ^ (x >>> 3);
        };
        _Sha256.prototype._littleSigmaPrime = function (x) {
            return this._rotateRight(x, 17) ^ this._rotateRight(x, 19) ^ (x >>> 10);
        };
        _Sha256.prototype._hash = function (data, offset, length) {
            var h0 = 0x6a09e667;
            var h1 = 0xbb67ae85;
            var h2 = 0x3c6ef372;
            var h3 = 0xa54ff53a;
            var h4 = 0x510e527f;
            var h5 = 0x9b05688c;
            var h6 = 0x1f83d9ab;
            var h7 = 0x5be0cd19;
            var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,
                0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6,
                0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3,
                0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e,
                0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116,
                0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814,
                0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
            var paddedLength = Math.ceil((length + 9) / 64) * 64;
            var padded = new Uint8Array(paddedLength);
            var i = 0;
            var j;
            for (; i < length; ++i) {
                padded[i] = data[offset++];
            }
            padded[i++] = 0x80;
            var n = paddedLength - 8;
            while (i < n) {
                padded[i++] = 0;
            }
            padded[i++] = 0;
            padded[i++] = 0;
            padded[i++] = 0;
            padded[i++] = (length >>> 29) & 0xff;
            padded[i++] = (length >> 21) & 0xff;
            padded[i++] = (length >> 13) & 0xff;
            padded[i++] = (length >> 5) & 0xff;
            padded[i++] = (length << 3) & 0xff;
            var w = new Uint32Array(64);
            for (i = 0; i < paddedLength;) {
                for (j = 0; j < 16; ++j) {
                    w[j] = (padded[i] << 24) |
                        (padded[i + 1] << 16) |
                        (padded[i + 2] << 8) |
                        padded[i + 3];
                    i += 4;
                }
                for (j = 16; j < 64; ++j) {
                    w[j] = (this._littleSigmaPrime(w[j - 2]) +
                        w[j - 7] +
                        this._littleSigma(w[j - 15]) + w[j - 16]) | 0;
                }
                var a = h0;
                var b = h1;
                var c = h2;
                var d = h3;
                var e = h4;
                var f = h5;
                var g = h6;
                var h = h7;
                var t1 = void 0;
                var t2 = void 0;
                for (j = 0; j < 64; ++j) {
                    t1 = h +
                        this._sigmaPrime(e) +
                        ((e & f) ^ (~e & g)) +
                        k[j] +
                        w[j];
                    t2 = this._sigma(a) + ((a & b) ^ (a & c) ^ (b & c));
                    h = g;
                    g = f;
                    f = e;
                    e = (d + t1) | 0;
                    d = c;
                    c = b;
                    b = a;
                    a = (t1 + t2) | 0;
                }
                h0 = (h0 + a) | 0;
                h1 = (h1 + b) | 0;
                h2 = (h2 + c) | 0;
                h3 = (h3 + d) | 0;
                h4 = (h4 + e) | 0;
                h5 = (h5 + f) | 0;
                h6 = (h6 + g) | 0;
                h7 = (h7 + h) | 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,
                (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, (h5) & 0xFF, (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF,
                (h6) & 0xFF, (h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, (h7) & 0xFF
            ]);
        };
        return _Sha256;
    }());
    exports._Sha256 = _Sha256;
});