@axerunners/x11-hash-js
Version:
x11 javascript hashing algorithm in pure javascript
1,223 lines (1,152 loc) • 310 kB
JavaScript
require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
'use strict';
var op = require('./op');
var h = require('./helper');
var AES0 = h.bytes2Int32Buffer(h.b64Decode('pWNjxoR8fPiZd3fujXt79g3y8v+9a2vWsW9v3lTFxZFQMDBgAwEBAqlnZ859KytWGf7+52LX17Xmq6tNmnZ27EXKyo+dgoIfQMnJiYd9ffoV+vrv61lZsslHR44L8PD77K2tQWfU1LP9oqJf6q+vRb+cnCP3pKRTlnJy5FvAwJvCt7d1HP394a6Tkz1qJiZMWjY2bEE/P34C9/f1T8zMg1w0NGj0paVRNOXl0Qjx8fmTcXHic9jYq1MxMWI/FRUqDAQECFLHx5VlIyNGXsPDnSgYGDChlpY3DwUFCrWami8JBwcONhISJJuAgBs94uLfJuvrzWknJ07NsrJ/n3V16hsJCRKeg4MddCwsWC4aGjQtGxs2sm5u3O5aWrT7oKBb9lJSpE07O3Zh1ta3zrOzfXspKVI+4+PdcS8vXpeEhBP1U1OmaNHRuQAAAAAs7e3BYCAgQB/8/OPIsbF57Vtbtr5qatRGy8uN2b6+Z0s5OXLeSkqU1ExMmOhYWLBKz8+Fa9DQuyrv78XlqqpPFvv77cVDQ4bXTU2aVTMzZpSFhRHPRUWKEPn56QYCAgSBf3/+8FBQoEQ8PHi6n58l46ioS/NRUaL+o6NdwEBAgIqPjwWtkpI/vJ2dIUg4OHAE9fXx37y8Y8G2tnd12tqvYyEhQjAQECAa///lDvPz/W3S0r9Mzc2BFAwMGDUTEyYv7OzD4V9fvqKXlzXMRESIORcXLlfExJPyp6dVgn5+/Ec9PXqsZGTI511duisZGTKVc3PmoGBgwJiBgRnRT0+ef9zco2YiIkR+KipUq5CQO4OIiAvKRkaMKe7ux9O4uGs8FBQoed7ep+JeXrwdCwsWdtvbrTvg4NtWMjJkTjo6dB4KChTbSUmSCgYGDGwkJEjkXFy4XcLCn27T073vrKxDpmJixKiRkTmklZUxN+Tk04t5efIy5+fVQ8jIi1k3N263bW3ajI2NAWTV1bHSTk6c4KmpSbRsbNj6VlasB/T08yXq6s+vZWXKjnp69OmurkcYCAgQ1bq6b4h4ePBvJSVKci4uXCQcHDjxpqZXx7S0c1HGxpcj6OjLfN3doZx0dOghHx8+3UtLlty9vWGGi4sNhYqKD5BwcOBCPj58xLW1capmZszYSEiQBQMDBgH29vcSDg4co2Fhwl81NWr5V1eu0Lm5aZGGhhdYwcGZJx0dOrmenic44eHZE/j467OYmCszEREiu2lp0nDZ2amJjo4Hp5SUM7abmy0iHh48koeHFSDp6clJzs6H/1VVqngoKFB639+lj4yMA/ihoVmAiYkJFw0NGtq/v2Ux5ubXxkJChLhoaNDDQUGCsJmZKXctLVoRDw8ey7Cwe/xUVKjWu7ttOhYWLA=='));
var AES1 = h.bytes2Int32Buffer(h.b64Decode('Y2PGpXx8+IR3d+6Ze3v2jfLy/w1ra9a9b2/escXFkVQwMGBQAQECA2dnzqkrK1Z9/v7nGdfXtWKrq03mdnbsmsrKj0WCgh+dycmJQH19+of6+u8VWVmy60dHjsnw8PsLra1B7NTUs2eiol/9r69F6pycI7+kpFP3cnLklsDAm1u3t3XC/f3hHJOTPa4mJkxqNjZsWj8/fkH39/UCzMyDTzQ0aFylpVH05eXRNPHx+QhxceKT2NirczExYlMVFSo/BAQIDMfHlVIjI0Zlw8OdXhgYMCiWljehBQUKD5qaL7UHBw4JEhIkNoCAG5vi4t896+vNJicnTmmysn/NdXXqnwkJEhuDgx2eLCxYdBoaNC4bGzYtbm7cslpatO6goFv7UlKk9js7dk3W1rdhs7N9zikpUnvj490+Ly9ecYSEE5dTU6b10dG5aAAAAADt7cEsICBAYPz84x+xsXnIW1u27Wpq1L7Ly41Gvr5n2Tk5cktKSpTeTEyY1FhYsOjPz4VK0NC7a+/vxSqqqk/l+/vtFkNDhsVNTZrXMzNmVYWFEZRFRYrP+fnpEAICBAZ/f/6BUFCg8Dw8eESfnyW6qKhL41FRovOjo13+QECAwI+PBYqSkj+tnZ0hvDg4cEj19fEEvLxj37a2d8Ha2q91ISFCYxAQIDD//+Ua8/P9DtLSv23NzYFMDAwYFBMTJjXs7MMvX1++4ZeXNaJERIjMFxcuOcTEk1enp1Xyfn78gj09ekdkZMisXV265xkZMitzc+aVYGDAoIGBGZhPT57R3NyjfyIiRGYqKlR+kJA7q4iIC4NGRozK7u7HKbi4a9MUFCg83t6neV5evOILCxYd29utduDg2zsyMmRWOjp0TgoKFB5JSZLbBgYMCiQkSGxcXLjkwsKfXdPTvW6srEPvYmLEppGROaiVlTGk5OTTN3l58ovn59UyyMiLQzc3blltbdq3jY0BjNXVsWROTpzSqalJ4Gxs2LRWVqz69PTzB+rqzyVlZcqvenr0jq6uR+kICBAYurpv1Xh48IglJUpvLi5cchwcOCSmplfxtLRzx8bGl1Ho6Msj3d2hfHR06JwfHz4hS0uW3b29YdyLiw2GiooPhXBw4JA+PnxCtbVxxGZmzKpISJDYAwMGBfb29wEODhwSYWHCozU1al9XV675ublp0IaGF5HBwZlYHR06J56eJ7nh4dk4+PjrE5iYK7MRESIzaWnSu9nZqXCOjgeJlJQzp5ubLbYeHjwih4cVkunpySDOzodJVVWq/ygoUHjf36V6jIwDj6GhWfiJiQmADQ0aF7+/Zdrm5tcxQkKExmho0LhBQYLDmZkpsC0tWncPDx4RsLB7y1RUqPy7u23WFhYsOg=='));
var AES2 = h.bytes2Int32Buffer(h.b64Decode('Y8alY3z4hHx37pl3e/aNe/L/DfJr1r1rb96xb8WRVMUwYFAwAQIDAWfOqWcrVn0r/ucZ/te1YterTearduyadsqPRcqCH52CyYlAyX36h3367xX6WbLrWUeOyUfw+wvwrUHsrdSzZ9SiX/2ir0Xqr5wjv5ykU/ekcuSWcsCbW8C3dcK3/eEc/ZM9rpMmTGomNmxaNj9+QT/39QL3zINPzDRoXDSlUfSl5dE05fH5CPFx4pNx2Ktz2DFiUzEVKj8VBAgMBMeVUscjRmUjw51ewxgwKBiWN6GWBQoPBZovtZoHDgkHEiQ2EoAbm4Di3z3i680m6ydOaSeyf82ydeqfdQkSGwmDHZ6DLFh0LBo0LhobNi0bbtyyblq07lqgW/ugUqT2Ujt2TTvWt2HWs33OsylSeynj3T7jL15xL4QTl4RTpvVT0blo0QAAAADtwSztIEBgIPzjH/yxecixW7btW2rUvmrLjUbLvmfZvjlySzlKlN5KTJjUTFiw6FjPhUrP0Ltr0O/FKu+qT+Wq++0W+0OGxUNNmtdNM2ZVM4URlIVFis9F+ekQ+QIEBgJ//oF/UKDwUDx4RDyfJbqfqEvjqFGi81GjXf6jQIDAQI8Fio+SP62SnSG8nThwSDj18QT1vGPfvLZ3wbbar3XaIUJjIRAgMBD/5Rr/8/0O89K/bdLNgUzNDBgUDBMmNRPswy/sX77hX5c1opdEiMxEFy45F8STV8SnVfKnfvyCfj16Rz1kyKxkXbrnXRkyKxlz5pVzYMCgYIEZmIFPntFP3KN/3CJEZiIqVH4qkDurkIgLg4hGjMpG7scp7rhr07gUKDwU3qd53l684l4LFh0L26122+DbO+AyZFYyOnROOgoUHgpJkttJBgwKBiRIbCRcuORcwp9dwtO9btOsQ++sYsSmYpE5qJGVMaSV5NM35Hnyi3nn1TLnyItDyDduWTdt2rdtjQGMjdWxZNVOnNJOqUngqWzYtGxWrPpW9PMH9OrPJeplyq9levSOeq5H6a4IEBgIum/VunjwiHglSm8lLlxyLhw4JBymV/GmtHPHtMaXUcboyyPo3aF83XTonHQfPiEfS5bdS71h3L2LDYaLig+FinDgkHA+fEI+tXHEtWbMqmZIkNhIAwYFA/b3AfYOHBIOYcKjYTVqXzVXrvlXuWnQuYYXkYbBmVjBHTonHZ4nuZ7h2Tjh+OsT+Jgrs5gRIjMRadK7admpcNmOB4mOlDOnlJsttpsePCIehxWSh+nJIOnOh0nOVar/VShQeCjfpXrfjAOPjKFZ+KGJCYCJDRoXDb9l2r/m1zHmQoTGQmjQuGhBgsNBmSmwmS1ady0PHhEPsHvLsFSo/FS7bda7Fiw6Fg=='));
var AES3 = h.bytes2Int32Buffer(h.b64Decode('xqVjY/iEfHzumXd39o17e/8N8vLWvWtr3rFvb5FUxcVgUDAwAgMBAc6pZ2dWfSsr5xn+/rVi19dN5qur7Jp2do9FysofnYKCiUDJyfqHfX3vFfr6sutZWY7JR0f7C/DwQeytrbNn1NRf/aKiReqvryO/nJxT96Sk5JZycptbwMB1wre34Rz9/T2uk5NMaiYmbFo2Nn5BPz/1Avf3g0/MzGhcNDRR9KWl0TTl5fkI8fHik3Fxq3PY2GJTMTEqPxUVCAwEBJVSx8dGZSMjnV7DwzAoGBg3oZaWCg8FBS+1mpoOCQcHJDYSEhubgIDfPeLizSbr605pJyd/zbKy6p91dRIbCQkdnoODWHQsLDQuGho2LRsb3LJubrTuWlpb+6CgpPZSUnZNOzu3YdbWfc6zs1J7KSndPuPjXnEvLxOXhISm9VNTuWjR0QAAAADBLO3tQGAgIOMf/Px5yLGxtu1bW9S+amqNRsvLZ9m+vnJLOTmU3kpKmNRMTLDoWFiFSs/Pu2vQ0MUq7+9P5aqq7Rb7+4bFQ0Oa101NZlUzMxGUhYWKz0VF6RD5+QQGAgL+gX9/oPBQUHhEPDwlup+fS+OoqKLzUVFd/qOjgMBAQAWKj48/rZKSIbydnXBIODjxBPX1Y9+8vHfBtravddraQmMhISAwEBDlGv///Q7z879t0tKBTM3NGBQMDCY1ExPDL+zsvuFfXzWil5eIzERELjkXF5NXxMRV8qen/IJ+fnpHPT3IrGRkuuddXTIrGRnmlXNzwKBgYBmYgYGe0U9Po3/c3ERmIiJUfioqO6uQkAuDiIiMykZGxynu7mvTuLgoPBQUp3ne3rziXl4WHQsLrXbb29s74OBkVjIydE46OhQeCgqS20lJDAoGBkhsJCS45Fxcn13Cwr1u09ND76ysxKZiYjmokZExpJWV0zfk5PKLeXnVMufni0PIyG5ZNzfat21tAYyNjbFk1dWc0k5OSeCpqdi0bGys+lZW8wf09M8l6urKr2Vl9I56ekfprq4QGAgIb9W6uvCIeHhKbyUlXHIuLjgkHBxX8aamc8e0tJdRxsbLI+jooXzd3eicdHQ+IR8flt1LS2Hcvb0NhouLD4WKiuCQcHB8Qj4+ccS1tcyqZmaQ2EhIBgUDA/cB9vYcEg4OwqNhYWpfNTWu+VdXadC5uReRhoaZWMHBOicdHSe5np7ZOOHh6xP4+CuzmJgiMxER0rtpaalw2dkHiY6OM6eUlC22m5s8Ih4eFZKHh8kg6emHSc7Oqv9VVVB4KCilet/fA4+MjFn4oaEJgImJGhcNDWXav7/XMebmhMZCQtC4aGiCw0FBKbCZmVp3LS0eEQ8Pe8uwsKj8VFRt1ru7LDoWFg=='));
// var AES0 = [
// 0xA56363C6, 0x847C7CF8, 0x997777EE, 0x8D7B7BF6,
// 0x0DF2F2FF, 0xBD6B6BD6, 0xB16F6FDE, 0x54C5C591,
// 0x50303060, 0x03010102, 0xA96767CE, 0x7D2B2B56,
// 0x19FEFEE7, 0x62D7D7B5, 0xE6ABAB4D, 0x9A7676EC,
// 0x45CACA8F, 0x9D82821F, 0x40C9C989, 0x877D7DFA,
// 0x15FAFAEF, 0xEB5959B2, 0xC947478E, 0x0BF0F0FB,
// 0xECADAD41, 0x67D4D4B3, 0xFDA2A25F, 0xEAAFAF45,
// 0xBF9C9C23, 0xF7A4A453, 0x967272E4, 0x5BC0C09B,
// 0xC2B7B775, 0x1CFDFDE1, 0xAE93933D, 0x6A26264C,
// 0x5A36366C, 0x413F3F7E, 0x02F7F7F5, 0x4FCCCC83,
// 0x5C343468, 0xF4A5A551, 0x34E5E5D1, 0x08F1F1F9,
// 0x937171E2, 0x73D8D8AB, 0x53313162, 0x3F15152A,
// 0x0C040408, 0x52C7C795, 0x65232346, 0x5EC3C39D,
// 0x28181830, 0xA1969637, 0x0F05050A, 0xB59A9A2F,
// 0x0907070E, 0x36121224, 0x9B80801B, 0x3DE2E2DF,
// 0x26EBEBCD, 0x6927274E, 0xCDB2B27F, 0x9F7575EA,
// 0x1B090912, 0x9E83831D, 0x742C2C58, 0x2E1A1A34,
// 0x2D1B1B36, 0xB26E6EDC, 0xEE5A5AB4, 0xFBA0A05B,
// 0xF65252A4, 0x4D3B3B76, 0x61D6D6B7, 0xCEB3B37D,
// 0x7B292952, 0x3EE3E3DD, 0x712F2F5E, 0x97848413,
// 0xF55353A6, 0x68D1D1B9, 0x00000000, 0x2CEDEDC1,
// 0x60202040, 0x1FFCFCE3, 0xC8B1B179, 0xED5B5BB6,
// 0xBE6A6AD4, 0x46CBCB8D, 0xD9BEBE67, 0x4B393972,
// 0xDE4A4A94, 0xD44C4C98, 0xE85858B0, 0x4ACFCF85,
// 0x6BD0D0BB, 0x2AEFEFC5, 0xE5AAAA4F, 0x16FBFBED,
// 0xC5434386, 0xD74D4D9A, 0x55333366, 0x94858511,
// 0xCF45458A, 0x10F9F9E9, 0x06020204, 0x817F7FFE,
// 0xF05050A0, 0x443C3C78, 0xBA9F9F25, 0xE3A8A84B,
// 0xF35151A2, 0xFEA3A35D, 0xC0404080, 0x8A8F8F05,
// 0xAD92923F, 0xBC9D9D21, 0x48383870, 0x04F5F5F1,
// 0xDFBCBC63, 0xC1B6B677, 0x75DADAAF, 0x63212142,
// 0x30101020, 0x1AFFFFE5, 0x0EF3F3FD, 0x6DD2D2BF,
// 0x4CCDCD81, 0x140C0C18, 0x35131326, 0x2FECECC3,
// 0xE15F5FBE, 0xA2979735, 0xCC444488, 0x3917172E,
// 0x57C4C493, 0xF2A7A755, 0x827E7EFC, 0x473D3D7A,
// 0xAC6464C8, 0xE75D5DBA, 0x2B191932, 0x957373E6,
// 0xA06060C0, 0x98818119, 0xD14F4F9E, 0x7FDCDCA3,
// 0x66222244, 0x7E2A2A54, 0xAB90903B, 0x8388880B,
// 0xCA46468C, 0x29EEEEC7, 0xD3B8B86B, 0x3C141428,
// 0x79DEDEA7, 0xE25E5EBC, 0x1D0B0B16, 0x76DBDBAD,
// 0x3BE0E0DB, 0x56323264, 0x4E3A3A74, 0x1E0A0A14,
// 0xDB494992, 0x0A06060C, 0x6C242448, 0xE45C5CB8,
// 0x5DC2C29F, 0x6ED3D3BD, 0xEFACAC43, 0xA66262C4,
// 0xA8919139, 0xA4959531, 0x37E4E4D3, 0x8B7979F2,
// 0x32E7E7D5, 0x43C8C88B, 0x5937376E, 0xB76D6DDA,
// 0x8C8D8D01, 0x64D5D5B1, 0xD24E4E9C, 0xE0A9A949,
// 0xB46C6CD8, 0xFA5656AC, 0x07F4F4F3, 0x25EAEACF,
// 0xAF6565CA, 0x8E7A7AF4, 0xE9AEAE47, 0x18080810,
// 0xD5BABA6F, 0x887878F0, 0x6F25254A, 0x722E2E5C,
// 0x241C1C38, 0xF1A6A657, 0xC7B4B473, 0x51C6C697,
// 0x23E8E8CB, 0x7CDDDDA1, 0x9C7474E8, 0x211F1F3E,
// 0xDD4B4B96, 0xDCBDBD61, 0x868B8B0D, 0x858A8A0F,
// 0x907070E0, 0x423E3E7C, 0xC4B5B571, 0xAA6666CC,
// 0xD8484890, 0x05030306, 0x01F6F6F7, 0x120E0E1C,
// 0xA36161C2, 0x5F35356A, 0xF95757AE, 0xD0B9B969,
// 0x91868617, 0x58C1C199, 0x271D1D3A, 0xB99E9E27,
// 0x38E1E1D9, 0x13F8F8EB, 0xB398982B, 0x33111122,
// 0xBB6969D2, 0x70D9D9A9, 0x898E8E07, 0xA7949433,
// 0xB69B9B2D, 0x221E1E3C, 0x92878715, 0x20E9E9C9,
// 0x49CECE87, 0xFF5555AA, 0x78282850, 0x7ADFDFA5,
// 0x8F8C8C03, 0xF8A1A159, 0x80898909, 0x170D0D1A,
// 0xDABFBF65, 0x31E6E6D7, 0xC6424284, 0xB86868D0,
// 0xC3414182, 0xB0999929, 0x772D2D5A, 0x110F0F1E,
// 0xCBB0B07B, 0xFC5454A8, 0xD6BBBB6D, 0x3A16162C
// ];
// var AES1 = [
// 0x6363C6A5, 0x7C7CF884, 0x7777EE99, 0x7B7BF68D,
// 0xF2F2FF0D, 0x6B6BD6BD, 0x6F6FDEB1, 0xC5C59154,
// 0x30306050, 0x01010203, 0x6767CEA9, 0x2B2B567D,
// 0xFEFEE719, 0xD7D7B562, 0xABAB4DE6, 0x7676EC9A,
// 0xCACA8F45, 0x82821F9D, 0xC9C98940, 0x7D7DFA87,
// 0xFAFAEF15, 0x5959B2EB, 0x47478EC9, 0xF0F0FB0B,
// 0xADAD41EC, 0xD4D4B367, 0xA2A25FFD, 0xAFAF45EA,
// 0x9C9C23BF, 0xA4A453F7, 0x7272E496, 0xC0C09B5B,
// 0xB7B775C2, 0xFDFDE11C, 0x93933DAE, 0x26264C6A,
// 0x36366C5A, 0x3F3F7E41, 0xF7F7F502, 0xCCCC834F,
// 0x3434685C, 0xA5A551F4, 0xE5E5D134, 0xF1F1F908,
// 0x7171E293, 0xD8D8AB73, 0x31316253, 0x15152A3F,
// 0x0404080C, 0xC7C79552, 0x23234665, 0xC3C39D5E,
// 0x18183028, 0x969637A1, 0x05050A0F, 0x9A9A2FB5,
// 0x07070E09, 0x12122436, 0x80801B9B, 0xE2E2DF3D,
// 0xEBEBCD26, 0x27274E69, 0xB2B27FCD, 0x7575EA9F,
// 0x0909121B, 0x83831D9E, 0x2C2C5874, 0x1A1A342E,
// 0x1B1B362D, 0x6E6EDCB2, 0x5A5AB4EE, 0xA0A05BFB,
// 0x5252A4F6, 0x3B3B764D, 0xD6D6B761, 0xB3B37DCE,
// 0x2929527B, 0xE3E3DD3E, 0x2F2F5E71, 0x84841397,
// 0x5353A6F5, 0xD1D1B968, 0x00000000, 0xEDEDC12C,
// 0x20204060, 0xFCFCE31F, 0xB1B179C8, 0x5B5BB6ED,
// 0x6A6AD4BE, 0xCBCB8D46, 0xBEBE67D9, 0x3939724B,
// 0x4A4A94DE, 0x4C4C98D4, 0x5858B0E8, 0xCFCF854A,
// 0xD0D0BB6B, 0xEFEFC52A, 0xAAAA4FE5, 0xFBFBED16,
// 0x434386C5, 0x4D4D9AD7, 0x33336655, 0x85851194,
// 0x45458ACF, 0xF9F9E910, 0x02020406, 0x7F7FFE81,
// 0x5050A0F0, 0x3C3C7844, 0x9F9F25BA, 0xA8A84BE3,
// 0x5151A2F3, 0xA3A35DFE, 0x404080C0, 0x8F8F058A,
// 0x92923FAD, 0x9D9D21BC, 0x38387048, 0xF5F5F104,
// 0xBCBC63DF, 0xB6B677C1, 0xDADAAF75, 0x21214263,
// 0x10102030, 0xFFFFE51A, 0xF3F3FD0E, 0xD2D2BF6D,
// 0xCDCD814C, 0x0C0C1814, 0x13132635, 0xECECC32F,
// 0x5F5FBEE1, 0x979735A2, 0x444488CC, 0x17172E39,
// 0xC4C49357, 0xA7A755F2, 0x7E7EFC82, 0x3D3D7A47,
// 0x6464C8AC, 0x5D5DBAE7, 0x1919322B, 0x7373E695,
// 0x6060C0A0, 0x81811998, 0x4F4F9ED1, 0xDCDCA37F,
// 0x22224466, 0x2A2A547E, 0x90903BAB, 0x88880B83,
// 0x46468CCA, 0xEEEEC729, 0xB8B86BD3, 0x1414283C,
// 0xDEDEA779, 0x5E5EBCE2, 0x0B0B161D, 0xDBDBAD76,
// 0xE0E0DB3B, 0x32326456, 0x3A3A744E, 0x0A0A141E,
// 0x494992DB, 0x06060C0A, 0x2424486C, 0x5C5CB8E4,
// 0xC2C29F5D, 0xD3D3BD6E, 0xACAC43EF, 0x6262C4A6,
// 0x919139A8, 0x959531A4, 0xE4E4D337, 0x7979F28B,
// 0xE7E7D532, 0xC8C88B43, 0x37376E59, 0x6D6DDAB7,
// 0x8D8D018C, 0xD5D5B164, 0x4E4E9CD2, 0xA9A949E0,
// 0x6C6CD8B4, 0x5656ACFA, 0xF4F4F307, 0xEAEACF25,
// 0x6565CAAF, 0x7A7AF48E, 0xAEAE47E9, 0x08081018,
// 0xBABA6FD5, 0x7878F088, 0x25254A6F, 0x2E2E5C72,
// 0x1C1C3824, 0xA6A657F1, 0xB4B473C7, 0xC6C69751,
// 0xE8E8CB23, 0xDDDDA17C, 0x7474E89C, 0x1F1F3E21,
// 0x4B4B96DD, 0xBDBD61DC, 0x8B8B0D86, 0x8A8A0F85,
// 0x7070E090, 0x3E3E7C42, 0xB5B571C4, 0x6666CCAA,
// 0x484890D8, 0x03030605, 0xF6F6F701, 0x0E0E1C12,
// 0x6161C2A3, 0x35356A5F, 0x5757AEF9, 0xB9B969D0,
// 0x86861791, 0xC1C19958, 0x1D1D3A27, 0x9E9E27B9,
// 0xE1E1D938, 0xF8F8EB13, 0x98982BB3, 0x11112233,
// 0x6969D2BB, 0xD9D9A970, 0x8E8E0789, 0x949433A7,
// 0x9B9B2DB6, 0x1E1E3C22, 0x87871592, 0xE9E9C920,
// 0xCECE8749, 0x5555AAFF, 0x28285078, 0xDFDFA57A,
// 0x8C8C038F, 0xA1A159F8, 0x89890980, 0x0D0D1A17,
// 0xBFBF65DA, 0xE6E6D731, 0x424284C6, 0x6868D0B8,
// 0x414182C3, 0x999929B0, 0x2D2D5A77, 0x0F0F1E11,
// 0xB0B07BCB, 0x5454A8FC, 0xBBBB6DD6, 0x16162C3A
// ];
// var AES2 = [
// 0x63C6A563, 0x7CF8847C, 0x77EE9977, 0x7BF68D7B,
// 0xF2FF0DF2, 0x6BD6BD6B, 0x6FDEB16F, 0xC59154C5,
// 0x30605030, 0x01020301, 0x67CEA967, 0x2B567D2B,
// 0xFEE719FE, 0xD7B562D7, 0xAB4DE6AB, 0x76EC9A76,
// 0xCA8F45CA, 0x821F9D82, 0xC98940C9, 0x7DFA877D,
// 0xFAEF15FA, 0x59B2EB59, 0x478EC947, 0xF0FB0BF0,
// 0xAD41ECAD, 0xD4B367D4, 0xA25FFDA2, 0xAF45EAAF,
// 0x9C23BF9C, 0xA453F7A4, 0x72E49672, 0xC09B5BC0,
// 0xB775C2B7, 0xFDE11CFD, 0x933DAE93, 0x264C6A26,
// 0x366C5A36, 0x3F7E413F, 0xF7F502F7, 0xCC834FCC,
// 0x34685C34, 0xA551F4A5, 0xE5D134E5, 0xF1F908F1,
// 0x71E29371, 0xD8AB73D8, 0x31625331, 0x152A3F15,
// 0x04080C04, 0xC79552C7, 0x23466523, 0xC39D5EC3,
// 0x18302818, 0x9637A196, 0x050A0F05, 0x9A2FB59A,
// 0x070E0907, 0x12243612, 0x801B9B80, 0xE2DF3DE2,
// 0xEBCD26EB, 0x274E6927, 0xB27FCDB2, 0x75EA9F75,
// 0x09121B09, 0x831D9E83, 0x2C58742C, 0x1A342E1A,
// 0x1B362D1B, 0x6EDCB26E, 0x5AB4EE5A, 0xA05BFBA0,
// 0x52A4F652, 0x3B764D3B, 0xD6B761D6, 0xB37DCEB3,
// 0x29527B29, 0xE3DD3EE3, 0x2F5E712F, 0x84139784,
// 0x53A6F553, 0xD1B968D1, 0x00000000, 0xEDC12CED,
// 0x20406020, 0xFCE31FFC, 0xB179C8B1, 0x5BB6ED5B,
// 0x6AD4BE6A, 0xCB8D46CB, 0xBE67D9BE, 0x39724B39,
// 0x4A94DE4A, 0x4C98D44C, 0x58B0E858, 0xCF854ACF,
// 0xD0BB6BD0, 0xEFC52AEF, 0xAA4FE5AA, 0xFBED16FB,
// 0x4386C543, 0x4D9AD74D, 0x33665533, 0x85119485,
// 0x458ACF45, 0xF9E910F9, 0x02040602, 0x7FFE817F,
// 0x50A0F050, 0x3C78443C, 0x9F25BA9F, 0xA84BE3A8,
// 0x51A2F351, 0xA35DFEA3, 0x4080C040, 0x8F058A8F,
// 0x923FAD92, 0x9D21BC9D, 0x38704838, 0xF5F104F5,
// 0xBC63DFBC, 0xB677C1B6, 0xDAAF75DA, 0x21426321,
// 0x10203010, 0xFFE51AFF, 0xF3FD0EF3, 0xD2BF6DD2,
// 0xCD814CCD, 0x0C18140C, 0x13263513, 0xECC32FEC,
// 0x5FBEE15F, 0x9735A297, 0x4488CC44, 0x172E3917,
// 0xC49357C4, 0xA755F2A7, 0x7EFC827E, 0x3D7A473D,
// 0x64C8AC64, 0x5DBAE75D, 0x19322B19, 0x73E69573,
// 0x60C0A060, 0x81199881, 0x4F9ED14F, 0xDCA37FDC,
// 0x22446622, 0x2A547E2A, 0x903BAB90, 0x880B8388,
// 0x468CCA46, 0xEEC729EE, 0xB86BD3B8, 0x14283C14,
// 0xDEA779DE, 0x5EBCE25E, 0x0B161D0B, 0xDBAD76DB,
// 0xE0DB3BE0, 0x32645632, 0x3A744E3A, 0x0A141E0A,
// 0x4992DB49, 0x060C0A06, 0x24486C24, 0x5CB8E45C,
// 0xC29F5DC2, 0xD3BD6ED3, 0xAC43EFAC, 0x62C4A662,
// 0x9139A891, 0x9531A495, 0xE4D337E4, 0x79F28B79,
// 0xE7D532E7, 0xC88B43C8, 0x376E5937, 0x6DDAB76D,
// 0x8D018C8D, 0xD5B164D5, 0x4E9CD24E, 0xA949E0A9,
// 0x6CD8B46C, 0x56ACFA56, 0xF4F307F4, 0xEACF25EA,
// 0x65CAAF65, 0x7AF48E7A, 0xAE47E9AE, 0x08101808,
// 0xBA6FD5BA, 0x78F08878, 0x254A6F25, 0x2E5C722E,
// 0x1C38241C, 0xA657F1A6, 0xB473C7B4, 0xC69751C6,
// 0xE8CB23E8, 0xDDA17CDD, 0x74E89C74, 0x1F3E211F,
// 0x4B96DD4B, 0xBD61DCBD, 0x8B0D868B, 0x8A0F858A,
// 0x70E09070, 0x3E7C423E, 0xB571C4B5, 0x66CCAA66,
// 0x4890D848, 0x03060503, 0xF6F701F6, 0x0E1C120E,
// 0x61C2A361, 0x356A5F35, 0x57AEF957, 0xB969D0B9,
// 0x86179186, 0xC19958C1, 0x1D3A271D, 0x9E27B99E,
// 0xE1D938E1, 0xF8EB13F8, 0x982BB398, 0x11223311,
// 0x69D2BB69, 0xD9A970D9, 0x8E07898E, 0x9433A794,
// 0x9B2DB69B, 0x1E3C221E, 0x87159287, 0xE9C920E9,
// 0xCE8749CE, 0x55AAFF55, 0x28507828, 0xDFA57ADF,
// 0x8C038F8C, 0xA159F8A1, 0x89098089, 0x0D1A170D,
// 0xBF65DABF, 0xE6D731E6, 0x4284C642, 0x68D0B868,
// 0x4182C341, 0x9929B099, 0x2D5A772D, 0x0F1E110F,
// 0xB07BCBB0, 0x54A8FC54, 0xBB6DD6BB, 0x162C3A16
// ];
// var AES3 = [
// 0xC6A56363, 0xF8847C7C, 0xEE997777, 0xF68D7B7B,
// 0xFF0DF2F2, 0xD6BD6B6B, 0xDEB16F6F, 0x9154C5C5,
// 0x60503030, 0x02030101, 0xCEA96767, 0x567D2B2B,
// 0xE719FEFE, 0xB562D7D7, 0x4DE6ABAB, 0xEC9A7676,
// 0x8F45CACA, 0x1F9D8282, 0x8940C9C9, 0xFA877D7D,
// 0xEF15FAFA, 0xB2EB5959, 0x8EC94747, 0xFB0BF0F0,
// 0x41ECADAD, 0xB367D4D4, 0x5FFDA2A2, 0x45EAAFAF,
// 0x23BF9C9C, 0x53F7A4A4, 0xE4967272, 0x9B5BC0C0,
// 0x75C2B7B7, 0xE11CFDFD, 0x3DAE9393, 0x4C6A2626,
// 0x6C5A3636, 0x7E413F3F, 0xF502F7F7, 0x834FCCCC,
// 0x685C3434, 0x51F4A5A5, 0xD134E5E5, 0xF908F1F1,
// 0xE2937171, 0xAB73D8D8, 0x62533131, 0x2A3F1515,
// 0x080C0404, 0x9552C7C7, 0x46652323, 0x9D5EC3C3,
// 0x30281818, 0x37A19696, 0x0A0F0505, 0x2FB59A9A,
// 0x0E090707, 0x24361212, 0x1B9B8080, 0xDF3DE2E2,
// 0xCD26EBEB, 0x4E692727, 0x7FCDB2B2, 0xEA9F7575,
// 0x121B0909, 0x1D9E8383, 0x58742C2C, 0x342E1A1A,
// 0x362D1B1B, 0xDCB26E6E, 0xB4EE5A5A, 0x5BFBA0A0,
// 0xA4F65252, 0x764D3B3B, 0xB761D6D6, 0x7DCEB3B3,
// 0x527B2929, 0xDD3EE3E3, 0x5E712F2F, 0x13978484,
// 0xA6F55353, 0xB968D1D1, 0x00000000, 0xC12CEDED,
// 0x40602020, 0xE31FFCFC, 0x79C8B1B1, 0xB6ED5B5B,
// 0xD4BE6A6A, 0x8D46CBCB, 0x67D9BEBE, 0x724B3939,
// 0x94DE4A4A, 0x98D44C4C, 0xB0E85858, 0x854ACFCF,
// 0xBB6BD0D0, 0xC52AEFEF, 0x4FE5AAAA, 0xED16FBFB,
// 0x86C54343, 0x9AD74D4D, 0x66553333, 0x11948585,
// 0x8ACF4545, 0xE910F9F9, 0x04060202, 0xFE817F7F,
// 0xA0F05050, 0x78443C3C, 0x25BA9F9F, 0x4BE3A8A8,
// 0xA2F35151, 0x5DFEA3A3, 0x80C04040, 0x058A8F8F,
// 0x3FAD9292, 0x21BC9D9D, 0x70483838, 0xF104F5F5,
// 0x63DFBCBC, 0x77C1B6B6, 0xAF75DADA, 0x42632121,
// 0x20301010, 0xE51AFFFF, 0xFD0EF3F3, 0xBF6DD2D2,
// 0x814CCDCD, 0x18140C0C, 0x26351313, 0xC32FECEC,
// 0xBEE15F5F, 0x35A29797, 0x88CC4444, 0x2E391717,
// 0x9357C4C4, 0x55F2A7A7, 0xFC827E7E, 0x7A473D3D,
// 0xC8AC6464, 0xBAE75D5D, 0x322B1919, 0xE6957373,
// 0xC0A06060, 0x19988181, 0x9ED14F4F, 0xA37FDCDC,
// 0x44662222, 0x547E2A2A, 0x3BAB9090, 0x0B838888,
// 0x8CCA4646, 0xC729EEEE, 0x6BD3B8B8, 0x283C1414,
// 0xA779DEDE, 0xBCE25E5E, 0x161D0B0B, 0xAD76DBDB,
// 0xDB3BE0E0, 0x64563232, 0x744E3A3A, 0x141E0A0A,
// 0x92DB4949, 0x0C0A0606, 0x486C2424, 0xB8E45C5C,
// 0x9F5DC2C2, 0xBD6ED3D3, 0x43EFACAC, 0xC4A66262,
// 0x39A89191, 0x31A49595, 0xD337E4E4, 0xF28B7979,
// 0xD532E7E7, 0x8B43C8C8, 0x6E593737, 0xDAB76D6D,
// 0x018C8D8D, 0xB164D5D5, 0x9CD24E4E, 0x49E0A9A9,
// 0xD8B46C6C, 0xACFA5656, 0xF307F4F4, 0xCF25EAEA,
// 0xCAAF6565, 0xF48E7A7A, 0x47E9AEAE, 0x10180808,
// 0x6FD5BABA, 0xF0887878, 0x4A6F2525, 0x5C722E2E,
// 0x38241C1C, 0x57F1A6A6, 0x73C7B4B4, 0x9751C6C6,
// 0xCB23E8E8, 0xA17CDDDD, 0xE89C7474, 0x3E211F1F,
// 0x96DD4B4B, 0x61DCBDBD, 0x0D868B8B, 0x0F858A8A,
// 0xE0907070, 0x7C423E3E, 0x71C4B5B5, 0xCCAA6666,
// 0x90D84848, 0x06050303, 0xF701F6F6, 0x1C120E0E,
// 0xC2A36161, 0x6A5F3535, 0xAEF95757, 0x69D0B9B9,
// 0x17918686, 0x9958C1C1, 0x3A271D1D, 0x27B99E9E,
// 0xD938E1E1, 0xEB13F8F8, 0x2BB39898, 0x22331111,
// 0xD2BB6969, 0xA970D9D9, 0x07898E8E, 0x33A79494,
// 0x2DB69B9B, 0x3C221E1E, 0x15928787, 0xC920E9E9,
// 0x8749CECE, 0xAAFF5555, 0x50782828, 0xA57ADFDF,
// 0x038F8C8C, 0x59F8A1A1, 0x09808989, 0x1A170D0D,
// 0x65DABFBF, 0xD731E6E6, 0x84C64242, 0xD0B86868,
// 0x82C34141, 0x29B09999, 0x5A772D2D, 0x1E110F0F,
// 0x7BCBB0B0, 0xA8FC5454, 0x6DD6BBBB, 0x2C3A1616
// ];
module.exports.AES_ROUND_LE = function(X, K, Y) {
(Y[0]) = AES0[(X[0]) & 0xFF] ^
AES1[((X[1]) >>> 8) & 0xFF] ^
AES2[((X[2]) >>> 16) & 0xFF] ^
AES3[((X[3]) >>> 24) & 0xFF] ^ (K[0]);
(Y[1]) = AES0[(X[1]) & 0xFF] ^
AES1[((X[2]) >>> 8) & 0xFF] ^
AES2[((X[3]) >>> 16) & 0xFF] ^
AES3[((X[0]) >>> 24) & 0xFF] ^ (K[1]);
(Y[2]) = AES0[(X[2]) & 0xFF] ^
AES1[((X[3]) >>> 8) & 0xFF] ^
AES2[((X[0]) >>> 16) & 0xFF] ^
AES3[((X[1]) >>> 24) & 0xFF] ^ (K[2]);
(Y[3]) = AES0[(X[3]) & 0xFF] ^
AES1[((X[0]) >>> 8) & 0xFF] ^
AES2[((X[1]) >>> 16) & 0xFF] ^
AES3[((X[2]) >>> 24) & 0xFF] ^ (K[3]);
};
module.exports.AES_ROUND_NOKEY_LE = function(X, Y) {
var K = new Array(4);
op.bufferSet(K, 0, 0, 4);
this.AES_ROUND_LE(X, K, Y);
};
},{"./helper":7,"./op":11}],2:[function(require,module,exports){
'use strict';
/////////////////////////////////////
/////////////// Blake //////////////
//// Written by Quantum Explorer ////
////////// AXE Foundation //////////
/// Released under the MIT License //
/////////////////////////////////////
var o = require('./op');
var h = require('./helper');
var CB = h.bytes2Int64Buffer(h.b64Decode('JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxObIlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjftawv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXTmk='));
// var CB = [
// o.u(0x243f6a88, 0x85a308d3),
// o.u(0x13198a2e, 0x03707344),
// o.u(0xa4093822, 0x299f31d0),
// o.u(0x082efa98, 0xec4e6c89),
// o.u(0x452821e6, 0x38d01377),
// o.u(0xbe5466cf, 0x34e90c6c),
// o.u(0xc0ac29b7, 0xc97c50dd),
// o.u(0x3f84d5b5, 0xb5470917),
// o.u(0x9216d5d9, 0x8979fb1b),
// o.u(0xd1310ba6, 0x98dfb5ac),
// o.u(0x2ffd72db, 0xd01adfb7),
// o.u(0xb8e1afed, 0x6a267e96),
// o.u(0xba7c9045, 0xf12c7f99),
// o.u(0x24a19947, 0xb3916cf7),
// o.u(0x0801f2e2, 0x858efc16),
// o.u(0x636920d8, 0x71574e69)
// ];
var Z = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3],
[11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4],
[7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8],
[9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13],
[2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9],
[12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11],
[13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10],
[6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5],
[10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0]
];
var initialValues = [
o.u(0x6a09e667, 0xf3bcc908),
o.u(0xbb67ae85, 0x84caa73b),
o.u(0x3c6ef372, 0xfe94f82b),
o.u(0xa54ff53a, 0x5f1d36f1),
o.u(0x510e527f, 0xade682d1),
o.u(0x9b05688c, 0x2b3e6c1f),
o.u(0x1f83d9ab, 0xfb41bd6b),
o.u(0x5be0cd19, 0x137e2179)
];
var GB = function(m0, m1, c0, c1, a, b, c, d) {
a.add(m0.xor(c1).add(b));
d.setxorOne(a).setFlip();
c.add(d);
b.setxorOne(c).setRotateRight(25);
a.add(m1.xor(c0).add(b));
d.setxorOne(a).setRotateRight(16);
c.add(d);
b.setxorOne(c).setRotateRight(11);
};
var round = function(r, V, M) {
GB(M[Z[r][0]], M[Z[r][1]], CB[Z[r][0]], CB[Z[r][1]], V[0], V[4], V[8], V[0xC]);
GB(M[Z[r][2]], M[Z[r][3]], CB[Z[r][2]], CB[Z[r][3]], V[1], V[5], V[9], V[0xD]);
GB(M[Z[r][4]], M[Z[r][5]], CB[Z[r][4]], CB[Z[r][5]], V[2], V[6], V[0xA], V[0xE]);
GB(M[Z[r][6]], M[Z[r][7]], CB[Z[r][6]], CB[Z[r][7]], V[3], V[7], V[0xB], V[0xF]);
GB(M[Z[r][8]], M[Z[r][9]], CB[Z[r][8]], CB[Z[r][9]], V[0], V[5], V[0xA], V[0xF]);
GB(M[Z[r][10]], M[Z[r][11]], CB[Z[r][10]], CB[Z[r][11]], V[1], V[6], V[0xB], V[0xC]);
GB(M[Z[r][12]], M[Z[r][13]], CB[Z[r][12]], CB[Z[r][13]], V[2], V[7], V[8], V[0xD]);
GB(M[Z[r][14]], M[Z[r][15]], CB[Z[r][14]], CB[Z[r][15]], V[3], V[4], V[9], V[0xE]);
};
var compress = function(M, H, S, T0, T1) {
var V = new Array(16);
o.bufferInsert64(V, 0, H, 8);
V[8] = S[0].xor(CB[0]);
V[9] = S[1].xor(CB[1]);
V[10] = S[2].xor(CB[2]);
V[11] = S[3].xor(CB[3]);
V[12] = T0.xor(CB[4]);
V[13] = T0.xor(CB[5]);
V[14] = T1.xor(CB[6]);
V[15] = T1.xor(CB[7]);
for (var i = 0; i < 16; i++) {
round(i % 10, V, M);
}
for (var i = 0; i < 8; i++) {
H[i] = o.xor64(H[i], S[i % 4], V[i], V[8 + i]);
}
};
var blake = function(ctx, data, len) {
var buf, ptr;
//create a local copy of states
var H = new Array(8);
var S = new Array(4);
var T0 = ctx.T0.clone();
var T1 = ctx.T1.clone();
buf = ctx.buffer;
ptr = ctx.ptr;
if (len < ctx.buffer.length - ptr) {
o.bufferInsert(buf, ptr, data, data.length);
ptr += data.length;
ctx.ptr = ptr;
return;
}
//perform a deep copy of current state
o.bufferInsert(H, 0, ctx.state, 8);
o.bufferInsert(S, 0, ctx.salt, 4);
while (len > 0) {
var clen = ctx.buffer.length - ptr;
if (clen > len) clen = len;
o.bufferInsert(buf, ptr, data, clen);
ptr += clen;
data = data.slice(clen);
len -= clen;
if (ptr === ctx.buffer.length) {
T0.add(o.u(0, 1024));
if (T0.hi < 0 || T0.lo < 1024) T1.addOne();
var int64Buf = h.bytes2Int64Buffer(buf);
compress(int64Buf, H, S, T0, T1);
ptr = 0;
}
}
ctx.state = H;
ctx.salt = S;
ctx.T0 = T0;
ctx.T1 = T1;
ctx.ptr = ptr;
};
var blakeClose = function(ctx) {
var buf = new Array(128);
var ptr = ctx.ptr;
var bitLen = (o.u(0, ptr)).shiftLeft(3);
var tl = ctx.T0.plus(bitLen);
var th = ctx.T1.clone();
buf[ptr] = 0x80;
if (ptr === 0) {
ctx.T0 = o.u(0xFFFFFFFF, 0xFFFFFC00);
ctx.T1 = o.u(0xFFFFFFFF, 0xFFFFFFFF);
}
else if (ctx.T0.isZero()) {
ctx.T0 = o.u(0xFFFFFFFF, 0xFFFFFC00).plus(bitLen);
ctx.T1 = ctx.T1.minus(o.u(0, 1));
}
else {
ctx.T0 = ctx.T0.minus(o.u(0, 1024).minus(bitLen));
}
if (bitLen.lo <= 894) {
o.bufferSet(buf, ptr + 1, 0, 111 - ptr);
buf[111] |= 1;
h.bufferEncode64(buf, 112, th);
h.bufferEncode64(buf, 120, tl);
blake(ctx, buf.slice(ptr), 128 - ptr);
}
else {
o.bufferSet(u.buf, ptr + 1, 0, 127 - ptr);
blake(ctx, buf.slice(ptr), 128 - ptr);
ctx.T0 = o.u(0xFFFFFFFF,0xFFFFFC00);
ctx.T1 = o.u(0xFFFFFFFF,0xFFFFFFFF);
o.bufferSet(buf, 0, 0, 112);
buf[111] = 1;
h.bufferEncode64(buf, 112, th);
h.bufferEncode64(buf, 120, tl);
blake(ctx, buf, 128);
}
var out = new Array(16);
for (var u = 0; u < 8; u++) {
out[2 * u] = ctx.state[u].hi;
out[2 * u + 1] = ctx.state[u].lo;
}
return out;
};
module.exports = function(input, format, output) {
var msg;
if (format === 1) {
msg = input;
}
else if (format === 2) {
msg = h.int32Buffer2Bytes(input);
}
else {
msg = h.string2bytes(input);
}
var ctx = {};
ctx.state = o.clone64Array(initialValues);
var zero = o.u(0,0);
ctx.salt = [zero, zero, zero, zero];
ctx.T0 = zero.clone();
ctx.T1 = zero.clone();
ctx.ptr = 0;
ctx.buffer = new Array(128);
blake(ctx, msg, msg.length);
var r = blakeClose(ctx, 0, 0);
var out;
if (output === 2) {
out = r;
}
else if (output === 1) {
out = h.int32Buffer2Bytes(r);
}
else {
out = h.int32ArrayToHexString(r);
}
return out;
};
},{"./helper":7,"./op":11}],3:[function(require,module,exports){
'use strict';
/////////////////////////////////////
////////////// BMW /////////////////
//// Written by Quantum Explorer ////
////////// AXE Foundation //////////
/// Released under the MIT License //
/////////////////////////////////////
var o = require('./op');
var h = require('./helper');
// var V_INIT = [
// o.u(0x80818283, 0x84858687), o.u(0x88898A8B, 0x8C8D8E8F),
// o.u(0x90919293, 0x94959697), o.u(0x98999A9B, 0x9C9D9E9F),
// o.u(0xA0A1A2A3, 0xA4A5A6A7), o.u(0xA8A9AAAB, 0xACADAEAF),
// o.u(0xB0B1B2B3, 0xB4B5B6B7), o.u(0xB8B9BABB, 0xBCBDBEBF),
// o.u(0xC0C1C2C3, 0xC4C5C6C7), o.u(0xC8C9CACB, 0xCCCDCECF),
// o.u(0xD0D1D2D3, 0xD4D5D6D7), o.u(0xD8D9DADB, 0xDCDDDEDF),
// o.u(0xE0E1E2E3, 0xE4E5E6E7), o.u(0xE8E9EAEB, 0xECEDEEEF),
// o.u(0xF0F1F2F3, 0xF4F5F6F7), o.u(0xF8F9FAFB, 0xFCFDFEFF)
// ];
var V_INIT = h.bytes2Int64Buffer(h.b64Decode('gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8='));
// var final = [
// o.u(0xaaaaaaaa, 0xaaaaaaa0), o.u(0xaaaaaaaa, 0xaaaaaaa1),
// o.u(0xaaaaaaaa, 0xaaaaaaa2), o.u(0xaaaaaaaa, 0xaaaaaaa3),
// o.u(0xaaaaaaaa, 0xaaaaaaa4), o.u(0xaaaaaaaa, 0xaaaaaaa5),
// o.u(0xaaaaaaaa, 0xaaaaaaa6), o.u(0xaaaaaaaa, 0xaaaaaaa7),
// o.u(0xaaaaaaaa, 0xaaaaaaa8), o.u(0xaaaaaaaa, 0xaaaaaaa9),
// o.u(0xaaaaaaaa, 0xaaaaaaaa), o.u(0xaaaaaaaa, 0xaaaaaaab),
// o.u(0xaaaaaaaa, 0xaaaaaaac), o.u(0xaaaaaaaa, 0xaaaaaaad),
// o.u(0xaaaaaaaa, 0xaaaaaaae), o.u(0xaaaaaaaa, 0xaaaaaaaf)
// ];
var final = h.bytes2Int64Buffer(h.b64Decode('qqqqqqqqqqCqqqqqqqqqoaqqqqqqqqqiqqqqqqqqqqOqqqqqqqqqpKqqqqqqqqqlqqqqqqqqqqaqqqqqqqqqp6qqqqqqqqqoqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqrqqqqqqqqqqyqqqqqqqqqraqqqqqqqqquqqqqqqqqqq8='));
var sb_a = [1, 1, 2, 2, 1, 2];
var sb_b = [3, 2, 1, 2];
var sb_c = [4, 13, 19, 28];
var sb_d = [37, 43, 53, 59];
var I16 = new Array(16); //we are trying to start at 16;
I16.push([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);
I16.push([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
I16.push([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]);
I16.push([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]);
I16.push([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]);
I16.push([5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);
I16.push([6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]);
I16.push([7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]);
I16.push([8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]);
I16.push([9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]);
I16.push([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]);
I16.push([11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]);
I16.push([12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]);
I16.push([13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]);
I16.push([14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]);
I16.push([15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]);
var M16 = new Array(16);
M16.push([0, 1, 3, 4, 7, 10, 11]);
M16.push([1, 2, 4, 5, 8, 11, 12]);
M16.push([2, 3, 5, 6, 9, 12, 13]);
M16.push([3, 4, 6, 7, 10, 13, 14]);
M16.push([4, 5, 7, 8, 11, 14, 15]);
M16.push([5, 6, 8, 9, 12, 15, 16]);
M16.push([6, 7, 9, 10, 13, 0, 1]);
M16.push([7, 8, 10, 11, 14, 1, 2]);
M16.push([8, 9, 11, 12, 15, 2, 3]);
M16.push([9, 10, 12, 13, 0, 3, 4]);
M16.push([10, 11, 13, 14, 1, 4, 5]);
M16.push([11, 12, 14, 15, 2, 5, 6]);
M16.push([12, 13, 15, 16, 3, 6, 7]);
M16.push([13, 14, 0, 1, 4, 7, 8]);
M16.push([14, 15, 1, 2, 5, 8, 9]);
M16.push([15, 16, 2, 3, 6, 9, 10]);
var sb = function(n, x) {
//xOriginal must be of type u64
if (n < 4) {
return o.xor64(x.shiftRight(sb_a[n]), x.shiftLeft(sb_b[n]), x.rotateLeft(sb_c[n]), x.rotateLeft(sb_d[n]));
}
return x.shiftRight(sb_a[n]).xor(x);
};
var rbn = [0, 5, 11, 27, 32, 37, 43, 53];
var rb = function(n, x) {
//x must be of type u64
return x.rotateLeft(rbn[n]);
};
var makeW = function(M,H,i, op) {
var a = M[i[0]].xor(H[i[0]]);
var b = M[i[1]].xor(H[i[1]]);
var c = M[i[2]].xor(H[i[2]]);
var d = M[i[3]].xor(H[i[3]]);
var e = M[i[4]].xor(H[i[4]]);
var w = op[3](op[2](op[1](op[0](a,b),c),d),e);
return w;
};
var wbn = [
[5, 7, 10, 13, 14],
[6, 8, 11, 14, 15],
[0, 7, 9, 12, 15],
[0, 1, 8, 10, 13],
[1, 2, 9, 11, 14],
[3, 2, 10, 12, 15],
[4, 0, 3, 11, 13],
[1, 4, 5, 12, 14],
[2, 5, 6, 13, 15],
[0, 3, 6, 7, 14],
[8, 1, 4, 7, 15],
[8, 0, 2, 5, 9],
[1, 3, 6, 9, 10],
[2, 4, 7, 10, 11],
[3, 5, 8, 11, 12],
[12, 4, 6, 9, 13],
];
var plus = function(a,b) {
return a.plus(b);
};
var minus = function(a,b) {
return a.minus(b);
};
var wboperators = [
[minus, plus, plus, plus],
[minus, plus, plus, minus],
[plus, plus, minus, plus],
[minus, plus, minus, plus],
[plus, plus, minus, minus],
[minus, plus, minus, plus],
[minus, minus, minus, plus],
[minus, minus, minus, minus],
[minus, minus, plus, minus],
[minus, plus, minus, plus],
[minus, minus, minus, plus],
[minus, minus, minus, plus],
[plus, minus, minus, plus],
[plus, plus, plus, plus],
[minus, plus, minus, minus],
[minus, minus, minus, plus],
];
var wb = function(M,H,i) {
return makeW(M,H,wbn[i],wboperators[i]);
};
var kb = function(j) {
var fives = o.u(0x05555555, 0x55555555);
return fives.multiply(j);
};
var addElt = function(buffer64, state, mVars, i) {
var k = kb(i);
var elt = buffer64[mVars[0]].rotateLeft(mVars[1])
.add(buffer64[mVars[2]].rotateLeft(mVars[3]))
.minus(buffer64[mVars[5]].rotateLeft(mVars[6]))
.add(k)
.xor(state[mVars[4]]);
return elt;
};
var expand2Inner = function(qt, mf, state, i, iVars, mVars) {
return qt[iVars[0]]
.plus(rb(1, qt[iVars[1]]))
.add(qt[iVars[2]])
.add(rb(2, qt[iVars[3]]))
.add(qt[iVars[4]])
.add(rb(3, qt[iVars[5]]))
.add(qt[iVars[6]])
.add(rb(4, qt[iVars[7]]))
.add(qt[iVars[8]])
.add(rb(5, qt[iVars[9]]))
.add(qt[iVars[10]])
.add(rb(6, qt[iVars[11]]))
.add(qt[iVars[12]])
.add(rb(7, qt[iVars[13]]))
.add(sb(4, qt[iVars[14]]))
.add(sb(5, qt[iVars[15]]))
.add(addElt(mf, state, mVars, i));
};
var expand1Inner = function(qt, mf, state, i, iVars, mVars) {
return sb(1, qt[iVars[0]])
.add(sb(2, qt[iVars[1]]))
.add(sb(3, qt[iVars[2]]))
.add(sb(0, qt[iVars[3]]))
.add(sb(1, qt[iVars[4]]))
.add(sb(2, qt[iVars[5]]))
.add(sb(3, qt[iVars[6]]))
.add(sb(0, qt[iVars[7]]))
.add(sb(1, qt[iVars[8]]))
.add(sb(2, qt[iVars[9]]))
.add(sb(3, qt[iVars[10]]))
.add(sb(0, qt[iVars[11]]))
.add(sb(1, qt[iVars[12]]))
.add(sb(2, qt[iVars[13]]))
.add(sb(3, qt[iVars[14]]))
.add(sb(0, qt[iVars[15]]))
.add(addElt(mf, state, mVars, i));
};
var expand1b = function(qt, mf, state, i) {
var iVars = I16[i];
var mVars = M16[i];
return expand1Inner(qt, mf, state, i, iVars, mVars);
};
var expand2b = function(qt, mf, state, i) {
var iVars = I16[i];
var mVars = M16[i];
return expand2Inner(qt, mf, state, i, iVars, mVars);
};
var makeQ = function(mf, state) {
var qt = new Array(32);
for (var i = 0; i < 16; i++) {
var w = wb(mf,state,i);
var s = sb(i % 5, w);
qt[i] = s.plus(state[(i + 1) % 16]);
}
qt[16] = expand1b(qt, mf, state, 16);
qt[17] = expand1b(qt, mf, state, 17);
for (var i = 18; i < 32; i++) {
qt[i] = expand2b(qt, mf, state, i);
}
return qt;
};
var fold = function(int64Buffer, state) {
var out = new Array(16);
var qt = makeQ(int64Buffer, state);
var xl = o.xor64(qt[16], qt[17], qt[18], qt[19], qt[20], qt[21], qt[22], qt[23]);
var xh = o.xor64(xl, qt[24], qt[25], qt[26], qt[27], qt[28], qt[29], qt[30], qt[31]);
out[0] = o.xor64(xh.shiftLeft(5), qt[16].shiftRight(5), int64Buffer[0]).add(o.xor64(xl, qt[24], qt[0]));
out[1] = o.xor64(xh.shiftRight(7), qt[17].shiftLeft(8), int64Buffer[1]).add(o.xor64(xl, qt[25], qt[1]));
out[2] = o.xor64(xh.shiftRight(5), qt[18].shiftLeft(5), int64Buffer[2]).add(o.xor64(xl, qt[26], qt[2]));
out[3] = o.xor64(xh.shiftRight(1), qt[19].shiftLeft(5), int64Buffer[3]).add(o.xor64(xl, qt[27], qt[3]));
out[4] = o.xor64(xh.shiftRight(3), qt[20], int64Buffer[4]).add(o.xor64(xl, qt[28], qt[4]));
out[5] = o.xor64(xh.shiftLeft(6), qt[21].shiftRight(6), int64Buffer[5]).add(o.xor64(xl, qt[29], qt[5]));
out[6] = o.xor64(xh.shiftRight(4), qt[22].shiftLeft(6), int64Buffer[6]).add(o.xor64(xl, qt[30], qt[6]));
out[7] = o.xor64(xh.shiftRight(11), qt[23].shiftLeft(2), int64Buffer[7]).add(o.xor64(xl, qt[31], qt[7]));
out[8] = out[4].rotateLeft(9).add(o.xor64(xh, qt[24], int64Buffer[8]))
.add(o.xor64(xl.shiftLeft(8), qt[23], qt[8]));
out[9] = out[5].rotateLeft(10).add(o.xor64(xh, qt[25], int64Buffer[9]))
.add(o.xor64(xl.shiftRight(6), qt[16], qt[9]));
out[10] = out[6].rotateLeft(11).add(o.xor64(xh, qt[26], int64Buffer[10]))
.add(o.xor64(xl.shiftLeft(6), qt[17], qt[10]));
out[11] = out[7].rotateLeft(12).add(o.xor64(xh, qt[27], int64Buffer[11]))
.add(o.xor64(xl.shiftLeft(4), qt[18], qt[11]));
out[12] = out[0].rotateLeft(13).add(o.xor64(xh, qt[28], int64Buffer[12]))
.add(o.xor64(xl.shiftRight(3), qt[19], qt[12]));
out[13] = out[1].rotateLeft(14).add(o.xor64(xh, qt[29], int64Buffer[13]))
.add(o.xor64(xl.shiftRight(4), qt[20], qt[13]));
out[14] = out[2].rotateLeft(15).add(o.xor64(xh, qt[30], int64Buffer[14]))
.add(o.xor64(xl.shiftRight(7), qt[21], qt[14]));
out[15] = out[3].rotateLeft(16).add(o.xor64(xh, qt[31], int64Buffer[15]))
.add(o.xor64(xl.shiftRight(2), qt[22], qt[15]));
return out;
};
var compress = function(buf, state) {
var int64Buf = h.bytes2Int64BufferLeAligned(buf);
return fold(int64Buf, state);
};
var bmw = function(ctx, data) {
var htmp = new Array(16);
var len = data.length;
var lenL3 = o.u(0, len);
lenL3 = lenL3.shiftLeft(3);
ctx.bitCount.add(lenL3);
var buf = ctx.buffer;
var ptr = ctx.ptr;
var h1 = ctx.state;
var h2 = htmp;
while (len > 0) {
var clen = ctx.buffer.length - ptr;
if (clen > len) clen = len;
o.bufferInsert(buf, ptr, data, clen);
data = data.slice(clen);
len -= clen;
ptr += clen;
if (ptr === ctx.buffer.length) {
var ht;
h2 = compress(buf, h1);
ht = h1;
h1 = h2;
h2 = ht;
ptr = 0;
}
}
ctx.ptr = ptr;
if (h1 !== ctx.state) o.bufferInsert(ctx.state, 0, h1, ctx.state.length);
};
var bmwClose = function(ctx) {
var h1;
var h2 = new Array(16);
var buf = ctx.buffer;
var ptr = ctx.ptr;
var len = buf.length;
buf[ptr++] = 0x80;
var hState = ctx.state;
if (ptr > len - 8) {
o.bufferSet(buf, ptr, 0, len - ptr);
hState = compress(buf, hState);
ptr = 0;
}
o.bufferSet(buf, ptr, 0, len - 8 - ptr);
h.bufferEncode64leAligned(buf, len - 8, ctx.bitCount);
h2 = compress(buf, hState);
for (u = 0; u < 16; u++) h.bufferEncode64leAligned(buf, 8 * u, h2[u]);
h1 = compress(buf, final);
var out = new Array(16);
for (var u = 0, v = 8; u < 8; u++, v++) {
out[2 * u] = o.swap32(h1[v].lo);
out[2 * u + 1] = o.swap32(h1[v].hi);
}
return out;
};
module.exports = function(input, format, output) {
var msg;
if (format === 1) {
msg = input;
}
else if (format === 2) {
msg = h.int32Buffer2Bytes(input);
}
else {
msg = h.string2bytes(input);
}
var ctx = {};
ctx.state = o.clone64Array(V_INIT);
ctx.ptr = 0;
ctx.bitCount = o.u(0,0);
ctx.buffer = new Array(128);
bmw(ctx, msg);
var r = bmwClose(ctx, 0, 0);
var out;
if (output === 2) {
out = r;
}
else if (output === 1) {
out = h.int32Buffer2Bytes(r);
}
else {
out = h.int32ArrayToHexString(r);
}
return out;
};
},{"./helper":7,"./op":11}],4:[function(require,module,exports){
'use strict';
/////////////////////////////////////
//////////// Cubehash //////////////
//// Written by Quantum Explorer ////
////////// AXE Foundation //////////
/// Released under the MIT License //
/////////////////////////////////////
var op = require('./op');
var h = require('./helper');
var Cubehash_BlockSize = 32;
var Cubehash_StateSize = 32;
var IV512 = [
0x2AEA2A61, 0x50F494D4, 0x2D538B8B,
0x4167D83E, 0x3FEE2313, 0xC701CF8C,
0xCC39968E, 0x50AC5695, 0x4D42C787,
0xA647A8B3, 0x97CF0BEF, 0x825B4537,
0xEEF864D2, 0xF22090C4, 0xD0E5CD33,
0xA23911AE, 0xFCD398D9, 0x148FE485,
0x1B017BEF, 0xB6444532, 0x6A536159,
0x2FF5781C, 0x91FA7934, 0x0DBADEA9,
0xD65C8A2B, 0xA5A70E75, 0xB1C62456,
0xBC796576, 0x1921C8F7, 0xE7989AF1,
0x7795D246, 0xD43E3B44,
];
var ROUND_EVEN = function(x) {
x[16] = 0xFFFFFFFF & (x[0] + x[16]);
x[0] = op.rotl32(x[0], 7);
x[17] = 0xFFFFFFFF & (x[1] + x[17]);
x[1] = op.rotl32(x[1], 7);
x[18] = 0xFFFFFFFF & (x[2] + x[18]);
x[2] = op.rotl32(x[2], 7);
x[19] = 0xFFFFFFFF & (x[3] + x[19]);
x[3] = op.rotl32(x[3], 7);
x[20] = 0xFFFFFFFF & (x[4] + x[20]);
x[4] = op.rotl32(x[4], 7);
x[21] = 0xFFFFFFFF & (x[5] + x[21]);
x[5] = op.rotl32(x[5], 7);
x[22] = 0xFFFFFFFF & (x[6] + x[22]);
x[6] = op.rotl32(x[6], 7);
x[23] = 0xFFFFFFFF & (x[7] + x[23]);
x[7] = op.rotl32(x[7], 7);
x[24] = 0xFFFFFFFF & (x[8] + x[24]);
x[8] = op.rotl32(x[8], 7);
x[25] = 0xFFFFFFFF & (x[9] + x[25]);
x[9] = op.rotl32(x[9], 7);
x[26] = 0xFFFFFFFF & (x[10] + x[26]);
x[10] = op.rotl32(x[10], 7);
x[27] = 0xFFFFFFFF & (x[11] + x[27]);
x[11] = op.rotl32(x[11], 7);
x[28] = 0xFFFFFFFF & (x[12] + x[28]);
x[12] = op.rotl32(x[12], 7);
x[29] = 0xFFFFFFFF & (x[13] + x[29]);
x[13] = op.rotl32(x[13], 7);
x[30] = 0xFFFFFFFF & (x[14] + x[30]);
x[14] = op.rotl32(x[14], 7);
x[31] = 0xFFFFFFFF & (x[15] + x[31]);
x[15] = op.rotl32(x[15], 7);
x[8] ^= x[16];
x[9] ^= x[17];
x[10] ^= x[18];
x[11] ^= x[19];
x[12] ^= x[20];
x[13] ^= x[21];
x[14] ^= x[22];
x[15] ^= x[23];
x[0] ^= x[24];
x[1] ^= x[25];
x[2] ^= x[26];
x[3] ^= x[27];
x[4] ^= x[28];
x[5] ^= x[29];
x[6] ^= x[30];
x[7] ^= x[31];
x[18] = 0xFFFFFFFF & (x[8] + x[18]);
x[8] = op.rotl32(x[8], 11);
x[19] = 0xFFFFFFFF & (x[9] + x[19]);
x[9] = op.rotl32(x[9], 11);
x[16] = 0xFFFFFFFF & (x[10] + x[16]);
x[10] = op.rotl32(x[10], 11);
x[17] = 0xFFFFFFFF & (x[11] + x[17]);
x[11] = op.rotl32(x[11], 11);
x[22] = 0xFFFFFFFF & (x[12] + x[22]);
x[12] = op.rotl32(x[12], 11);
x[23] = 0xFFFFFFFF & (x[13] + x[23]);
x[13] = op.rotl32(x[13], 11);
x[20] = 0xFFFFFFFF & (x[14] + x[20]);
x[14] = op.rotl32(x[14], 11);
x[21] = 0xFFFFFFFF & (x[15] + x[21]);
x[15] = op.rotl32(x[15], 11);
x[26] = 0xFFFFFFFF & (x[0] + x[26]);
x[0] = op.rotl32(x[0], 11);
x[27] = 0xFFFFFFFF & (x[1] + x[27]);
x[1] = op.rotl32(x[1], 11);
x[24] = 0xFFFFFFFF & (x[2] + x[24]);
x[2] = op.rotl32(x[2], 11);
x[25] = 0xFFFFFFFF & (x[3] + x[25]);
x[3] = op.rotl32(x[3], 11);
x[30] = 0xFFFFFFFF & (x[4] + x[30]);
x[4] = op.rotl32(x[4], 11);
x[31] = 0xFFFFFFFF & (x[5] + x[31]);
x[5] = op.rotl32(x[5], 11);
x[28] = 0xFFFFFFFF & (x[6] + x[28]);
x[6] = op.rotl32(x[6], 11);
x[29] = 0xFFFFFFFF & (x[7] + x[29]);
x[7] = op.rotl32(x[7], 11);
x[12] ^= x[18];
x[13] ^= x[19];
x[14] ^= x[16];
x[15] ^= x[17];
x[8] ^= x[22];
x[9] ^= x[23];
x[10] ^= x[20];
x[11] ^= x[21];
x[4] ^= x[26];
x[5] ^= x[27];
x[6] ^= x[24];
x[7] ^= x[25];
x[0] ^= x[30];
x[1] ^= x[31];
x[2] ^= x[28];
x[3] ^= x[29];
};
var ROUND_ODD = function(x) {
x[19] = 0xFFFFFFFF & (x[12] + x[19]);
x[12] = op.rotl32(x[12], 7);
x[18] = 0xFFFFFFFF & (x[13] + x[18]);
x[13] = op.rotl32(x[13], 7);
x[17] = 0xFFFFFFFF & (x[14] + x[17]);
x[14] = op.rotl32(x[14], 7);
x[16] = 0xFFFFFFFF & (x[15] + x[16]);
x[15] = op.rotl32(x[15], 7);
x[23] = 0xFFFFFFFF & (x[8] + x[23]);
x[8] = op.rotl32(x[8], 7);
x[22] = 0xFFFFFFFF & (x[9] + x[22]);
x[9] = op.rotl32(x[9], 7);
x[21] = 0xFFFFFFFF & (x[10] + x[21]);
x[10] = op.rotl32(x[10], 7);
x[20] = 0xFFFFFFFF & (x[11] + x[20]);
x[11] = op.rotl32(x[11], 7);
x[27] = 0xFFFFFFFF & (x[4] + x[27]);
x[4] = op.rotl32(x[4], 7);
x[26] = 0xFFFFFFFF & (x[5] + x[26]);
x[5] = op.rotl32(x[5], 7);
x[25] = 0xFFFFFFFF & (x[6] + x[25]);
x[6] = op.rotl32(x[6], 7);
x[24] = 0xFFFFFFFF & (x[7] + x[24]);
x[7] = op.rotl32(x[7], 7);
x[31] = 0xFFFFFFFF & (x[0] + x[31]);
x[0] = op.rotl32(x[0], 7);
x[30] = 0xFFFFFFFF & (x[1] + x[30]);
x[1] = op.rotl32(x[1], 7);
x[29] = 0xFFFFFFFF & (x[2] + x[29]);
x[2] = op.rotl32(x[2], 7);
x[28] = 0xFFFFFFFF & (x[3] + x[28]);
x[3] = op.rotl32(x[3], 7);
x[4] ^= x[19];
x[5] ^= x[18];
x[6] ^= x[17];
x[7] ^= x[16];
x[0] ^= x[23];
x[1] ^= x[22];
x[2] ^= x[21];
x[3] ^= x[20];
x[12] ^= x[27];
x[13] ^= x[26];
x[14] ^= x[25];
x[15] ^= x[24];
x[8] ^= x[31];
x[9] ^= x[30];
x[10] ^= x[29];
x[11] ^= x[28];
x[17] = 0xFFFFFFFF & (x[4] + x[17]);
x[4] = op.rotl32(x[4], 11);
x[16] = 0xFFFFFFFF & (x[5] + x[16]);
x[5] = op.rotl32(x[5], 11);
x[19] = 0xFFFFFFFF & (x[6] + x[19]);
x[6] = op.rotl32(x[6], 11);
x[18] = 0xFFFFFFFF & (x[7] + x[18]);
x[7] = op.rotl32(x[7], 11);
x[21] = 0xFFFFFFFF & (x[0] + x[21]);
x[0] = op.rotl32(x[0], 11);
x[20] = 0xFFFFFFFF & (x[1] + x[20]);
x[1] = op.rotl32(x[1], 11);
x[23] = 0xFFFFFFFF & (x[2] + x[23]);
x[2] = op.rotl32(x[2], 11);
x[22] = 0xFFFFFFFF & (x[3] + x[22]);
x[3] = op.rotl32(x[3], 11);
x[25] = 0xFFFFFFFF & (x[12] + x[25]);
x[12] = op.rotl32(x[12], 11);
x[24] = 0xFFFFFFFF & (x[13] + x[24]);
x[13] = op.rotl32(x[13], 11);
x[27] = 0xFFFFFFFF & (x[14] + x[27]);
x[14] = op.rotl32(x[14], 11);
x[26] = 0xFFFFFFFF & (x[15] + x[26]);
x[15] = op.rotl32(x[15], 11);
x[29] = 0xFFFFFFFF & (x[8] + x[29]);
x[8] = op.rotl32(x[8], 11);
x[28] = 0xFFFFFFFF & (x[9] + x[28]);
x[9] = op.rotl32(x[9], 11);
x[31] = 0xFFFFFFFF & (x[10] + x[31]);
x[10] = op.rotl32(x[10], 11);
x[30] = 0xFFFFFFFF & (x[11] + x[30]);
x[11] = op.rotl32(x[11], 11);
x[0] ^= x[17];
x[1] ^= x[16];
x[2] ^= x[19];
x[3] ^= x[18];
x[4] ^= x[21];
x[5] ^= x[20];
x[6] ^= x[23];
x[7] ^= x[22];
x[8] ^= x[25];
x[9] ^= x[24];
x[10] ^= x[27];
x[11] ^= x[26];
x[12] ^= x[29];
x[13] ^= x[28];
x[14] ^= x[31];
x[15] ^= x[30];
};
var SIXTEEN_ROUNDS = function(x) {
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
ROUND_EVEN(x);
ROUND_ODD(x);
};
var cubehash = function(ctx, data) {
var buf, ptr;
//create a local copy of states
var x = new Array(Cubehash_StateSize);
buf = ctx.buffer;
ptr = ctx.ptr;
var len = data.length;
if (len < ctx.buffer.length - ptr) {
op.bufferInsert(buf, ptr, data, data.length);
ptr += data.length;
ctx.ptr = ptr;
return;
}
//perform a deep copy of current state
for (var i = 0; i < Cubehash_StateSize; i++) {
x[i] = ctx.state[i];
}
while (len > 0) {
var clen = ctx.buffer.length - ptr;
if (clen > len) clen = len;
op.bufferInsert(buf, ptr, data, clen);
ptr += clen;
data = data.slice(clen);
len -= clen;
if (ptr === ctx.buffer.length) {
var int32Buf = op.swap32Array(h.bytes2Int32Buffer(buf));
op.bufferXORInsert(x, 0, int32Buf,0, 8);
SIXTEEN_ROUNDS(x);
ptr = 0;
}
}
ctx.state = x;
ctx.ptr = ptr;
};
var cubehashClose = function(ctx) {
var buf = ctx.buffer;
var ptr = ctx.ptr;
var x = new Array(Cubehash_StateSize);
buf[ptr++] = 0x80;
op.bufferSet(buf, ptr, 0, ctx.buffer.length - ptr);
for (var i = 0; i < Cubehash_StateSize; i++) {
x[i] = ctx.state[i];
}
var int32Buf = op.swap32Array(h.bytes2Int32Buffer(buf));
op.bufferXORInsert(x, 0, int32Buf,0, 8);
for (i = 0; i < 11; i++) {
SIXTEEN_ROUNDS(x);
if (i === 0) x[31] ^= 0xFFFFFFFF & (1);
}
ctx.state = x;
var out = new Array(16);
for (var u = 0; u < 16; u++) out[u] = op.swap32(ctx.state[u]);
return out;
};
module.exports = function(input, format, output) {
var msg;
if (format === 1) {
msg = input;
}
else if (format === 2) {
msg = h.int32Buffer2Bytes(input);
}
else {
msg = h.string2bytes(input);
}
var ctx = {};
ctx.state = IV512;
ctx.ptr = 0;
ctx.buffer = new Array(Cubehash_BlockSize);
cubehash(ctx, msg);
var r = cubehashClose(ctx);
var out;
if (output === 2) {
out = r;
}
else if (output === 1) {
out = h.int32Buffer2Bytes(r);
}
else {
out = h.int32ArrayToHexString(r);
}
return out;
};
},