;(function (root, factory, undef) { 
 | 
    if (typeof exports === "object") { 
 | 
        // CommonJS 
 | 
        module.exports = exports = factory(require("./core"), require("./cipher-core")); 
 | 
    } 
 | 
    else if (typeof define === "function" && define.amd) { 
 | 
        // AMD 
 | 
        define(["./core", "./cipher-core"], factory); 
 | 
    } 
 | 
    else { 
 | 
        // Global (browser) 
 | 
        factory(root.CryptoJS); 
 | 
    } 
 | 
}(this, function (CryptoJS) { 
 | 
  
 | 
    /** @preserve 
 | 
     * Counter block mode compatible with  Dr Brian Gladman fileenc.c 
 | 
     * derived from CryptoJS.mode.CTR 
 | 
     * Jan Hruby jhruby.web@gmail.com 
 | 
     */ 
 | 
    CryptoJS.mode.CTRGladman = (function () { 
 | 
        var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); 
 | 
  
 | 
        function incWord(word) 
 | 
        { 
 | 
            if (((word >> 24) & 0xff) === 0xff) { //overflow 
 | 
            var b1 = (word >> 16)&0xff; 
 | 
            var b2 = (word >> 8)&0xff; 
 | 
            var b3 = word & 0xff; 
 | 
  
 | 
            if (b1 === 0xff) // overflow b1 
 | 
            { 
 | 
            b1 = 0; 
 | 
            if (b2 === 0xff) 
 | 
            { 
 | 
                b2 = 0; 
 | 
                if (b3 === 0xff) 
 | 
                { 
 | 
                    b3 = 0; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    ++b3; 
 | 
                } 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                ++b2; 
 | 
            } 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
            ++b1; 
 | 
            } 
 | 
  
 | 
            word = 0; 
 | 
            word += (b1 << 16); 
 | 
            word += (b2 << 8); 
 | 
            word += b3; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
            word += (0x01 << 24); 
 | 
            } 
 | 
            return word; 
 | 
        } 
 | 
  
 | 
        function incCounter(counter) 
 | 
        { 
 | 
            if ((counter[0] = incWord(counter[0])) === 0) 
 | 
            { 
 | 
                // encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8 
 | 
                counter[1] = incWord(counter[1]); 
 | 
            } 
 | 
            return counter; 
 | 
        } 
 | 
  
 | 
        var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ 
 | 
            processBlock: function (words, offset) { 
 | 
                // Shortcuts 
 | 
                var cipher = this._cipher 
 | 
                var blockSize = cipher.blockSize; 
 | 
                var iv = this._iv; 
 | 
                var counter = this._counter; 
 | 
  
 | 
                // Generate keystream 
 | 
                if (iv) { 
 | 
                    counter = this._counter = iv.slice(0); 
 | 
  
 | 
                    // Remove IV for subsequent blocks 
 | 
                    this._iv = undefined; 
 | 
                } 
 | 
  
 | 
                incCounter(counter); 
 | 
  
 | 
                var keystream = counter.slice(0); 
 | 
                cipher.encryptBlock(keystream, 0); 
 | 
  
 | 
                // Encrypt 
 | 
                for (var i = 0; i < blockSize; i++) { 
 | 
                    words[offset + i] ^= keystream[i]; 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
  
 | 
        CTRGladman.Decryptor = Encryptor; 
 | 
  
 | 
        return CTRGladman; 
 | 
    }()); 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    return CryptoJS.mode.CTRGladman; 
 | 
  
 | 
})); 
 |