{"ast":null,"code":"// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction asUInt32Array(buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n var len = buf.length / 4 | 0;\n var out = new Array(len);\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4);\n }\n\n return out;\n}\n\nfunction scrubVec(v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0;\n }\n}\n\nfunction cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0];\n var SUB_MIX1 = SUB_MIX[1];\n var SUB_MIX2 = SUB_MIX[2];\n var SUB_MIX3 = SUB_MIX[3];\n var s0 = M[0] ^ keySchedule[0];\n var s1 = M[1] ^ keySchedule[1];\n var s2 = M[2] ^ keySchedule[2];\n var s3 = M[3] ^ keySchedule[3];\n var t0, t1, t2, t3;\n var ksRow = 4;\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++];\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++];\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++];\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++];\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n t0 = t0 >>> 0;\n t1 = t1 >>> 0;\n t2 = t2 >>> 0;\n t3 = t3 >>> 0;\n return [t0, t1, t2, t3];\n} // AES constants\n\n\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\nvar G = function () {\n // Compute double table\n var d = new Array(256);\n\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1;\n } else {\n d[j] = j << 1 ^ 0x11b;\n }\n }\n\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX = [[], [], [], []];\n var INV_SUB_MIX = [[], [], [], []]; // Walk GF(2^8)\n\n var x = 0;\n var xi = 0;\n\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x; // Compute multiplication\n\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4]; // Compute sub bytes, mix columns tables\n\n var t = d[sx] * 0x101 ^ sx * 0x1010100;\n SUB_MIX[0][x] = t << 24 | t >>> 8;\n SUB_MIX[1][x] = t << 16 | t >>> 16;\n SUB_MIX[2][x] = t << 8 | t >>> 24;\n SUB_MIX[3][x] = t; // Compute inv sub bytes, inv mix columns tables\n\n t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n INV_SUB_MIX[0][sx] = t << 24 | t >>> 8;\n INV_SUB_MIX[1][sx] = t << 16 | t >>> 16;\n INV_SUB_MIX[2][sx] = t << 8 | t >>> 24;\n INV_SUB_MIX[3][sx] = t;\n\n if (x === 0) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n };\n}();\n\nfunction AES(key) {\n this._key = asUInt32Array(key);\n\n this._reset();\n}\n\nAES.blockSize = 4 * 4;\nAES.keySize = 256 / 8;\nAES.prototype.blockSize = AES.blockSize;\nAES.prototype.keySize = AES.keySize;\n\nAES.prototype._reset = function () {\n var keyWords = this._key;\n var keySize = keyWords.length;\n var nRounds = keySize + 6;\n var ksRows = (nRounds + 1) * 4;\n var keySchedule = [];\n\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k];\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1];\n\n if (k % keySize === 0) {\n t = t << 8 | t >>> 24;\n t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];\n t ^= RCON[k / keySize | 0] << 24;\n } else if (keySize > 6 && k % keySize === 4) {\n t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t;\n }\n\n var invKeySchedule = [];\n\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik;\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)];\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt;\n } else {\n invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]];\n }\n }\n\n this._nRounds = nRounds;\n this._keySchedule = keySchedule;\n this._invKeySchedule = invKeySchedule;\n};\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M);\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds);\n};\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M);\n var buf = Buffer.allocUnsafe(16);\n buf.writeUInt32BE(out[0], 0);\n buf.writeUInt32BE(out[1], 4);\n buf.writeUInt32BE(out[2], 8);\n buf.writeUInt32BE(out[3], 12);\n return buf;\n};\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M); // swap\n\n var m1 = M[1];\n M[1] = M[3];\n M[3] = m1;\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds);\n var buf = Buffer.allocUnsafe(16);\n buf.writeUInt32BE(out[0], 0);\n buf.writeUInt32BE(out[3], 4);\n buf.writeUInt32BE(out[2], 8);\n buf.writeUInt32BE(out[1], 12);\n return buf;\n};\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule);\n scrubVec(this._invKeySchedule);\n scrubVec(this._key);\n};\n\nmodule.exports.AES = AES;","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/browserify-aes/aes.js"],"names":["Buffer","require","asUInt32Array","buf","isBuffer","from","len","length","out","Array","i","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","t0","t1","t2","t3","ksRow","round","RCON","G","d","j","INV_SBOX","INV_SUB_MIX","x","xi","sx","x2","x4","x8","t","AES","key","_key","_reset","blockSize","keySize","prototype","keyWords","ksRows","k","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","allocUnsafe","writeUInt32BE","decryptBlock","m1","scrub","module","exports"],"mappings":"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","sourcesContent":["// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n"]},"metadata":{},"sourceType":"script"}