github.com/shrimpyuk/bor@v0.2.15-0.20220224151350-fb4ec6020bae/internal/jsre/deps/web3.js (about) 1 require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 2 module.exports=[ 3 { 4 "constant": true, 5 "inputs": [ 6 { 7 "name": "_owner", 8 "type": "address" 9 } 10 ], 11 "name": "name", 12 "outputs": [ 13 { 14 "name": "o_name", 15 "type": "bytes32" 16 } 17 ], 18 "type": "function" 19 }, 20 { 21 "constant": true, 22 "inputs": [ 23 { 24 "name": "_name", 25 "type": "bytes32" 26 } 27 ], 28 "name": "owner", 29 "outputs": [ 30 { 31 "name": "", 32 "type": "address" 33 } 34 ], 35 "type": "function" 36 }, 37 { 38 "constant": true, 39 "inputs": [ 40 { 41 "name": "_name", 42 "type": "bytes32" 43 } 44 ], 45 "name": "content", 46 "outputs": [ 47 { 48 "name": "", 49 "type": "bytes32" 50 } 51 ], 52 "type": "function" 53 }, 54 { 55 "constant": true, 56 "inputs": [ 57 { 58 "name": "_name", 59 "type": "bytes32" 60 } 61 ], 62 "name": "addr", 63 "outputs": [ 64 { 65 "name": "", 66 "type": "address" 67 } 68 ], 69 "type": "function" 70 }, 71 { 72 "constant": false, 73 "inputs": [ 74 { 75 "name": "_name", 76 "type": "bytes32" 77 } 78 ], 79 "name": "reserve", 80 "outputs": [], 81 "type": "function" 82 }, 83 { 84 "constant": true, 85 "inputs": [ 86 { 87 "name": "_name", 88 "type": "bytes32" 89 } 90 ], 91 "name": "subRegistrar", 92 "outputs": [ 93 { 94 "name": "", 95 "type": "address" 96 } 97 ], 98 "type": "function" 99 }, 100 { 101 "constant": false, 102 "inputs": [ 103 { 104 "name": "_name", 105 "type": "bytes32" 106 }, 107 { 108 "name": "_newOwner", 109 "type": "address" 110 } 111 ], 112 "name": "transfer", 113 "outputs": [], 114 "type": "function" 115 }, 116 { 117 "constant": false, 118 "inputs": [ 119 { 120 "name": "_name", 121 "type": "bytes32" 122 }, 123 { 124 "name": "_registrar", 125 "type": "address" 126 } 127 ], 128 "name": "setSubRegistrar", 129 "outputs": [], 130 "type": "function" 131 }, 132 { 133 "constant": false, 134 "inputs": [], 135 "name": "Registrar", 136 "outputs": [], 137 "type": "function" 138 }, 139 { 140 "constant": false, 141 "inputs": [ 142 { 143 "name": "_name", 144 "type": "bytes32" 145 }, 146 { 147 "name": "_a", 148 "type": "address" 149 }, 150 { 151 "name": "_primary", 152 "type": "bool" 153 } 154 ], 155 "name": "setAddress", 156 "outputs": [], 157 "type": "function" 158 }, 159 { 160 "constant": false, 161 "inputs": [ 162 { 163 "name": "_name", 164 "type": "bytes32" 165 }, 166 { 167 "name": "_content", 168 "type": "bytes32" 169 } 170 ], 171 "name": "setContent", 172 "outputs": [], 173 "type": "function" 174 }, 175 { 176 "constant": false, 177 "inputs": [ 178 { 179 "name": "_name", 180 "type": "bytes32" 181 } 182 ], 183 "name": "disown", 184 "outputs": [], 185 "type": "function" 186 }, 187 { 188 "anonymous": false, 189 "inputs": [ 190 { 191 "indexed": true, 192 "name": "_name", 193 "type": "bytes32" 194 }, 195 { 196 "indexed": false, 197 "name": "_winner", 198 "type": "address" 199 } 200 ], 201 "name": "AuctionEnded", 202 "type": "event" 203 }, 204 { 205 "anonymous": false, 206 "inputs": [ 207 { 208 "indexed": true, 209 "name": "_name", 210 "type": "bytes32" 211 }, 212 { 213 "indexed": false, 214 "name": "_bidder", 215 "type": "address" 216 }, 217 { 218 "indexed": false, 219 "name": "_value", 220 "type": "uint256" 221 } 222 ], 223 "name": "NewBid", 224 "type": "event" 225 }, 226 { 227 "anonymous": false, 228 "inputs": [ 229 { 230 "indexed": true, 231 "name": "name", 232 "type": "bytes32" 233 } 234 ], 235 "name": "Changed", 236 "type": "event" 237 }, 238 { 239 "anonymous": false, 240 "inputs": [ 241 { 242 "indexed": true, 243 "name": "name", 244 "type": "bytes32" 245 }, 246 { 247 "indexed": true, 248 "name": "addr", 249 "type": "address" 250 } 251 ], 252 "name": "PrimaryChanged", 253 "type": "event" 254 } 255 ] 256 257 },{}],2:[function(require,module,exports){ 258 module.exports=[ 259 { 260 "constant": true, 261 "inputs": [ 262 { 263 "name": "_name", 264 "type": "bytes32" 265 } 266 ], 267 "name": "owner", 268 "outputs": [ 269 { 270 "name": "", 271 "type": "address" 272 } 273 ], 274 "type": "function" 275 }, 276 { 277 "constant": false, 278 "inputs": [ 279 { 280 "name": "_name", 281 "type": "bytes32" 282 }, 283 { 284 "name": "_refund", 285 "type": "address" 286 } 287 ], 288 "name": "disown", 289 "outputs": [], 290 "type": "function" 291 }, 292 { 293 "constant": true, 294 "inputs": [ 295 { 296 "name": "_name", 297 "type": "bytes32" 298 } 299 ], 300 "name": "addr", 301 "outputs": [ 302 { 303 "name": "", 304 "type": "address" 305 } 306 ], 307 "type": "function" 308 }, 309 { 310 "constant": false, 311 "inputs": [ 312 { 313 "name": "_name", 314 "type": "bytes32" 315 } 316 ], 317 "name": "reserve", 318 "outputs": [], 319 "type": "function" 320 }, 321 { 322 "constant": false, 323 "inputs": [ 324 { 325 "name": "_name", 326 "type": "bytes32" 327 }, 328 { 329 "name": "_newOwner", 330 "type": "address" 331 } 332 ], 333 "name": "transfer", 334 "outputs": [], 335 "type": "function" 336 }, 337 { 338 "constant": false, 339 "inputs": [ 340 { 341 "name": "_name", 342 "type": "bytes32" 343 }, 344 { 345 "name": "_a", 346 "type": "address" 347 } 348 ], 349 "name": "setAddr", 350 "outputs": [], 351 "type": "function" 352 }, 353 { 354 "anonymous": false, 355 "inputs": [ 356 { 357 "indexed": true, 358 "name": "name", 359 "type": "bytes32" 360 } 361 ], 362 "name": "Changed", 363 "type": "event" 364 } 365 ] 366 367 },{}],3:[function(require,module,exports){ 368 module.exports=[ 369 { 370 "constant": false, 371 "inputs": [ 372 { 373 "name": "from", 374 "type": "bytes32" 375 }, 376 { 377 "name": "to", 378 "type": "address" 379 }, 380 { 381 "name": "value", 382 "type": "uint256" 383 } 384 ], 385 "name": "transfer", 386 "outputs": [], 387 "type": "function" 388 }, 389 { 390 "constant": false, 391 "inputs": [ 392 { 393 "name": "from", 394 "type": "bytes32" 395 }, 396 { 397 "name": "to", 398 "type": "address" 399 }, 400 { 401 "name": "indirectId", 402 "type": "bytes32" 403 }, 404 { 405 "name": "value", 406 "type": "uint256" 407 } 408 ], 409 "name": "icapTransfer", 410 "outputs": [], 411 "type": "function" 412 }, 413 { 414 "constant": false, 415 "inputs": [ 416 { 417 "name": "to", 418 "type": "bytes32" 419 } 420 ], 421 "name": "deposit", 422 "outputs": [], 423 "payable": true, 424 "type": "function" 425 }, 426 { 427 "anonymous": false, 428 "inputs": [ 429 { 430 "indexed": true, 431 "name": "from", 432 "type": "address" 433 }, 434 { 435 "indexed": false, 436 "name": "value", 437 "type": "uint256" 438 } 439 ], 440 "name": "AnonymousDeposit", 441 "type": "event" 442 }, 443 { 444 "anonymous": false, 445 "inputs": [ 446 { 447 "indexed": true, 448 "name": "from", 449 "type": "address" 450 }, 451 { 452 "indexed": true, 453 "name": "to", 454 "type": "bytes32" 455 }, 456 { 457 "indexed": false, 458 "name": "value", 459 "type": "uint256" 460 } 461 ], 462 "name": "Deposit", 463 "type": "event" 464 }, 465 { 466 "anonymous": false, 467 "inputs": [ 468 { 469 "indexed": true, 470 "name": "from", 471 "type": "bytes32" 472 }, 473 { 474 "indexed": true, 475 "name": "to", 476 "type": "address" 477 }, 478 { 479 "indexed": false, 480 "name": "value", 481 "type": "uint256" 482 } 483 ], 484 "name": "Transfer", 485 "type": "event" 486 }, 487 { 488 "anonymous": false, 489 "inputs": [ 490 { 491 "indexed": true, 492 "name": "from", 493 "type": "bytes32" 494 }, 495 { 496 "indexed": true, 497 "name": "to", 498 "type": "address" 499 }, 500 { 501 "indexed": false, 502 "name": "indirectId", 503 "type": "bytes32" 504 }, 505 { 506 "indexed": false, 507 "name": "value", 508 "type": "uint256" 509 } 510 ], 511 "name": "IcapTransfer", 512 "type": "event" 513 } 514 ] 515 516 },{}],4:[function(require,module,exports){ 517 var f = require('./formatters'); 518 var SolidityType = require('./type'); 519 520 /** 521 * SolidityTypeAddress is a prootype that represents address type 522 * It matches: 523 * address 524 * address[] 525 * address[4] 526 * address[][] 527 * address[3][] 528 * address[][6][], ... 529 */ 530 var SolidityTypeAddress = function () { 531 this._inputFormatter = f.formatInputInt; 532 this._outputFormatter = f.formatOutputAddress; 533 }; 534 535 SolidityTypeAddress.prototype = new SolidityType({}); 536 SolidityTypeAddress.prototype.constructor = SolidityTypeAddress; 537 538 SolidityTypeAddress.prototype.isType = function (name) { 539 return !!name.match(/address(\[([0-9]*)\])?/); 540 }; 541 542 module.exports = SolidityTypeAddress; 543 544 },{"./formatters":9,"./type":14}],5:[function(require,module,exports){ 545 var f = require('./formatters'); 546 var SolidityType = require('./type'); 547 548 /** 549 * SolidityTypeBool is a prootype that represents bool type 550 * It matches: 551 * bool 552 * bool[] 553 * bool[4] 554 * bool[][] 555 * bool[3][] 556 * bool[][6][], ... 557 */ 558 var SolidityTypeBool = function () { 559 this._inputFormatter = f.formatInputBool; 560 this._outputFormatter = f.formatOutputBool; 561 }; 562 563 SolidityTypeBool.prototype = new SolidityType({}); 564 SolidityTypeBool.prototype.constructor = SolidityTypeBool; 565 566 SolidityTypeBool.prototype.isType = function (name) { 567 return !!name.match(/^bool(\[([0-9]*)\])*$/); 568 }; 569 570 module.exports = SolidityTypeBool; 571 572 },{"./formatters":9,"./type":14}],6:[function(require,module,exports){ 573 var f = require('./formatters'); 574 var SolidityType = require('./type'); 575 576 /** 577 * SolidityTypeBytes is a prototype that represents the bytes type. 578 * It matches: 579 * bytes 580 * bytes[] 581 * bytes[4] 582 * bytes[][] 583 * bytes[3][] 584 * bytes[][6][], ... 585 * bytes32 586 * bytes8[4] 587 * bytes[3][] 588 */ 589 var SolidityTypeBytes = function () { 590 this._inputFormatter = f.formatInputBytes; 591 this._outputFormatter = f.formatOutputBytes; 592 }; 593 594 SolidityTypeBytes.prototype = new SolidityType({}); 595 SolidityTypeBytes.prototype.constructor = SolidityTypeBytes; 596 597 SolidityTypeBytes.prototype.isType = function (name) { 598 return !!name.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/); 599 }; 600 601 module.exports = SolidityTypeBytes; 602 603 },{"./formatters":9,"./type":14}],7:[function(require,module,exports){ 604 /* 605 This file is part of web3.js. 606 607 web3.js is free software: you can redistribute it and/or modify 608 it under the terms of the GNU Lesser General Public License as published by 609 the Free Software Foundation, either version 3 of the License, or 610 (at your option) any later version. 611 612 web3.js is distributed in the hope that it will be useful, 613 but WITHOUT ANY WARRANTY; without even the implied warranty of 614 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 615 GNU Lesser General Public License for more details. 616 617 You should have received a copy of the GNU Lesser General Public License 618 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 619 */ 620 /** 621 * @file coder.js 622 * @author Marek Kotewicz <marek@ethdev.com> 623 * @date 2015 624 */ 625 626 var f = require('./formatters'); 627 628 var SolidityTypeAddress = require('./address'); 629 var SolidityTypeBool = require('./bool'); 630 var SolidityTypeInt = require('./int'); 631 var SolidityTypeUInt = require('./uint'); 632 var SolidityTypeDynamicBytes = require('./dynamicbytes'); 633 var SolidityTypeString = require('./string'); 634 var SolidityTypeReal = require('./real'); 635 var SolidityTypeUReal = require('./ureal'); 636 var SolidityTypeBytes = require('./bytes'); 637 638 var isDynamic = function (solidityType, type) { 639 return solidityType.isDynamicType(type) || 640 solidityType.isDynamicArray(type); 641 }; 642 643 /** 644 * SolidityCoder prototype should be used to encode/decode solidity params of any type 645 */ 646 var SolidityCoder = function (types) { 647 this._types = types; 648 }; 649 650 /** 651 * This method should be used to transform type to SolidityType 652 * 653 * @method _requireType 654 * @param {String} type 655 * @returns {SolidityType} 656 * @throws {Error} throws if no matching type is found 657 */ 658 SolidityCoder.prototype._requireType = function (type) { 659 var solidityType = this._types.filter(function (t) { 660 return t.isType(type); 661 })[0]; 662 663 if (!solidityType) { 664 throw Error('invalid solidity type!: ' + type); 665 } 666 667 return solidityType; 668 }; 669 670 /** 671 * Should be used to encode plain param 672 * 673 * @method encodeParam 674 * @param {String} type 675 * @param {Object} plain param 676 * @return {String} encoded plain param 677 */ 678 SolidityCoder.prototype.encodeParam = function (type, param) { 679 return this.encodeParams([type], [param]); 680 }; 681 682 /** 683 * Should be used to encode list of params 684 * 685 * @method encodeParams 686 * @param {Array} types 687 * @param {Array} params 688 * @return {String} encoded list of params 689 */ 690 SolidityCoder.prototype.encodeParams = function (types, params) { 691 var solidityTypes = this.getSolidityTypes(types); 692 693 var encodeds = solidityTypes.map(function (solidityType, index) { 694 return solidityType.encode(params[index], types[index]); 695 }); 696 697 var dynamicOffset = solidityTypes.reduce(function (acc, solidityType, index) { 698 var staticPartLength = solidityType.staticPartLength(types[index]); 699 var roundedStaticPartLength = Math.floor((staticPartLength + 31) / 32) * 32; 700 701 return acc + (isDynamic(solidityTypes[index], types[index]) ? 702 32 : 703 roundedStaticPartLength); 704 }, 0); 705 706 var result = this.encodeMultiWithOffset(types, solidityTypes, encodeds, dynamicOffset); 707 708 return result; 709 }; 710 711 SolidityCoder.prototype.encodeMultiWithOffset = function (types, solidityTypes, encodeds, dynamicOffset) { 712 var result = ""; 713 var self = this; 714 715 types.forEach(function (type, i) { 716 if (isDynamic(solidityTypes[i], types[i])) { 717 result += f.formatInputInt(dynamicOffset).encode(); 718 var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); 719 dynamicOffset += e.length / 2; 720 } else { 721 // don't add length to dynamicOffset. it's already counted 722 result += self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); 723 } 724 725 // TODO: figure out nested arrays 726 }); 727 728 types.forEach(function (type, i) { 729 if (isDynamic(solidityTypes[i], types[i])) { 730 var e = self.encodeWithOffset(types[i], solidityTypes[i], encodeds[i], dynamicOffset); 731 dynamicOffset += e.length / 2; 732 result += e; 733 } 734 }); 735 return result; 736 }; 737 738 // TODO: refactor whole encoding! 739 SolidityCoder.prototype.encodeWithOffset = function (type, solidityType, encoded, offset) { 740 var self = this; 741 if (solidityType.isDynamicArray(type)) { 742 return (function () { 743 // offset was already set 744 var nestedName = solidityType.nestedName(type); 745 var nestedStaticPartLength = solidityType.staticPartLength(nestedName); 746 var result = encoded[0]; 747 748 (function () { 749 var previousLength = 2; // in int 750 if (solidityType.isDynamicArray(nestedName)) { 751 for (var i = 1; i < encoded.length; i++) { 752 previousLength += +(encoded[i - 1])[0] || 0; 753 result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); 754 } 755 } 756 })(); 757 758 // first element is length, skip it 759 (function () { 760 for (var i = 0; i < encoded.length - 1; i++) { 761 var additionalOffset = result / 2; 762 result += self.encodeWithOffset(nestedName, solidityType, encoded[i + 1], offset + additionalOffset); 763 } 764 })(); 765 766 return result; 767 })(); 768 769 } else if (solidityType.isStaticArray(type)) { 770 return (function () { 771 var nestedName = solidityType.nestedName(type); 772 var nestedStaticPartLength = solidityType.staticPartLength(nestedName); 773 var result = ""; 774 775 776 if (solidityType.isDynamicArray(nestedName)) { 777 (function () { 778 var previousLength = 0; // in int 779 for (var i = 0; i < encoded.length; i++) { 780 // calculate length of previous item 781 previousLength += +(encoded[i - 1] || [])[0] || 0; 782 result += f.formatInputInt(offset + i * nestedStaticPartLength + previousLength * 32).encode(); 783 } 784 })(); 785 } 786 787 (function () { 788 for (var i = 0; i < encoded.length; i++) { 789 var additionalOffset = result / 2; 790 result += self.encodeWithOffset(nestedName, solidityType, encoded[i], offset + additionalOffset); 791 } 792 })(); 793 794 return result; 795 })(); 796 } 797 798 return encoded; 799 }; 800 801 /** 802 * Should be used to decode bytes to plain param 803 * 804 * @method decodeParam 805 * @param {String} type 806 * @param {String} bytes 807 * @return {Object} plain param 808 */ 809 SolidityCoder.prototype.decodeParam = function (type, bytes) { 810 return this.decodeParams([type], bytes)[0]; 811 }; 812 813 /** 814 * Should be used to decode list of params 815 * 816 * @method decodeParam 817 * @param {Array} types 818 * @param {String} bytes 819 * @return {Array} array of plain params 820 */ 821 SolidityCoder.prototype.decodeParams = function (types, bytes) { 822 var solidityTypes = this.getSolidityTypes(types); 823 var offsets = this.getOffsets(types, solidityTypes); 824 825 return solidityTypes.map(function (solidityType, index) { 826 return solidityType.decode(bytes, offsets[index], types[index], index); 827 }); 828 }; 829 830 SolidityCoder.prototype.getOffsets = function (types, solidityTypes) { 831 var lengths = solidityTypes.map(function (solidityType, index) { 832 return solidityType.staticPartLength(types[index]); 833 }); 834 835 for (var i = 1; i < lengths.length; i++) { 836 // sum with length of previous element 837 lengths[i] += lengths[i - 1]; 838 } 839 840 return lengths.map(function (length, index) { 841 // remove the current length, so the length is sum of previous elements 842 var staticPartLength = solidityTypes[index].staticPartLength(types[index]); 843 return length - staticPartLength; 844 }); 845 }; 846 847 SolidityCoder.prototype.getSolidityTypes = function (types) { 848 var self = this; 849 return types.map(function (type) { 850 return self._requireType(type); 851 }); 852 }; 853 854 var coder = new SolidityCoder([ 855 new SolidityTypeAddress(), 856 new SolidityTypeBool(), 857 new SolidityTypeInt(), 858 new SolidityTypeUInt(), 859 new SolidityTypeDynamicBytes(), 860 new SolidityTypeBytes(), 861 new SolidityTypeString(), 862 new SolidityTypeReal(), 863 new SolidityTypeUReal() 864 ]); 865 866 module.exports = coder; 867 868 },{"./address":4,"./bool":5,"./bytes":6,"./dynamicbytes":8,"./formatters":9,"./int":10,"./real":12,"./string":13,"./uint":15,"./ureal":16}],8:[function(require,module,exports){ 869 var f = require('./formatters'); 870 var SolidityType = require('./type'); 871 872 var SolidityTypeDynamicBytes = function () { 873 this._inputFormatter = f.formatInputDynamicBytes; 874 this._outputFormatter = f.formatOutputDynamicBytes; 875 }; 876 877 SolidityTypeDynamicBytes.prototype = new SolidityType({}); 878 SolidityTypeDynamicBytes.prototype.constructor = SolidityTypeDynamicBytes; 879 880 SolidityTypeDynamicBytes.prototype.isType = function (name) { 881 return !!name.match(/^bytes(\[([0-9]*)\])*$/); 882 }; 883 884 SolidityTypeDynamicBytes.prototype.isDynamicType = function () { 885 return true; 886 }; 887 888 module.exports = SolidityTypeDynamicBytes; 889 890 },{"./formatters":9,"./type":14}],9:[function(require,module,exports){ 891 /* 892 This file is part of web3.js. 893 894 web3.js is free software: you can redistribute it and/or modify 895 it under the terms of the GNU Lesser General Public License as published by 896 the Free Software Foundation, either version 3 of the License, or 897 (at your option) any later version. 898 899 web3.js is distributed in the hope that it will be useful, 900 but WITHOUT ANY WARRANTY; without even the implied warranty of 901 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 902 GNU Lesser General Public License for more details. 903 904 You should have received a copy of the GNU Lesser General Public License 905 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 906 */ 907 /** 908 * @file formatters.js 909 * @author Marek Kotewicz <marek@ethdev.com> 910 * @date 2015 911 */ 912 913 var BigNumber = require('bignumber.js'); 914 var utils = require('../utils/utils'); 915 var c = require('../utils/config'); 916 var SolidityParam = require('./param'); 917 918 919 /** 920 * Formats input value to byte representation of int 921 * If value is negative, return it's two's complement 922 * If the value is floating point, round it down 923 * 924 * @method formatInputInt 925 * @param {String|Number|BigNumber} value that needs to be formatted 926 * @returns {SolidityParam} 927 */ 928 var formatInputInt = function (value) { 929 BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE); 930 var result = utils.padLeft(utils.toTwosComplement(value).toString(16), 64); 931 return new SolidityParam(result); 932 }; 933 934 /** 935 * Formats input bytes 936 * 937 * @method formatInputBytes 938 * @param {String} 939 * @returns {SolidityParam} 940 */ 941 var formatInputBytes = function (value) { 942 var result = utils.toHex(value).substr(2); 943 var l = Math.floor((result.length + 63) / 64); 944 result = utils.padRight(result, l * 64); 945 return new SolidityParam(result); 946 }; 947 948 /** 949 * Formats input bytes 950 * 951 * @method formatDynamicInputBytes 952 * @param {String} 953 * @returns {SolidityParam} 954 */ 955 var formatInputDynamicBytes = function (value) { 956 var result = utils.toHex(value).substr(2); 957 var length = result.length / 2; 958 var l = Math.floor((result.length + 63) / 64); 959 result = utils.padRight(result, l * 64); 960 return new SolidityParam(formatInputInt(length).value + result); 961 }; 962 963 /** 964 * Formats input value to byte representation of string 965 * 966 * @method formatInputString 967 * @param {String} 968 * @returns {SolidityParam} 969 */ 970 var formatInputString = function (value) { 971 var result = utils.fromUtf8(value).substr(2); 972 var length = result.length / 2; 973 var l = Math.floor((result.length + 63) / 64); 974 result = utils.padRight(result, l * 64); 975 return new SolidityParam(formatInputInt(length).value + result); 976 }; 977 978 /** 979 * Formats input value to byte representation of bool 980 * 981 * @method formatInputBool 982 * @param {Boolean} 983 * @returns {SolidityParam} 984 */ 985 var formatInputBool = function (value) { 986 var result = '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0'); 987 return new SolidityParam(result); 988 }; 989 990 /** 991 * Formats input value to byte representation of real 992 * Values are multiplied by 2^m and encoded as integers 993 * 994 * @method formatInputReal 995 * @param {String|Number|BigNumber} 996 * @returns {SolidityParam} 997 */ 998 var formatInputReal = function (value) { 999 return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128))); 1000 }; 1001 1002 /** 1003 * Check if input value is negative 1004 * 1005 * @method signedIsNegative 1006 * @param {String} value is hex format 1007 * @returns {Boolean} true if it is negative, otherwise false 1008 */ 1009 var signedIsNegative = function (value) { 1010 return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; 1011 }; 1012 1013 /** 1014 * Formats right-aligned output bytes to int 1015 * 1016 * @method formatOutputInt 1017 * @param {SolidityParam} param 1018 * @returns {BigNumber} right-aligned output bytes formatted to big number 1019 */ 1020 var formatOutputInt = function (param) { 1021 var value = param.staticPart() || "0"; 1022 1023 // check if it's negative number 1024 // it is, return two's complement 1025 if (signedIsNegative(value)) { 1026 return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); 1027 } 1028 return new BigNumber(value, 16); 1029 }; 1030 1031 /** 1032 * Formats right-aligned output bytes to uint 1033 * 1034 * @method formatOutputUInt 1035 * @param {SolidityParam} 1036 * @returns {BigNumeber} right-aligned output bytes formatted to uint 1037 */ 1038 var formatOutputUInt = function (param) { 1039 var value = param.staticPart() || "0"; 1040 return new BigNumber(value, 16); 1041 }; 1042 1043 /** 1044 * Formats right-aligned output bytes to real 1045 * 1046 * @method formatOutputReal 1047 * @param {SolidityParam} 1048 * @returns {BigNumber} input bytes formatted to real 1049 */ 1050 var formatOutputReal = function (param) { 1051 return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128)); 1052 }; 1053 1054 /** 1055 * Formats right-aligned output bytes to ureal 1056 * 1057 * @method formatOutputUReal 1058 * @param {SolidityParam} 1059 * @returns {BigNumber} input bytes formatted to ureal 1060 */ 1061 var formatOutputUReal = function (param) { 1062 return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128)); 1063 }; 1064 1065 /** 1066 * Should be used to format output bool 1067 * 1068 * @method formatOutputBool 1069 * @param {SolidityParam} 1070 * @returns {Boolean} right-aligned input bytes formatted to bool 1071 */ 1072 var formatOutputBool = function (param) { 1073 return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false; 1074 }; 1075 1076 /** 1077 * Should be used to format output bytes 1078 * 1079 * @method formatOutputBytes 1080 * @param {SolidityParam} left-aligned hex representation of string 1081 * @param {String} name type name 1082 * @returns {String} hex string 1083 */ 1084 var formatOutputBytes = function (param, name) { 1085 var matches = name.match(/^bytes([0-9]*)/); 1086 var size = parseInt(matches[1]); 1087 return '0x' + param.staticPart().slice(0, 2 * size); 1088 }; 1089 1090 /** 1091 * Should be used to format output bytes 1092 * 1093 * @method formatOutputDynamicBytes 1094 * @param {SolidityParam} left-aligned hex representation of string 1095 * @returns {String} hex string 1096 */ 1097 var formatOutputDynamicBytes = function (param) { 1098 var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; 1099 return '0x' + param.dynamicPart().substr(64, length); 1100 }; 1101 1102 /** 1103 * Should be used to format output string 1104 * 1105 * @method formatOutputString 1106 * @param {SolidityParam} left-aligned hex representation of string 1107 * @returns {String} ascii string 1108 */ 1109 var formatOutputString = function (param) { 1110 var length = (new BigNumber(param.dynamicPart().slice(0, 64), 16)).toNumber() * 2; 1111 return utils.toUtf8(param.dynamicPart().substr(64, length)); 1112 }; 1113 1114 /** 1115 * Should be used to format output address 1116 * 1117 * @method formatOutputAddress 1118 * @param {SolidityParam} right-aligned input bytes 1119 * @returns {String} address 1120 */ 1121 var formatOutputAddress = function (param) { 1122 var value = param.staticPart(); 1123 return "0x" + value.slice(value.length - 40, value.length); 1124 }; 1125 1126 module.exports = { 1127 formatInputInt: formatInputInt, 1128 formatInputBytes: formatInputBytes, 1129 formatInputDynamicBytes: formatInputDynamicBytes, 1130 formatInputString: formatInputString, 1131 formatInputBool: formatInputBool, 1132 formatInputReal: formatInputReal, 1133 formatOutputInt: formatOutputInt, 1134 formatOutputUInt: formatOutputUInt, 1135 formatOutputReal: formatOutputReal, 1136 formatOutputUReal: formatOutputUReal, 1137 formatOutputBool: formatOutputBool, 1138 formatOutputBytes: formatOutputBytes, 1139 formatOutputDynamicBytes: formatOutputDynamicBytes, 1140 formatOutputString: formatOutputString, 1141 formatOutputAddress: formatOutputAddress 1142 }; 1143 1144 },{"../utils/config":18,"../utils/utils":20,"./param":11,"bignumber.js":"bignumber.js"}],10:[function(require,module,exports){ 1145 var f = require('./formatters'); 1146 var SolidityType = require('./type'); 1147 1148 /** 1149 * SolidityTypeInt is a prootype that represents int type 1150 * It matches: 1151 * int 1152 * int[] 1153 * int[4] 1154 * int[][] 1155 * int[3][] 1156 * int[][6][], ... 1157 * int32 1158 * int64[] 1159 * int8[4] 1160 * int256[][] 1161 * int[3][] 1162 * int64[][6][], ... 1163 */ 1164 var SolidityTypeInt = function () { 1165 this._inputFormatter = f.formatInputInt; 1166 this._outputFormatter = f.formatOutputInt; 1167 }; 1168 1169 SolidityTypeInt.prototype = new SolidityType({}); 1170 SolidityTypeInt.prototype.constructor = SolidityTypeInt; 1171 1172 SolidityTypeInt.prototype.isType = function (name) { 1173 return !!name.match(/^int([0-9]*)?(\[([0-9]*)\])*$/); 1174 }; 1175 1176 module.exports = SolidityTypeInt; 1177 1178 },{"./formatters":9,"./type":14}],11:[function(require,module,exports){ 1179 /* 1180 This file is part of web3.js. 1181 1182 web3.js is free software: you can redistribute it and/or modify 1183 it under the terms of the GNU Lesser General Public License as published by 1184 the Free Software Foundation, either version 3 of the License, or 1185 (at your option) any later version. 1186 1187 web3.js is distributed in the hope that it will be useful, 1188 but WITHOUT ANY WARRANTY; without even the implied warranty of 1189 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1190 GNU Lesser General Public License for more details. 1191 1192 You should have received a copy of the GNU Lesser General Public License 1193 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 1194 */ 1195 /** 1196 * @file param.js 1197 * @author Marek Kotewicz <marek@ethdev.com> 1198 * @date 2015 1199 */ 1200 1201 var utils = require('../utils/utils'); 1202 1203 /** 1204 * SolidityParam object prototype. 1205 * Should be used when encoding, decoding solidity bytes 1206 */ 1207 var SolidityParam = function (value, offset) { 1208 this.value = value || ''; 1209 this.offset = offset; // offset in bytes 1210 }; 1211 1212 /** 1213 * This method should be used to get length of params's dynamic part 1214 * 1215 * @method dynamicPartLength 1216 * @returns {Number} length of dynamic part (in bytes) 1217 */ 1218 SolidityParam.prototype.dynamicPartLength = function () { 1219 return this.dynamicPart().length / 2; 1220 }; 1221 1222 /** 1223 * This method should be used to create copy of solidity param with different offset 1224 * 1225 * @method withOffset 1226 * @param {Number} offset length in bytes 1227 * @returns {SolidityParam} new solidity param with applied offset 1228 */ 1229 SolidityParam.prototype.withOffset = function (offset) { 1230 return new SolidityParam(this.value, offset); 1231 }; 1232 1233 /** 1234 * This method should be used to combine solidity params together 1235 * eg. when appending an array 1236 * 1237 * @method combine 1238 * @param {SolidityParam} param with which we should combine 1239 * @param {SolidityParam} result of combination 1240 */ 1241 SolidityParam.prototype.combine = function (param) { 1242 return new SolidityParam(this.value + param.value); 1243 }; 1244 1245 /** 1246 * This method should be called to check if param has dynamic size. 1247 * If it has, it returns true, otherwise false 1248 * 1249 * @method isDynamic 1250 * @returns {Boolean} 1251 */ 1252 SolidityParam.prototype.isDynamic = function () { 1253 return this.offset !== undefined; 1254 }; 1255 1256 /** 1257 * This method should be called to transform offset to bytes 1258 * 1259 * @method offsetAsBytes 1260 * @returns {String} bytes representation of offset 1261 */ 1262 SolidityParam.prototype.offsetAsBytes = function () { 1263 return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64); 1264 }; 1265 1266 /** 1267 * This method should be called to get static part of param 1268 * 1269 * @method staticPart 1270 * @returns {String} offset if it is a dynamic param, otherwise value 1271 */ 1272 SolidityParam.prototype.staticPart = function () { 1273 if (!this.isDynamic()) { 1274 return this.value; 1275 } 1276 return this.offsetAsBytes(); 1277 }; 1278 1279 /** 1280 * This method should be called to get dynamic part of param 1281 * 1282 * @method dynamicPart 1283 * @returns {String} returns a value if it is a dynamic param, otherwise empty string 1284 */ 1285 SolidityParam.prototype.dynamicPart = function () { 1286 return this.isDynamic() ? this.value : ''; 1287 }; 1288 1289 /** 1290 * This method should be called to encode param 1291 * 1292 * @method encode 1293 * @returns {String} 1294 */ 1295 SolidityParam.prototype.encode = function () { 1296 return this.staticPart() + this.dynamicPart(); 1297 }; 1298 1299 /** 1300 * This method should be called to encode array of params 1301 * 1302 * @method encodeList 1303 * @param {Array[SolidityParam]} params 1304 * @returns {String} 1305 */ 1306 SolidityParam.encodeList = function (params) { 1307 1308 // updating offsets 1309 var totalOffset = params.length * 32; 1310 var offsetParams = params.map(function (param) { 1311 if (!param.isDynamic()) { 1312 return param; 1313 } 1314 var offset = totalOffset; 1315 totalOffset += param.dynamicPartLength(); 1316 return param.withOffset(offset); 1317 }); 1318 1319 // encode everything! 1320 return offsetParams.reduce(function (result, param) { 1321 return result + param.dynamicPart(); 1322 }, offsetParams.reduce(function (result, param) { 1323 return result + param.staticPart(); 1324 }, '')); 1325 }; 1326 1327 1328 1329 module.exports = SolidityParam; 1330 1331 1332 },{"../utils/utils":20}],12:[function(require,module,exports){ 1333 var f = require('./formatters'); 1334 var SolidityType = require('./type'); 1335 1336 /** 1337 * SolidityTypeReal is a prootype that represents real type 1338 * It matches: 1339 * real 1340 * real[] 1341 * real[4] 1342 * real[][] 1343 * real[3][] 1344 * real[][6][], ... 1345 * real32 1346 * real64[] 1347 * real8[4] 1348 * real256[][] 1349 * real[3][] 1350 * real64[][6][], ... 1351 */ 1352 var SolidityTypeReal = function () { 1353 this._inputFormatter = f.formatInputReal; 1354 this._outputFormatter = f.formatOutputReal; 1355 }; 1356 1357 SolidityTypeReal.prototype = new SolidityType({}); 1358 SolidityTypeReal.prototype.constructor = SolidityTypeReal; 1359 1360 SolidityTypeReal.prototype.isType = function (name) { 1361 return !!name.match(/real([0-9]*)?(\[([0-9]*)\])?/); 1362 }; 1363 1364 module.exports = SolidityTypeReal; 1365 1366 },{"./formatters":9,"./type":14}],13:[function(require,module,exports){ 1367 var f = require('./formatters'); 1368 var SolidityType = require('./type'); 1369 1370 var SolidityTypeString = function () { 1371 this._inputFormatter = f.formatInputString; 1372 this._outputFormatter = f.formatOutputString; 1373 }; 1374 1375 SolidityTypeString.prototype = new SolidityType({}); 1376 SolidityTypeString.prototype.constructor = SolidityTypeString; 1377 1378 SolidityTypeString.prototype.isType = function (name) { 1379 return !!name.match(/^string(\[([0-9]*)\])*$/); 1380 }; 1381 1382 SolidityTypeString.prototype.isDynamicType = function () { 1383 return true; 1384 }; 1385 1386 module.exports = SolidityTypeString; 1387 1388 },{"./formatters":9,"./type":14}],14:[function(require,module,exports){ 1389 var f = require('./formatters'); 1390 var SolidityParam = require('./param'); 1391 1392 /** 1393 * SolidityType prototype is used to encode/decode solidity params of certain type 1394 */ 1395 var SolidityType = function (config) { 1396 this._inputFormatter = config.inputFormatter; 1397 this._outputFormatter = config.outputFormatter; 1398 }; 1399 1400 /** 1401 * Should be used to determine if this SolidityType do match given name 1402 * 1403 * @method isType 1404 * @param {String} name 1405 * @return {Bool} true if type match this SolidityType, otherwise false 1406 */ 1407 SolidityType.prototype.isType = function (name) { 1408 throw "this method should be overrwritten for type " + name; 1409 }; 1410 1411 /** 1412 * Should be used to determine what is the length of static part in given type 1413 * 1414 * @method staticPartLength 1415 * @param {String} name 1416 * @return {Number} length of static part in bytes 1417 */ 1418 SolidityType.prototype.staticPartLength = function (name) { 1419 // If name isn't an array then treat it like a single element array. 1420 return (this.nestedTypes(name) || ['[1]']) 1421 .map(function (type) { 1422 // the length of the nested array 1423 return parseInt(type.slice(1, -1), 10) || 1; 1424 }) 1425 .reduce(function (previous, current) { 1426 return previous * current; 1427 // all basic types are 32 bytes long 1428 }, 32); 1429 }; 1430 1431 /** 1432 * Should be used to determine if type is dynamic array 1433 * eg: 1434 * "type[]" => true 1435 * "type[4]" => false 1436 * 1437 * @method isDynamicArray 1438 * @param {String} name 1439 * @return {Bool} true if the type is dynamic array 1440 */ 1441 SolidityType.prototype.isDynamicArray = function (name) { 1442 var nestedTypes = this.nestedTypes(name); 1443 return !!nestedTypes && !nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); 1444 }; 1445 1446 /** 1447 * Should be used to determine if type is static array 1448 * eg: 1449 * "type[]" => false 1450 * "type[4]" => true 1451 * 1452 * @method isStaticArray 1453 * @param {String} name 1454 * @return {Bool} true if the type is static array 1455 */ 1456 SolidityType.prototype.isStaticArray = function (name) { 1457 var nestedTypes = this.nestedTypes(name); 1458 return !!nestedTypes && !!nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g); 1459 }; 1460 1461 /** 1462 * Should return length of static array 1463 * eg. 1464 * "int[32]" => 32 1465 * "int256[14]" => 14 1466 * "int[2][3]" => 3 1467 * "int" => 1 1468 * "int[1]" => 1 1469 * "int[]" => 1 1470 * 1471 * @method staticArrayLength 1472 * @param {String} name 1473 * @return {Number} static array length 1474 */ 1475 SolidityType.prototype.staticArrayLength = function (name) { 1476 var nestedTypes = this.nestedTypes(name); 1477 if (nestedTypes) { 1478 return parseInt(nestedTypes[nestedTypes.length - 1].match(/[0-9]{1,}/g) || 1); 1479 } 1480 return 1; 1481 }; 1482 1483 /** 1484 * Should return nested type 1485 * eg. 1486 * "int[32]" => "int" 1487 * "int256[14]" => "int256" 1488 * "int[2][3]" => "int[2]" 1489 * "int" => "int" 1490 * "int[]" => "int" 1491 * 1492 * @method nestedName 1493 * @param {String} name 1494 * @return {String} nested name 1495 */ 1496 SolidityType.prototype.nestedName = function (name) { 1497 // remove last [] in name 1498 var nestedTypes = this.nestedTypes(name); 1499 if (!nestedTypes) { 1500 return name; 1501 } 1502 1503 return name.substr(0, name.length - nestedTypes[nestedTypes.length - 1].length); 1504 }; 1505 1506 /** 1507 * Should return true if type has dynamic size by default 1508 * such types are "string", "bytes" 1509 * 1510 * @method isDynamicType 1511 * @param {String} name 1512 * @return {Bool} true if is dynamic, otherwise false 1513 */ 1514 SolidityType.prototype.isDynamicType = function () { 1515 return false; 1516 }; 1517 1518 /** 1519 * Should return array of nested types 1520 * eg. 1521 * "int[2][3][]" => ["[2]", "[3]", "[]"] 1522 * "int[] => ["[]"] 1523 * "int" => null 1524 * 1525 * @method nestedTypes 1526 * @param {String} name 1527 * @return {Array} array of nested types 1528 */ 1529 SolidityType.prototype.nestedTypes = function (name) { 1530 // return list of strings eg. "[]", "[3]", "[]", "[2]" 1531 return name.match(/(\[[0-9]*\])/g); 1532 }; 1533 1534 /** 1535 * Should be used to encode the value 1536 * 1537 * @method encode 1538 * @param {Object} value 1539 * @param {String} name 1540 * @return {String} encoded value 1541 */ 1542 SolidityType.prototype.encode = function (value, name) { 1543 var self = this; 1544 if (this.isDynamicArray(name)) { 1545 1546 return (function () { 1547 var length = value.length; // in int 1548 var nestedName = self.nestedName(name); 1549 1550 var result = []; 1551 result.push(f.formatInputInt(length).encode()); 1552 1553 value.forEach(function (v) { 1554 result.push(self.encode(v, nestedName)); 1555 }); 1556 1557 return result; 1558 })(); 1559 1560 } else if (this.isStaticArray(name)) { 1561 1562 return (function () { 1563 var length = self.staticArrayLength(name); // in int 1564 var nestedName = self.nestedName(name); 1565 1566 var result = []; 1567 for (var i = 0; i < length; i++) { 1568 result.push(self.encode(value[i], nestedName)); 1569 } 1570 1571 return result; 1572 })(); 1573 1574 } 1575 1576 return this._inputFormatter(value, name).encode(); 1577 }; 1578 1579 /** 1580 * Should be used to decode value from bytes 1581 * 1582 * @method decode 1583 * @param {String} bytes 1584 * @param {Number} offset in bytes 1585 * @param {String} name type name 1586 * @returns {Object} decoded value 1587 */ 1588 SolidityType.prototype.decode = function (bytes, offset, name) { 1589 var self = this; 1590 1591 if (this.isDynamicArray(name)) { 1592 1593 return (function () { 1594 var arrayOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes 1595 var length = parseInt('0x' + bytes.substr(arrayOffset * 2, 64)); // in int 1596 var arrayStart = arrayOffset + 32; // array starts after length; // in bytes 1597 1598 var nestedName = self.nestedName(name); 1599 var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes 1600 var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; 1601 var result = []; 1602 1603 for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { 1604 result.push(self.decode(bytes, arrayStart + i, nestedName)); 1605 } 1606 1607 return result; 1608 })(); 1609 1610 } else if (this.isStaticArray(name)) { 1611 1612 return (function () { 1613 var length = self.staticArrayLength(name); // in int 1614 var arrayStart = offset; // in bytes 1615 1616 var nestedName = self.nestedName(name); 1617 var nestedStaticPartLength = self.staticPartLength(nestedName); // in bytes 1618 var roundedNestedStaticPartLength = Math.floor((nestedStaticPartLength + 31) / 32) * 32; 1619 var result = []; 1620 1621 for (var i = 0; i < length * roundedNestedStaticPartLength; i += roundedNestedStaticPartLength) { 1622 result.push(self.decode(bytes, arrayStart + i, nestedName)); 1623 } 1624 1625 return result; 1626 })(); 1627 } else if (this.isDynamicType(name)) { 1628 1629 return (function () { 1630 var dynamicOffset = parseInt('0x' + bytes.substr(offset * 2, 64)); // in bytes 1631 var length = parseInt('0x' + bytes.substr(dynamicOffset * 2, 64)); // in bytes 1632 var roundedLength = Math.floor((length + 31) / 32); // in int 1633 var param = new SolidityParam(bytes.substr(dynamicOffset * 2, ( 1 + roundedLength) * 64), 0); 1634 return self._outputFormatter(param, name); 1635 })(); 1636 } 1637 1638 var length = this.staticPartLength(name); 1639 var param = new SolidityParam(bytes.substr(offset * 2, length * 2)); 1640 return this._outputFormatter(param, name); 1641 }; 1642 1643 module.exports = SolidityType; 1644 1645 },{"./formatters":9,"./param":11}],15:[function(require,module,exports){ 1646 var f = require('./formatters'); 1647 var SolidityType = require('./type'); 1648 1649 /** 1650 * SolidityTypeUInt is a prootype that represents uint type 1651 * It matches: 1652 * uint 1653 * uint[] 1654 * uint[4] 1655 * uint[][] 1656 * uint[3][] 1657 * uint[][6][], ... 1658 * uint32 1659 * uint64[] 1660 * uint8[4] 1661 * uint256[][] 1662 * uint[3][] 1663 * uint64[][6][], ... 1664 */ 1665 var SolidityTypeUInt = function () { 1666 this._inputFormatter = f.formatInputInt; 1667 this._outputFormatter = f.formatOutputUInt; 1668 }; 1669 1670 SolidityTypeUInt.prototype = new SolidityType({}); 1671 SolidityTypeUInt.prototype.constructor = SolidityTypeUInt; 1672 1673 SolidityTypeUInt.prototype.isType = function (name) { 1674 return !!name.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/); 1675 }; 1676 1677 module.exports = SolidityTypeUInt; 1678 1679 },{"./formatters":9,"./type":14}],16:[function(require,module,exports){ 1680 var f = require('./formatters'); 1681 var SolidityType = require('./type'); 1682 1683 /** 1684 * SolidityTypeUReal is a prootype that represents ureal type 1685 * It matches: 1686 * ureal 1687 * ureal[] 1688 * ureal[4] 1689 * ureal[][] 1690 * ureal[3][] 1691 * ureal[][6][], ... 1692 * ureal32 1693 * ureal64[] 1694 * ureal8[4] 1695 * ureal256[][] 1696 * ureal[3][] 1697 * ureal64[][6][], ... 1698 */ 1699 var SolidityTypeUReal = function () { 1700 this._inputFormatter = f.formatInputReal; 1701 this._outputFormatter = f.formatOutputUReal; 1702 }; 1703 1704 SolidityTypeUReal.prototype = new SolidityType({}); 1705 SolidityTypeUReal.prototype.constructor = SolidityTypeUReal; 1706 1707 SolidityTypeUReal.prototype.isType = function (name) { 1708 return !!name.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/); 1709 }; 1710 1711 module.exports = SolidityTypeUReal; 1712 1713 },{"./formatters":9,"./type":14}],17:[function(require,module,exports){ 1714 'use strict'; 1715 1716 // go env doesn't have and need XMLHttpRequest 1717 if (typeof XMLHttpRequest === 'undefined') { 1718 exports.XMLHttpRequest = {}; 1719 } else { 1720 exports.XMLHttpRequest = XMLHttpRequest; // jshint ignore:line 1721 } 1722 1723 1724 },{}],18:[function(require,module,exports){ 1725 /* 1726 This file is part of web3.js. 1727 1728 web3.js is free software: you can redistribute it and/or modify 1729 it under the terms of the GNU Lesser General Public License as published by 1730 the Free Software Foundation, either version 3 of the License, or 1731 (at your option) any later version. 1732 1733 web3.js is distributed in the hope that it will be useful, 1734 but WITHOUT ANY WARRANTY; without even the implied warranty of 1735 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1736 GNU Lesser General Public License for more details. 1737 1738 You should have received a copy of the GNU Lesser General Public License 1739 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 1740 */ 1741 /** @file config.js 1742 * @authors: 1743 * Marek Kotewicz <marek@ethdev.com> 1744 * @date 2015 1745 */ 1746 1747 /** 1748 * Utils 1749 * 1750 * @module utils 1751 */ 1752 1753 /** 1754 * Utility functions 1755 * 1756 * @class [utils] config 1757 * @constructor 1758 */ 1759 1760 1761 /// required to define ETH_BIGNUMBER_ROUNDING_MODE 1762 var BigNumber = require('bignumber.js'); 1763 1764 var ETH_UNITS = [ 1765 'wei', 1766 'kwei', 1767 'Mwei', 1768 'Gwei', 1769 'szabo', 1770 'finney', 1771 'femtoether', 1772 'picoether', 1773 'nanoether', 1774 'microether', 1775 'milliether', 1776 'nano', 1777 'micro', 1778 'milli', 1779 'ether', 1780 'grand', 1781 'Mether', 1782 'Gether', 1783 'Tether', 1784 'Pether', 1785 'Eether', 1786 'Zether', 1787 'Yether', 1788 'Nether', 1789 'Dether', 1790 'Vether', 1791 'Uether' 1792 ]; 1793 1794 module.exports = { 1795 ETH_PADDING: 32, 1796 ETH_SIGNATURE_LENGTH: 4, 1797 ETH_UNITS: ETH_UNITS, 1798 ETH_BIGNUMBER_ROUNDING_MODE: { ROUNDING_MODE: BigNumber.ROUND_DOWN }, 1799 ETH_POLLING_TIMEOUT: 1000/2, 1800 defaultBlock: 'latest', 1801 defaultAccount: undefined 1802 }; 1803 1804 1805 },{"bignumber.js":"bignumber.js"}],19:[function(require,module,exports){ 1806 /* 1807 This file is part of web3.js. 1808 1809 web3.js is free software: you can redistribute it and/or modify 1810 it under the terms of the GNU Lesser General Public License as published by 1811 the Free Software Foundation, either version 3 of the License, or 1812 (at your option) any later version. 1813 1814 web3.js is distributed in the hope that it will be useful, 1815 but WITHOUT ANY WARRANTY; without even the implied warranty of 1816 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1817 GNU Lesser General Public License for more details. 1818 1819 You should have received a copy of the GNU Lesser General Public License 1820 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 1821 */ 1822 /** 1823 * @file sha3.js 1824 * @author Marek Kotewicz <marek@ethdev.com> 1825 * @date 2015 1826 */ 1827 1828 var CryptoJS = require('crypto-js'); 1829 var sha3 = require('crypto-js/sha3'); 1830 1831 module.exports = function (value, options) { 1832 if (options && options.encoding === 'hex') { 1833 if (value.length > 2 && value.substr(0, 2) === '0x') { 1834 value = value.substr(2); 1835 } 1836 value = CryptoJS.enc.Hex.parse(value); 1837 } 1838 1839 return sha3(value, { 1840 outputLength: 256 1841 }).toString(); 1842 }; 1843 1844 1845 },{"crypto-js":59,"crypto-js/sha3":80}],20:[function(require,module,exports){ 1846 /* 1847 This file is part of web3.js. 1848 1849 web3.js is free software: you can redistribute it and/or modify 1850 it under the terms of the GNU Lesser General Public License as published by 1851 the Free Software Foundation, either version 3 of the License, or 1852 (at your option) any later version. 1853 1854 web3.js is distributed in the hope that it will be useful, 1855 but WITHOUT ANY WARRANTY; without even the implied warranty of 1856 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1857 GNU Lesser General Public License for more details. 1858 1859 You should have received a copy of the GNU Lesser General Public License 1860 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 1861 */ 1862 /** 1863 * @file utils.js 1864 * @author Marek Kotewicz <marek@ethdev.com> 1865 * @date 2015 1866 */ 1867 1868 /** 1869 * Utils 1870 * 1871 * @module utils 1872 */ 1873 1874 /** 1875 * Utility functions 1876 * 1877 * @class [utils] utils 1878 * @constructor 1879 */ 1880 1881 1882 var BigNumber = require('bignumber.js'); 1883 var sha3 = require('./sha3.js'); 1884 var utf8 = require('utf8'); 1885 1886 var unitMap = { 1887 'noether': '0', 1888 'wei': '1', 1889 'kwei': '1000', 1890 'Kwei': '1000', 1891 'babbage': '1000', 1892 'femtoether': '1000', 1893 'mwei': '1000000', 1894 'Mwei': '1000000', 1895 'lovelace': '1000000', 1896 'picoether': '1000000', 1897 'gwei': '1000000000', 1898 'Gwei': '1000000000', 1899 'shannon': '1000000000', 1900 'nanoether': '1000000000', 1901 'nano': '1000000000', 1902 'szabo': '1000000000000', 1903 'microether': '1000000000000', 1904 'micro': '1000000000000', 1905 'finney': '1000000000000000', 1906 'milliether': '1000000000000000', 1907 'milli': '1000000000000000', 1908 'ether': '1000000000000000000', 1909 'kether': '1000000000000000000000', 1910 'grand': '1000000000000000000000', 1911 'mether': '1000000000000000000000000', 1912 'gether': '1000000000000000000000000000', 1913 'tether': '1000000000000000000000000000000' 1914 }; 1915 1916 /** 1917 * Should be called to pad string to expected length 1918 * 1919 * @method padLeft 1920 * @param {String} string to be padded 1921 * @param {Number} characters that result string should have 1922 * @param {String} sign, by default 0 1923 * @returns {String} right aligned string 1924 */ 1925 var padLeft = function (string, chars, sign) { 1926 return new Array(chars - string.length + 1).join(sign ? sign : "0") + string; 1927 }; 1928 1929 /** 1930 * Should be called to pad string to expected length 1931 * 1932 * @method padRight 1933 * @param {String} string to be padded 1934 * @param {Number} characters that result string should have 1935 * @param {String} sign, by default 0 1936 * @returns {String} right aligned string 1937 */ 1938 var padRight = function (string, chars, sign) { 1939 return string + (new Array(chars - string.length + 1).join(sign ? sign : "0")); 1940 }; 1941 1942 /** 1943 * Should be called to get utf8 from it's hex representation 1944 * 1945 * @method toUtf8 1946 * @param {String} string in hex 1947 * @returns {String} ascii string representation of hex value 1948 */ 1949 var toUtf8 = function(hex) { 1950 // Find termination 1951 var str = ""; 1952 var i = 0, l = hex.length; 1953 if (hex.substring(0, 2) === '0x') { 1954 i = 2; 1955 } 1956 for (; i < l; i+=2) { 1957 var code = parseInt(hex.substr(i, 2), 16); 1958 if (code === 0) 1959 break; 1960 str += String.fromCharCode(code); 1961 } 1962 1963 return utf8.decode(str); 1964 }; 1965 1966 /** 1967 * Should be called to get ascii from it's hex representation 1968 * 1969 * @method toAscii 1970 * @param {String} string in hex 1971 * @returns {String} ascii string representation of hex value 1972 */ 1973 var toAscii = function(hex) { 1974 // Find termination 1975 var str = ""; 1976 var i = 0, l = hex.length; 1977 if (hex.substring(0, 2) === '0x') { 1978 i = 2; 1979 } 1980 for (; i < l; i+=2) { 1981 var code = parseInt(hex.substr(i, 2), 16); 1982 str += String.fromCharCode(code); 1983 } 1984 1985 return str; 1986 }; 1987 1988 /** 1989 * Should be called to get hex representation (prefixed by 0x) of utf8 string 1990 * 1991 * @method fromUtf8 1992 * @param {String} string 1993 * @param {Number} optional padding 1994 * @returns {String} hex representation of input string 1995 */ 1996 var fromUtf8 = function(str) { 1997 str = utf8.encode(str); 1998 var hex = ""; 1999 for(var i = 0; i < str.length; i++) { 2000 var code = str.charCodeAt(i); 2001 if (code === 0) 2002 break; 2003 var n = code.toString(16); 2004 hex += n.length < 2 ? '0' + n : n; 2005 } 2006 2007 return "0x" + hex; 2008 }; 2009 2010 /** 2011 * Should be called to get hex representation (prefixed by 0x) of ascii string 2012 * 2013 * @method fromAscii 2014 * @param {String} string 2015 * @param {Number} optional padding 2016 * @returns {String} hex representation of input string 2017 */ 2018 var fromAscii = function(str) { 2019 var hex = ""; 2020 for(var i = 0; i < str.length; i++) { 2021 var code = str.charCodeAt(i); 2022 var n = code.toString(16); 2023 hex += n.length < 2 ? '0' + n : n; 2024 } 2025 2026 return "0x" + hex; 2027 }; 2028 2029 /** 2030 * Should be used to create full function/event name from json abi 2031 * 2032 * @method transformToFullName 2033 * @param {Object} json-abi 2034 * @return {String} full fnction/event name 2035 */ 2036 var transformToFullName = function (json) { 2037 if (json.name.indexOf('(') !== -1) { 2038 return json.name; 2039 } 2040 2041 var typeName = json.inputs.map(function(i){return i.type; }).join(); 2042 return json.name + '(' + typeName + ')'; 2043 }; 2044 2045 /** 2046 * Should be called to get display name of contract function 2047 * 2048 * @method extractDisplayName 2049 * @param {String} name of function/event 2050 * @returns {String} display name for function/event eg. multiply(uint256) -> multiply 2051 */ 2052 var extractDisplayName = function (name) { 2053 var length = name.indexOf('('); 2054 return length !== -1 ? name.substr(0, length) : name; 2055 }; 2056 2057 /// @returns overloaded part of function/event name 2058 var extractTypeName = function (name) { 2059 /// TODO: make it invulnerable 2060 var length = name.indexOf('('); 2061 return length !== -1 ? name.substr(length + 1, name.length - 1 - (length + 1)).replace(' ', '') : ""; 2062 }; 2063 2064 /** 2065 * Converts value to it's decimal representation in string 2066 * 2067 * @method toDecimal 2068 * @param {String|Number|BigNumber} 2069 * @return {String} 2070 */ 2071 var toDecimal = function (value) { 2072 return toBigNumber(value).toNumber(); 2073 }; 2074 2075 /** 2076 * Converts value to it's hex representation 2077 * 2078 * @method fromDecimal 2079 * @param {String|Number|BigNumber} 2080 * @return {String} 2081 */ 2082 var fromDecimal = function (value) { 2083 var number = toBigNumber(value); 2084 var result = number.toString(16); 2085 2086 return number.lessThan(0) ? '-0x' + result.substr(1) : '0x' + result; 2087 }; 2088 2089 /** 2090 * Auto converts any given value into it's hex representation. 2091 * 2092 * And even stringifys objects before. 2093 * 2094 * @method toHex 2095 * @param {String|Number|BigNumber|Object} 2096 * @return {String} 2097 */ 2098 var toHex = function (val) { 2099 /*jshint maxcomplexity: 8 */ 2100 2101 if (isBoolean(val)) 2102 return fromDecimal(+val); 2103 2104 if (isBigNumber(val)) 2105 return fromDecimal(val); 2106 2107 if (typeof val === 'object') 2108 return fromUtf8(JSON.stringify(val)); 2109 2110 // if its a negative number, pass it through fromDecimal 2111 if (isString(val)) { 2112 if (val.indexOf('-0x') === 0) 2113 return fromDecimal(val); 2114 else if(val.indexOf('0x') === 0) 2115 return val; 2116 else if (!isFinite(val)) 2117 return fromAscii(val); 2118 } 2119 2120 return fromDecimal(val); 2121 }; 2122 2123 /** 2124 * Returns value of unit in Wei 2125 * 2126 * @method getValueOfUnit 2127 * @param {String} unit the unit to convert to, default ether 2128 * @returns {BigNumber} value of the unit (in Wei) 2129 * @throws error if the unit is not correct:w 2130 */ 2131 var getValueOfUnit = function (unit) { 2132 unit = unit ? unit.toLowerCase() : 'ether'; 2133 var unitValue = unitMap[unit]; 2134 if (unitValue === undefined) { 2135 throw new Error('This unit doesn\'t exists, please use the one of the following units' + JSON.stringify(unitMap, null, 2)); 2136 } 2137 return new BigNumber(unitValue, 10); 2138 }; 2139 2140 /** 2141 * Takes a number of wei and converts it to any other ether unit. 2142 * 2143 * Possible units are: 2144 * SI Short SI Full Effigy Other 2145 * - kwei femtoether babbage 2146 * - mwei picoether lovelace 2147 * - gwei nanoether shannon nano 2148 * - -- microether szabo micro 2149 * - -- milliether finney milli 2150 * - ether -- -- 2151 * - kether -- grand 2152 * - mether 2153 * - gether 2154 * - tether 2155 * 2156 * @method fromWei 2157 * @param {Number|String} number can be a number, number string or a HEX of a decimal 2158 * @param {String} unit the unit to convert to, default ether 2159 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number 2160 */ 2161 var fromWei = function(number, unit) { 2162 var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); 2163 2164 return isBigNumber(number) ? returnValue : returnValue.toString(10); 2165 }; 2166 2167 /** 2168 * Takes a number of a unit and converts it to wei. 2169 * 2170 * Possible units are: 2171 * SI Short SI Full Effigy Other 2172 * - kwei femtoether babbage 2173 * - mwei picoether lovelace 2174 * - gwei nanoether shannon nano 2175 * - -- microether szabo micro 2176 * - -- microether szabo micro 2177 * - -- milliether finney milli 2178 * - ether -- -- 2179 * - kether -- grand 2180 * - mether 2181 * - gether 2182 * - tether 2183 * 2184 * @method toWei 2185 * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal 2186 * @param {String} unit the unit to convert from, default ether 2187 * @return {String|Object} When given a BigNumber object it returns one as well, otherwise a number 2188 */ 2189 var toWei = function(number, unit) { 2190 var returnValue = toBigNumber(number).times(getValueOfUnit(unit)); 2191 2192 return isBigNumber(number) ? returnValue : returnValue.toString(10); 2193 }; 2194 2195 /** 2196 * Takes an input and transforms it into a bignumber 2197 * 2198 * @method toBigNumber 2199 * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber 2200 * @return {BigNumber} BigNumber 2201 */ 2202 var toBigNumber = function(number) { 2203 /*jshint maxcomplexity:5 */ 2204 number = number || 0; 2205 if (isBigNumber(number)) 2206 return number; 2207 2208 if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { 2209 return new BigNumber(number.replace('0x',''), 16); 2210 } 2211 2212 return new BigNumber(number.toString(10), 10); 2213 }; 2214 2215 /** 2216 * Takes and input transforms it into bignumber and if it is negative value, into two's complement 2217 * 2218 * @method toTwosComplement 2219 * @param {Number|String|BigNumber} 2220 * @return {BigNumber} 2221 */ 2222 var toTwosComplement = function (number) { 2223 var bigNumber = toBigNumber(number).round(); 2224 if (bigNumber.lessThan(0)) { 2225 return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1); 2226 } 2227 return bigNumber; 2228 }; 2229 2230 /** 2231 * Checks if the given string is strictly an address 2232 * 2233 * @method isStrictAddress 2234 * @param {String} address the given HEX address 2235 * @return {Boolean} 2236 */ 2237 var isStrictAddress = function (address) { 2238 return /^0x[0-9a-f]{40}$/i.test(address); 2239 }; 2240 2241 /** 2242 * Checks if the given string is an address 2243 * 2244 * @method isAddress 2245 * @param {String} address the given HEX address 2246 * @return {Boolean} 2247 */ 2248 var isAddress = function (address) { 2249 if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { 2250 // check if it has the basic requirements of an address 2251 return false; 2252 } else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) { 2253 // If it's all small caps or all caps, return true 2254 return true; 2255 } else { 2256 // Otherwise check each case 2257 return isChecksumAddress(address); 2258 } 2259 }; 2260 2261 /** 2262 * Checks if the given string is a checksummed address 2263 * 2264 * @method isChecksumAddress 2265 * @param {String} address the given HEX address 2266 * @return {Boolean} 2267 */ 2268 var isChecksumAddress = function (address) { 2269 // Check each case 2270 address = address.replace('0x',''); 2271 var addressHash = sha3(address.toLowerCase()); 2272 2273 for (var i = 0; i < 40; i++ ) { 2274 // the nth letter should be uppercase if the nth digit of casemap is 1 2275 if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { 2276 return false; 2277 } 2278 } 2279 return true; 2280 }; 2281 2282 2283 2284 /** 2285 * Makes a checksum address 2286 * 2287 * @method toChecksumAddress 2288 * @param {String} address the given HEX address 2289 * @return {String} 2290 */ 2291 var toChecksumAddress = function (address) { 2292 if (typeof address === 'undefined') return ''; 2293 2294 address = address.toLowerCase().replace('0x',''); 2295 var addressHash = sha3(address); 2296 var checksumAddress = '0x'; 2297 2298 for (var i = 0; i < address.length; i++ ) { 2299 // If ith character is 9 to f then make it uppercase 2300 if (parseInt(addressHash[i], 16) > 7) { 2301 checksumAddress += address[i].toUpperCase(); 2302 } else { 2303 checksumAddress += address[i]; 2304 } 2305 } 2306 return checksumAddress; 2307 }; 2308 2309 /** 2310 * Transforms given string to valid 20 bytes-length addres with 0x prefix 2311 * 2312 * @method toAddress 2313 * @param {String} address 2314 * @return {String} formatted address 2315 */ 2316 var toAddress = function (address) { 2317 if (isStrictAddress(address)) { 2318 return address; 2319 } 2320 2321 if (/^[0-9a-f]{40}$/.test(address)) { 2322 return '0x' + address; 2323 } 2324 2325 return '0x' + padLeft(toHex(address).substr(2), 40); 2326 }; 2327 2328 /** 2329 * Returns true if object is BigNumber, otherwise false 2330 * 2331 * @method isBigNumber 2332 * @param {Object} 2333 * @return {Boolean} 2334 */ 2335 var isBigNumber = function (object) { 2336 return object instanceof BigNumber || 2337 (object && object.constructor && object.constructor.name === 'BigNumber'); 2338 }; 2339 2340 /** 2341 * Returns true if object is string, otherwise false 2342 * 2343 * @method isString 2344 * @param {Object} 2345 * @return {Boolean} 2346 */ 2347 var isString = function (object) { 2348 return typeof object === 'string' || 2349 (object && object.constructor && object.constructor.name === 'String'); 2350 }; 2351 2352 /** 2353 * Returns true if object is function, otherwise false 2354 * 2355 * @method isFunction 2356 * @param {Object} 2357 * @return {Boolean} 2358 */ 2359 var isFunction = function (object) { 2360 return typeof object === 'function'; 2361 }; 2362 2363 /** 2364 * Returns true if object is Objet, otherwise false 2365 * 2366 * @method isObject 2367 * @param {Object} 2368 * @return {Boolean} 2369 */ 2370 var isObject = function (object) { 2371 return object !== null && !(object instanceof Array) && typeof object === 'object'; 2372 }; 2373 2374 /** 2375 * Returns true if object is boolean, otherwise false 2376 * 2377 * @method isBoolean 2378 * @param {Object} 2379 * @return {Boolean} 2380 */ 2381 var isBoolean = function (object) { 2382 return typeof object === 'boolean'; 2383 }; 2384 2385 /** 2386 * Returns true if object is array, otherwise false 2387 * 2388 * @method isArray 2389 * @param {Object} 2390 * @return {Boolean} 2391 */ 2392 var isArray = function (object) { 2393 return object instanceof Array; 2394 }; 2395 2396 /** 2397 * Returns true if given string is valid json object 2398 * 2399 * @method isJson 2400 * @param {String} 2401 * @return {Boolean} 2402 */ 2403 var isJson = function (str) { 2404 try { 2405 return !!JSON.parse(str); 2406 } catch (e) { 2407 return false; 2408 } 2409 }; 2410 2411 /** 2412 * Returns true if given string is a valid Ethereum block header bloom. 2413 * 2414 * @method isBloom 2415 * @param {String} hex encoded bloom filter 2416 * @return {Boolean} 2417 */ 2418 var isBloom = function (bloom) { 2419 if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) { 2420 return false; 2421 } else if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) { 2422 return true; 2423 } 2424 return false; 2425 }; 2426 2427 /** 2428 * Returns true if given string is a valid log topic. 2429 * 2430 * @method isTopic 2431 * @param {String} hex encoded topic 2432 * @return {Boolean} 2433 */ 2434 var isTopic = function (topic) { 2435 if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) { 2436 return false; 2437 } else if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) { 2438 return true; 2439 } 2440 return false; 2441 }; 2442 2443 module.exports = { 2444 padLeft: padLeft, 2445 padRight: padRight, 2446 toHex: toHex, 2447 toDecimal: toDecimal, 2448 fromDecimal: fromDecimal, 2449 toUtf8: toUtf8, 2450 toAscii: toAscii, 2451 fromUtf8: fromUtf8, 2452 fromAscii: fromAscii, 2453 transformToFullName: transformToFullName, 2454 extractDisplayName: extractDisplayName, 2455 extractTypeName: extractTypeName, 2456 toWei: toWei, 2457 fromWei: fromWei, 2458 toBigNumber: toBigNumber, 2459 toTwosComplement: toTwosComplement, 2460 toAddress: toAddress, 2461 isBigNumber: isBigNumber, 2462 isStrictAddress: isStrictAddress, 2463 isAddress: isAddress, 2464 isChecksumAddress: isChecksumAddress, 2465 toChecksumAddress: toChecksumAddress, 2466 isFunction: isFunction, 2467 isString: isString, 2468 isObject: isObject, 2469 isBoolean: isBoolean, 2470 isArray: isArray, 2471 isJson: isJson, 2472 isBloom: isBloom, 2473 isTopic: isTopic, 2474 }; 2475 2476 },{"./sha3.js":19,"bignumber.js":"bignumber.js","utf8":85}],21:[function(require,module,exports){ 2477 module.exports={ 2478 "version": "0.20.1" 2479 } 2480 2481 },{}],22:[function(require,module,exports){ 2482 /* 2483 This file is part of web3.js. 2484 2485 web3.js is free software: you can redistribute it and/or modify 2486 it under the terms of the GNU Lesser General Public License as published by 2487 the Free Software Foundation, either version 3 of the License, or 2488 (at your option) any later version. 2489 2490 web3.js is distributed in the hope that it will be useful, 2491 but WITHOUT ANY WARRANTY; without even the implied warranty of 2492 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2493 GNU Lesser General Public License for more details. 2494 2495 You should have received a copy of the GNU Lesser General Public License 2496 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 2497 */ 2498 /** 2499 * @file web3.js 2500 * @authors: 2501 * Jeffrey Wilcke <jeff@ethdev.com> 2502 * Marek Kotewicz <marek@ethdev.com> 2503 * Marian Oancea <marian@ethdev.com> 2504 * Fabian Vogelsteller <fabian@ethdev.com> 2505 * Gav Wood <g@ethdev.com> 2506 * @date 2014 2507 */ 2508 2509 var RequestManager = require('./web3/requestmanager'); 2510 var Iban = require('./web3/iban'); 2511 var Eth = require('./web3/methods/eth'); 2512 var DB = require('./web3/methods/db'); 2513 var Shh = require('./web3/methods/shh'); 2514 var Net = require('./web3/methods/net'); 2515 var Personal = require('./web3/methods/personal'); 2516 var Swarm = require('./web3/methods/swarm'); 2517 var Settings = require('./web3/settings'); 2518 var version = require('./version.json'); 2519 var utils = require('./utils/utils'); 2520 var sha3 = require('./utils/sha3'); 2521 var extend = require('./web3/extend'); 2522 var Batch = require('./web3/batch'); 2523 var Property = require('./web3/property'); 2524 var HttpProvider = require('./web3/httpprovider'); 2525 var IpcProvider = require('./web3/ipcprovider'); 2526 var BigNumber = require('bignumber.js'); 2527 2528 2529 2530 function Web3 (provider) { 2531 this._requestManager = new RequestManager(provider); 2532 this.currentProvider = provider; 2533 this.eth = new Eth(this); 2534 this.db = new DB(this); 2535 this.shh = new Shh(this); 2536 this.net = new Net(this); 2537 this.personal = new Personal(this); 2538 this.bzz = new Swarm(this); 2539 this.settings = new Settings(); 2540 this.version = { 2541 api: version.version 2542 }; 2543 this.providers = { 2544 HttpProvider: HttpProvider, 2545 IpcProvider: IpcProvider 2546 }; 2547 this._extend = extend(this); 2548 this._extend({ 2549 properties: properties() 2550 }); 2551 } 2552 2553 // expose providers on the class 2554 Web3.providers = { 2555 HttpProvider: HttpProvider, 2556 IpcProvider: IpcProvider 2557 }; 2558 2559 Web3.prototype.setProvider = function (provider) { 2560 this._requestManager.setProvider(provider); 2561 this.currentProvider = provider; 2562 }; 2563 2564 Web3.prototype.reset = function (keepIsSyncing) { 2565 this._requestManager.reset(keepIsSyncing); 2566 this.settings = new Settings(); 2567 }; 2568 2569 Web3.prototype.BigNumber = BigNumber; 2570 Web3.prototype.toHex = utils.toHex; 2571 Web3.prototype.toAscii = utils.toAscii; 2572 Web3.prototype.toUtf8 = utils.toUtf8; 2573 Web3.prototype.fromAscii = utils.fromAscii; 2574 Web3.prototype.fromUtf8 = utils.fromUtf8; 2575 Web3.prototype.toDecimal = utils.toDecimal; 2576 Web3.prototype.fromDecimal = utils.fromDecimal; 2577 Web3.prototype.toBigNumber = utils.toBigNumber; 2578 Web3.prototype.toWei = utils.toWei; 2579 Web3.prototype.fromWei = utils.fromWei; 2580 Web3.prototype.isAddress = utils.isAddress; 2581 Web3.prototype.isChecksumAddress = utils.isChecksumAddress; 2582 Web3.prototype.toChecksumAddress = utils.toChecksumAddress; 2583 Web3.prototype.isIBAN = utils.isIBAN; 2584 Web3.prototype.padLeft = utils.padLeft; 2585 Web3.prototype.padRight = utils.padRight; 2586 2587 2588 Web3.prototype.sha3 = function(string, options) { 2589 return '0x' + sha3(string, options); 2590 }; 2591 2592 /** 2593 * Transforms direct icap to address 2594 */ 2595 Web3.prototype.fromICAP = function (icap) { 2596 var iban = new Iban(icap); 2597 return iban.address(); 2598 }; 2599 2600 var properties = function () { 2601 return [ 2602 new Property({ 2603 name: 'version.node', 2604 getter: 'web3_clientVersion' 2605 }), 2606 new Property({ 2607 name: 'version.network', 2608 getter: 'net_version', 2609 inputFormatter: utils.toDecimal 2610 }), 2611 new Property({ 2612 name: 'version.ethereum', 2613 getter: 'eth_protocolVersion', 2614 inputFormatter: utils.toDecimal 2615 }), 2616 new Property({ 2617 name: 'version.whisper', 2618 getter: 'shh_version', 2619 inputFormatter: utils.toDecimal 2620 }) 2621 ]; 2622 }; 2623 2624 Web3.prototype.isConnected = function(){ 2625 return (this.currentProvider && this.currentProvider.isConnected()); 2626 }; 2627 2628 Web3.prototype.createBatch = function () { 2629 return new Batch(this); 2630 }; 2631 2632 module.exports = Web3; 2633 2634 2635 },{"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/extend":28,"./web3/httpprovider":32,"./web3/iban":33,"./web3/ipcprovider":34,"./web3/methods/db":37,"./web3/methods/eth":38,"./web3/methods/net":39,"./web3/methods/personal":40,"./web3/methods/shh":41,"./web3/methods/swarm":42,"./web3/property":45,"./web3/requestmanager":46,"./web3/settings":47,"bignumber.js":"bignumber.js"}],23:[function(require,module,exports){ 2636 /* 2637 This file is part of web3.js. 2638 2639 web3.js is free software: you can redistribute it and/or modify 2640 it under the terms of the GNU Lesser General Public License as published by 2641 the Free Software Foundation, either version 3 of the License, or 2642 (at your option) any later version. 2643 2644 web3.js is distributed in the hope that it will be useful, 2645 but WITHOUT ANY WARRANTY; without even the implied warranty of 2646 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2647 GNU Lesser General Public License for more details. 2648 2649 You should have received a copy of the GNU Lesser General Public License 2650 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 2651 */ 2652 /** 2653 * @file allevents.js 2654 * @author Marek Kotewicz <marek@ethdev.com> 2655 * @date 2014 2656 */ 2657 2658 var sha3 = require('../utils/sha3'); 2659 var SolidityEvent = require('./event'); 2660 var formatters = require('./formatters'); 2661 var utils = require('../utils/utils'); 2662 var Filter = require('./filter'); 2663 var watches = require('./methods/watches'); 2664 2665 var AllSolidityEvents = function (requestManager, json, address) { 2666 this._requestManager = requestManager; 2667 this._json = json; 2668 this._address = address; 2669 }; 2670 2671 AllSolidityEvents.prototype.encode = function (options) { 2672 options = options || {}; 2673 var result = {}; 2674 2675 ['fromBlock', 'toBlock'].filter(function (f) { 2676 return options[f] !== undefined; 2677 }).forEach(function (f) { 2678 result[f] = formatters.inputBlockNumberFormatter(options[f]); 2679 }); 2680 2681 result.address = this._address; 2682 2683 return result; 2684 }; 2685 2686 AllSolidityEvents.prototype.decode = function (data) { 2687 data.data = data.data || ''; 2688 data.topics = data.topics || []; 2689 2690 var eventTopic = data.topics[0].slice(2); 2691 var match = this._json.filter(function (j) { 2692 return eventTopic === sha3(utils.transformToFullName(j)); 2693 })[0]; 2694 2695 if (!match) { // cannot find matching event? 2696 console.warn('cannot find event for log'); 2697 return data; 2698 } 2699 2700 var event = new SolidityEvent(this._requestManager, match, this._address); 2701 return event.decode(data); 2702 }; 2703 2704 AllSolidityEvents.prototype.execute = function (options, callback) { 2705 2706 if (utils.isFunction(arguments[arguments.length - 1])) { 2707 callback = arguments[arguments.length - 1]; 2708 if(arguments.length === 1) 2709 options = null; 2710 } 2711 2712 var o = this.encode(options); 2713 var formatter = this.decode.bind(this); 2714 return new Filter(o, 'eth', this._requestManager, watches.eth(), formatter, callback); 2715 }; 2716 2717 AllSolidityEvents.prototype.attachToContract = function (contract) { 2718 var execute = this.execute.bind(this); 2719 contract.allEvents = execute; 2720 }; 2721 2722 module.exports = AllSolidityEvents; 2723 2724 2725 },{"../utils/sha3":19,"../utils/utils":20,"./event":27,"./filter":29,"./formatters":30,"./methods/watches":43}],24:[function(require,module,exports){ 2726 /* 2727 This file is part of web3.js. 2728 2729 web3.js is free software: you can redistribute it and/or modify 2730 it under the terms of the GNU Lesser General Public License as published by 2731 the Free Software Foundation, either version 3 of the License, or 2732 (at your option) any later version. 2733 2734 web3.js is distributed in the hope that it will be useful, 2735 but WITHOUT ANY WARRANTY; without even the implied warranty of 2736 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2737 GNU Lesser General Public License for more details. 2738 2739 You should have received a copy of the GNU Lesser General Public License 2740 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 2741 */ 2742 /** 2743 * @file batch.js 2744 * @author Marek Kotewicz <marek@ethdev.com> 2745 * @date 2015 2746 */ 2747 2748 var Jsonrpc = require('./jsonrpc'); 2749 var errors = require('./errors'); 2750 2751 var Batch = function (web3) { 2752 this.requestManager = web3._requestManager; 2753 this.requests = []; 2754 }; 2755 2756 /** 2757 * Should be called to add create new request to batch request 2758 * 2759 * @method add 2760 * @param {Object} jsonrpc requet object 2761 */ 2762 Batch.prototype.add = function (request) { 2763 this.requests.push(request); 2764 }; 2765 2766 /** 2767 * Should be called to execute batch request 2768 * 2769 * @method execute 2770 */ 2771 Batch.prototype.execute = function () { 2772 var requests = this.requests; 2773 this.requestManager.sendBatch(requests, function (err, results) { 2774 results = results || []; 2775 requests.map(function (request, index) { 2776 return results[index] || {}; 2777 }).forEach(function (result, index) { 2778 if (requests[index].callback) { 2779 2780 if (!Jsonrpc.isValidResponse(result)) { 2781 return requests[index].callback(errors.InvalidResponse(result)); 2782 } 2783 2784 requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result)); 2785 } 2786 }); 2787 }); 2788 }; 2789 2790 module.exports = Batch; 2791 2792 2793 },{"./errors":26,"./jsonrpc":35}],25:[function(require,module,exports){ 2794 /* 2795 This file is part of web3.js. 2796 2797 web3.js is free software: you can redistribute it and/or modify 2798 it under the terms of the GNU Lesser General Public License as published by 2799 the Free Software Foundation, either version 3 of the License, or 2800 (at your option) any later version. 2801 2802 web3.js is distributed in the hope that it will be useful, 2803 but WITHOUT ANY WARRANTY; without even the implied warranty of 2804 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2805 GNU Lesser General Public License for more details. 2806 2807 You should have received a copy of the GNU Lesser General Public License 2808 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 2809 */ 2810 /** 2811 * @file contract.js 2812 * @author Marek Kotewicz <marek@ethdev.com> 2813 * @date 2014 2814 */ 2815 2816 var utils = require('../utils/utils'); 2817 var coder = require('../solidity/coder'); 2818 var SolidityEvent = require('./event'); 2819 var SolidityFunction = require('./function'); 2820 var AllEvents = require('./allevents'); 2821 2822 /** 2823 * Should be called to encode constructor params 2824 * 2825 * @method encodeConstructorParams 2826 * @param {Array} abi 2827 * @param {Array} constructor params 2828 */ 2829 var encodeConstructorParams = function (abi, params) { 2830 return abi.filter(function (json) { 2831 return json.type === 'constructor' && json.inputs.length === params.length; 2832 }).map(function (json) { 2833 return json.inputs.map(function (input) { 2834 return input.type; 2835 }); 2836 }).map(function (types) { 2837 return coder.encodeParams(types, params); 2838 })[0] || ''; 2839 }; 2840 2841 /** 2842 * Should be called to add functions to contract object 2843 * 2844 * @method addFunctionsToContract 2845 * @param {Contract} contract 2846 * @param {Array} abi 2847 */ 2848 var addFunctionsToContract = function (contract) { 2849 contract.abi.filter(function (json) { 2850 return json.type === 'function'; 2851 }).map(function (json) { 2852 return new SolidityFunction(contract._eth, json, contract.address); 2853 }).forEach(function (f) { 2854 f.attachToContract(contract); 2855 }); 2856 }; 2857 2858 /** 2859 * Should be called to add events to contract object 2860 * 2861 * @method addEventsToContract 2862 * @param {Contract} contract 2863 * @param {Array} abi 2864 */ 2865 var addEventsToContract = function (contract) { 2866 var events = contract.abi.filter(function (json) { 2867 return json.type === 'event'; 2868 }); 2869 2870 var All = new AllEvents(contract._eth._requestManager, events, contract.address); 2871 All.attachToContract(contract); 2872 2873 events.map(function (json) { 2874 return new SolidityEvent(contract._eth._requestManager, json, contract.address); 2875 }).forEach(function (e) { 2876 e.attachToContract(contract); 2877 }); 2878 }; 2879 2880 2881 /** 2882 * Should be called to check if the contract gets properly deployed on the blockchain. 2883 * 2884 * @method checkForContractAddress 2885 * @param {Object} contract 2886 * @param {Function} callback 2887 * @returns {Undefined} 2888 */ 2889 var checkForContractAddress = function(contract, callback){ 2890 var count = 0, 2891 callbackFired = false; 2892 2893 // wait for receipt 2894 var filter = contract._eth.filter('latest', function(e){ 2895 if (!e && !callbackFired) { 2896 count++; 2897 2898 // stop watching after 50 blocks (timeout) 2899 if (count > 50) { 2900 2901 filter.stopWatching(function() {}); 2902 callbackFired = true; 2903 2904 if (callback) 2905 callback(new Error('Contract transaction couldn\'t be found after 50 blocks')); 2906 else 2907 throw new Error('Contract transaction couldn\'t be found after 50 blocks'); 2908 2909 2910 } else { 2911 2912 contract._eth.getTransactionReceipt(contract.transactionHash, function(e, receipt){ 2913 if(receipt && !callbackFired) { 2914 2915 contract._eth.getCode(receipt.contractAddress, function(e, code){ 2916 /*jshint maxcomplexity: 6 */ 2917 2918 if(callbackFired || !code) 2919 return; 2920 2921 filter.stopWatching(function() {}); 2922 callbackFired = true; 2923 2924 if(code.length > 3) { 2925 2926 // console.log('Contract code deployed!'); 2927 2928 contract.address = receipt.contractAddress; 2929 2930 // attach events and methods again after we have 2931 addFunctionsToContract(contract); 2932 addEventsToContract(contract); 2933 2934 // call callback for the second time 2935 if(callback) 2936 callback(null, contract); 2937 2938 } else { 2939 if(callback) 2940 callback(new Error('The contract code couldn\'t be stored, please check your gas amount.')); 2941 else 2942 throw new Error('The contract code couldn\'t be stored, please check your gas amount.'); 2943 } 2944 }); 2945 } 2946 }); 2947 } 2948 } 2949 }); 2950 }; 2951 2952 /** 2953 * Should be called to create new ContractFactory instance 2954 * 2955 * @method ContractFactory 2956 * @param {Array} abi 2957 */ 2958 var ContractFactory = function (eth, abi) { 2959 this.eth = eth; 2960 this.abi = abi; 2961 2962 /** 2963 * Should be called to create new contract on a blockchain 2964 * 2965 * @method new 2966 * @param {Any} contract constructor param1 (optional) 2967 * @param {Any} contract constructor param2 (optional) 2968 * @param {Object} contract transaction object (required) 2969 * @param {Function} callback 2970 * @returns {Contract} returns contract instance 2971 */ 2972 this.new = function () { 2973 /*jshint maxcomplexity: 7 */ 2974 2975 var contract = new Contract(this.eth, this.abi); 2976 2977 // parse arguments 2978 var options = {}; // required! 2979 var callback; 2980 2981 var args = Array.prototype.slice.call(arguments); 2982 if (utils.isFunction(args[args.length - 1])) { 2983 callback = args.pop(); 2984 } 2985 2986 var last = args[args.length - 1]; 2987 if (utils.isObject(last) && !utils.isArray(last)) { 2988 options = args.pop(); 2989 } 2990 2991 if (options.value > 0) { 2992 var constructorAbi = abi.filter(function (json) { 2993 return json.type === 'constructor' && json.inputs.length === args.length; 2994 })[0] || {}; 2995 2996 if (!constructorAbi.payable) { 2997 throw new Error('Cannot send value to non-payable constructor'); 2998 } 2999 } 3000 3001 var bytes = encodeConstructorParams(this.abi, args); 3002 options.data += bytes; 3003 3004 if (callback) { 3005 3006 // wait for the contract address and check if the code was deployed 3007 this.eth.sendTransaction(options, function (err, hash) { 3008 if (err) { 3009 callback(err); 3010 } else { 3011 // add the transaction hash 3012 contract.transactionHash = hash; 3013 3014 // call callback for the first time 3015 callback(null, contract); 3016 3017 checkForContractAddress(contract, callback); 3018 } 3019 }); 3020 } else { 3021 var hash = this.eth.sendTransaction(options); 3022 // add the transaction hash 3023 contract.transactionHash = hash; 3024 checkForContractAddress(contract); 3025 } 3026 3027 return contract; 3028 }; 3029 3030 this.new.getData = this.getData.bind(this); 3031 }; 3032 3033 /** 3034 * Should be called to create new ContractFactory 3035 * 3036 * @method contract 3037 * @param {Array} abi 3038 * @returns {ContractFactory} new contract factory 3039 */ 3040 //var contract = function (abi) { 3041 //return new ContractFactory(abi); 3042 //}; 3043 3044 3045 3046 /** 3047 * Should be called to get access to existing contract on a blockchain 3048 * 3049 * @method at 3050 * @param {Address} contract address (required) 3051 * @param {Function} callback {optional) 3052 * @returns {Contract} returns contract if no callback was passed, 3053 * otherwise calls callback function (err, contract) 3054 */ 3055 ContractFactory.prototype.at = function (address, callback) { 3056 var contract = new Contract(this.eth, this.abi, address); 3057 3058 // this functions are not part of prototype, 3059 // because we don't want to spoil the interface 3060 addFunctionsToContract(contract); 3061 addEventsToContract(contract); 3062 3063 if (callback) { 3064 callback(null, contract); 3065 } 3066 return contract; 3067 }; 3068 3069 /** 3070 * Gets the data, which is data to deploy plus constructor params 3071 * 3072 * @method getData 3073 */ 3074 ContractFactory.prototype.getData = function () { 3075 var options = {}; // required! 3076 var args = Array.prototype.slice.call(arguments); 3077 3078 var last = args[args.length - 1]; 3079 if (utils.isObject(last) && !utils.isArray(last)) { 3080 options = args.pop(); 3081 } 3082 3083 var bytes = encodeConstructorParams(this.abi, args); 3084 options.data += bytes; 3085 3086 return options.data; 3087 }; 3088 3089 /** 3090 * Should be called to create new contract instance 3091 * 3092 * @method Contract 3093 * @param {Array} abi 3094 * @param {Address} contract address 3095 */ 3096 var Contract = function (eth, abi, address) { 3097 this._eth = eth; 3098 this.transactionHash = null; 3099 this.address = address; 3100 this.abi = abi; 3101 }; 3102 3103 module.exports = ContractFactory; 3104 3105 },{"../solidity/coder":7,"../utils/utils":20,"./allevents":23,"./event":27,"./function":31}],26:[function(require,module,exports){ 3106 /* 3107 This file is part of web3.js. 3108 3109 web3.js is free software: you can redistribute it and/or modify 3110 it under the terms of the GNU Lesser General Public License as published by 3111 the Free Software Foundation, either version 3 of the License, or 3112 (at your option) any later version. 3113 3114 web3.js is distributed in the hope that it will be useful, 3115 but WITHOUT ANY WARRANTY; without even the implied warranty of 3116 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3117 GNU Lesser General Public License for more details. 3118 3119 You should have received a copy of the GNU Lesser General Public License 3120 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 3121 */ 3122 /** 3123 * @file errors.js 3124 * @author Marek Kotewicz <marek@ethdev.com> 3125 * @date 2015 3126 */ 3127 3128 module.exports = { 3129 InvalidNumberOfSolidityArgs: function () { 3130 return new Error('Invalid number of arguments to Solidity function'); 3131 }, 3132 InvalidNumberOfRPCParams: function () { 3133 return new Error('Invalid number of input parameters to RPC method'); 3134 }, 3135 InvalidConnection: function (host){ 3136 return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); 3137 }, 3138 InvalidProvider: function () { 3139 return new Error('Provider not set or invalid'); 3140 }, 3141 InvalidResponse: function (result){ 3142 var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); 3143 return new Error(message); 3144 }, 3145 ConnectionTimeout: function (ms){ 3146 return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived'); 3147 } 3148 }; 3149 3150 },{}],27:[function(require,module,exports){ 3151 /* 3152 This file is part of web3.js. 3153 3154 web3.js is free software: you can redistribute it and/or modify 3155 it under the terms of the GNU Lesser General Public License as published by 3156 the Free Software Foundation, either version 3 of the License, or 3157 (at your option) any later version. 3158 3159 web3.js is distributed in the hope that it will be useful, 3160 but WITHOUT ANY WARRANTY; without even the implied warranty of 3161 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3162 GNU Lesser General Public License for more details. 3163 3164 You should have received a copy of the GNU Lesser General Public License 3165 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 3166 */ 3167 /** 3168 * @file event.js 3169 * @author Marek Kotewicz <marek@ethdev.com> 3170 * @date 2014 3171 */ 3172 3173 var utils = require('../utils/utils'); 3174 var coder = require('../solidity/coder'); 3175 var formatters = require('./formatters'); 3176 var sha3 = require('../utils/sha3'); 3177 var Filter = require('./filter'); 3178 var watches = require('./methods/watches'); 3179 3180 /** 3181 * This prototype should be used to create event filters 3182 */ 3183 var SolidityEvent = function (requestManager, json, address) { 3184 this._requestManager = requestManager; 3185 this._params = json.inputs; 3186 this._name = utils.transformToFullName(json); 3187 this._address = address; 3188 this._anonymous = json.anonymous; 3189 }; 3190 3191 /** 3192 * Should be used to get filtered param types 3193 * 3194 * @method types 3195 * @param {Bool} decide if returned typed should be indexed 3196 * @return {Array} array of types 3197 */ 3198 SolidityEvent.prototype.types = function (indexed) { 3199 return this._params.filter(function (i) { 3200 return i.indexed === indexed; 3201 }).map(function (i) { 3202 return i.type; 3203 }); 3204 }; 3205 3206 /** 3207 * Should be used to get event display name 3208 * 3209 * @method displayName 3210 * @return {String} event display name 3211 */ 3212 SolidityEvent.prototype.displayName = function () { 3213 return utils.extractDisplayName(this._name); 3214 }; 3215 3216 /** 3217 * Should be used to get event type name 3218 * 3219 * @method typeName 3220 * @return {String} event type name 3221 */ 3222 SolidityEvent.prototype.typeName = function () { 3223 return utils.extractTypeName(this._name); 3224 }; 3225 3226 /** 3227 * Should be used to get event signature 3228 * 3229 * @method signature 3230 * @return {String} event signature 3231 */ 3232 SolidityEvent.prototype.signature = function () { 3233 return sha3(this._name); 3234 }; 3235 3236 /** 3237 * Should be used to encode indexed params and options to one final object 3238 * 3239 * @method encode 3240 * @param {Object} indexed 3241 * @param {Object} options 3242 * @return {Object} everything combined together and encoded 3243 */ 3244 SolidityEvent.prototype.encode = function (indexed, options) { 3245 indexed = indexed || {}; 3246 options = options || {}; 3247 var result = {}; 3248 3249 ['fromBlock', 'toBlock'].filter(function (f) { 3250 return options[f] !== undefined; 3251 }).forEach(function (f) { 3252 result[f] = formatters.inputBlockNumberFormatter(options[f]); 3253 }); 3254 3255 result.topics = []; 3256 3257 result.address = this._address; 3258 if (!this._anonymous) { 3259 result.topics.push('0x' + this.signature()); 3260 } 3261 3262 var indexedTopics = this._params.filter(function (i) { 3263 return i.indexed === true; 3264 }).map(function (i) { 3265 var value = indexed[i.name]; 3266 if (value === undefined || value === null) { 3267 return null; 3268 } 3269 3270 if (utils.isArray(value)) { 3271 return value.map(function (v) { 3272 return '0x' + coder.encodeParam(i.type, v); 3273 }); 3274 } 3275 return '0x' + coder.encodeParam(i.type, value); 3276 }); 3277 3278 result.topics = result.topics.concat(indexedTopics); 3279 3280 return result; 3281 }; 3282 3283 /** 3284 * Should be used to decode indexed params and options 3285 * 3286 * @method decode 3287 * @param {Object} data 3288 * @return {Object} result object with decoded indexed && not indexed params 3289 */ 3290 SolidityEvent.prototype.decode = function (data) { 3291 3292 data.data = data.data || ''; 3293 data.topics = data.topics || []; 3294 3295 var argTopics = this._anonymous ? data.topics : data.topics.slice(1); 3296 var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join(""); 3297 var indexedParams = coder.decodeParams(this.types(true), indexedData); 3298 3299 var notIndexedData = data.data.slice(2); 3300 var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData); 3301 3302 var result = formatters.outputLogFormatter(data); 3303 result.event = this.displayName(); 3304 result.address = data.address; 3305 3306 result.args = this._params.reduce(function (acc, current) { 3307 acc[current.name] = current.indexed ? indexedParams.shift() : notIndexedParams.shift(); 3308 return acc; 3309 }, {}); 3310 3311 delete result.data; 3312 delete result.topics; 3313 3314 return result; 3315 }; 3316 3317 /** 3318 * Should be used to create new filter object from event 3319 * 3320 * @method execute 3321 * @param {Object} indexed 3322 * @param {Object} options 3323 * @return {Object} filter object 3324 */ 3325 SolidityEvent.prototype.execute = function (indexed, options, callback) { 3326 3327 if (utils.isFunction(arguments[arguments.length - 1])) { 3328 callback = arguments[arguments.length - 1]; 3329 if(arguments.length === 2) 3330 options = null; 3331 if(arguments.length === 1) { 3332 options = null; 3333 indexed = {}; 3334 } 3335 } 3336 3337 var o = this.encode(indexed, options); 3338 var formatter = this.decode.bind(this); 3339 return new Filter(o, 'eth', this._requestManager, watches.eth(), formatter, callback); 3340 }; 3341 3342 /** 3343 * Should be used to attach event to contract object 3344 * 3345 * @method attachToContract 3346 * @param {Contract} 3347 */ 3348 SolidityEvent.prototype.attachToContract = function (contract) { 3349 var execute = this.execute.bind(this); 3350 var displayName = this.displayName(); 3351 if (!contract[displayName]) { 3352 contract[displayName] = execute; 3353 } 3354 contract[displayName][this.typeName()] = this.execute.bind(this, contract); 3355 }; 3356 3357 module.exports = SolidityEvent; 3358 3359 3360 },{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./filter":29,"./formatters":30,"./methods/watches":43}],28:[function(require,module,exports){ 3361 var formatters = require('./formatters'); 3362 var utils = require('./../utils/utils'); 3363 var Method = require('./method'); 3364 var Property = require('./property'); 3365 3366 // TODO: refactor, so the input params are not altered. 3367 // it's necessary to make same 'extension' work with multiple providers 3368 var extend = function (web3) { 3369 /* jshint maxcomplexity:5 */ 3370 var ex = function (extension) { 3371 3372 var extendedObject; 3373 if (extension.property) { 3374 if (!web3[extension.property]) { 3375 web3[extension.property] = {}; 3376 } 3377 extendedObject = web3[extension.property]; 3378 } else { 3379 extendedObject = web3; 3380 } 3381 3382 if (extension.methods) { 3383 extension.methods.forEach(function (method) { 3384 method.attachToObject(extendedObject); 3385 method.setRequestManager(web3._requestManager); 3386 }); 3387 } 3388 3389 if (extension.properties) { 3390 extension.properties.forEach(function (property) { 3391 property.attachToObject(extendedObject); 3392 property.setRequestManager(web3._requestManager); 3393 }); 3394 } 3395 }; 3396 3397 ex.formatters = formatters; 3398 ex.utils = utils; 3399 ex.Method = Method; 3400 ex.Property = Property; 3401 3402 return ex; 3403 }; 3404 3405 3406 3407 module.exports = extend; 3408 3409 3410 },{"./../utils/utils":20,"./formatters":30,"./method":36,"./property":45}],29:[function(require,module,exports){ 3411 /* 3412 This file is part of web3.js. 3413 3414 web3.js is free software: you can redistribute it and/or modify 3415 it under the terms of the GNU Lesser General Public License as published by 3416 the Free Software Foundation, either version 3 of the License, or 3417 (at your option) any later version. 3418 3419 web3.js is distributed in the hope that it will be useful, 3420 but WITHOUT ANY WARRANTY; without even the implied warranty of 3421 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3422 GNU Lesser General Public License for more details. 3423 3424 You should have received a copy of the GNU Lesser General Public License 3425 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 3426 */ 3427 /** @file filter.js 3428 * @authors: 3429 * Jeffrey Wilcke <jeff@ethdev.com> 3430 * Marek Kotewicz <marek@ethdev.com> 3431 * Marian Oancea <marian@ethdev.com> 3432 * Fabian Vogelsteller <fabian@ethdev.com> 3433 * Gav Wood <g@ethdev.com> 3434 * @date 2014 3435 */ 3436 3437 var formatters = require('./formatters'); 3438 var utils = require('../utils/utils'); 3439 3440 /** 3441 * Converts a given topic to a hex string, but also allows null values. 3442 * 3443 * @param {Mixed} value 3444 * @return {String} 3445 */ 3446 var toTopic = function(value){ 3447 3448 if(value === null || typeof value === 'undefined') 3449 return null; 3450 3451 value = String(value); 3452 3453 if(value.indexOf('0x') === 0) 3454 return value; 3455 else 3456 return utils.fromUtf8(value); 3457 }; 3458 3459 /// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones 3460 /// @param should be string or object 3461 /// @returns options string or object 3462 var getOptions = function (options, type) { 3463 /*jshint maxcomplexity: 6 */ 3464 3465 if (utils.isString(options)) { 3466 return options; 3467 } 3468 3469 options = options || {}; 3470 3471 3472 switch(type) { 3473 case 'eth': 3474 3475 // make sure topics, get converted to hex 3476 options.topics = options.topics || []; 3477 options.topics = options.topics.map(function(topic){ 3478 return (utils.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); 3479 }); 3480 3481 return { 3482 topics: options.topics, 3483 from: options.from, 3484 to: options.to, 3485 address: options.address, 3486 fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock), 3487 toBlock: formatters.inputBlockNumberFormatter(options.toBlock) 3488 }; 3489 case 'shh': 3490 return options; 3491 } 3492 }; 3493 3494 /** 3495 Adds the callback and sets up the methods, to iterate over the results. 3496 3497 @method getLogsAtStart 3498 @param {Object} self 3499 @param {function} callback 3500 */ 3501 var getLogsAtStart = function(self, callback){ 3502 // call getFilterLogs for the first watch callback start 3503 if (!utils.isString(self.options)) { 3504 self.get(function (err, messages) { 3505 // don't send all the responses to all the watches again... just to self one 3506 if (err) { 3507 callback(err); 3508 } 3509 3510 if(utils.isArray(messages)) { 3511 messages.forEach(function (message) { 3512 callback(null, message); 3513 }); 3514 } 3515 }); 3516 } 3517 }; 3518 3519 /** 3520 Adds the callback and sets up the methods, to iterate over the results. 3521 3522 @method pollFilter 3523 @param {Object} self 3524 */ 3525 var pollFilter = function(self) { 3526 3527 var onMessage = function (error, messages) { 3528 if (error) { 3529 return self.callbacks.forEach(function (callback) { 3530 callback(error); 3531 }); 3532 } 3533 3534 if(utils.isArray(messages)) { 3535 messages.forEach(function (message) { 3536 message = self.formatter ? self.formatter(message) : message; 3537 self.callbacks.forEach(function (callback) { 3538 callback(null, message); 3539 }); 3540 }); 3541 } 3542 }; 3543 3544 self.requestManager.startPolling({ 3545 method: self.implementation.poll.call, 3546 params: [self.filterId], 3547 }, self.filterId, onMessage, self.stopWatching.bind(self)); 3548 3549 }; 3550 3551 var Filter = function (options, type, requestManager, methods, formatter, callback, filterCreationErrorCallback) { 3552 var self = this; 3553 var implementation = {}; 3554 methods.forEach(function (method) { 3555 method.setRequestManager(requestManager); 3556 method.attachToObject(implementation); 3557 }); 3558 this.requestManager = requestManager; 3559 this.options = getOptions(options, type); 3560 this.implementation = implementation; 3561 this.filterId = null; 3562 this.callbacks = []; 3563 this.getLogsCallbacks = []; 3564 this.pollFilters = []; 3565 this.formatter = formatter; 3566 this.implementation.newFilter(this.options, function(error, id){ 3567 if(error) { 3568 self.callbacks.forEach(function(cb){ 3569 cb(error); 3570 }); 3571 if (typeof filterCreationErrorCallback === 'function') { 3572 filterCreationErrorCallback(error); 3573 } 3574 } else { 3575 self.filterId = id; 3576 3577 // check if there are get pending callbacks as a consequence 3578 // of calling get() with filterId unassigned. 3579 self.getLogsCallbacks.forEach(function (cb){ 3580 self.get(cb); 3581 }); 3582 self.getLogsCallbacks = []; 3583 3584 // get filter logs for the already existing watch calls 3585 self.callbacks.forEach(function(cb){ 3586 getLogsAtStart(self, cb); 3587 }); 3588 if(self.callbacks.length > 0) 3589 pollFilter(self); 3590 3591 // start to watch immediately 3592 if(typeof callback === 'function') { 3593 return self.watch(callback); 3594 } 3595 } 3596 }); 3597 3598 return this; 3599 }; 3600 3601 Filter.prototype.watch = function (callback) { 3602 this.callbacks.push(callback); 3603 3604 if(this.filterId) { 3605 getLogsAtStart(this, callback); 3606 pollFilter(this); 3607 } 3608 3609 return this; 3610 }; 3611 3612 Filter.prototype.stopWatching = function (callback) { 3613 this.requestManager.stopPolling(this.filterId); 3614 this.callbacks = []; 3615 // remove filter async 3616 if (callback) { 3617 this.implementation.uninstallFilter(this.filterId, callback); 3618 } else { 3619 return this.implementation.uninstallFilter(this.filterId); 3620 } 3621 }; 3622 3623 Filter.prototype.get = function (callback) { 3624 var self = this; 3625 if (utils.isFunction(callback)) { 3626 if (this.filterId === null) { 3627 // If filterId is not set yet, call it back 3628 // when newFilter() assigns it. 3629 this.getLogsCallbacks.push(callback); 3630 } else { 3631 this.implementation.getLogs(this.filterId, function(err, res){ 3632 if (err) { 3633 callback(err); 3634 } else { 3635 callback(null, res.map(function (log) { 3636 return self.formatter ? self.formatter(log) : log; 3637 })); 3638 } 3639 }); 3640 } 3641 } else { 3642 if (this.filterId === null) { 3643 throw new Error('Filter ID Error: filter().get() can\'t be chained synchronous, please provide a callback for the get() method.'); 3644 } 3645 var logs = this.implementation.getLogs(this.filterId); 3646 return logs.map(function (log) { 3647 return self.formatter ? self.formatter(log) : log; 3648 }); 3649 } 3650 3651 return this; 3652 }; 3653 3654 module.exports = Filter; 3655 3656 3657 },{"../utils/utils":20,"./formatters":30}],30:[function(require,module,exports){ 3658 'use strict' 3659 3660 /* 3661 This file is part of web3.js. 3662 3663 web3.js is free software: you can redistribute it and/or modify 3664 it under the terms of the GNU Lesser General Public License as published by 3665 the Free Software Foundation, either version 3 of the License, or 3666 (at your option) any later version. 3667 3668 web3.js is distributed in the hope that it will be useful, 3669 but WITHOUT ANY WARRANTY; without even the implied warranty of 3670 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3671 GNU Lesser General Public License for more details. 3672 3673 You should have received a copy of the GNU Lesser General Public License 3674 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 3675 */ 3676 /** 3677 * @file formatters.js 3678 * @author Marek Kotewicz <marek@ethdev.com> 3679 * @author Fabian Vogelsteller <fabian@ethdev.com> 3680 * @date 2015 3681 */ 3682 3683 var utils = require('../utils/utils'); 3684 var config = require('../utils/config'); 3685 var Iban = require('./iban'); 3686 3687 /** 3688 * Should the format output to a big number 3689 * 3690 * @method outputBigNumberFormatter 3691 * @param {String|Number|BigNumber} 3692 * @returns {BigNumber} object 3693 */ 3694 var outputBigNumberFormatter = function (number) { 3695 return utils.toBigNumber(number); 3696 }; 3697 3698 var isPredefinedBlockNumber = function (blockNumber) { 3699 return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; 3700 }; 3701 3702 var inputDefaultBlockNumberFormatter = function (blockNumber) { 3703 if (blockNumber === undefined) { 3704 return config.defaultBlock; 3705 } 3706 return inputBlockNumberFormatter(blockNumber); 3707 }; 3708 3709 var inputBlockNumberFormatter = function (blockNumber) { 3710 if (blockNumber === undefined) { 3711 return undefined; 3712 } else if (isPredefinedBlockNumber(blockNumber)) { 3713 return blockNumber; 3714 } 3715 return utils.toHex(blockNumber); 3716 }; 3717 3718 /** 3719 * Formats the input of a transaction and converts all values to HEX 3720 * 3721 * @method inputCallFormatter 3722 * @param {Object} transaction options 3723 * @returns object 3724 */ 3725 var inputCallFormatter = function (options){ 3726 3727 options.from = options.from || config.defaultAccount; 3728 3729 if (options.from) { 3730 options.from = inputAddressFormatter(options.from); 3731 } 3732 3733 if (options.to) { // it might be contract creation 3734 options.to = inputAddressFormatter(options.to); 3735 } 3736 3737 ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { 3738 return options[key] !== undefined; 3739 }).forEach(function(key){ 3740 options[key] = utils.fromDecimal(options[key]); 3741 }); 3742 3743 return options; 3744 }; 3745 3746 /** 3747 * Formats the input of a transaction and converts all values to HEX 3748 * 3749 * @method inputTransactionFormatter 3750 * @param {Object} transaction options 3751 * @returns object 3752 */ 3753 var inputTransactionFormatter = function (options){ 3754 3755 options.from = options.from || config.defaultAccount; 3756 options.from = inputAddressFormatter(options.from); 3757 3758 if (options.to) { // it might be contract creation 3759 options.to = inputAddressFormatter(options.to); 3760 } 3761 3762 ['maxFeePerGas', 'maxPriorityFeePerGas', 'gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { 3763 return options[key] !== undefined; 3764 }).forEach(function(key){ 3765 options[key] = utils.fromDecimal(options[key]); 3766 }); 3767 3768 return options; 3769 }; 3770 3771 /** 3772 * Formats the output of a transaction to its proper values 3773 * 3774 * @method outputTransactionFormatter 3775 * @param {Object} tx 3776 * @returns {Object} 3777 */ 3778 var outputTransactionFormatter = function (tx){ 3779 if(tx.blockNumber !== null) 3780 tx.blockNumber = utils.toDecimal(tx.blockNumber); 3781 if(tx.transactionIndex !== null) 3782 tx.transactionIndex = utils.toDecimal(tx.transactionIndex); 3783 tx.nonce = utils.toDecimal(tx.nonce); 3784 tx.gas = utils.toDecimal(tx.gas); 3785 tx.gasPrice = utils.toBigNumber(tx.gasPrice); 3786 if(tx.maxFeePerGas !== undefined) { 3787 tx.maxFeePerGas = utils.toBigNumber(tx.maxFeePerGas); 3788 } 3789 if(tx.maxPriorityFeePerGas !== undefined) { 3790 tx.maxPriorityFeePerGas = utils.toBigNumber(tx.maxPriorityFeePerGas); 3791 } 3792 tx.value = utils.toBigNumber(tx.value); 3793 return tx; 3794 }; 3795 3796 /** 3797 * Formats the output of a transaction receipt to its proper values 3798 * 3799 * @method outputTransactionReceiptFormatter 3800 * @param {Object} receipt 3801 * @returns {Object} 3802 */ 3803 var outputTransactionReceiptFormatter = function (receipt){ 3804 if(receipt.blockNumber !== null) 3805 receipt.blockNumber = utils.toDecimal(receipt.blockNumber); 3806 if(receipt.transactionIndex !== null) 3807 receipt.transactionIndex = utils.toDecimal(receipt.transactionIndex); 3808 receipt.cumulativeGasUsed = utils.toDecimal(receipt.cumulativeGasUsed); 3809 receipt.gasUsed = utils.toDecimal(receipt.gasUsed); 3810 if(receipt.effectiveGasPrice !== undefined) { 3811 receipt.effectiveGasPrice = utils.toBigNumber(receipt.effectiveGasPrice); 3812 } 3813 if(utils.isArray(receipt.logs)) { 3814 receipt.logs = receipt.logs.map(function(log){ 3815 return outputLogFormatter(log); 3816 }); 3817 } 3818 3819 return receipt; 3820 }; 3821 3822 /** 3823 * Formats the output of a block to its proper values 3824 * 3825 * @method outputBlockFormatter 3826 * @param {Object} block 3827 * @returns {Object} 3828 */ 3829 var outputBlockFormatter = function(block) { 3830 // transform to number 3831 if (block.baseFeePerGas !== undefined) { 3832 block.baseFeePerGas = utils.toBigNumber(block.baseFeePerGas); 3833 } 3834 block.gasLimit = utils.toDecimal(block.gasLimit); 3835 block.gasUsed = utils.toDecimal(block.gasUsed); 3836 block.size = utils.toDecimal(block.size); 3837 block.timestamp = utils.toDecimal(block.timestamp); 3838 if(block.number !== null) 3839 block.number = utils.toDecimal(block.number); 3840 3841 block.difficulty = utils.toBigNumber(block.difficulty); 3842 block.totalDifficulty = utils.toBigNumber(block.totalDifficulty); 3843 3844 if (utils.isArray(block.transactions)) { 3845 block.transactions.forEach(function(item){ 3846 if(!utils.isString(item)) 3847 return outputTransactionFormatter(item); 3848 }); 3849 } 3850 3851 return block; 3852 }; 3853 3854 /** 3855 * Formats the output of a log 3856 * 3857 * @method outputLogFormatter 3858 * @param {Object} log object 3859 * @returns {Object} log 3860 */ 3861 var outputLogFormatter = function(log) { 3862 if(log.blockNumber) 3863 log.blockNumber = utils.toDecimal(log.blockNumber); 3864 if(log.transactionIndex) 3865 log.transactionIndex = utils.toDecimal(log.transactionIndex); 3866 if(log.logIndex) 3867 log.logIndex = utils.toDecimal(log.logIndex); 3868 3869 return log; 3870 }; 3871 3872 /** 3873 * Formats the input of a whisper post and converts all values to HEX 3874 * 3875 * @method inputPostFormatter 3876 * @param {Object} transaction object 3877 * @returns {Object} 3878 */ 3879 var inputPostFormatter = function(post) { 3880 3881 // post.payload = utils.toHex(post.payload); 3882 post.ttl = utils.fromDecimal(post.ttl); 3883 post.workToProve = utils.fromDecimal(post.workToProve); 3884 post.priority = utils.fromDecimal(post.priority); 3885 3886 // fallback 3887 if (!utils.isArray(post.topics)) { 3888 post.topics = post.topics ? [post.topics] : []; 3889 } 3890 3891 // format the following options 3892 post.topics = post.topics.map(function(topic){ 3893 // convert only if not hex 3894 return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); 3895 }); 3896 3897 return post; 3898 }; 3899 3900 /** 3901 * Formats the output of a received post message 3902 * 3903 * @method outputPostFormatter 3904 * @param {Object} 3905 * @returns {Object} 3906 */ 3907 var outputPostFormatter = function(post){ 3908 3909 post.expiry = utils.toDecimal(post.expiry); 3910 post.sent = utils.toDecimal(post.sent); 3911 post.ttl = utils.toDecimal(post.ttl); 3912 post.workProved = utils.toDecimal(post.workProved); 3913 // post.payloadRaw = post.payload; 3914 // post.payload = utils.toAscii(post.payload); 3915 3916 // if (utils.isJson(post.payload)) { 3917 // post.payload = JSON.parse(post.payload); 3918 // } 3919 3920 // format the following options 3921 if (!post.topics) { 3922 post.topics = []; 3923 } 3924 post.topics = post.topics.map(function(topic){ 3925 return utils.toAscii(topic); 3926 }); 3927 3928 return post; 3929 }; 3930 3931 var inputAddressFormatter = function (address) { 3932 var iban = new Iban(address); 3933 if (iban.isValid() && iban.isDirect()) { 3934 return '0x' + iban.address(); 3935 } else if (utils.isStrictAddress(address)) { 3936 return address; 3937 } else if (utils.isAddress(address)) { 3938 return '0x' + address; 3939 } 3940 throw new Error('invalid address'); 3941 }; 3942 3943 3944 var outputSyncingFormatter = function(result) { 3945 if (!result) { 3946 return result; 3947 } 3948 3949 result.startingBlock = utils.toDecimal(result.startingBlock); 3950 result.currentBlock = utils.toDecimal(result.currentBlock); 3951 result.highestBlock = utils.toDecimal(result.highestBlock); 3952 if (result.knownStates) { 3953 result.knownStates = utils.toDecimal(result.knownStates); 3954 result.pulledStates = utils.toDecimal(result.pulledStates); 3955 } 3956 3957 return result; 3958 }; 3959 3960 module.exports = { 3961 inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, 3962 inputBlockNumberFormatter: inputBlockNumberFormatter, 3963 inputCallFormatter: inputCallFormatter, 3964 inputTransactionFormatter: inputTransactionFormatter, 3965 inputAddressFormatter: inputAddressFormatter, 3966 inputPostFormatter: inputPostFormatter, 3967 outputBigNumberFormatter: outputBigNumberFormatter, 3968 outputTransactionFormatter: outputTransactionFormatter, 3969 outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, 3970 outputBlockFormatter: outputBlockFormatter, 3971 outputLogFormatter: outputLogFormatter, 3972 outputPostFormatter: outputPostFormatter, 3973 outputSyncingFormatter: outputSyncingFormatter 3974 }; 3975 3976 3977 },{"../utils/config":18,"../utils/utils":20,"./iban":33}],31:[function(require,module,exports){ 3978 /* 3979 This file is part of web3.js. 3980 3981 web3.js is free software: you can redistribute it and/or modify 3982 it under the terms of the GNU Lesser General Public License as published by 3983 the Free Software Foundation, either version 3 of the License, or 3984 (at your option) any later version. 3985 3986 web3.js is distributed in the hope that it will be useful, 3987 but WITHOUT ANY WARRANTY; without even the implied warranty of 3988 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3989 GNU Lesser General Public License for more details. 3990 3991 You should have received a copy of the GNU Lesser General Public License 3992 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 3993 */ 3994 /** 3995 * @file function.js 3996 * @author Marek Kotewicz <marek@ethdev.com> 3997 * @date 2015 3998 */ 3999 4000 var coder = require('../solidity/coder'); 4001 var utils = require('../utils/utils'); 4002 var errors = require('./errors'); 4003 var formatters = require('./formatters'); 4004 var sha3 = require('../utils/sha3'); 4005 4006 /** 4007 * This prototype should be used to call/sendTransaction to solidity functions 4008 */ 4009 var SolidityFunction = function (eth, json, address) { 4010 this._eth = eth; 4011 this._inputTypes = json.inputs.map(function (i) { 4012 return i.type; 4013 }); 4014 this._outputTypes = json.outputs.map(function (i) { 4015 return i.type; 4016 }); 4017 this._constant = json.constant; 4018 this._payable = json.payable; 4019 this._name = utils.transformToFullName(json); 4020 this._address = address; 4021 }; 4022 4023 SolidityFunction.prototype.extractCallback = function (args) { 4024 if (utils.isFunction(args[args.length - 1])) { 4025 return args.pop(); // modify the args array! 4026 } 4027 }; 4028 4029 SolidityFunction.prototype.extractDefaultBlock = function (args) { 4030 if (args.length > this._inputTypes.length && !utils.isObject(args[args.length -1])) { 4031 return formatters.inputDefaultBlockNumberFormatter(args.pop()); // modify the args array! 4032 } 4033 }; 4034 4035 /** 4036 * Should be called to check if the number of arguments is correct 4037 * 4038 * @method validateArgs 4039 * @param {Array} arguments 4040 * @throws {Error} if it is not 4041 */ 4042 SolidityFunction.prototype.validateArgs = function (args) { 4043 var inputArgs = args.filter(function (a) { 4044 // filter the options object but not arguments that are arrays 4045 return !( (utils.isObject(a) === true) && 4046 (utils.isArray(a) === false) && 4047 (utils.isBigNumber(a) === false) 4048 ); 4049 }); 4050 if (inputArgs.length !== this._inputTypes.length) { 4051 throw errors.InvalidNumberOfSolidityArgs(); 4052 } 4053 }; 4054 4055 /** 4056 * Should be used to create payload from arguments 4057 * 4058 * @method toPayload 4059 * @param {Array} solidity function params 4060 * @param {Object} optional payload options 4061 */ 4062 SolidityFunction.prototype.toPayload = function (args) { 4063 var options = {}; 4064 if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) { 4065 options = args[args.length - 1]; 4066 } 4067 this.validateArgs(args); 4068 options.to = this._address; 4069 options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args); 4070 return options; 4071 }; 4072 4073 /** 4074 * Should be used to get function signature 4075 * 4076 * @method signature 4077 * @return {String} function signature 4078 */ 4079 SolidityFunction.prototype.signature = function () { 4080 return sha3(this._name).slice(0, 8); 4081 }; 4082 4083 4084 SolidityFunction.prototype.unpackOutput = function (output) { 4085 if (!output) { 4086 return; 4087 } 4088 4089 output = output.length >= 2 ? output.slice(2) : output; 4090 var result = coder.decodeParams(this._outputTypes, output); 4091 return result.length === 1 ? result[0] : result; 4092 }; 4093 4094 /** 4095 * Calls a contract function. 4096 * 4097 * @method call 4098 * @param {...Object} Contract function arguments 4099 * @param {function} If the last argument is a function, the contract function 4100 * call will be asynchronous, and the callback will be passed the 4101 * error and result. 4102 * @return {String} output bytes 4103 */ 4104 SolidityFunction.prototype.call = function () { 4105 var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); 4106 var callback = this.extractCallback(args); 4107 var defaultBlock = this.extractDefaultBlock(args); 4108 var payload = this.toPayload(args); 4109 4110 4111 if (!callback) { 4112 var output = this._eth.call(payload, defaultBlock); 4113 return this.unpackOutput(output); 4114 } 4115 4116 var self = this; 4117 this._eth.call(payload, defaultBlock, function (error, output) { 4118 if (error) return callback(error, null); 4119 4120 var unpacked = null; 4121 try { 4122 unpacked = self.unpackOutput(output); 4123 } 4124 catch (e) { 4125 error = e; 4126 } 4127 4128 callback(error, unpacked); 4129 }); 4130 }; 4131 4132 /** 4133 * Should be used to sendTransaction to solidity function 4134 * 4135 * @method sendTransaction 4136 */ 4137 SolidityFunction.prototype.sendTransaction = function () { 4138 var args = Array.prototype.slice.call(arguments).filter(function (a) {return a !== undefined; }); 4139 var callback = this.extractCallback(args); 4140 var payload = this.toPayload(args); 4141 4142 if (payload.value > 0 && !this._payable) { 4143 throw new Error('Cannot send value to non-payable function'); 4144 } 4145 4146 if (!callback) { 4147 return this._eth.sendTransaction(payload); 4148 } 4149 4150 this._eth.sendTransaction(payload, callback); 4151 }; 4152 4153 /** 4154 * Should be used to estimateGas of solidity function 4155 * 4156 * @method estimateGas 4157 */ 4158 SolidityFunction.prototype.estimateGas = function () { 4159 var args = Array.prototype.slice.call(arguments); 4160 var callback = this.extractCallback(args); 4161 var payload = this.toPayload(args); 4162 4163 if (!callback) { 4164 return this._eth.estimateGas(payload); 4165 } 4166 4167 this._eth.estimateGas(payload, callback); 4168 }; 4169 4170 /** 4171 * Return the encoded data of the call 4172 * 4173 * @method getData 4174 * @return {String} the encoded data 4175 */ 4176 SolidityFunction.prototype.getData = function () { 4177 var args = Array.prototype.slice.call(arguments); 4178 var payload = this.toPayload(args); 4179 4180 return payload.data; 4181 }; 4182 4183 /** 4184 * Should be used to get function display name 4185 * 4186 * @method displayName 4187 * @return {String} display name of the function 4188 */ 4189 SolidityFunction.prototype.displayName = function () { 4190 return utils.extractDisplayName(this._name); 4191 }; 4192 4193 /** 4194 * Should be used to get function type name 4195 * 4196 * @method typeName 4197 * @return {String} type name of the function 4198 */ 4199 SolidityFunction.prototype.typeName = function () { 4200 return utils.extractTypeName(this._name); 4201 }; 4202 4203 /** 4204 * Should be called to get rpc requests from solidity function 4205 * 4206 * @method request 4207 * @returns {Object} 4208 */ 4209 SolidityFunction.prototype.request = function () { 4210 var args = Array.prototype.slice.call(arguments); 4211 var callback = this.extractCallback(args); 4212 var payload = this.toPayload(args); 4213 var format = this.unpackOutput.bind(this); 4214 4215 return { 4216 method: this._constant ? 'eth_call' : 'eth_sendTransaction', 4217 callback: callback, 4218 params: [payload], 4219 format: format 4220 }; 4221 }; 4222 4223 /** 4224 * Should be called to execute function 4225 * 4226 * @method execute 4227 */ 4228 SolidityFunction.prototype.execute = function () { 4229 var transaction = !this._constant; 4230 4231 // send transaction 4232 if (transaction) { 4233 return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments)); 4234 } 4235 4236 // call 4237 return this.call.apply(this, Array.prototype.slice.call(arguments)); 4238 }; 4239 4240 /** 4241 * Should be called to attach function to contract 4242 * 4243 * @method attachToContract 4244 * @param {Contract} 4245 */ 4246 SolidityFunction.prototype.attachToContract = function (contract) { 4247 var execute = this.execute.bind(this); 4248 execute.request = this.request.bind(this); 4249 execute.call = this.call.bind(this); 4250 execute.sendTransaction = this.sendTransaction.bind(this); 4251 execute.estimateGas = this.estimateGas.bind(this); 4252 execute.getData = this.getData.bind(this); 4253 var displayName = this.displayName(); 4254 if (!contract[displayName]) { 4255 contract[displayName] = execute; 4256 } 4257 contract[displayName][this.typeName()] = execute; // circular!!!! 4258 }; 4259 4260 module.exports = SolidityFunction; 4261 4262 },{"../solidity/coder":7,"../utils/sha3":19,"../utils/utils":20,"./errors":26,"./formatters":30}],32:[function(require,module,exports){ 4263 /* 4264 This file is part of web3.js. 4265 4266 web3.js is free software: you can redistribute it and/or modify 4267 it under the terms of the GNU Lesser General Public License as published by 4268 the Free Software Foundation, either version 3 of the License, or 4269 (at your option) any later version. 4270 4271 web3.js is distributed in the hope that it will be useful, 4272 but WITHOUT ANY WARRANTY; without even the implied warranty of 4273 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 4274 GNU Lesser General Public License for more details. 4275 4276 You should have received a copy of the GNU Lesser General Public License 4277 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 4278 */ 4279 /** @file httpprovider.js 4280 * @authors: 4281 * Marek Kotewicz <marek@ethdev.com> 4282 * Marian Oancea <marian@ethdev.com> 4283 * Fabian Vogelsteller <fabian@ethdev.com> 4284 * @date 2015 4285 */ 4286 4287 var errors = require('./errors'); 4288 4289 // workaround to use httpprovider in different envs 4290 4291 // browser 4292 if (typeof window !== 'undefined' && window.XMLHttpRequest) { 4293 XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line 4294 // node 4295 } else { 4296 XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line 4297 } 4298 4299 var XHR2 = require('xhr2'); // jshint ignore: line 4300 4301 /** 4302 * HttpProvider should be used to send rpc calls over http 4303 */ 4304 var HttpProvider = function (host, timeout, user, password) { 4305 this.host = host || 'http://localhost:8545'; 4306 this.timeout = timeout || 0; 4307 this.user = user; 4308 this.password = password; 4309 }; 4310 4311 /** 4312 * Should be called to prepare new XMLHttpRequest 4313 * 4314 * @method prepareRequest 4315 * @param {Boolean} true if request should be async 4316 * @return {XMLHttpRequest} object 4317 */ 4318 HttpProvider.prototype.prepareRequest = function (async) { 4319 var request; 4320 4321 if (async) { 4322 request = new XHR2(); 4323 request.timeout = this.timeout; 4324 } else { 4325 request = new XMLHttpRequest(); 4326 } 4327 4328 request.open('POST', this.host, async); 4329 if (this.user && this.password) { 4330 var auth = 'Basic ' + new Buffer(this.user + ':' + this.password).toString('base64'); 4331 request.setRequestHeader('Authorization', auth); 4332 } request.setRequestHeader('Content-Type', 'application/json'); 4333 return request; 4334 }; 4335 4336 /** 4337 * Should be called to make sync request 4338 * 4339 * @method send 4340 * @param {Object} payload 4341 * @return {Object} result 4342 */ 4343 HttpProvider.prototype.send = function (payload) { 4344 var request = this.prepareRequest(false); 4345 4346 try { 4347 request.send(JSON.stringify(payload)); 4348 } catch (error) { 4349 throw errors.InvalidConnection(this.host); 4350 } 4351 4352 var result = request.responseText; 4353 4354 try { 4355 result = JSON.parse(result); 4356 } catch (e) { 4357 throw errors.InvalidResponse(request.responseText); 4358 } 4359 4360 return result; 4361 }; 4362 4363 /** 4364 * Should be used to make async request 4365 * 4366 * @method sendAsync 4367 * @param {Object} payload 4368 * @param {Function} callback triggered on end with (err, result) 4369 */ 4370 HttpProvider.prototype.sendAsync = function (payload, callback) { 4371 var request = this.prepareRequest(true); 4372 4373 request.onreadystatechange = function () { 4374 if (request.readyState === 4 && request.timeout !== 1) { 4375 var result = request.responseText; 4376 var error = null; 4377 4378 try { 4379 result = JSON.parse(result); 4380 } catch (e) { 4381 error = errors.InvalidResponse(request.responseText); 4382 } 4383 4384 callback(error, result); 4385 } 4386 }; 4387 4388 request.ontimeout = function () { 4389 callback(errors.ConnectionTimeout(this.timeout)); 4390 }; 4391 4392 try { 4393 request.send(JSON.stringify(payload)); 4394 } catch (error) { 4395 callback(errors.InvalidConnection(this.host)); 4396 } 4397 }; 4398 4399 /** 4400 * Synchronously tries to make Http request 4401 * 4402 * @method isConnected 4403 * @return {Boolean} returns true if request haven't failed. Otherwise false 4404 */ 4405 HttpProvider.prototype.isConnected = function () { 4406 try { 4407 this.send({ 4408 id: 9999999999, 4409 jsonrpc: '2.0', 4410 method: 'net_listening', 4411 params: [] 4412 }); 4413 return true; 4414 } catch (e) { 4415 return false; 4416 } 4417 }; 4418 4419 module.exports = HttpProvider; 4420 4421 },{"./errors":26,"xhr2":86,"xmlhttprequest":17}],33:[function(require,module,exports){ 4422 /* 4423 This file is part of web3.js. 4424 4425 web3.js is free software: you can redistribute it and/or modify 4426 it under the terms of the GNU Lesser General Public License as published by 4427 the Free Software Foundation, either version 3 of the License, or 4428 (at your option) any later version. 4429 4430 web3.js is distributed in the hope that it will be useful, 4431 but WITHOUT ANY WARRANTY; without even the implied warranty of 4432 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 4433 GNU Lesser General Public License for more details. 4434 4435 You should have received a copy of the GNU Lesser General Public License 4436 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 4437 */ 4438 /** 4439 * @file iban.js 4440 * @author Marek Kotewicz <marek@ethdev.com> 4441 * @date 2015 4442 */ 4443 4444 var BigNumber = require('bignumber.js'); 4445 4446 var padLeft = function (string, bytes) { 4447 var result = string; 4448 while (result.length < bytes * 2) { 4449 result = '0' + result; 4450 } 4451 return result; 4452 }; 4453 4454 /** 4455 * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to 4456 * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. 4457 * 4458 * @method iso13616Prepare 4459 * @param {String} iban the IBAN 4460 * @returns {String} the prepared IBAN 4461 */ 4462 var iso13616Prepare = function (iban) { 4463 var A = 'A'.charCodeAt(0); 4464 var Z = 'Z'.charCodeAt(0); 4465 4466 iban = iban.toUpperCase(); 4467 iban = iban.substr(4) + iban.substr(0,4); 4468 4469 return iban.split('').map(function(n){ 4470 var code = n.charCodeAt(0); 4471 if (code >= A && code <= Z){ 4472 // A = 10, B = 11, ... Z = 35 4473 return code - A + 10; 4474 } else { 4475 return n; 4476 } 4477 }).join(''); 4478 }; 4479 4480 /** 4481 * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. 4482 * 4483 * @method mod9710 4484 * @param {String} iban 4485 * @returns {Number} 4486 */ 4487 var mod9710 = function (iban) { 4488 var remainder = iban, 4489 block; 4490 4491 while (remainder.length > 2){ 4492 block = remainder.slice(0, 9); 4493 remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); 4494 } 4495 4496 return parseInt(remainder, 10) % 97; 4497 }; 4498 4499 /** 4500 * This prototype should be used to create iban object from iban correct string 4501 * 4502 * @param {String} iban 4503 */ 4504 var Iban = function (iban) { 4505 this._iban = iban; 4506 }; 4507 4508 /** 4509 * This method should be used to create iban object from ethereum address 4510 * 4511 * @method fromAddress 4512 * @param {String} address 4513 * @return {Iban} the IBAN object 4514 */ 4515 Iban.fromAddress = function (address) { 4516 var asBn = new BigNumber(address, 16); 4517 var base36 = asBn.toString(36); 4518 var padded = padLeft(base36, 15); 4519 return Iban.fromBban(padded.toUpperCase()); 4520 }; 4521 4522 /** 4523 * Convert the passed BBAN to an IBAN for this country specification. 4524 * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>. 4525 * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits 4526 * 4527 * @method fromBban 4528 * @param {String} bban the BBAN to convert to IBAN 4529 * @returns {Iban} the IBAN object 4530 */ 4531 Iban.fromBban = function (bban) { 4532 var countryCode = 'XE'; 4533 4534 var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); 4535 var checkDigit = ('0' + (98 - remainder)).slice(-2); 4536 4537 return new Iban(countryCode + checkDigit + bban); 4538 }; 4539 4540 /** 4541 * Should be used to create IBAN object for given institution and identifier 4542 * 4543 * @method createIndirect 4544 * @param {Object} options, required options are "institution" and "identifier" 4545 * @return {Iban} the IBAN object 4546 */ 4547 Iban.createIndirect = function (options) { 4548 return Iban.fromBban('ETH' + options.institution + options.identifier); 4549 }; 4550 4551 /** 4552 * Thos method should be used to check if given string is valid iban object 4553 * 4554 * @method isValid 4555 * @param {String} iban string 4556 * @return {Boolean} true if it is valid IBAN 4557 */ 4558 Iban.isValid = function (iban) { 4559 var i = new Iban(iban); 4560 return i.isValid(); 4561 }; 4562 4563 /** 4564 * Should be called to check if iban is correct 4565 * 4566 * @method isValid 4567 * @returns {Boolean} true if it is, otherwise false 4568 */ 4569 Iban.prototype.isValid = function () { 4570 return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && 4571 mod9710(iso13616Prepare(this._iban)) === 1; 4572 }; 4573 4574 /** 4575 * Should be called to check if iban number is direct 4576 * 4577 * @method isDirect 4578 * @returns {Boolean} true if it is, otherwise false 4579 */ 4580 Iban.prototype.isDirect = function () { 4581 return this._iban.length === 34 || this._iban.length === 35; 4582 }; 4583 4584 /** 4585 * Should be called to check if iban number if indirect 4586 * 4587 * @method isIndirect 4588 * @returns {Boolean} true if it is, otherwise false 4589 */ 4590 Iban.prototype.isIndirect = function () { 4591 return this._iban.length === 20; 4592 }; 4593 4594 /** 4595 * Should be called to get iban checksum 4596 * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) 4597 * 4598 * @method checksum 4599 * @returns {String} checksum 4600 */ 4601 Iban.prototype.checksum = function () { 4602 return this._iban.substr(2, 2); 4603 }; 4604 4605 /** 4606 * Should be called to get institution identifier 4607 * eg. XREG 4608 * 4609 * @method institution 4610 * @returns {String} institution identifier 4611 */ 4612 Iban.prototype.institution = function () { 4613 return this.isIndirect() ? this._iban.substr(7, 4) : ''; 4614 }; 4615 4616 /** 4617 * Should be called to get client identifier within institution 4618 * eg. GAVOFYORK 4619 * 4620 * @method client 4621 * @returns {String} client identifier 4622 */ 4623 Iban.prototype.client = function () { 4624 return this.isIndirect() ? this._iban.substr(11) : ''; 4625 }; 4626 4627 /** 4628 * Should be called to get client direct address 4629 * 4630 * @method address 4631 * @returns {String} client direct address 4632 */ 4633 Iban.prototype.address = function () { 4634 if (this.isDirect()) { 4635 var base36 = this._iban.substr(4); 4636 var asBn = new BigNumber(base36, 36); 4637 return padLeft(asBn.toString(16), 20); 4638 } 4639 4640 return ''; 4641 }; 4642 4643 Iban.prototype.toString = function () { 4644 return this._iban; 4645 }; 4646 4647 module.exports = Iban; 4648 4649 4650 },{"bignumber.js":"bignumber.js"}],34:[function(require,module,exports){ 4651 /* 4652 This file is part of web3.js. 4653 4654 web3.js is free software: you can redistribute it and/or modify 4655 it under the terms of the GNU Lesser General Public License as published by 4656 the Free Software Foundation, either version 3 of the License, or 4657 (at your option) any later version. 4658 4659 web3.js is distributed in the hope that it will be useful, 4660 but WITHOUT ANY WARRANTY; without even the implied warranty of 4661 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 4662 GNU Lesser General Public License for more details. 4663 4664 You should have received a copy of the GNU Lesser General Public License 4665 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 4666 */ 4667 /** @file ipcprovider.js 4668 * @authors: 4669 * Fabian Vogelsteller <fabian@ethdev.com> 4670 * @date 2015 4671 */ 4672 4673 "use strict"; 4674 4675 var utils = require('../utils/utils'); 4676 var errors = require('./errors'); 4677 4678 4679 var IpcProvider = function (path, net) { 4680 var _this = this; 4681 this.responseCallbacks = {}; 4682 this.path = path; 4683 4684 this.connection = net.connect({path: this.path}); 4685 4686 this.connection.on('error', function(e){ 4687 console.error('IPC Connection Error', e); 4688 _this._timeout(); 4689 }); 4690 4691 this.connection.on('end', function(){ 4692 _this._timeout(); 4693 }); 4694 4695 4696 // LISTEN FOR CONNECTION RESPONSES 4697 this.connection.on('data', function(data) { 4698 /*jshint maxcomplexity: 6 */ 4699 4700 _this._parseResponse(data.toString()).forEach(function(result){ 4701 4702 var id = null; 4703 4704 // get the id which matches the returned id 4705 if(utils.isArray(result)) { 4706 result.forEach(function(load){ 4707 if(_this.responseCallbacks[load.id]) 4708 id = load.id; 4709 }); 4710 } else { 4711 id = result.id; 4712 } 4713 4714 // fire the callback 4715 if(_this.responseCallbacks[id]) { 4716 _this.responseCallbacks[id](null, result); 4717 delete _this.responseCallbacks[id]; 4718 } 4719 }); 4720 }); 4721 }; 4722 4723 /** 4724 Will parse the response and make an array out of it. 4725 4726 @method _parseResponse 4727 @param {String} data 4728 */ 4729 IpcProvider.prototype._parseResponse = function(data) { 4730 var _this = this, 4731 returnValues = []; 4732 4733 // DE-CHUNKER 4734 var dechunkedData = data 4735 .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ 4736 .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ 4737 .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ 4738 .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ 4739 .split('|--|'); 4740 4741 dechunkedData.forEach(function(data){ 4742 4743 // prepend the last chunk 4744 if(_this.lastChunk) 4745 data = _this.lastChunk + data; 4746 4747 var result = null; 4748 4749 try { 4750 result = JSON.parse(data); 4751 4752 } catch(e) { 4753 4754 _this.lastChunk = data; 4755 4756 // start timeout to cancel all requests 4757 clearTimeout(_this.lastChunkTimeout); 4758 _this.lastChunkTimeout = setTimeout(function(){ 4759 _this._timeout(); 4760 throw errors.InvalidResponse(data); 4761 }, 1000 * 15); 4762 4763 return; 4764 } 4765 4766 // cancel timeout and set chunk to null 4767 clearTimeout(_this.lastChunkTimeout); 4768 _this.lastChunk = null; 4769 4770 if(result) 4771 returnValues.push(result); 4772 }); 4773 4774 return returnValues; 4775 }; 4776 4777 4778 /** 4779 Get the adds a callback to the responseCallbacks object, 4780 which will be called if a response matching the response Id will arrive. 4781 4782 @method _addResponseCallback 4783 */ 4784 IpcProvider.prototype._addResponseCallback = function(payload, callback) { 4785 var id = payload.id || payload[0].id; 4786 var method = payload.method || payload[0].method; 4787 4788 this.responseCallbacks[id] = callback; 4789 this.responseCallbacks[id].method = method; 4790 }; 4791 4792 /** 4793 Timeout all requests when the end/error event is fired 4794 4795 @method _timeout 4796 */ 4797 IpcProvider.prototype._timeout = function() { 4798 for(var key in this.responseCallbacks) { 4799 if(this.responseCallbacks.hasOwnProperty(key)){ 4800 this.responseCallbacks[key](errors.InvalidConnection('on IPC')); 4801 delete this.responseCallbacks[key]; 4802 } 4803 } 4804 }; 4805 4806 4807 /** 4808 Check if the current connection is still valid. 4809 4810 @method isConnected 4811 */ 4812 IpcProvider.prototype.isConnected = function() { 4813 var _this = this; 4814 4815 // try reconnect, when connection is gone 4816 if(!_this.connection.writable) 4817 _this.connection.connect({path: _this.path}); 4818 4819 return !!this.connection.writable; 4820 }; 4821 4822 IpcProvider.prototype.send = function (payload) { 4823 4824 if(this.connection.writeSync) { 4825 var result; 4826 4827 // try reconnect, when connection is gone 4828 if(!this.connection.writable) 4829 this.connection.connect({path: this.path}); 4830 4831 var data = this.connection.writeSync(JSON.stringify(payload)); 4832 4833 try { 4834 result = JSON.parse(data); 4835 } catch(e) { 4836 throw errors.InvalidResponse(data); 4837 } 4838 4839 return result; 4840 4841 } else { 4842 throw new Error('You tried to send "'+ payload.method +'" synchronously. Synchronous requests are not supported by the IPC provider.'); 4843 } 4844 }; 4845 4846 IpcProvider.prototype.sendAsync = function (payload, callback) { 4847 // try reconnect, when connection is gone 4848 if(!this.connection.writable) 4849 this.connection.connect({path: this.path}); 4850 4851 4852 this.connection.write(JSON.stringify(payload)); 4853 this._addResponseCallback(payload, callback); 4854 }; 4855 4856 module.exports = IpcProvider; 4857 4858 4859 },{"../utils/utils":20,"./errors":26}],35:[function(require,module,exports){ 4860 /* 4861 This file is part of web3.js. 4862 4863 web3.js is free software: you can redistribute it and/or modify 4864 it under the terms of the GNU Lesser General Public License as published by 4865 the Free Software Foundation, either version 3 of the License, or 4866 (at your option) any later version. 4867 4868 web3.js is distributed in the hope that it will be useful, 4869 but WITHOUT ANY WARRANTY; without even the implied warranty of 4870 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 4871 GNU Lesser General Public License for more details. 4872 4873 You should have received a copy of the GNU Lesser General Public License 4874 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 4875 */ 4876 /** @file jsonrpc.js 4877 * @authors: 4878 * Marek Kotewicz <marek@ethdev.com> 4879 * Aaron Kumavis <aaron@kumavis.me> 4880 * @date 2015 4881 */ 4882 4883 // Initialize Jsonrpc as a simple object with utility functions. 4884 var Jsonrpc = { 4885 messageId: 0 4886 }; 4887 4888 /** 4889 * Should be called to valid json create payload object 4890 * 4891 * @method toPayload 4892 * @param {Function} method of jsonrpc call, required 4893 * @param {Array} params, an array of method params, optional 4894 * @returns {Object} valid jsonrpc payload object 4895 */ 4896 Jsonrpc.toPayload = function (method, params) { 4897 if (!method) 4898 console.error('jsonrpc method should be specified!'); 4899 4900 // advance message ID 4901 Jsonrpc.messageId++; 4902 4903 return { 4904 jsonrpc: '2.0', 4905 id: Jsonrpc.messageId, 4906 method: method, 4907 params: params || [] 4908 }; 4909 }; 4910 4911 /** 4912 * Should be called to check if jsonrpc response is valid 4913 * 4914 * @method isValidResponse 4915 * @param {Object} 4916 * @returns {Boolean} true if response is valid, otherwise false 4917 */ 4918 Jsonrpc.isValidResponse = function (response) { 4919 return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); 4920 4921 function validateSingleMessage(message){ 4922 return !!message && 4923 !message.error && 4924 message.jsonrpc === '2.0' && 4925 typeof message.id === 'number' && 4926 message.result !== undefined; // only undefined is not valid json object 4927 } 4928 }; 4929 4930 /** 4931 * Should be called to create batch payload object 4932 * 4933 * @method toBatchPayload 4934 * @param {Array} messages, an array of objects with method (required) and params (optional) fields 4935 * @returns {Array} batch payload 4936 */ 4937 Jsonrpc.toBatchPayload = function (messages) { 4938 return messages.map(function (message) { 4939 return Jsonrpc.toPayload(message.method, message.params); 4940 }); 4941 }; 4942 4943 module.exports = Jsonrpc; 4944 4945 4946 },{}],36:[function(require,module,exports){ 4947 /* 4948 This file is part of web3.js. 4949 4950 web3.js is free software: you can redistribute it and/or modify 4951 it under the terms of the GNU Lesser General Public License as published by 4952 the Free Software Foundation, either version 3 of the License, or 4953 (at your option) any later version. 4954 4955 web3.js is distributed in the hope that it will be useful, 4956 but WITHOUT ANY WARRANTY; without even the implied warranty of 4957 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 4958 GNU Lesser General Public License for more details. 4959 4960 You should have received a copy of the GNU Lesser General Public License 4961 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 4962 */ 4963 /** 4964 * @file method.js 4965 * @author Marek Kotewicz <marek@ethdev.com> 4966 * @date 2015 4967 */ 4968 4969 var utils = require('../utils/utils'); 4970 var errors = require('./errors'); 4971 4972 var Method = function (options) { 4973 this.name = options.name; 4974 this.call = options.call; 4975 this.params = options.params || 0; 4976 this.inputFormatter = options.inputFormatter; 4977 this.outputFormatter = options.outputFormatter; 4978 this.requestManager = null; 4979 }; 4980 4981 Method.prototype.setRequestManager = function (rm) { 4982 this.requestManager = rm; 4983 }; 4984 4985 /** 4986 * Should be used to determine name of the jsonrpc method based on arguments 4987 * 4988 * @method getCall 4989 * @param {Array} arguments 4990 * @return {String} name of jsonrpc method 4991 */ 4992 Method.prototype.getCall = function (args) { 4993 return utils.isFunction(this.call) ? this.call(args) : this.call; 4994 }; 4995 4996 /** 4997 * Should be used to extract callback from array of arguments. Modifies input param 4998 * 4999 * @method extractCallback 5000 * @param {Array} arguments 5001 * @return {Function|Null} callback, if exists 5002 */ 5003 Method.prototype.extractCallback = function (args) { 5004 if (utils.isFunction(args[args.length - 1])) { 5005 return args.pop(); // modify the args array! 5006 } 5007 }; 5008 5009 /** 5010 * Should be called to check if the number of arguments is correct 5011 * 5012 * @method validateArgs 5013 * @param {Array} arguments 5014 * @throws {Error} if it is not 5015 */ 5016 Method.prototype.validateArgs = function (args) { 5017 if (args.length !== this.params) { 5018 throw errors.InvalidNumberOfRPCParams(); 5019 } 5020 }; 5021 5022 /** 5023 * Should be called to format input args of method 5024 * 5025 * @method formatInput 5026 * @param {Array} 5027 * @return {Array} 5028 */ 5029 Method.prototype.formatInput = function (args) { 5030 if (!this.inputFormatter) { 5031 return args; 5032 } 5033 5034 return this.inputFormatter.map(function (formatter, index) { 5035 return formatter ? formatter(args[index]) : args[index]; 5036 }); 5037 }; 5038 5039 /** 5040 * Should be called to format output(result) of method 5041 * 5042 * @method formatOutput 5043 * @param {Object} 5044 * @return {Object} 5045 */ 5046 Method.prototype.formatOutput = function (result) { 5047 return this.outputFormatter && result ? this.outputFormatter(result) : result; 5048 }; 5049 5050 /** 5051 * Should create payload from given input args 5052 * 5053 * @method toPayload 5054 * @param {Array} args 5055 * @return {Object} 5056 */ 5057 Method.prototype.toPayload = function (args) { 5058 var call = this.getCall(args); 5059 var callback = this.extractCallback(args); 5060 var params = this.formatInput(args); 5061 this.validateArgs(params); 5062 5063 return { 5064 method: call, 5065 params: params, 5066 callback: callback 5067 }; 5068 }; 5069 5070 Method.prototype.attachToObject = function (obj) { 5071 var func = this.buildCall(); 5072 func.call = this.call; // TODO!!! that's ugly. filter.js uses it 5073 var name = this.name.split('.'); 5074 if (name.length > 1) { 5075 obj[name[0]] = obj[name[0]] || {}; 5076 obj[name[0]][name[1]] = func; 5077 } else { 5078 obj[name[0]] = func; 5079 } 5080 }; 5081 5082 Method.prototype.buildCall = function() { 5083 var method = this; 5084 var send = function () { 5085 var payload = method.toPayload(Array.prototype.slice.call(arguments)); 5086 if (payload.callback) { 5087 return method.requestManager.sendAsync(payload, function (err, result) { 5088 payload.callback(err, method.formatOutput(result)); 5089 }); 5090 } 5091 return method.formatOutput(method.requestManager.send(payload)); 5092 }; 5093 send.request = this.request.bind(this); 5094 return send; 5095 }; 5096 5097 /** 5098 * Should be called to create pure JSONRPC request which can be used in batch request 5099 * 5100 * @method request 5101 * @param {...} params 5102 * @return {Object} jsonrpc request 5103 */ 5104 Method.prototype.request = function () { 5105 var payload = this.toPayload(Array.prototype.slice.call(arguments)); 5106 payload.format = this.formatOutput.bind(this); 5107 return payload; 5108 }; 5109 5110 module.exports = Method; 5111 5112 },{"../utils/utils":20,"./errors":26}],37:[function(require,module,exports){ 5113 /* 5114 This file is part of web3.js. 5115 5116 web3.js is free software: you can redistribute it and/or modify 5117 it under the terms of the GNU Lesser General Public License as published by 5118 the Free Software Foundation, either version 3 of the License, or 5119 (at your option) any later version. 5120 5121 web3.js is distributed in the hope that it will be useful, 5122 but WITHOUT ANY WARRANTY; without even the implied warranty of 5123 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5124 GNU Lesser General Public License for more details. 5125 5126 You should have received a copy of the GNU Lesser General Public License 5127 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5128 */ 5129 /** @file db.js 5130 * @authors: 5131 * Marek Kotewicz <marek@ethdev.com> 5132 * @date 2015 5133 */ 5134 5135 var Method = require('../method'); 5136 5137 var DB = function (web3) { 5138 this._requestManager = web3._requestManager; 5139 5140 var self = this; 5141 5142 methods().forEach(function(method) { 5143 method.attachToObject(self); 5144 method.setRequestManager(web3._requestManager); 5145 }); 5146 }; 5147 5148 var methods = function () { 5149 var putString = new Method({ 5150 name: 'putString', 5151 call: 'db_putString', 5152 params: 3 5153 }); 5154 5155 var getString = new Method({ 5156 name: 'getString', 5157 call: 'db_getString', 5158 params: 2 5159 }); 5160 5161 var putHex = new Method({ 5162 name: 'putHex', 5163 call: 'db_putHex', 5164 params: 3 5165 }); 5166 5167 var getHex = new Method({ 5168 name: 'getHex', 5169 call: 'db_getHex', 5170 params: 2 5171 }); 5172 5173 return [ 5174 putString, getString, putHex, getHex 5175 ]; 5176 }; 5177 5178 module.exports = DB; 5179 5180 },{"../method":36}],38:[function(require,module,exports){ 5181 /* 5182 This file is part of web3.js. 5183 5184 web3.js is free software: you can redistribute it and/or modify 5185 it under the terms of the GNU Lesser General Public License as published by 5186 the Free Software Foundation, either version 3 of the License, or 5187 (at your option) any later version. 5188 5189 web3.js is distributed in the hope that it will be useful, 5190 but WITHOUT ANY WARRANTY; without even the implied warranty of 5191 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5192 GNU Lesser General Public License for more details. 5193 5194 You should have received a copy of the GNU Lesser General Public License 5195 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5196 */ 5197 /** 5198 * @file eth.js 5199 * @author Marek Kotewicz <marek@ethdev.com> 5200 * @author Fabian Vogelsteller <fabian@ethdev.com> 5201 * @date 2015 5202 */ 5203 5204 "use strict"; 5205 5206 var formatters = require('../formatters'); 5207 var utils = require('../../utils/utils'); 5208 var Method = require('../method'); 5209 var Property = require('../property'); 5210 var c = require('../../utils/config'); 5211 var Contract = require('../contract'); 5212 var watches = require('./watches'); 5213 var Filter = require('../filter'); 5214 var IsSyncing = require('../syncing'); 5215 var namereg = require('../namereg'); 5216 var Iban = require('../iban'); 5217 var transfer = require('../transfer'); 5218 5219 var blockCall = function (args) { 5220 return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; 5221 }; 5222 5223 var transactionFromBlockCall = function (args) { 5224 return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; 5225 }; 5226 5227 var uncleCall = function (args) { 5228 return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; 5229 }; 5230 5231 var getBlockTransactionCountCall = function (args) { 5232 return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; 5233 }; 5234 5235 var uncleCountCall = function (args) { 5236 return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; 5237 }; 5238 5239 function Eth(web3) { 5240 this._requestManager = web3._requestManager; 5241 5242 var self = this; 5243 5244 methods().forEach(function(method) { 5245 method.attachToObject(self); 5246 method.setRequestManager(self._requestManager); 5247 }); 5248 5249 properties().forEach(function(p) { 5250 p.attachToObject(self); 5251 p.setRequestManager(self._requestManager); 5252 }); 5253 5254 5255 this.iban = Iban; 5256 this.sendIBANTransaction = transfer.bind(null, this); 5257 } 5258 5259 Object.defineProperty(Eth.prototype, 'defaultBlock', { 5260 get: function () { 5261 return c.defaultBlock; 5262 }, 5263 set: function (val) { 5264 c.defaultBlock = val; 5265 return val; 5266 } 5267 }); 5268 5269 Object.defineProperty(Eth.prototype, 'defaultAccount', { 5270 get: function () { 5271 return c.defaultAccount; 5272 }, 5273 set: function (val) { 5274 c.defaultAccount = val; 5275 return val; 5276 } 5277 }); 5278 5279 var methods = function () { 5280 var getBalance = new Method({ 5281 name: 'getBalance', 5282 call: 'eth_getBalance', 5283 params: 2, 5284 inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter], 5285 outputFormatter: formatters.outputBigNumberFormatter 5286 }); 5287 5288 var getStorageAt = new Method({ 5289 name: 'getStorageAt', 5290 call: 'eth_getStorageAt', 5291 params: 3, 5292 inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter] 5293 }); 5294 5295 var getCode = new Method({ 5296 name: 'getCode', 5297 call: 'eth_getCode', 5298 params: 2, 5299 inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] 5300 }); 5301 5302 var getBlock = new Method({ 5303 name: 'getBlock', 5304 call: blockCall, 5305 params: 2, 5306 inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }], 5307 outputFormatter: formatters.outputBlockFormatter 5308 }); 5309 5310 var getUncle = new Method({ 5311 name: 'getUncle', 5312 call: uncleCall, 5313 params: 2, 5314 inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], 5315 outputFormatter: formatters.outputBlockFormatter, 5316 5317 }); 5318 5319 var getCompilers = new Method({ 5320 name: 'getCompilers', 5321 call: 'eth_getCompilers', 5322 params: 0 5323 }); 5324 5325 var getBlockTransactionCount = new Method({ 5326 name: 'getBlockTransactionCount', 5327 call: getBlockTransactionCountCall, 5328 params: 1, 5329 inputFormatter: [formatters.inputBlockNumberFormatter], 5330 outputFormatter: utils.toDecimal 5331 }); 5332 5333 var getBlockUncleCount = new Method({ 5334 name: 'getBlockUncleCount', 5335 call: uncleCountCall, 5336 params: 1, 5337 inputFormatter: [formatters.inputBlockNumberFormatter], 5338 outputFormatter: utils.toDecimal 5339 }); 5340 5341 var getTransaction = new Method({ 5342 name: 'getTransaction', 5343 call: 'eth_getTransactionByHash', 5344 params: 1, 5345 outputFormatter: formatters.outputTransactionFormatter 5346 }); 5347 5348 var getTransactionFromBlock = new Method({ 5349 name: 'getTransactionFromBlock', 5350 call: transactionFromBlockCall, 5351 params: 2, 5352 inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex], 5353 outputFormatter: formatters.outputTransactionFormatter 5354 }); 5355 5356 var getTransactionReceipt = new Method({ 5357 name: 'getTransactionReceipt', 5358 call: 'eth_getTransactionReceipt', 5359 params: 1, 5360 outputFormatter: formatters.outputTransactionReceiptFormatter 5361 }); 5362 5363 var getTransactionCount = new Method({ 5364 name: 'getTransactionCount', 5365 call: 'eth_getTransactionCount', 5366 params: 2, 5367 inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter], 5368 outputFormatter: utils.toDecimal 5369 }); 5370 5371 var sendRawTransaction = new Method({ 5372 name: 'sendRawTransaction', 5373 call: 'eth_sendRawTransaction', 5374 params: 1, 5375 inputFormatter: [null] 5376 }); 5377 5378 var sendTransaction = new Method({ 5379 name: 'sendTransaction', 5380 call: 'eth_sendTransaction', 5381 params: 1, 5382 inputFormatter: [formatters.inputTransactionFormatter] 5383 }); 5384 5385 var signTransaction = new Method({ 5386 name: 'signTransaction', 5387 call: 'eth_signTransaction', 5388 params: 1, 5389 inputFormatter: [formatters.inputTransactionFormatter] 5390 }); 5391 5392 var sign = new Method({ 5393 name: 'sign', 5394 call: 'eth_sign', 5395 params: 2, 5396 inputFormatter: [formatters.inputAddressFormatter, null] 5397 }); 5398 5399 var call = new Method({ 5400 name: 'call', 5401 call: 'eth_call', 5402 params: 2, 5403 inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter] 5404 }); 5405 5406 var getTransactionReceiptsByBlock = new Method({ 5407 name: 'getTransactionReceiptsByBlock', 5408 call: 'eth_getTransactionReceiptsByBlock', 5409 params: 1 5410 }); 5411 5412 var estimateGas = new Method({ 5413 name: 'estimateGas', 5414 call: 'eth_estimateGas', 5415 params: 1, 5416 inputFormatter: [formatters.inputCallFormatter], 5417 outputFormatter: utils.toDecimal 5418 }); 5419 5420 var compileSolidity = new Method({ 5421 name: 'compile.solidity', 5422 call: 'eth_compileSolidity', 5423 params: 1 5424 }); 5425 5426 var compileLLL = new Method({ 5427 name: 'compile.lll', 5428 call: 'eth_compileLLL', 5429 params: 1 5430 }); 5431 5432 var compileSerpent = new Method({ 5433 name: 'compile.serpent', 5434 call: 'eth_compileSerpent', 5435 params: 1 5436 }); 5437 5438 var submitWork = new Method({ 5439 name: 'submitWork', 5440 call: 'eth_submitWork', 5441 params: 3 5442 }); 5443 5444 var getWork = new Method({ 5445 name: 'getWork', 5446 call: 'eth_getWork', 5447 params: 0 5448 }); 5449 5450 return [ 5451 getBalance, 5452 getStorageAt, 5453 getCode, 5454 getBlock, 5455 getUncle, 5456 getCompilers, 5457 getBlockTransactionCount, 5458 getBlockUncleCount, 5459 getTransaction, 5460 getTransactionFromBlock, 5461 getTransactionReceipt, 5462 getTransactionCount, 5463 call, 5464 estimateGas, 5465 sendRawTransaction, 5466 signTransaction, 5467 sendTransaction, 5468 sign, 5469 compileSolidity, 5470 compileLLL, 5471 compileSerpent, 5472 submitWork, 5473 getWork, 5474 getTransactionReceiptsByBlock 5475 ]; 5476 }; 5477 5478 5479 var properties = function () { 5480 return [ 5481 new Property({ 5482 name: 'coinbase', 5483 getter: 'eth_coinbase' 5484 }), 5485 new Property({ 5486 name: 'mining', 5487 getter: 'eth_mining' 5488 }), 5489 new Property({ 5490 name: 'hashrate', 5491 getter: 'eth_hashrate', 5492 outputFormatter: utils.toDecimal 5493 }), 5494 new Property({ 5495 name: 'syncing', 5496 getter: 'eth_syncing', 5497 outputFormatter: formatters.outputSyncingFormatter 5498 }), 5499 new Property({ 5500 name: 'gasPrice', 5501 getter: 'eth_gasPrice', 5502 outputFormatter: formatters.outputBigNumberFormatter 5503 }), 5504 new Property({ 5505 name: 'accounts', 5506 getter: 'eth_accounts' 5507 }), 5508 new Property({ 5509 name: 'blockNumber', 5510 getter: 'eth_blockNumber', 5511 outputFormatter: utils.toDecimal 5512 }), 5513 new Property({ 5514 name: 'protocolVersion', 5515 getter: 'eth_protocolVersion' 5516 }) 5517 ]; 5518 }; 5519 5520 Eth.prototype.contract = function (abi) { 5521 var factory = new Contract(this, abi); 5522 return factory; 5523 }; 5524 5525 Eth.prototype.filter = function (options, callback, filterCreationErrorCallback) { 5526 return new Filter(options, 'eth', this._requestManager, watches.eth(), formatters.outputLogFormatter, callback, filterCreationErrorCallback); 5527 }; 5528 5529 Eth.prototype.namereg = function () { 5530 return this.contract(namereg.global.abi).at(namereg.global.address); 5531 }; 5532 5533 Eth.prototype.icapNamereg = function () { 5534 return this.contract(namereg.icap.abi).at(namereg.icap.address); 5535 }; 5536 5537 Eth.prototype.isSyncing = function (callback) { 5538 return new IsSyncing(this._requestManager, callback); 5539 }; 5540 5541 module.exports = Eth; 5542 5543 },{"../../utils/config":18,"../../utils/utils":20,"../contract":25,"../filter":29,"../formatters":30,"../iban":33,"../method":36,"../namereg":44,"../property":45,"../syncing":48,"../transfer":49,"./watches":43}],39:[function(require,module,exports){ 5544 /* 5545 This file is part of web3.js. 5546 5547 web3.js is free software: you can redistribute it and/or modify 5548 it under the terms of the GNU Lesser General Public License as published by 5549 the Free Software Foundation, either version 3 of the License, or 5550 (at your option) any later version. 5551 5552 web3.js is distributed in the hope that it will be useful, 5553 but WITHOUT ANY WARRANTY; without even the implied warranty of 5554 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5555 GNU Lesser General Public License for more details. 5556 5557 You should have received a copy of the GNU Lesser General Public License 5558 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5559 */ 5560 /** @file eth.js 5561 * @authors: 5562 * Marek Kotewicz <marek@ethdev.com> 5563 * @date 2015 5564 */ 5565 5566 var utils = require('../../utils/utils'); 5567 var Property = require('../property'); 5568 5569 var Net = function (web3) { 5570 this._requestManager = web3._requestManager; 5571 5572 var self = this; 5573 5574 properties().forEach(function(p) { 5575 p.attachToObject(self); 5576 p.setRequestManager(web3._requestManager); 5577 }); 5578 }; 5579 5580 /// @returns an array of objects describing web3.eth api properties 5581 var properties = function () { 5582 return [ 5583 new Property({ 5584 name: 'listening', 5585 getter: 'net_listening' 5586 }), 5587 new Property({ 5588 name: 'peerCount', 5589 getter: 'net_peerCount', 5590 outputFormatter: utils.toDecimal 5591 }) 5592 ]; 5593 }; 5594 5595 module.exports = Net; 5596 5597 },{"../../utils/utils":20,"../property":45}],40:[function(require,module,exports){ 5598 /* 5599 This file is part of web3.js. 5600 5601 web3.js is free software: you can redistribute it and/or modify 5602 it under the terms of the GNU Lesser General Public License as published by 5603 the Free Software Foundation, either version 3 of the License, or 5604 (at your option) any later version. 5605 5606 web3.js is distributed in the hope that it will be useful, 5607 but WITHOUT ANY WARRANTY; without even the implied warranty of 5608 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5609 GNU Lesser General Public License for more details. 5610 5611 You should have received a copy of the GNU Lesser General Public License 5612 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5613 */ 5614 /** 5615 * @file eth.js 5616 * @author Marek Kotewicz <marek@ethdev.com> 5617 * @author Fabian Vogelsteller <fabian@ethdev.com> 5618 * @date 2015 5619 */ 5620 5621 "use strict"; 5622 5623 var Method = require('../method'); 5624 var Property = require('../property'); 5625 var formatters = require('../formatters'); 5626 5627 function Personal(web3) { 5628 this._requestManager = web3._requestManager; 5629 5630 var self = this; 5631 5632 methods().forEach(function(method) { 5633 method.attachToObject(self); 5634 method.setRequestManager(self._requestManager); 5635 }); 5636 5637 properties().forEach(function(p) { 5638 p.attachToObject(self); 5639 p.setRequestManager(self._requestManager); 5640 }); 5641 } 5642 5643 var methods = function () { 5644 var newAccount = new Method({ 5645 name: 'newAccount', 5646 call: 'personal_newAccount', 5647 params: 1, 5648 inputFormatter: [null] 5649 }); 5650 5651 var importRawKey = new Method({ 5652 name: 'importRawKey', 5653 call: 'personal_importRawKey', 5654 params: 2 5655 }); 5656 5657 var sign = new Method({ 5658 name: 'sign', 5659 call: 'personal_sign', 5660 params: 3, 5661 inputFormatter: [null, formatters.inputAddressFormatter, null] 5662 }); 5663 5664 var ecRecover = new Method({ 5665 name: 'ecRecover', 5666 call: 'personal_ecRecover', 5667 params: 2 5668 }); 5669 5670 var unlockAccount = new Method({ 5671 name: 'unlockAccount', 5672 call: 'personal_unlockAccount', 5673 params: 3, 5674 inputFormatter: [formatters.inputAddressFormatter, null, null] 5675 }); 5676 5677 var sendTransaction = new Method({ 5678 name: 'sendTransaction', 5679 call: 'personal_sendTransaction', 5680 params: 2, 5681 inputFormatter: [formatters.inputTransactionFormatter, null] 5682 }); 5683 5684 var lockAccount = new Method({ 5685 name: 'lockAccount', 5686 call: 'personal_lockAccount', 5687 params: 1, 5688 inputFormatter: [formatters.inputAddressFormatter] 5689 }); 5690 5691 return [ 5692 newAccount, 5693 importRawKey, 5694 unlockAccount, 5695 ecRecover, 5696 sign, 5697 sendTransaction, 5698 lockAccount 5699 ]; 5700 }; 5701 5702 var properties = function () { 5703 return [ 5704 new Property({ 5705 name: 'listAccounts', 5706 getter: 'personal_listAccounts' 5707 }) 5708 ]; 5709 }; 5710 5711 5712 module.exports = Personal; 5713 5714 },{"../formatters":30,"../method":36,"../property":45}],41:[function(require,module,exports){ 5715 /* 5716 This file is part of web3.js. 5717 5718 web3.js is free software: you can redistribute it and/or modify 5719 it under the terms of the GNU Lesser General Public License as published by 5720 the Free Software Foundation, either version 3 of the License, or 5721 (at your option) any later version. 5722 5723 web3.js is distributed in the hope that it will be useful, 5724 but WITHOUT ANY WARRANTY; without even the implied warranty of 5725 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5726 GNU Lesser General Public License for more details. 5727 5728 You should have received a copy of the GNU Lesser General Public License 5729 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5730 */ 5731 /** @file shh.js 5732 * @authors: 5733 * Fabian Vogelsteller <fabian@ethereum.org> 5734 * Marek Kotewicz <marek@ethcore.io> 5735 * @date 2017 5736 */ 5737 5738 var Method = require('../method'); 5739 var Filter = require('../filter'); 5740 var watches = require('./watches'); 5741 5742 var Shh = function (web3) { 5743 this._requestManager = web3._requestManager; 5744 5745 var self = this; 5746 5747 methods().forEach(function(method) { 5748 method.attachToObject(self); 5749 method.setRequestManager(self._requestManager); 5750 }); 5751 }; 5752 5753 Shh.prototype.newMessageFilter = function (options, callback, filterCreationErrorCallback) { 5754 return new Filter(options, 'shh', this._requestManager, watches.shh(), null, callback, filterCreationErrorCallback); 5755 }; 5756 5757 var methods = function () { 5758 5759 return [ 5760 new Method({ 5761 name: 'version', 5762 call: 'shh_version', 5763 params: 0 5764 }), 5765 new Method({ 5766 name: 'info', 5767 call: 'shh_info', 5768 params: 0 5769 }), 5770 new Method({ 5771 name: 'setMaxMessageSize', 5772 call: 'shh_setMaxMessageSize', 5773 params: 1 5774 }), 5775 new Method({ 5776 name: 'setMinPoW', 5777 call: 'shh_setMinPoW', 5778 params: 1 5779 }), 5780 new Method({ 5781 name: 'markTrustedPeer', 5782 call: 'shh_markTrustedPeer', 5783 params: 1 5784 }), 5785 new Method({ 5786 name: 'newKeyPair', 5787 call: 'shh_newKeyPair', 5788 params: 0 5789 }), 5790 new Method({ 5791 name: 'addPrivateKey', 5792 call: 'shh_addPrivateKey', 5793 params: 1 5794 }), 5795 new Method({ 5796 name: 'deleteKeyPair', 5797 call: 'shh_deleteKeyPair', 5798 params: 1 5799 }), 5800 new Method({ 5801 name: 'hasKeyPair', 5802 call: 'shh_hasKeyPair', 5803 params: 1 5804 }), 5805 new Method({ 5806 name: 'getPublicKey', 5807 call: 'shh_getPublicKey', 5808 params: 1 5809 }), 5810 new Method({ 5811 name: 'getPrivateKey', 5812 call: 'shh_getPrivateKey', 5813 params: 1 5814 }), 5815 new Method({ 5816 name: 'newSymKey', 5817 call: 'shh_newSymKey', 5818 params: 0 5819 }), 5820 new Method({ 5821 name: 'addSymKey', 5822 call: 'shh_addSymKey', 5823 params: 1 5824 }), 5825 new Method({ 5826 name: 'generateSymKeyFromPassword', 5827 call: 'shh_generateSymKeyFromPassword', 5828 params: 1 5829 }), 5830 new Method({ 5831 name: 'hasSymKey', 5832 call: 'shh_hasSymKey', 5833 params: 1 5834 }), 5835 new Method({ 5836 name: 'getSymKey', 5837 call: 'shh_getSymKey', 5838 params: 1 5839 }), 5840 new Method({ 5841 name: 'deleteSymKey', 5842 call: 'shh_deleteSymKey', 5843 params: 1 5844 }), 5845 5846 // subscribe and unsubscribe missing 5847 5848 new Method({ 5849 name: 'post', 5850 call: 'shh_post', 5851 params: 1, 5852 inputFormatter: [null] 5853 }) 5854 ]; 5855 }; 5856 5857 module.exports = Shh; 5858 5859 5860 },{"../filter":29,"../method":36,"./watches":43}],42:[function(require,module,exports){ 5861 /* 5862 This file is part of web3.js. 5863 5864 web3.js is free software: you can redistribute it and/or modify 5865 it under the terms of the GNU Lesser General Public License as published by 5866 the Free Software Foundation, either version 3 of the License, or 5867 (at your option) any later version. 5868 5869 web3.js is distributed in the hope that it will be useful, 5870 but WITHOUT ANY WARRANTY; without even the implied warranty of 5871 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 5872 GNU Lesser General Public License for more details. 5873 5874 You should have received a copy of the GNU Lesser General Public License 5875 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 5876 */ 5877 /** 5878 * @file bzz.js 5879 * @author Alex Beregszaszi <alex@rtfs.hu> 5880 * @date 2016 5881 * 5882 * Reference: https://github.com/ethereum/go-ethereum/blob/swarm/internal/web3ext/web3ext.go#L33 5883 */ 5884 5885 "use strict"; 5886 5887 var Method = require('../method'); 5888 var Property = require('../property'); 5889 5890 function Swarm(web3) { 5891 this._requestManager = web3._requestManager; 5892 5893 var self = this; 5894 5895 methods().forEach(function(method) { 5896 method.attachToObject(self); 5897 method.setRequestManager(self._requestManager); 5898 }); 5899 5900 properties().forEach(function(p) { 5901 p.attachToObject(self); 5902 p.setRequestManager(self._requestManager); 5903 }); 5904 } 5905 5906 var methods = function () { 5907 var blockNetworkRead = new Method({ 5908 name: 'blockNetworkRead', 5909 call: 'bzz_blockNetworkRead', 5910 params: 1, 5911 inputFormatter: [null] 5912 }); 5913 5914 var syncEnabled = new Method({ 5915 name: 'syncEnabled', 5916 call: 'bzz_syncEnabled', 5917 params: 1, 5918 inputFormatter: [null] 5919 }); 5920 5921 var swapEnabled = new Method({ 5922 name: 'swapEnabled', 5923 call: 'bzz_swapEnabled', 5924 params: 1, 5925 inputFormatter: [null] 5926 }); 5927 5928 var download = new Method({ 5929 name: 'download', 5930 call: 'bzz_download', 5931 params: 2, 5932 inputFormatter: [null, null] 5933 }); 5934 5935 var upload = new Method({ 5936 name: 'upload', 5937 call: 'bzz_upload', 5938 params: 2, 5939 inputFormatter: [null, null] 5940 }); 5941 5942 var retrieve = new Method({ 5943 name: 'retrieve', 5944 call: 'bzz_retrieve', 5945 params: 1, 5946 inputFormatter: [null] 5947 }); 5948 5949 var store = new Method({ 5950 name: 'store', 5951 call: 'bzz_store', 5952 params: 2, 5953 inputFormatter: [null, null] 5954 }); 5955 5956 var get = new Method({ 5957 name: 'get', 5958 call: 'bzz_get', 5959 params: 1, 5960 inputFormatter: [null] 5961 }); 5962 5963 var put = new Method({ 5964 name: 'put', 5965 call: 'bzz_put', 5966 params: 2, 5967 inputFormatter: [null, null] 5968 }); 5969 5970 var modify = new Method({ 5971 name: 'modify', 5972 call: 'bzz_modify', 5973 params: 4, 5974 inputFormatter: [null, null, null, null] 5975 }); 5976 5977 return [ 5978 blockNetworkRead, 5979 syncEnabled, 5980 swapEnabled, 5981 download, 5982 upload, 5983 retrieve, 5984 store, 5985 get, 5986 put, 5987 modify 5988 ]; 5989 }; 5990 5991 var properties = function () { 5992 return [ 5993 new Property({ 5994 name: 'hive', 5995 getter: 'bzz_hive' 5996 }), 5997 new Property({ 5998 name: 'info', 5999 getter: 'bzz_info' 6000 }) 6001 ]; 6002 }; 6003 6004 6005 module.exports = Swarm; 6006 6007 },{"../method":36,"../property":45}],43:[function(require,module,exports){ 6008 /* 6009 This file is part of web3.js. 6010 6011 web3.js is free software: you can redistribute it and/or modify 6012 it under the terms of the GNU Lesser General Public License as published by 6013 the Free Software Foundation, either version 3 of the License, or 6014 (at your option) any later version. 6015 6016 web3.js is distributed in the hope that it will be useful, 6017 but WITHOUT ANY WARRANTY; without even the implied warranty of 6018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6019 GNU Lesser General Public License for more details. 6020 6021 You should have received a copy of the GNU Lesser General Public License 6022 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6023 */ 6024 /** @file watches.js 6025 * @authors: 6026 * Marek Kotewicz <marek@ethdev.com> 6027 * @date 2015 6028 */ 6029 6030 var Method = require('../method'); 6031 6032 /// @returns an array of objects describing web3.eth.filter api methods 6033 var eth = function () { 6034 var newFilterCall = function (args) { 6035 var type = args[0]; 6036 6037 switch(type) { 6038 case 'latest': 6039 args.shift(); 6040 this.params = 0; 6041 return 'eth_newBlockFilter'; 6042 case 'pending': 6043 args.shift(); 6044 this.params = 0; 6045 return 'eth_newPendingTransactionFilter'; 6046 default: 6047 return 'eth_newFilter'; 6048 } 6049 }; 6050 6051 var newFilter = new Method({ 6052 name: 'newFilter', 6053 call: newFilterCall, 6054 params: 1 6055 }); 6056 6057 var uninstallFilter = new Method({ 6058 name: 'uninstallFilter', 6059 call: 'eth_uninstallFilter', 6060 params: 1 6061 }); 6062 6063 var getLogs = new Method({ 6064 name: 'getLogs', 6065 call: 'eth_getFilterLogs', 6066 params: 1 6067 }); 6068 6069 var poll = new Method({ 6070 name: 'poll', 6071 call: 'eth_getFilterChanges', 6072 params: 1 6073 }); 6074 6075 return [ 6076 newFilter, 6077 uninstallFilter, 6078 getLogs, 6079 poll 6080 ]; 6081 }; 6082 6083 /// @returns an array of objects describing web3.shh.watch api methods 6084 var shh = function () { 6085 6086 return [ 6087 new Method({ 6088 name: 'newFilter', 6089 call: 'shh_newMessageFilter', 6090 params: 1 6091 }), 6092 new Method({ 6093 name: 'uninstallFilter', 6094 call: 'shh_deleteMessageFilter', 6095 params: 1 6096 }), 6097 new Method({ 6098 name: 'getLogs', 6099 call: 'shh_getFilterMessages', 6100 params: 1 6101 }), 6102 new Method({ 6103 name: 'poll', 6104 call: 'shh_getFilterMessages', 6105 params: 1 6106 }) 6107 ]; 6108 }; 6109 6110 module.exports = { 6111 eth: eth, 6112 shh: shh 6113 }; 6114 6115 6116 },{"../method":36}],44:[function(require,module,exports){ 6117 /* 6118 This file is part of web3.js. 6119 6120 web3.js is free software: you can redistribute it and/or modify 6121 it under the terms of the GNU Lesser General Public License as published by 6122 the Free Software Foundation, either version 3 of the License, or 6123 (at your option) any later version. 6124 6125 web3.js is distributed in the hope that it will be useful, 6126 but WITHOUT ANY WARRANTY; without even the implied warranty of 6127 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6128 GNU Lesser General Public License for more details. 6129 6130 You should have received a copy of the GNU Lesser General Public License 6131 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6132 */ 6133 /** 6134 * @file namereg.js 6135 * @author Marek Kotewicz <marek@ethdev.com> 6136 * @date 2015 6137 */ 6138 6139 var globalRegistrarAbi = require('../contracts/GlobalRegistrar.json'); 6140 var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json'); 6141 6142 var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b'; 6143 var icapNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00'; 6144 6145 module.exports = { 6146 global: { 6147 abi: globalRegistrarAbi, 6148 address: globalNameregAddress 6149 }, 6150 icap: { 6151 abi: icapRegistrarAbi, 6152 address: icapNameregAddress 6153 } 6154 }; 6155 6156 6157 },{"../contracts/GlobalRegistrar.json":1,"../contracts/ICAPRegistrar.json":2}],45:[function(require,module,exports){ 6158 /* 6159 This file is part of web3.js. 6160 6161 web3.js is free software: you can redistribute it and/or modify 6162 it under the terms of the GNU Lesser General Public License as published by 6163 the Free Software Foundation, either version 3 of the License, or 6164 (at your option) any later version. 6165 6166 web3.js is distributed in the hope that it will be useful, 6167 but WITHOUT ANY WARRANTY; without even the implied warranty of 6168 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6169 GNU Lesser General Public License for more details. 6170 6171 You should have received a copy of the GNU Lesser General Public License 6172 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6173 */ 6174 /** 6175 * @file property.js 6176 * @author Fabian Vogelsteller <fabian@frozeman.de> 6177 * @author Marek Kotewicz <marek@ethdev.com> 6178 * @date 2015 6179 */ 6180 6181 var utils = require('../utils/utils'); 6182 6183 var Property = function (options) { 6184 this.name = options.name; 6185 this.getter = options.getter; 6186 this.setter = options.setter; 6187 this.outputFormatter = options.outputFormatter; 6188 this.inputFormatter = options.inputFormatter; 6189 this.requestManager = null; 6190 }; 6191 6192 Property.prototype.setRequestManager = function (rm) { 6193 this.requestManager = rm; 6194 }; 6195 6196 /** 6197 * Should be called to format input args of method 6198 * 6199 * @method formatInput 6200 * @param {Array} 6201 * @return {Array} 6202 */ 6203 Property.prototype.formatInput = function (arg) { 6204 return this.inputFormatter ? this.inputFormatter(arg) : arg; 6205 }; 6206 6207 /** 6208 * Should be called to format output(result) of method 6209 * 6210 * @method formatOutput 6211 * @param {Object} 6212 * @return {Object} 6213 */ 6214 Property.prototype.formatOutput = function (result) { 6215 return this.outputFormatter && result !== null && result !== undefined ? this.outputFormatter(result) : result; 6216 }; 6217 6218 /** 6219 * Should be used to extract callback from array of arguments. Modifies input param 6220 * 6221 * @method extractCallback 6222 * @param {Array} arguments 6223 * @return {Function|Null} callback, if exists 6224 */ 6225 Property.prototype.extractCallback = function (args) { 6226 if (utils.isFunction(args[args.length - 1])) { 6227 return args.pop(); // modify the args array! 6228 } 6229 }; 6230 6231 6232 /** 6233 * Should attach function to method 6234 * 6235 * @method attachToObject 6236 * @param {Object} 6237 * @param {Function} 6238 */ 6239 Property.prototype.attachToObject = function (obj) { 6240 var proto = { 6241 get: this.buildGet(), 6242 enumerable: true 6243 }; 6244 6245 var names = this.name.split('.'); 6246 var name = names[0]; 6247 if (names.length > 1) { 6248 obj[names[0]] = obj[names[0]] || {}; 6249 obj = obj[names[0]]; 6250 name = names[1]; 6251 } 6252 6253 Object.defineProperty(obj, name, proto); 6254 obj[asyncGetterName(name)] = this.buildAsyncGet(); 6255 }; 6256 6257 var asyncGetterName = function (name) { 6258 return 'get' + name.charAt(0).toUpperCase() + name.slice(1); 6259 }; 6260 6261 Property.prototype.buildGet = function () { 6262 var property = this; 6263 return function get() { 6264 return property.formatOutput(property.requestManager.send({ 6265 method: property.getter 6266 })); 6267 }; 6268 }; 6269 6270 Property.prototype.buildAsyncGet = function () { 6271 var property = this; 6272 var get = function (callback) { 6273 property.requestManager.sendAsync({ 6274 method: property.getter 6275 }, function (err, result) { 6276 callback(err, property.formatOutput(result)); 6277 }); 6278 }; 6279 get.request = this.request.bind(this); 6280 return get; 6281 }; 6282 6283 /** 6284 * Should be called to create pure JSONRPC request which can be used in batch request 6285 * 6286 * @method request 6287 * @param {...} params 6288 * @return {Object} jsonrpc request 6289 */ 6290 Property.prototype.request = function () { 6291 var payload = { 6292 method: this.getter, 6293 params: [], 6294 callback: this.extractCallback(Array.prototype.slice.call(arguments)) 6295 }; 6296 payload.format = this.formatOutput.bind(this); 6297 return payload; 6298 }; 6299 6300 module.exports = Property; 6301 6302 6303 },{"../utils/utils":20}],46:[function(require,module,exports){ 6304 /* 6305 This file is part of web3.js. 6306 6307 web3.js is free software: you can redistribute it and/or modify 6308 it under the terms of the GNU Lesser General Public License as published by 6309 the Free Software Foundation, either version 3 of the License, or 6310 (at your option) any later version. 6311 6312 web3.js is distributed in the hope that it will be useful, 6313 but WITHOUT ANY WARRANTY; without even the implied warranty of 6314 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6315 GNU Lesser General Public License for more details. 6316 6317 You should have received a copy of the GNU Lesser General Public License 6318 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6319 */ 6320 /** 6321 * @file requestmanager.js 6322 * @author Jeffrey Wilcke <jeff@ethdev.com> 6323 * @author Marek Kotewicz <marek@ethdev.com> 6324 * @author Marian Oancea <marian@ethdev.com> 6325 * @author Fabian Vogelsteller <fabian@ethdev.com> 6326 * @author Gav Wood <g@ethdev.com> 6327 * @date 2014 6328 */ 6329 6330 var Jsonrpc = require('./jsonrpc'); 6331 var utils = require('../utils/utils'); 6332 var c = require('../utils/config'); 6333 var errors = require('./errors'); 6334 6335 /** 6336 * It's responsible for passing messages to providers 6337 * It's also responsible for polling the ethereum node for incoming messages 6338 * Default poll timeout is 1 second 6339 * Singleton 6340 */ 6341 var RequestManager = function (provider) { 6342 this.provider = provider; 6343 this.polls = {}; 6344 this.timeout = null; 6345 }; 6346 6347 /** 6348 * Should be used to synchronously send request 6349 * 6350 * @method send 6351 * @param {Object} data 6352 * @return {Object} 6353 */ 6354 RequestManager.prototype.send = function (data) { 6355 if (!this.provider) { 6356 console.error(errors.InvalidProvider()); 6357 return null; 6358 } 6359 6360 var payload = Jsonrpc.toPayload(data.method, data.params); 6361 var result = this.provider.send(payload); 6362 6363 if (!Jsonrpc.isValidResponse(result)) { 6364 throw errors.InvalidResponse(result); 6365 } 6366 6367 return result.result; 6368 }; 6369 6370 /** 6371 * Should be used to asynchronously send request 6372 * 6373 * @method sendAsync 6374 * @param {Object} data 6375 * @param {Function} callback 6376 */ 6377 RequestManager.prototype.sendAsync = function (data, callback) { 6378 if (!this.provider) { 6379 return callback(errors.InvalidProvider()); 6380 } 6381 6382 var payload = Jsonrpc.toPayload(data.method, data.params); 6383 this.provider.sendAsync(payload, function (err, result) { 6384 if (err) { 6385 return callback(err); 6386 } 6387 6388 if (!Jsonrpc.isValidResponse(result)) { 6389 return callback(errors.InvalidResponse(result)); 6390 } 6391 6392 callback(null, result.result); 6393 }); 6394 }; 6395 6396 /** 6397 * Should be called to asynchronously send batch request 6398 * 6399 * @method sendBatch 6400 * @param {Array} batch data 6401 * @param {Function} callback 6402 */ 6403 RequestManager.prototype.sendBatch = function (data, callback) { 6404 if (!this.provider) { 6405 return callback(errors.InvalidProvider()); 6406 } 6407 6408 var payload = Jsonrpc.toBatchPayload(data); 6409 6410 this.provider.sendAsync(payload, function (err, results) { 6411 if (err) { 6412 return callback(err); 6413 } 6414 6415 if (!utils.isArray(results)) { 6416 return callback(errors.InvalidResponse(results)); 6417 } 6418 6419 callback(err, results); 6420 }); 6421 }; 6422 6423 /** 6424 * Should be used to set provider of request manager 6425 * 6426 * @method setProvider 6427 * @param {Object} 6428 */ 6429 RequestManager.prototype.setProvider = function (p) { 6430 this.provider = p; 6431 }; 6432 6433 /** 6434 * Should be used to start polling 6435 * 6436 * @method startPolling 6437 * @param {Object} data 6438 * @param {Number} pollId 6439 * @param {Function} callback 6440 * @param {Function} uninstall 6441 * 6442 * @todo cleanup number of params 6443 */ 6444 RequestManager.prototype.startPolling = function (data, pollId, callback, uninstall) { 6445 this.polls[pollId] = {data: data, id: pollId, callback: callback, uninstall: uninstall}; 6446 6447 6448 // start polling 6449 if (!this.timeout) { 6450 this.poll(); 6451 } 6452 }; 6453 6454 /** 6455 * Should be used to stop polling for filter with given id 6456 * 6457 * @method stopPolling 6458 * @param {Number} pollId 6459 */ 6460 RequestManager.prototype.stopPolling = function (pollId) { 6461 delete this.polls[pollId]; 6462 6463 // stop polling 6464 if(Object.keys(this.polls).length === 0 && this.timeout) { 6465 clearTimeout(this.timeout); 6466 this.timeout = null; 6467 } 6468 }; 6469 6470 /** 6471 * Should be called to reset the polling mechanism of the request manager 6472 * 6473 * @method reset 6474 */ 6475 RequestManager.prototype.reset = function (keepIsSyncing) { 6476 /*jshint maxcomplexity:5 */ 6477 6478 for (var key in this.polls) { 6479 // remove all polls, except sync polls, 6480 // they need to be removed manually by calling syncing.stopWatching() 6481 if(!keepIsSyncing || key.indexOf('syncPoll_') === -1) { 6482 this.polls[key].uninstall(); 6483 delete this.polls[key]; 6484 } 6485 } 6486 6487 // stop polling 6488 if(Object.keys(this.polls).length === 0 && this.timeout) { 6489 clearTimeout(this.timeout); 6490 this.timeout = null; 6491 } 6492 }; 6493 6494 /** 6495 * Should be called to poll for changes on filter with given id 6496 * 6497 * @method poll 6498 */ 6499 RequestManager.prototype.poll = function () { 6500 /*jshint maxcomplexity: 6 */ 6501 this.timeout = setTimeout(this.poll.bind(this), c.ETH_POLLING_TIMEOUT); 6502 6503 if (Object.keys(this.polls).length === 0) { 6504 return; 6505 } 6506 6507 if (!this.provider) { 6508 console.error(errors.InvalidProvider()); 6509 return; 6510 } 6511 6512 var pollsData = []; 6513 var pollsIds = []; 6514 for (var key in this.polls) { 6515 pollsData.push(this.polls[key].data); 6516 pollsIds.push(key); 6517 } 6518 6519 if (pollsData.length === 0) { 6520 return; 6521 } 6522 6523 var payload = Jsonrpc.toBatchPayload(pollsData); 6524 6525 // map the request id to they poll id 6526 var pollsIdMap = {}; 6527 payload.forEach(function(load, index){ 6528 pollsIdMap[load.id] = pollsIds[index]; 6529 }); 6530 6531 6532 var self = this; 6533 this.provider.sendAsync(payload, function (error, results) { 6534 6535 6536 // TODO: console log? 6537 if (error) { 6538 return; 6539 } 6540 6541 if (!utils.isArray(results)) { 6542 throw errors.InvalidResponse(results); 6543 } 6544 results.map(function (result) { 6545 var id = pollsIdMap[result.id]; 6546 6547 // make sure the filter is still installed after arrival of the request 6548 if (self.polls[id]) { 6549 result.callback = self.polls[id].callback; 6550 return result; 6551 } else 6552 return false; 6553 }).filter(function (result) { 6554 return !!result; 6555 }).filter(function (result) { 6556 var valid = Jsonrpc.isValidResponse(result); 6557 if (!valid) { 6558 result.callback(errors.InvalidResponse(result)); 6559 } 6560 return valid; 6561 }).forEach(function (result) { 6562 result.callback(null, result.result); 6563 }); 6564 }); 6565 }; 6566 6567 module.exports = RequestManager; 6568 6569 6570 },{"../utils/config":18,"../utils/utils":20,"./errors":26,"./jsonrpc":35}],47:[function(require,module,exports){ 6571 6572 6573 var Settings = function () { 6574 this.defaultBlock = 'latest'; 6575 this.defaultAccount = undefined; 6576 }; 6577 6578 module.exports = Settings; 6579 6580 6581 },{}],48:[function(require,module,exports){ 6582 /* 6583 This file is part of web3.js. 6584 6585 web3.js is free software: you can redistribute it and/or modify 6586 it under the terms of the GNU Lesser General Public License as published by 6587 the Free Software Foundation, either version 3 of the License, or 6588 (at your option) any later version. 6589 6590 web3.js is distributed in the hope that it will be useful, 6591 but WITHOUT ANY WARRANTY; without even the implied warranty of 6592 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6593 GNU Lesser General Public License for more details. 6594 6595 You should have received a copy of the GNU Lesser General Public License 6596 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6597 */ 6598 /** @file syncing.js 6599 * @authors: 6600 * Fabian Vogelsteller <fabian@ethdev.com> 6601 * @date 2015 6602 */ 6603 6604 var formatters = require('./formatters'); 6605 var utils = require('../utils/utils'); 6606 6607 var count = 1; 6608 6609 /** 6610 Adds the callback and sets up the methods, to iterate over the results. 6611 6612 @method pollSyncing 6613 @param {Object} self 6614 */ 6615 var pollSyncing = function(self) { 6616 6617 var onMessage = function (error, sync) { 6618 if (error) { 6619 return self.callbacks.forEach(function (callback) { 6620 callback(error); 6621 }); 6622 } 6623 6624 if(utils.isObject(sync) && sync.startingBlock) 6625 sync = formatters.outputSyncingFormatter(sync); 6626 6627 self.callbacks.forEach(function (callback) { 6628 if (self.lastSyncState !== sync) { 6629 6630 // call the callback with true first so the app can stop anything, before receiving the sync data 6631 if(!self.lastSyncState && utils.isObject(sync)) 6632 callback(null, true); 6633 6634 // call on the next CPU cycle, so the actions of the sync stop can be processes first 6635 setTimeout(function() { 6636 callback(null, sync); 6637 }, 0); 6638 6639 self.lastSyncState = sync; 6640 } 6641 }); 6642 }; 6643 6644 self.requestManager.startPolling({ 6645 method: 'eth_syncing', 6646 params: [], 6647 }, self.pollId, onMessage, self.stopWatching.bind(self)); 6648 6649 }; 6650 6651 var IsSyncing = function (requestManager, callback) { 6652 this.requestManager = requestManager; 6653 this.pollId = 'syncPoll_'+ count++; 6654 this.callbacks = []; 6655 this.addCallback(callback); 6656 this.lastSyncState = false; 6657 pollSyncing(this); 6658 6659 return this; 6660 }; 6661 6662 IsSyncing.prototype.addCallback = function (callback) { 6663 if(callback) 6664 this.callbacks.push(callback); 6665 return this; 6666 }; 6667 6668 IsSyncing.prototype.stopWatching = function () { 6669 this.requestManager.stopPolling(this.pollId); 6670 this.callbacks = []; 6671 }; 6672 6673 module.exports = IsSyncing; 6674 6675 6676 },{"../utils/utils":20,"./formatters":30}],49:[function(require,module,exports){ 6677 /* 6678 This file is part of web3.js. 6679 6680 web3.js is free software: you can redistribute it and/or modify 6681 it under the terms of the GNU Lesser General Public License as published by 6682 the Free Software Foundation, either version 3 of the License, or 6683 (at your option) any later version. 6684 6685 web3.js is distributed in the hope that it will be useful, 6686 but WITHOUT ANY WARRANTY; without even the implied warranty of 6687 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 6688 GNU Lesser General Public License for more details. 6689 6690 You should have received a copy of the GNU Lesser General Public License 6691 along with web3.js. If not, see <http://www.gnu.org/licenses/>. 6692 */ 6693 /** 6694 * @file transfer.js 6695 * @author Marek Kotewicz <marek@ethdev.com> 6696 * @date 2015 6697 */ 6698 6699 var Iban = require('./iban'); 6700 var exchangeAbi = require('../contracts/SmartExchange.json'); 6701 6702 /** 6703 * Should be used to make Iban transfer 6704 * 6705 * @method transfer 6706 * @param {String} from 6707 * @param {String} to iban 6708 * @param {Value} value to be tranfered 6709 * @param {Function} callback, callback 6710 */ 6711 var transfer = function (eth, from, to, value, callback) { 6712 var iban = new Iban(to); 6713 if (!iban.isValid()) { 6714 throw new Error('invalid iban address'); 6715 } 6716 6717 if (iban.isDirect()) { 6718 return transferToAddress(eth, from, iban.address(), value, callback); 6719 } 6720 6721 if (!callback) { 6722 var address = eth.icapNamereg().addr(iban.institution()); 6723 return deposit(eth, from, address, value, iban.client()); 6724 } 6725 6726 eth.icapNamereg().addr(iban.institution(), function (err, address) { 6727 return deposit(eth, from, address, value, iban.client(), callback); 6728 }); 6729 6730 }; 6731 6732 /** 6733 * Should be used to transfer funds to certain address 6734 * 6735 * @method transferToAddress 6736 * @param {String} from 6737 * @param {String} to 6738 * @param {Value} value to be tranfered 6739 * @param {Function} callback, callback 6740 */ 6741 var transferToAddress = function (eth, from, to, value, callback) { 6742 return eth.sendTransaction({ 6743 address: to, 6744 from: from, 6745 value: value 6746 }, callback); 6747 }; 6748 6749 /** 6750 * Should be used to deposit funds to generic Exchange contract (must implement deposit(bytes32) method!) 6751 * 6752 * @method deposit 6753 * @param {String} from 6754 * @param {String} to 6755 * @param {Value} value to be transferred 6756 * @param {String} client unique identifier 6757 * @param {Function} callback, callback 6758 */ 6759 var deposit = function (eth, from, to, value, client, callback) { 6760 var abi = exchangeAbi; 6761 return eth.contract(abi).at(to).deposit(client, { 6762 from: from, 6763 value: value 6764 }, callback); 6765 }; 6766 6767 module.exports = transfer; 6768 6769 6770 },{"../contracts/SmartExchange.json":3,"./iban":33}],50:[function(require,module,exports){ 6771 6772 },{}],51:[function(require,module,exports){ 6773 ;(function (root, factory, undef) { 6774 if (typeof exports === "object") { 6775 // CommonJS 6776 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); 6777 } 6778 else if (typeof define === "function" && define.amd) { 6779 // AMD 6780 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); 6781 } 6782 else { 6783 // Global (browser) 6784 factory(root.CryptoJS); 6785 } 6786 }(this, function (CryptoJS) { 6787 6788 (function () { 6789 // Shortcuts 6790 var C = CryptoJS; 6791 var C_lib = C.lib; 6792 var BlockCipher = C_lib.BlockCipher; 6793 var C_algo = C.algo; 6794 6795 // Lookup tables 6796 var SBOX = []; 6797 var INV_SBOX = []; 6798 var SUB_MIX_0 = []; 6799 var SUB_MIX_1 = []; 6800 var SUB_MIX_2 = []; 6801 var SUB_MIX_3 = []; 6802 var INV_SUB_MIX_0 = []; 6803 var INV_SUB_MIX_1 = []; 6804 var INV_SUB_MIX_2 = []; 6805 var INV_SUB_MIX_3 = []; 6806 6807 // Compute lookup tables 6808 (function () { 6809 // Compute double table 6810 var d = []; 6811 for (var i = 0; i < 256; i++) { 6812 if (i < 128) { 6813 d[i] = i << 1; 6814 } else { 6815 d[i] = (i << 1) ^ 0x11b; 6816 } 6817 } 6818 6819 // Walk GF(2^8) 6820 var x = 0; 6821 var xi = 0; 6822 for (var i = 0; i < 256; i++) { 6823 // Compute sbox 6824 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); 6825 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; 6826 SBOX[x] = sx; 6827 INV_SBOX[sx] = x; 6828 6829 // Compute multiplication 6830 var x2 = d[x]; 6831 var x4 = d[x2]; 6832 var x8 = d[x4]; 6833 6834 // Compute sub bytes, mix columns tables 6835 var t = (d[sx] * 0x101) ^ (sx * 0x1010100); 6836 SUB_MIX_0[x] = (t << 24) | (t >>> 8); 6837 SUB_MIX_1[x] = (t << 16) | (t >>> 16); 6838 SUB_MIX_2[x] = (t << 8) | (t >>> 24); 6839 SUB_MIX_3[x] = t; 6840 6841 // Compute inv sub bytes, inv mix columns tables 6842 var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); 6843 INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); 6844 INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); 6845 INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); 6846 INV_SUB_MIX_3[sx] = t; 6847 6848 // Compute next counter 6849 if (!x) { 6850 x = xi = 1; 6851 } else { 6852 x = x2 ^ d[d[d[x8 ^ x2]]]; 6853 xi ^= d[d[xi]]; 6854 } 6855 } 6856 }()); 6857 6858 // Precomputed Rcon lookup 6859 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; 6860 6861 /** 6862 * AES block cipher algorithm. 6863 */ 6864 var AES = C_algo.AES = BlockCipher.extend({ 6865 _doReset: function () { 6866 // Skip reset of nRounds has been set before and key did not change 6867 if (this._nRounds && this._keyPriorReset === this._key) { 6868 return; 6869 } 6870 6871 // Shortcuts 6872 var key = this._keyPriorReset = this._key; 6873 var keyWords = key.words; 6874 var keySize = key.sigBytes / 4; 6875 6876 // Compute number of rounds 6877 var nRounds = this._nRounds = keySize + 6; 6878 6879 // Compute number of key schedule rows 6880 var ksRows = (nRounds + 1) * 4; 6881 6882 // Compute key schedule 6883 var keySchedule = this._keySchedule = []; 6884 for (var ksRow = 0; ksRow < ksRows; ksRow++) { 6885 if (ksRow < keySize) { 6886 keySchedule[ksRow] = keyWords[ksRow]; 6887 } else { 6888 var t = keySchedule[ksRow - 1]; 6889 6890 if (!(ksRow % keySize)) { 6891 // Rot word 6892 t = (t << 8) | (t >>> 24); 6893 6894 // Sub word 6895 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; 6896 6897 // Mix Rcon 6898 t ^= RCON[(ksRow / keySize) | 0] << 24; 6899 } else if (keySize > 6 && ksRow % keySize == 4) { 6900 // Sub word 6901 t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; 6902 } 6903 6904 keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; 6905 } 6906 } 6907 6908 // Compute inv key schedule 6909 var invKeySchedule = this._invKeySchedule = []; 6910 for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { 6911 var ksRow = ksRows - invKsRow; 6912 6913 if (invKsRow % 4) { 6914 var t = keySchedule[ksRow]; 6915 } else { 6916 var t = keySchedule[ksRow - 4]; 6917 } 6918 6919 if (invKsRow < 4 || ksRow <= 4) { 6920 invKeySchedule[invKsRow] = t; 6921 } else { 6922 invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ 6923 INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; 6924 } 6925 } 6926 }, 6927 6928 encryptBlock: function (M, offset) { 6929 this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); 6930 }, 6931 6932 decryptBlock: function (M, offset) { 6933 // Swap 2nd and 4th rows 6934 var t = M[offset + 1]; 6935 M[offset + 1] = M[offset + 3]; 6936 M[offset + 3] = t; 6937 6938 this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); 6939 6940 // Inv swap 2nd and 4th rows 6941 var t = M[offset + 1]; 6942 M[offset + 1] = M[offset + 3]; 6943 M[offset + 3] = t; 6944 }, 6945 6946 _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { 6947 // Shortcut 6948 var nRounds = this._nRounds; 6949 6950 // Get input, add round key 6951 var s0 = M[offset] ^ keySchedule[0]; 6952 var s1 = M[offset + 1] ^ keySchedule[1]; 6953 var s2 = M[offset + 2] ^ keySchedule[2]; 6954 var s3 = M[offset + 3] ^ keySchedule[3]; 6955 6956 // Key schedule row counter 6957 var ksRow = 4; 6958 6959 // Rounds 6960 for (var round = 1; round < nRounds; round++) { 6961 // Shift rows, sub bytes, mix columns, add round key 6962 var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; 6963 var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; 6964 var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; 6965 var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; 6966 6967 // Update state 6968 s0 = t0; 6969 s1 = t1; 6970 s2 = t2; 6971 s3 = t3; 6972 } 6973 6974 // Shift rows, sub bytes, add round key 6975 var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; 6976 var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; 6977 var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; 6978 var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; 6979 6980 // Set output 6981 M[offset] = t0; 6982 M[offset + 1] = t1; 6983 M[offset + 2] = t2; 6984 M[offset + 3] = t3; 6985 }, 6986 6987 keySize: 256/32 6988 }); 6989 6990 /** 6991 * Shortcut functions to the cipher's object interface. 6992 * 6993 * @example 6994 * 6995 * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); 6996 * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); 6997 */ 6998 C.AES = BlockCipher._createHelper(AES); 6999 }()); 7000 7001 7002 return CryptoJS.AES; 7003 7004 })); 7005 },{"./cipher-core":52,"./core":53,"./enc-base64":54,"./evpkdf":56,"./md5":61}],52:[function(require,module,exports){ 7006 ;(function (root, factory) { 7007 if (typeof exports === "object") { 7008 // CommonJS 7009 module.exports = exports = factory(require("./core")); 7010 } 7011 else if (typeof define === "function" && define.amd) { 7012 // AMD 7013 define(["./core"], factory); 7014 } 7015 else { 7016 // Global (browser) 7017 factory(root.CryptoJS); 7018 } 7019 }(this, function (CryptoJS) { 7020 7021 /** 7022 * Cipher core components. 7023 */ 7024 CryptoJS.lib.Cipher || (function (undefined) { 7025 // Shortcuts 7026 var C = CryptoJS; 7027 var C_lib = C.lib; 7028 var Base = C_lib.Base; 7029 var WordArray = C_lib.WordArray; 7030 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; 7031 var C_enc = C.enc; 7032 var Utf8 = C_enc.Utf8; 7033 var Base64 = C_enc.Base64; 7034 var C_algo = C.algo; 7035 var EvpKDF = C_algo.EvpKDF; 7036 7037 /** 7038 * Abstract base cipher template. 7039 * 7040 * @property {number} keySize This cipher's key size. Default: 4 (128 bits) 7041 * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) 7042 * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. 7043 * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. 7044 */ 7045 var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ 7046 /** 7047 * Configuration options. 7048 * 7049 * @property {WordArray} iv The IV to use for this operation. 7050 */ 7051 cfg: Base.extend(), 7052 7053 /** 7054 * Creates this cipher in encryption mode. 7055 * 7056 * @param {WordArray} key The key. 7057 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7058 * 7059 * @return {Cipher} A cipher instance. 7060 * 7061 * @static 7062 * 7063 * @example 7064 * 7065 * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); 7066 */ 7067 createEncryptor: function (key, cfg) { 7068 return this.create(this._ENC_XFORM_MODE, key, cfg); 7069 }, 7070 7071 /** 7072 * Creates this cipher in decryption mode. 7073 * 7074 * @param {WordArray} key The key. 7075 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7076 * 7077 * @return {Cipher} A cipher instance. 7078 * 7079 * @static 7080 * 7081 * @example 7082 * 7083 * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); 7084 */ 7085 createDecryptor: function (key, cfg) { 7086 return this.create(this._DEC_XFORM_MODE, key, cfg); 7087 }, 7088 7089 /** 7090 * Initializes a newly created cipher. 7091 * 7092 * @param {number} xformMode Either the encryption or decryption transormation mode constant. 7093 * @param {WordArray} key The key. 7094 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7095 * 7096 * @example 7097 * 7098 * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); 7099 */ 7100 init: function (xformMode, key, cfg) { 7101 // Apply config defaults 7102 this.cfg = this.cfg.extend(cfg); 7103 7104 // Store transform mode and key 7105 this._xformMode = xformMode; 7106 this._key = key; 7107 7108 // Set initial values 7109 this.reset(); 7110 }, 7111 7112 /** 7113 * Resets this cipher to its initial state. 7114 * 7115 * @example 7116 * 7117 * cipher.reset(); 7118 */ 7119 reset: function () { 7120 // Reset data buffer 7121 BufferedBlockAlgorithm.reset.call(this); 7122 7123 // Perform concrete-cipher logic 7124 this._doReset(); 7125 }, 7126 7127 /** 7128 * Adds data to be encrypted or decrypted. 7129 * 7130 * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. 7131 * 7132 * @return {WordArray} The data after processing. 7133 * 7134 * @example 7135 * 7136 * var encrypted = cipher.process('data'); 7137 * var encrypted = cipher.process(wordArray); 7138 */ 7139 process: function (dataUpdate) { 7140 // Append 7141 this._append(dataUpdate); 7142 7143 // Process available blocks 7144 return this._process(); 7145 }, 7146 7147 /** 7148 * Finalizes the encryption or decryption process. 7149 * Note that the finalize operation is effectively a destructive, read-once operation. 7150 * 7151 * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. 7152 * 7153 * @return {WordArray} The data after final processing. 7154 * 7155 * @example 7156 * 7157 * var encrypted = cipher.finalize(); 7158 * var encrypted = cipher.finalize('data'); 7159 * var encrypted = cipher.finalize(wordArray); 7160 */ 7161 finalize: function (dataUpdate) { 7162 // Final data update 7163 if (dataUpdate) { 7164 this._append(dataUpdate); 7165 } 7166 7167 // Perform concrete-cipher logic 7168 var finalProcessedData = this._doFinalize(); 7169 7170 return finalProcessedData; 7171 }, 7172 7173 keySize: 128/32, 7174 7175 ivSize: 128/32, 7176 7177 _ENC_XFORM_MODE: 1, 7178 7179 _DEC_XFORM_MODE: 2, 7180 7181 /** 7182 * Creates shortcut functions to a cipher's object interface. 7183 * 7184 * @param {Cipher} cipher The cipher to create a helper for. 7185 * 7186 * @return {Object} An object with encrypt and decrypt shortcut functions. 7187 * 7188 * @static 7189 * 7190 * @example 7191 * 7192 * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); 7193 */ 7194 _createHelper: (function () { 7195 function selectCipherStrategy(key) { 7196 if (typeof key == 'string') { 7197 return PasswordBasedCipher; 7198 } else { 7199 return SerializableCipher; 7200 } 7201 } 7202 7203 return function (cipher) { 7204 return { 7205 encrypt: function (message, key, cfg) { 7206 return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); 7207 }, 7208 7209 decrypt: function (ciphertext, key, cfg) { 7210 return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); 7211 } 7212 }; 7213 }; 7214 }()) 7215 }); 7216 7217 /** 7218 * Abstract base stream cipher template. 7219 * 7220 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) 7221 */ 7222 var StreamCipher = C_lib.StreamCipher = Cipher.extend({ 7223 _doFinalize: function () { 7224 // Process partial blocks 7225 var finalProcessedBlocks = this._process(!!'flush'); 7226 7227 return finalProcessedBlocks; 7228 }, 7229 7230 blockSize: 1 7231 }); 7232 7233 /** 7234 * Mode namespace. 7235 */ 7236 var C_mode = C.mode = {}; 7237 7238 /** 7239 * Abstract base block cipher mode template. 7240 */ 7241 var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ 7242 /** 7243 * Creates this mode for encryption. 7244 * 7245 * @param {Cipher} cipher A block cipher instance. 7246 * @param {Array} iv The IV words. 7247 * 7248 * @static 7249 * 7250 * @example 7251 * 7252 * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); 7253 */ 7254 createEncryptor: function (cipher, iv) { 7255 return this.Encryptor.create(cipher, iv); 7256 }, 7257 7258 /** 7259 * Creates this mode for decryption. 7260 * 7261 * @param {Cipher} cipher A block cipher instance. 7262 * @param {Array} iv The IV words. 7263 * 7264 * @static 7265 * 7266 * @example 7267 * 7268 * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); 7269 */ 7270 createDecryptor: function (cipher, iv) { 7271 return this.Decryptor.create(cipher, iv); 7272 }, 7273 7274 /** 7275 * Initializes a newly created mode. 7276 * 7277 * @param {Cipher} cipher A block cipher instance. 7278 * @param {Array} iv The IV words. 7279 * 7280 * @example 7281 * 7282 * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); 7283 */ 7284 init: function (cipher, iv) { 7285 this._cipher = cipher; 7286 this._iv = iv; 7287 } 7288 }); 7289 7290 /** 7291 * Cipher Block Chaining mode. 7292 */ 7293 var CBC = C_mode.CBC = (function () { 7294 /** 7295 * Abstract base CBC mode. 7296 */ 7297 var CBC = BlockCipherMode.extend(); 7298 7299 /** 7300 * CBC encryptor. 7301 */ 7302 CBC.Encryptor = CBC.extend({ 7303 /** 7304 * Processes the data block at offset. 7305 * 7306 * @param {Array} words The data words to operate on. 7307 * @param {number} offset The offset where the block starts. 7308 * 7309 * @example 7310 * 7311 * mode.processBlock(data.words, offset); 7312 */ 7313 processBlock: function (words, offset) { 7314 // Shortcuts 7315 var cipher = this._cipher; 7316 var blockSize = cipher.blockSize; 7317 7318 // XOR and encrypt 7319 xorBlock.call(this, words, offset, blockSize); 7320 cipher.encryptBlock(words, offset); 7321 7322 // Remember this block to use with next block 7323 this._prevBlock = words.slice(offset, offset + blockSize); 7324 } 7325 }); 7326 7327 /** 7328 * CBC decryptor. 7329 */ 7330 CBC.Decryptor = CBC.extend({ 7331 /** 7332 * Processes the data block at offset. 7333 * 7334 * @param {Array} words The data words to operate on. 7335 * @param {number} offset The offset where the block starts. 7336 * 7337 * @example 7338 * 7339 * mode.processBlock(data.words, offset); 7340 */ 7341 processBlock: function (words, offset) { 7342 // Shortcuts 7343 var cipher = this._cipher; 7344 var blockSize = cipher.blockSize; 7345 7346 // Remember this block to use with next block 7347 var thisBlock = words.slice(offset, offset + blockSize); 7348 7349 // Decrypt and XOR 7350 cipher.decryptBlock(words, offset); 7351 xorBlock.call(this, words, offset, blockSize); 7352 7353 // This block becomes the previous block 7354 this._prevBlock = thisBlock; 7355 } 7356 }); 7357 7358 function xorBlock(words, offset, blockSize) { 7359 // Shortcut 7360 var iv = this._iv; 7361 7362 // Choose mixing block 7363 if (iv) { 7364 var block = iv; 7365 7366 // Remove IV for subsequent blocks 7367 this._iv = undefined; 7368 } else { 7369 var block = this._prevBlock; 7370 } 7371 7372 // XOR blocks 7373 for (var i = 0; i < blockSize; i++) { 7374 words[offset + i] ^= block[i]; 7375 } 7376 } 7377 7378 return CBC; 7379 }()); 7380 7381 /** 7382 * Padding namespace. 7383 */ 7384 var C_pad = C.pad = {}; 7385 7386 /** 7387 * PKCS #5/7 padding strategy. 7388 */ 7389 var Pkcs7 = C_pad.Pkcs7 = { 7390 /** 7391 * Pads data using the algorithm defined in PKCS #5/7. 7392 * 7393 * @param {WordArray} data The data to pad. 7394 * @param {number} blockSize The multiple that the data should be padded to. 7395 * 7396 * @static 7397 * 7398 * @example 7399 * 7400 * CryptoJS.pad.Pkcs7.pad(wordArray, 4); 7401 */ 7402 pad: function (data, blockSize) { 7403 // Shortcut 7404 var blockSizeBytes = blockSize * 4; 7405 7406 // Count padding bytes 7407 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; 7408 7409 // Create padding word 7410 var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; 7411 7412 // Create padding 7413 var paddingWords = []; 7414 for (var i = 0; i < nPaddingBytes; i += 4) { 7415 paddingWords.push(paddingWord); 7416 } 7417 var padding = WordArray.create(paddingWords, nPaddingBytes); 7418 7419 // Add padding 7420 data.concat(padding); 7421 }, 7422 7423 /** 7424 * Unpads data that had been padded using the algorithm defined in PKCS #5/7. 7425 * 7426 * @param {WordArray} data The data to unpad. 7427 * 7428 * @static 7429 * 7430 * @example 7431 * 7432 * CryptoJS.pad.Pkcs7.unpad(wordArray); 7433 */ 7434 unpad: function (data) { 7435 // Get number of padding bytes from last byte 7436 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; 7437 7438 // Remove padding 7439 data.sigBytes -= nPaddingBytes; 7440 } 7441 }; 7442 7443 /** 7444 * Abstract base block cipher template. 7445 * 7446 * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) 7447 */ 7448 var BlockCipher = C_lib.BlockCipher = Cipher.extend({ 7449 /** 7450 * Configuration options. 7451 * 7452 * @property {Mode} mode The block mode to use. Default: CBC 7453 * @property {Padding} padding The padding strategy to use. Default: Pkcs7 7454 */ 7455 cfg: Cipher.cfg.extend({ 7456 mode: CBC, 7457 padding: Pkcs7 7458 }), 7459 7460 reset: function () { 7461 // Reset cipher 7462 Cipher.reset.call(this); 7463 7464 // Shortcuts 7465 var cfg = this.cfg; 7466 var iv = cfg.iv; 7467 var mode = cfg.mode; 7468 7469 // Reset block mode 7470 if (this._xformMode == this._ENC_XFORM_MODE) { 7471 var modeCreator = mode.createEncryptor; 7472 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { 7473 var modeCreator = mode.createDecryptor; 7474 7475 // Keep at least one block in the buffer for unpadding 7476 this._minBufferSize = 1; 7477 } 7478 this._mode = modeCreator.call(mode, this, iv && iv.words); 7479 }, 7480 7481 _doProcessBlock: function (words, offset) { 7482 this._mode.processBlock(words, offset); 7483 }, 7484 7485 _doFinalize: function () { 7486 // Shortcut 7487 var padding = this.cfg.padding; 7488 7489 // Finalize 7490 if (this._xformMode == this._ENC_XFORM_MODE) { 7491 // Pad data 7492 padding.pad(this._data, this.blockSize); 7493 7494 // Process final blocks 7495 var finalProcessedBlocks = this._process(!!'flush'); 7496 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { 7497 // Process final blocks 7498 var finalProcessedBlocks = this._process(!!'flush'); 7499 7500 // Unpad data 7501 padding.unpad(finalProcessedBlocks); 7502 } 7503 7504 return finalProcessedBlocks; 7505 }, 7506 7507 blockSize: 128/32 7508 }); 7509 7510 /** 7511 * A collection of cipher parameters. 7512 * 7513 * @property {WordArray} ciphertext The raw ciphertext. 7514 * @property {WordArray} key The key to this ciphertext. 7515 * @property {WordArray} iv The IV used in the ciphering operation. 7516 * @property {WordArray} salt The salt used with a key derivation function. 7517 * @property {Cipher} algorithm The cipher algorithm. 7518 * @property {Mode} mode The block mode used in the ciphering operation. 7519 * @property {Padding} padding The padding scheme used in the ciphering operation. 7520 * @property {number} blockSize The block size of the cipher. 7521 * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. 7522 */ 7523 var CipherParams = C_lib.CipherParams = Base.extend({ 7524 /** 7525 * Initializes a newly created cipher params object. 7526 * 7527 * @param {Object} cipherParams An object with any of the possible cipher parameters. 7528 * 7529 * @example 7530 * 7531 * var cipherParams = CryptoJS.lib.CipherParams.create({ 7532 * ciphertext: ciphertextWordArray, 7533 * key: keyWordArray, 7534 * iv: ivWordArray, 7535 * salt: saltWordArray, 7536 * algorithm: CryptoJS.algo.AES, 7537 * mode: CryptoJS.mode.CBC, 7538 * padding: CryptoJS.pad.PKCS7, 7539 * blockSize: 4, 7540 * formatter: CryptoJS.format.OpenSSL 7541 * }); 7542 */ 7543 init: function (cipherParams) { 7544 this.mixIn(cipherParams); 7545 }, 7546 7547 /** 7548 * Converts this cipher params object to a string. 7549 * 7550 * @param {Format} formatter (Optional) The formatting strategy to use. 7551 * 7552 * @return {string} The stringified cipher params. 7553 * 7554 * @throws Error If neither the formatter nor the default formatter is set. 7555 * 7556 * @example 7557 * 7558 * var string = cipherParams + ''; 7559 * var string = cipherParams.toString(); 7560 * var string = cipherParams.toString(CryptoJS.format.OpenSSL); 7561 */ 7562 toString: function (formatter) { 7563 return (formatter || this.formatter).stringify(this); 7564 } 7565 }); 7566 7567 /** 7568 * Format namespace. 7569 */ 7570 var C_format = C.format = {}; 7571 7572 /** 7573 * OpenSSL formatting strategy. 7574 */ 7575 var OpenSSLFormatter = C_format.OpenSSL = { 7576 /** 7577 * Converts a cipher params object to an OpenSSL-compatible string. 7578 * 7579 * @param {CipherParams} cipherParams The cipher params object. 7580 * 7581 * @return {string} The OpenSSL-compatible string. 7582 * 7583 * @static 7584 * 7585 * @example 7586 * 7587 * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); 7588 */ 7589 stringify: function (cipherParams) { 7590 // Shortcuts 7591 var ciphertext = cipherParams.ciphertext; 7592 var salt = cipherParams.salt; 7593 7594 // Format 7595 if (salt) { 7596 var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); 7597 } else { 7598 var wordArray = ciphertext; 7599 } 7600 7601 return wordArray.toString(Base64); 7602 }, 7603 7604 /** 7605 * Converts an OpenSSL-compatible string to a cipher params object. 7606 * 7607 * @param {string} openSSLStr The OpenSSL-compatible string. 7608 * 7609 * @return {CipherParams} The cipher params object. 7610 * 7611 * @static 7612 * 7613 * @example 7614 * 7615 * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); 7616 */ 7617 parse: function (openSSLStr) { 7618 // Parse base64 7619 var ciphertext = Base64.parse(openSSLStr); 7620 7621 // Shortcut 7622 var ciphertextWords = ciphertext.words; 7623 7624 // Test for salt 7625 if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { 7626 // Extract salt 7627 var salt = WordArray.create(ciphertextWords.slice(2, 4)); 7628 7629 // Remove salt from ciphertext 7630 ciphertextWords.splice(0, 4); 7631 ciphertext.sigBytes -= 16; 7632 } 7633 7634 return CipherParams.create({ ciphertext: ciphertext, salt: salt }); 7635 } 7636 }; 7637 7638 /** 7639 * A cipher wrapper that returns ciphertext as a serializable cipher params object. 7640 */ 7641 var SerializableCipher = C_lib.SerializableCipher = Base.extend({ 7642 /** 7643 * Configuration options. 7644 * 7645 * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL 7646 */ 7647 cfg: Base.extend({ 7648 format: OpenSSLFormatter 7649 }), 7650 7651 /** 7652 * Encrypts a message. 7653 * 7654 * @param {Cipher} cipher The cipher algorithm to use. 7655 * @param {WordArray|string} message The message to encrypt. 7656 * @param {WordArray} key The key. 7657 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7658 * 7659 * @return {CipherParams} A cipher params object. 7660 * 7661 * @static 7662 * 7663 * @example 7664 * 7665 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); 7666 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); 7667 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); 7668 */ 7669 encrypt: function (cipher, message, key, cfg) { 7670 // Apply config defaults 7671 cfg = this.cfg.extend(cfg); 7672 7673 // Encrypt 7674 var encryptor = cipher.createEncryptor(key, cfg); 7675 var ciphertext = encryptor.finalize(message); 7676 7677 // Shortcut 7678 var cipherCfg = encryptor.cfg; 7679 7680 // Create and return serializable cipher params 7681 return CipherParams.create({ 7682 ciphertext: ciphertext, 7683 key: key, 7684 iv: cipherCfg.iv, 7685 algorithm: cipher, 7686 mode: cipherCfg.mode, 7687 padding: cipherCfg.padding, 7688 blockSize: cipher.blockSize, 7689 formatter: cfg.format 7690 }); 7691 }, 7692 7693 /** 7694 * Decrypts serialized ciphertext. 7695 * 7696 * @param {Cipher} cipher The cipher algorithm to use. 7697 * @param {CipherParams|string} ciphertext The ciphertext to decrypt. 7698 * @param {WordArray} key The key. 7699 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7700 * 7701 * @return {WordArray} The plaintext. 7702 * 7703 * @static 7704 * 7705 * @example 7706 * 7707 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); 7708 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); 7709 */ 7710 decrypt: function (cipher, ciphertext, key, cfg) { 7711 // Apply config defaults 7712 cfg = this.cfg.extend(cfg); 7713 7714 // Convert string to CipherParams 7715 ciphertext = this._parse(ciphertext, cfg.format); 7716 7717 // Decrypt 7718 var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); 7719 7720 return plaintext; 7721 }, 7722 7723 /** 7724 * Converts serialized ciphertext to CipherParams, 7725 * else assumed CipherParams already and returns ciphertext unchanged. 7726 * 7727 * @param {CipherParams|string} ciphertext The ciphertext. 7728 * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. 7729 * 7730 * @return {CipherParams} The unserialized ciphertext. 7731 * 7732 * @static 7733 * 7734 * @example 7735 * 7736 * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); 7737 */ 7738 _parse: function (ciphertext, format) { 7739 if (typeof ciphertext == 'string') { 7740 return format.parse(ciphertext, this); 7741 } else { 7742 return ciphertext; 7743 } 7744 } 7745 }); 7746 7747 /** 7748 * Key derivation function namespace. 7749 */ 7750 var C_kdf = C.kdf = {}; 7751 7752 /** 7753 * OpenSSL key derivation function. 7754 */ 7755 var OpenSSLKdf = C_kdf.OpenSSL = { 7756 /** 7757 * Derives a key and IV from a password. 7758 * 7759 * @param {string} password The password to derive from. 7760 * @param {number} keySize The size in words of the key to generate. 7761 * @param {number} ivSize The size in words of the IV to generate. 7762 * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. 7763 * 7764 * @return {CipherParams} A cipher params object with the key, IV, and salt. 7765 * 7766 * @static 7767 * 7768 * @example 7769 * 7770 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); 7771 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); 7772 */ 7773 execute: function (password, keySize, ivSize, salt) { 7774 // Generate random salt 7775 if (!salt) { 7776 salt = WordArray.random(64/8); 7777 } 7778 7779 // Derive key and IV 7780 var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); 7781 7782 // Separate key and IV 7783 var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); 7784 key.sigBytes = keySize * 4; 7785 7786 // Return params 7787 return CipherParams.create({ key: key, iv: iv, salt: salt }); 7788 } 7789 }; 7790 7791 /** 7792 * A serializable cipher wrapper that derives the key from a password, 7793 * and returns ciphertext as a serializable cipher params object. 7794 */ 7795 var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ 7796 /** 7797 * Configuration options. 7798 * 7799 * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL 7800 */ 7801 cfg: SerializableCipher.cfg.extend({ 7802 kdf: OpenSSLKdf 7803 }), 7804 7805 /** 7806 * Encrypts a message using a password. 7807 * 7808 * @param {Cipher} cipher The cipher algorithm to use. 7809 * @param {WordArray|string} message The message to encrypt. 7810 * @param {string} password The password. 7811 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7812 * 7813 * @return {CipherParams} A cipher params object. 7814 * 7815 * @static 7816 * 7817 * @example 7818 * 7819 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); 7820 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); 7821 */ 7822 encrypt: function (cipher, message, password, cfg) { 7823 // Apply config defaults 7824 cfg = this.cfg.extend(cfg); 7825 7826 // Derive key and other params 7827 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); 7828 7829 // Add IV to config 7830 cfg.iv = derivedParams.iv; 7831 7832 // Encrypt 7833 var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); 7834 7835 // Mix in derived params 7836 ciphertext.mixIn(derivedParams); 7837 7838 return ciphertext; 7839 }, 7840 7841 /** 7842 * Decrypts serialized ciphertext using a password. 7843 * 7844 * @param {Cipher} cipher The cipher algorithm to use. 7845 * @param {CipherParams|string} ciphertext The ciphertext to decrypt. 7846 * @param {string} password The password. 7847 * @param {Object} cfg (Optional) The configuration options to use for this operation. 7848 * 7849 * @return {WordArray} The plaintext. 7850 * 7851 * @static 7852 * 7853 * @example 7854 * 7855 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); 7856 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); 7857 */ 7858 decrypt: function (cipher, ciphertext, password, cfg) { 7859 // Apply config defaults 7860 cfg = this.cfg.extend(cfg); 7861 7862 // Convert string to CipherParams 7863 ciphertext = this._parse(ciphertext, cfg.format); 7864 7865 // Derive key and other params 7866 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); 7867 7868 // Add IV to config 7869 cfg.iv = derivedParams.iv; 7870 7871 // Decrypt 7872 var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); 7873 7874 return plaintext; 7875 } 7876 }); 7877 }()); 7878 7879 7880 })); 7881 },{"./core":53}],53:[function(require,module,exports){ 7882 ;(function (root, factory) { 7883 if (typeof exports === "object") { 7884 // CommonJS 7885 module.exports = exports = factory(); 7886 } 7887 else if (typeof define === "function" && define.amd) { 7888 // AMD 7889 define([], factory); 7890 } 7891 else { 7892 // Global (browser) 7893 root.CryptoJS = factory(); 7894 } 7895 }(this, function () { 7896 7897 /** 7898 * CryptoJS core components. 7899 */ 7900 var CryptoJS = CryptoJS || (function (Math, undefined) { 7901 /* 7902 * Local polyfil of Object.create 7903 */ 7904 var create = Object.create || (function () { 7905 function F() {}; 7906 7907 return function (obj) { 7908 var subtype; 7909 7910 F.prototype = obj; 7911 7912 subtype = new F(); 7913 7914 F.prototype = null; 7915 7916 return subtype; 7917 }; 7918 }()) 7919 7920 /** 7921 * CryptoJS namespace. 7922 */ 7923 var C = {}; 7924 7925 /** 7926 * Library namespace. 7927 */ 7928 var C_lib = C.lib = {}; 7929 7930 /** 7931 * Base object for prototypal inheritance. 7932 */ 7933 var Base = C_lib.Base = (function () { 7934 7935 7936 return { 7937 /** 7938 * Creates a new object that inherits from this object. 7939 * 7940 * @param {Object} overrides Properties to copy into the new object. 7941 * 7942 * @return {Object} The new object. 7943 * 7944 * @static 7945 * 7946 * @example 7947 * 7948 * var MyType = CryptoJS.lib.Base.extend({ 7949 * field: 'value', 7950 * 7951 * method: function () { 7952 * } 7953 * }); 7954 */ 7955 extend: function (overrides) { 7956 // Spawn 7957 var subtype = create(this); 7958 7959 // Augment 7960 if (overrides) { 7961 subtype.mixIn(overrides); 7962 } 7963 7964 // Create default initializer 7965 if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { 7966 subtype.init = function () { 7967 subtype.$super.init.apply(this, arguments); 7968 }; 7969 } 7970 7971 // Initializer's prototype is the subtype object 7972 subtype.init.prototype = subtype; 7973 7974 // Reference supertype 7975 subtype.$super = this; 7976 7977 return subtype; 7978 }, 7979 7980 /** 7981 * Extends this object and runs the init method. 7982 * Arguments to create() will be passed to init(). 7983 * 7984 * @return {Object} The new object. 7985 * 7986 * @static 7987 * 7988 * @example 7989 * 7990 * var instance = MyType.create(); 7991 */ 7992 create: function () { 7993 var instance = this.extend(); 7994 instance.init.apply(instance, arguments); 7995 7996 return instance; 7997 }, 7998 7999 /** 8000 * Initializes a newly created object. 8001 * Override this method to add some logic when your objects are created. 8002 * 8003 * @example 8004 * 8005 * var MyType = CryptoJS.lib.Base.extend({ 8006 * init: function () { 8007 * // ... 8008 * } 8009 * }); 8010 */ 8011 init: function () { 8012 }, 8013 8014 /** 8015 * Copies properties into this object. 8016 * 8017 * @param {Object} properties The properties to mix in. 8018 * 8019 * @example 8020 * 8021 * MyType.mixIn({ 8022 * field: 'value' 8023 * }); 8024 */ 8025 mixIn: function (properties) { 8026 for (var propertyName in properties) { 8027 if (properties.hasOwnProperty(propertyName)) { 8028 this[propertyName] = properties[propertyName]; 8029 } 8030 } 8031 8032 // IE won't copy toString using the loop above 8033 if (properties.hasOwnProperty('toString')) { 8034 this.toString = properties.toString; 8035 } 8036 }, 8037 8038 /** 8039 * Creates a copy of this object. 8040 * 8041 * @return {Object} The clone. 8042 * 8043 * @example 8044 * 8045 * var clone = instance.clone(); 8046 */ 8047 clone: function () { 8048 return this.init.prototype.extend(this); 8049 } 8050 }; 8051 }()); 8052 8053 /** 8054 * An array of 32-bit words. 8055 * 8056 * @property {Array} words The array of 32-bit words. 8057 * @property {number} sigBytes The number of significant bytes in this word array. 8058 */ 8059 var WordArray = C_lib.WordArray = Base.extend({ 8060 /** 8061 * Initializes a newly created word array. 8062 * 8063 * @param {Array} words (Optional) An array of 32-bit words. 8064 * @param {number} sigBytes (Optional) The number of significant bytes in the words. 8065 * 8066 * @example 8067 * 8068 * var wordArray = CryptoJS.lib.WordArray.create(); 8069 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); 8070 * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); 8071 */ 8072 init: function (words, sigBytes) { 8073 words = this.words = words || []; 8074 8075 if (sigBytes != undefined) { 8076 this.sigBytes = sigBytes; 8077 } else { 8078 this.sigBytes = words.length * 4; 8079 } 8080 }, 8081 8082 /** 8083 * Converts this word array to a string. 8084 * 8085 * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex 8086 * 8087 * @return {string} The stringified word array. 8088 * 8089 * @example 8090 * 8091 * var string = wordArray + ''; 8092 * var string = wordArray.toString(); 8093 * var string = wordArray.toString(CryptoJS.enc.Utf8); 8094 */ 8095 toString: function (encoder) { 8096 return (encoder || Hex).stringify(this); 8097 }, 8098 8099 /** 8100 * Concatenates a word array to this word array. 8101 * 8102 * @param {WordArray} wordArray The word array to append. 8103 * 8104 * @return {WordArray} This word array. 8105 * 8106 * @example 8107 * 8108 * wordArray1.concat(wordArray2); 8109 */ 8110 concat: function (wordArray) { 8111 // Shortcuts 8112 var thisWords = this.words; 8113 var thatWords = wordArray.words; 8114 var thisSigBytes = this.sigBytes; 8115 var thatSigBytes = wordArray.sigBytes; 8116 8117 // Clamp excess bits 8118 this.clamp(); 8119 8120 // Concat 8121 if (thisSigBytes % 4) { 8122 // Copy one byte at a time 8123 for (var i = 0; i < thatSigBytes; i++) { 8124 var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 8125 thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); 8126 } 8127 } else { 8128 // Copy one word at a time 8129 for (var i = 0; i < thatSigBytes; i += 4) { 8130 thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; 8131 } 8132 } 8133 this.sigBytes += thatSigBytes; 8134 8135 // Chainable 8136 return this; 8137 }, 8138 8139 /** 8140 * Removes insignificant bits. 8141 * 8142 * @example 8143 * 8144 * wordArray.clamp(); 8145 */ 8146 clamp: function () { 8147 // Shortcuts 8148 var words = this.words; 8149 var sigBytes = this.sigBytes; 8150 8151 // Clamp 8152 words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); 8153 words.length = Math.ceil(sigBytes / 4); 8154 }, 8155 8156 /** 8157 * Creates a copy of this word array. 8158 * 8159 * @return {WordArray} The clone. 8160 * 8161 * @example 8162 * 8163 * var clone = wordArray.clone(); 8164 */ 8165 clone: function () { 8166 var clone = Base.clone.call(this); 8167 clone.words = this.words.slice(0); 8168 8169 return clone; 8170 }, 8171 8172 /** 8173 * Creates a word array filled with random bytes. 8174 * 8175 * @param {number} nBytes The number of random bytes to generate. 8176 * 8177 * @return {WordArray} The random word array. 8178 * 8179 * @static 8180 * 8181 * @example 8182 * 8183 * var wordArray = CryptoJS.lib.WordArray.random(16); 8184 */ 8185 random: function (nBytes) { 8186 var words = []; 8187 8188 var r = (function (m_w) { 8189 var m_w = m_w; 8190 var m_z = 0x3ade68b1; 8191 var mask = 0xffffffff; 8192 8193 return function () { 8194 m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; 8195 m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; 8196 var result = ((m_z << 0x10) + m_w) & mask; 8197 result /= 0x100000000; 8198 result += 0.5; 8199 return result * (Math.random() > .5 ? 1 : -1); 8200 } 8201 }); 8202 8203 for (var i = 0, rcache; i < nBytes; i += 4) { 8204 var _r = r((rcache || Math.random()) * 0x100000000); 8205 8206 rcache = _r() * 0x3ade67b7; 8207 words.push((_r() * 0x100000000) | 0); 8208 } 8209 8210 return new WordArray.init(words, nBytes); 8211 } 8212 }); 8213 8214 /** 8215 * Encoder namespace. 8216 */ 8217 var C_enc = C.enc = {}; 8218 8219 /** 8220 * Hex encoding strategy. 8221 */ 8222 var Hex = C_enc.Hex = { 8223 /** 8224 * Converts a word array to a hex string. 8225 * 8226 * @param {WordArray} wordArray The word array. 8227 * 8228 * @return {string} The hex string. 8229 * 8230 * @static 8231 * 8232 * @example 8233 * 8234 * var hexString = CryptoJS.enc.Hex.stringify(wordArray); 8235 */ 8236 stringify: function (wordArray) { 8237 // Shortcuts 8238 var words = wordArray.words; 8239 var sigBytes = wordArray.sigBytes; 8240 8241 // Convert 8242 var hexChars = []; 8243 for (var i = 0; i < sigBytes; i++) { 8244 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 8245 hexChars.push((bite >>> 4).toString(16)); 8246 hexChars.push((bite & 0x0f).toString(16)); 8247 } 8248 8249 return hexChars.join(''); 8250 }, 8251 8252 /** 8253 * Converts a hex string to a word array. 8254 * 8255 * @param {string} hexStr The hex string. 8256 * 8257 * @return {WordArray} The word array. 8258 * 8259 * @static 8260 * 8261 * @example 8262 * 8263 * var wordArray = CryptoJS.enc.Hex.parse(hexString); 8264 */ 8265 parse: function (hexStr) { 8266 // Shortcut 8267 var hexStrLength = hexStr.length; 8268 8269 // Convert 8270 var words = []; 8271 for (var i = 0; i < hexStrLength; i += 2) { 8272 words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); 8273 } 8274 8275 return new WordArray.init(words, hexStrLength / 2); 8276 } 8277 }; 8278 8279 /** 8280 * Latin1 encoding strategy. 8281 */ 8282 var Latin1 = C_enc.Latin1 = { 8283 /** 8284 * Converts a word array to a Latin1 string. 8285 * 8286 * @param {WordArray} wordArray The word array. 8287 * 8288 * @return {string} The Latin1 string. 8289 * 8290 * @static 8291 * 8292 * @example 8293 * 8294 * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); 8295 */ 8296 stringify: function (wordArray) { 8297 // Shortcuts 8298 var words = wordArray.words; 8299 var sigBytes = wordArray.sigBytes; 8300 8301 // Convert 8302 var latin1Chars = []; 8303 for (var i = 0; i < sigBytes; i++) { 8304 var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 8305 latin1Chars.push(String.fromCharCode(bite)); 8306 } 8307 8308 return latin1Chars.join(''); 8309 }, 8310 8311 /** 8312 * Converts a Latin1 string to a word array. 8313 * 8314 * @param {string} latin1Str The Latin1 string. 8315 * 8316 * @return {WordArray} The word array. 8317 * 8318 * @static 8319 * 8320 * @example 8321 * 8322 * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); 8323 */ 8324 parse: function (latin1Str) { 8325 // Shortcut 8326 var latin1StrLength = latin1Str.length; 8327 8328 // Convert 8329 var words = []; 8330 for (var i = 0; i < latin1StrLength; i++) { 8331 words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); 8332 } 8333 8334 return new WordArray.init(words, latin1StrLength); 8335 } 8336 }; 8337 8338 /** 8339 * UTF-8 encoding strategy. 8340 */ 8341 var Utf8 = C_enc.Utf8 = { 8342 /** 8343 * Converts a word array to a UTF-8 string. 8344 * 8345 * @param {WordArray} wordArray The word array. 8346 * 8347 * @return {string} The UTF-8 string. 8348 * 8349 * @static 8350 * 8351 * @example 8352 * 8353 * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); 8354 */ 8355 stringify: function (wordArray) { 8356 try { 8357 return decodeURIComponent(escape(Latin1.stringify(wordArray))); 8358 } catch (e) { 8359 throw new Error('Malformed UTF-8 data'); 8360 } 8361 }, 8362 8363 /** 8364 * Converts a UTF-8 string to a word array. 8365 * 8366 * @param {string} utf8Str The UTF-8 string. 8367 * 8368 * @return {WordArray} The word array. 8369 * 8370 * @static 8371 * 8372 * @example 8373 * 8374 * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); 8375 */ 8376 parse: function (utf8Str) { 8377 return Latin1.parse(unescape(encodeURIComponent(utf8Str))); 8378 } 8379 }; 8380 8381 /** 8382 * Abstract buffered block algorithm template. 8383 * 8384 * The property blockSize must be implemented in a concrete subtype. 8385 * 8386 * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 8387 */ 8388 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ 8389 /** 8390 * Resets this block algorithm's data buffer to its initial state. 8391 * 8392 * @example 8393 * 8394 * bufferedBlockAlgorithm.reset(); 8395 */ 8396 reset: function () { 8397 // Initial values 8398 this._data = new WordArray.init(); 8399 this._nDataBytes = 0; 8400 }, 8401 8402 /** 8403 * Adds new data to this block algorithm's buffer. 8404 * 8405 * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. 8406 * 8407 * @example 8408 * 8409 * bufferedBlockAlgorithm._append('data'); 8410 * bufferedBlockAlgorithm._append(wordArray); 8411 */ 8412 _append: function (data) { 8413 // Convert string to WordArray, else assume WordArray already 8414 if (typeof data == 'string') { 8415 data = Utf8.parse(data); 8416 } 8417 8418 // Append 8419 this._data.concat(data); 8420 this._nDataBytes += data.sigBytes; 8421 }, 8422 8423 /** 8424 * Processes available data blocks. 8425 * 8426 * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. 8427 * 8428 * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. 8429 * 8430 * @return {WordArray} The processed data. 8431 * 8432 * @example 8433 * 8434 * var processedData = bufferedBlockAlgorithm._process(); 8435 * var processedData = bufferedBlockAlgorithm._process(!!'flush'); 8436 */ 8437 _process: function (doFlush) { 8438 // Shortcuts 8439 var data = this._data; 8440 var dataWords = data.words; 8441 var dataSigBytes = data.sigBytes; 8442 var blockSize = this.blockSize; 8443 var blockSizeBytes = blockSize * 4; 8444 8445 // Count blocks ready 8446 var nBlocksReady = dataSigBytes / blockSizeBytes; 8447 if (doFlush) { 8448 // Round up to include partial blocks 8449 nBlocksReady = Math.ceil(nBlocksReady); 8450 } else { 8451 // Round down to include only full blocks, 8452 // less the number of blocks that must remain in the buffer 8453 nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); 8454 } 8455 8456 // Count words ready 8457 var nWordsReady = nBlocksReady * blockSize; 8458 8459 // Count bytes ready 8460 var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); 8461 8462 // Process blocks 8463 if (nWordsReady) { 8464 for (var offset = 0; offset < nWordsReady; offset += blockSize) { 8465 // Perform concrete-algorithm logic 8466 this._doProcessBlock(dataWords, offset); 8467 } 8468 8469 // Remove processed words 8470 var processedWords = dataWords.splice(0, nWordsReady); 8471 data.sigBytes -= nBytesReady; 8472 } 8473 8474 // Return processed words 8475 return new WordArray.init(processedWords, nBytesReady); 8476 }, 8477 8478 /** 8479 * Creates a copy of this object. 8480 * 8481 * @return {Object} The clone. 8482 * 8483 * @example 8484 * 8485 * var clone = bufferedBlockAlgorithm.clone(); 8486 */ 8487 clone: function () { 8488 var clone = Base.clone.call(this); 8489 clone._data = this._data.clone(); 8490 8491 return clone; 8492 }, 8493 8494 _minBufferSize: 0 8495 }); 8496 8497 /** 8498 * Abstract hasher template. 8499 * 8500 * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) 8501 */ 8502 var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ 8503 /** 8504 * Configuration options. 8505 */ 8506 cfg: Base.extend(), 8507 8508 /** 8509 * Initializes a newly created hasher. 8510 * 8511 * @param {Object} cfg (Optional) The configuration options to use for this hash computation. 8512 * 8513 * @example 8514 * 8515 * var hasher = CryptoJS.algo.SHA256.create(); 8516 */ 8517 init: function (cfg) { 8518 // Apply config defaults 8519 this.cfg = this.cfg.extend(cfg); 8520 8521 // Set initial values 8522 this.reset(); 8523 }, 8524 8525 /** 8526 * Resets this hasher to its initial state. 8527 * 8528 * @example 8529 * 8530 * hasher.reset(); 8531 */ 8532 reset: function () { 8533 // Reset data buffer 8534 BufferedBlockAlgorithm.reset.call(this); 8535 8536 // Perform concrete-hasher logic 8537 this._doReset(); 8538 }, 8539 8540 /** 8541 * Updates this hasher with a message. 8542 * 8543 * @param {WordArray|string} messageUpdate The message to append. 8544 * 8545 * @return {Hasher} This hasher. 8546 * 8547 * @example 8548 * 8549 * hasher.update('message'); 8550 * hasher.update(wordArray); 8551 */ 8552 update: function (messageUpdate) { 8553 // Append 8554 this._append(messageUpdate); 8555 8556 // Update the hash 8557 this._process(); 8558 8559 // Chainable 8560 return this; 8561 }, 8562 8563 /** 8564 * Finalizes the hash computation. 8565 * Note that the finalize operation is effectively a destructive, read-once operation. 8566 * 8567 * @param {WordArray|string} messageUpdate (Optional) A final message update. 8568 * 8569 * @return {WordArray} The hash. 8570 * 8571 * @example 8572 * 8573 * var hash = hasher.finalize(); 8574 * var hash = hasher.finalize('message'); 8575 * var hash = hasher.finalize(wordArray); 8576 */ 8577 finalize: function (messageUpdate) { 8578 // Final message update 8579 if (messageUpdate) { 8580 this._append(messageUpdate); 8581 } 8582 8583 // Perform concrete-hasher logic 8584 var hash = this._doFinalize(); 8585 8586 return hash; 8587 }, 8588 8589 blockSize: 512/32, 8590 8591 /** 8592 * Creates a shortcut function to a hasher's object interface. 8593 * 8594 * @param {Hasher} hasher The hasher to create a helper for. 8595 * 8596 * @return {Function} The shortcut function. 8597 * 8598 * @static 8599 * 8600 * @example 8601 * 8602 * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); 8603 */ 8604 _createHelper: function (hasher) { 8605 return function (message, cfg) { 8606 return new hasher.init(cfg).finalize(message); 8607 }; 8608 }, 8609 8610 /** 8611 * Creates a shortcut function to the HMAC's object interface. 8612 * 8613 * @param {Hasher} hasher The hasher to use in this HMAC helper. 8614 * 8615 * @return {Function} The shortcut function. 8616 * 8617 * @static 8618 * 8619 * @example 8620 * 8621 * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); 8622 */ 8623 _createHmacHelper: function (hasher) { 8624 return function (message, key) { 8625 return new C_algo.HMAC.init(hasher, key).finalize(message); 8626 }; 8627 } 8628 }); 8629 8630 /** 8631 * Algorithm namespace. 8632 */ 8633 var C_algo = C.algo = {}; 8634 8635 return C; 8636 }(Math)); 8637 8638 8639 return CryptoJS; 8640 8641 })); 8642 },{}],54:[function(require,module,exports){ 8643 ;(function (root, factory) { 8644 if (typeof exports === "object") { 8645 // CommonJS 8646 module.exports = exports = factory(require("./core")); 8647 } 8648 else if (typeof define === "function" && define.amd) { 8649 // AMD 8650 define(["./core"], factory); 8651 } 8652 else { 8653 // Global (browser) 8654 factory(root.CryptoJS); 8655 } 8656 }(this, function (CryptoJS) { 8657 8658 (function () { 8659 // Shortcuts 8660 var C = CryptoJS; 8661 var C_lib = C.lib; 8662 var WordArray = C_lib.WordArray; 8663 var C_enc = C.enc; 8664 8665 /** 8666 * Base64 encoding strategy. 8667 */ 8668 var Base64 = C_enc.Base64 = { 8669 /** 8670 * Converts a word array to a Base64 string. 8671 * 8672 * @param {WordArray} wordArray The word array. 8673 * 8674 * @return {string} The Base64 string. 8675 * 8676 * @static 8677 * 8678 * @example 8679 * 8680 * var base64String = CryptoJS.enc.Base64.stringify(wordArray); 8681 */ 8682 stringify: function (wordArray) { 8683 // Shortcuts 8684 var words = wordArray.words; 8685 var sigBytes = wordArray.sigBytes; 8686 var map = this._map; 8687 8688 // Clamp excess bits 8689 wordArray.clamp(); 8690 8691 // Convert 8692 var base64Chars = []; 8693 for (var i = 0; i < sigBytes; i += 3) { 8694 var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; 8695 var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; 8696 var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; 8697 8698 var triplet = (byte1 << 16) | (byte2 << 8) | byte3; 8699 8700 for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { 8701 base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); 8702 } 8703 } 8704 8705 // Add padding 8706 var paddingChar = map.charAt(64); 8707 if (paddingChar) { 8708 while (base64Chars.length % 4) { 8709 base64Chars.push(paddingChar); 8710 } 8711 } 8712 8713 return base64Chars.join(''); 8714 }, 8715 8716 /** 8717 * Converts a Base64 string to a word array. 8718 * 8719 * @param {string} base64Str The Base64 string. 8720 * 8721 * @return {WordArray} The word array. 8722 * 8723 * @static 8724 * 8725 * @example 8726 * 8727 * var wordArray = CryptoJS.enc.Base64.parse(base64String); 8728 */ 8729 parse: function (base64Str) { 8730 // Shortcuts 8731 var base64StrLength = base64Str.length; 8732 var map = this._map; 8733 var reverseMap = this._reverseMap; 8734 8735 if (!reverseMap) { 8736 reverseMap = this._reverseMap = []; 8737 for (var j = 0; j < map.length; j++) { 8738 reverseMap[map.charCodeAt(j)] = j; 8739 } 8740 } 8741 8742 // Ignore padding 8743 var paddingChar = map.charAt(64); 8744 if (paddingChar) { 8745 var paddingIndex = base64Str.indexOf(paddingChar); 8746 if (paddingIndex !== -1) { 8747 base64StrLength = paddingIndex; 8748 } 8749 } 8750 8751 // Convert 8752 return parseLoop(base64Str, base64StrLength, reverseMap); 8753 8754 }, 8755 8756 _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' 8757 }; 8758 8759 function parseLoop(base64Str, base64StrLength, reverseMap) { 8760 var words = []; 8761 var nBytes = 0; 8762 for (var i = 0; i < base64StrLength; i++) { 8763 if (i % 4) { 8764 var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); 8765 var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); 8766 words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); 8767 nBytes++; 8768 } 8769 } 8770 return WordArray.create(words, nBytes); 8771 } 8772 }()); 8773 8774 8775 return CryptoJS.enc.Base64; 8776 8777 })); 8778 },{"./core":53}],55:[function(require,module,exports){ 8779 ;(function (root, factory) { 8780 if (typeof exports === "object") { 8781 // CommonJS 8782 module.exports = exports = factory(require("./core")); 8783 } 8784 else if (typeof define === "function" && define.amd) { 8785 // AMD 8786 define(["./core"], factory); 8787 } 8788 else { 8789 // Global (browser) 8790 factory(root.CryptoJS); 8791 } 8792 }(this, function (CryptoJS) { 8793 8794 (function () { 8795 // Shortcuts 8796 var C = CryptoJS; 8797 var C_lib = C.lib; 8798 var WordArray = C_lib.WordArray; 8799 var C_enc = C.enc; 8800 8801 /** 8802 * UTF-16 BE encoding strategy. 8803 */ 8804 var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { 8805 /** 8806 * Converts a word array to a UTF-16 BE string. 8807 * 8808 * @param {WordArray} wordArray The word array. 8809 * 8810 * @return {string} The UTF-16 BE string. 8811 * 8812 * @static 8813 * 8814 * @example 8815 * 8816 * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); 8817 */ 8818 stringify: function (wordArray) { 8819 // Shortcuts 8820 var words = wordArray.words; 8821 var sigBytes = wordArray.sigBytes; 8822 8823 // Convert 8824 var utf16Chars = []; 8825 for (var i = 0; i < sigBytes; i += 2) { 8826 var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; 8827 utf16Chars.push(String.fromCharCode(codePoint)); 8828 } 8829 8830 return utf16Chars.join(''); 8831 }, 8832 8833 /** 8834 * Converts a UTF-16 BE string to a word array. 8835 * 8836 * @param {string} utf16Str The UTF-16 BE string. 8837 * 8838 * @return {WordArray} The word array. 8839 * 8840 * @static 8841 * 8842 * @example 8843 * 8844 * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); 8845 */ 8846 parse: function (utf16Str) { 8847 // Shortcut 8848 var utf16StrLength = utf16Str.length; 8849 8850 // Convert 8851 var words = []; 8852 for (var i = 0; i < utf16StrLength; i++) { 8853 words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); 8854 } 8855 8856 return WordArray.create(words, utf16StrLength * 2); 8857 } 8858 }; 8859 8860 /** 8861 * UTF-16 LE encoding strategy. 8862 */ 8863 C_enc.Utf16LE = { 8864 /** 8865 * Converts a word array to a UTF-16 LE string. 8866 * 8867 * @param {WordArray} wordArray The word array. 8868 * 8869 * @return {string} The UTF-16 LE string. 8870 * 8871 * @static 8872 * 8873 * @example 8874 * 8875 * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); 8876 */ 8877 stringify: function (wordArray) { 8878 // Shortcuts 8879 var words = wordArray.words; 8880 var sigBytes = wordArray.sigBytes; 8881 8882 // Convert 8883 var utf16Chars = []; 8884 for (var i = 0; i < sigBytes; i += 2) { 8885 var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); 8886 utf16Chars.push(String.fromCharCode(codePoint)); 8887 } 8888 8889 return utf16Chars.join(''); 8890 }, 8891 8892 /** 8893 * Converts a UTF-16 LE string to a word array. 8894 * 8895 * @param {string} utf16Str The UTF-16 LE string. 8896 * 8897 * @return {WordArray} The word array. 8898 * 8899 * @static 8900 * 8901 * @example 8902 * 8903 * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); 8904 */ 8905 parse: function (utf16Str) { 8906 // Shortcut 8907 var utf16StrLength = utf16Str.length; 8908 8909 // Convert 8910 var words = []; 8911 for (var i = 0; i < utf16StrLength; i++) { 8912 words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); 8913 } 8914 8915 return WordArray.create(words, utf16StrLength * 2); 8916 } 8917 }; 8918 8919 function swapEndian(word) { 8920 return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); 8921 } 8922 }()); 8923 8924 8925 return CryptoJS.enc.Utf16; 8926 8927 })); 8928 },{"./core":53}],56:[function(require,module,exports){ 8929 ;(function (root, factory, undef) { 8930 if (typeof exports === "object") { 8931 // CommonJS 8932 module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); 8933 } 8934 else if (typeof define === "function" && define.amd) { 8935 // AMD 8936 define(["./core", "./sha1", "./hmac"], factory); 8937 } 8938 else { 8939 // Global (browser) 8940 factory(root.CryptoJS); 8941 } 8942 }(this, function (CryptoJS) { 8943 8944 (function () { 8945 // Shortcuts 8946 var C = CryptoJS; 8947 var C_lib = C.lib; 8948 var Base = C_lib.Base; 8949 var WordArray = C_lib.WordArray; 8950 var C_algo = C.algo; 8951 var MD5 = C_algo.MD5; 8952 8953 /** 8954 * This key derivation function is meant to conform with EVP_BytesToKey. 8955 * www.openssl.org/docs/crypto/EVP_BytesToKey.html 8956 */ 8957 var EvpKDF = C_algo.EvpKDF = Base.extend({ 8958 /** 8959 * Configuration options. 8960 * 8961 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) 8962 * @property {Hasher} hasher The hash algorithm to use. Default: MD5 8963 * @property {number} iterations The number of iterations to perform. Default: 1 8964 */ 8965 cfg: Base.extend({ 8966 keySize: 128/32, 8967 hasher: MD5, 8968 iterations: 1 8969 }), 8970 8971 /** 8972 * Initializes a newly created key derivation function. 8973 * 8974 * @param {Object} cfg (Optional) The configuration options to use for the derivation. 8975 * 8976 * @example 8977 * 8978 * var kdf = CryptoJS.algo.EvpKDF.create(); 8979 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); 8980 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); 8981 */ 8982 init: function (cfg) { 8983 this.cfg = this.cfg.extend(cfg); 8984 }, 8985 8986 /** 8987 * Derives a key from a password. 8988 * 8989 * @param {WordArray|string} password The password. 8990 * @param {WordArray|string} salt A salt. 8991 * 8992 * @return {WordArray} The derived key. 8993 * 8994 * @example 8995 * 8996 * var key = kdf.compute(password, salt); 8997 */ 8998 compute: function (password, salt) { 8999 // Shortcut 9000 var cfg = this.cfg; 9001 9002 // Init hasher 9003 var hasher = cfg.hasher.create(); 9004 9005 // Initial values 9006 var derivedKey = WordArray.create(); 9007 9008 // Shortcuts 9009 var derivedKeyWords = derivedKey.words; 9010 var keySize = cfg.keySize; 9011 var iterations = cfg.iterations; 9012 9013 // Generate key 9014 while (derivedKeyWords.length < keySize) { 9015 if (block) { 9016 hasher.update(block); 9017 } 9018 var block = hasher.update(password).finalize(salt); 9019 hasher.reset(); 9020 9021 // Iterations 9022 for (var i = 1; i < iterations; i++) { 9023 block = hasher.finalize(block); 9024 hasher.reset(); 9025 } 9026 9027 derivedKey.concat(block); 9028 } 9029 derivedKey.sigBytes = keySize * 4; 9030 9031 return derivedKey; 9032 } 9033 }); 9034 9035 /** 9036 * Derives a key from a password. 9037 * 9038 * @param {WordArray|string} password The password. 9039 * @param {WordArray|string} salt A salt. 9040 * @param {Object} cfg (Optional) The configuration options to use for this computation. 9041 * 9042 * @return {WordArray} The derived key. 9043 * 9044 * @static 9045 * 9046 * @example 9047 * 9048 * var key = CryptoJS.EvpKDF(password, salt); 9049 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); 9050 * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); 9051 */ 9052 C.EvpKDF = function (password, salt, cfg) { 9053 return EvpKDF.create(cfg).compute(password, salt); 9054 }; 9055 }()); 9056 9057 9058 return CryptoJS.EvpKDF; 9059 9060 })); 9061 },{"./core":53,"./hmac":58,"./sha1":77}],57:[function(require,module,exports){ 9062 ;(function (root, factory, undef) { 9063 if (typeof exports === "object") { 9064 // CommonJS 9065 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9066 } 9067 else if (typeof define === "function" && define.amd) { 9068 // AMD 9069 define(["./core", "./cipher-core"], factory); 9070 } 9071 else { 9072 // Global (browser) 9073 factory(root.CryptoJS); 9074 } 9075 }(this, function (CryptoJS) { 9076 9077 (function (undefined) { 9078 // Shortcuts 9079 var C = CryptoJS; 9080 var C_lib = C.lib; 9081 var CipherParams = C_lib.CipherParams; 9082 var C_enc = C.enc; 9083 var Hex = C_enc.Hex; 9084 var C_format = C.format; 9085 9086 var HexFormatter = C_format.Hex = { 9087 /** 9088 * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. 9089 * 9090 * @param {CipherParams} cipherParams The cipher params object. 9091 * 9092 * @return {string} The hexadecimally encoded string. 9093 * 9094 * @static 9095 * 9096 * @example 9097 * 9098 * var hexString = CryptoJS.format.Hex.stringify(cipherParams); 9099 */ 9100 stringify: function (cipherParams) { 9101 return cipherParams.ciphertext.toString(Hex); 9102 }, 9103 9104 /** 9105 * Converts a hexadecimally encoded ciphertext string to a cipher params object. 9106 * 9107 * @param {string} input The hexadecimally encoded string. 9108 * 9109 * @return {CipherParams} The cipher params object. 9110 * 9111 * @static 9112 * 9113 * @example 9114 * 9115 * var cipherParams = CryptoJS.format.Hex.parse(hexString); 9116 */ 9117 parse: function (input) { 9118 var ciphertext = Hex.parse(input); 9119 return CipherParams.create({ ciphertext: ciphertext }); 9120 } 9121 }; 9122 }()); 9123 9124 9125 return CryptoJS.format.Hex; 9126 9127 })); 9128 },{"./cipher-core":52,"./core":53}],58:[function(require,module,exports){ 9129 ;(function (root, factory) { 9130 if (typeof exports === "object") { 9131 // CommonJS 9132 module.exports = exports = factory(require("./core")); 9133 } 9134 else if (typeof define === "function" && define.amd) { 9135 // AMD 9136 define(["./core"], factory); 9137 } 9138 else { 9139 // Global (browser) 9140 factory(root.CryptoJS); 9141 } 9142 }(this, function (CryptoJS) { 9143 9144 (function () { 9145 // Shortcuts 9146 var C = CryptoJS; 9147 var C_lib = C.lib; 9148 var Base = C_lib.Base; 9149 var C_enc = C.enc; 9150 var Utf8 = C_enc.Utf8; 9151 var C_algo = C.algo; 9152 9153 /** 9154 * HMAC algorithm. 9155 */ 9156 var HMAC = C_algo.HMAC = Base.extend({ 9157 /** 9158 * Initializes a newly created HMAC. 9159 * 9160 * @param {Hasher} hasher The hash algorithm to use. 9161 * @param {WordArray|string} key The secret key. 9162 * 9163 * @example 9164 * 9165 * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); 9166 */ 9167 init: function (hasher, key) { 9168 // Init hasher 9169 hasher = this._hasher = new hasher.init(); 9170 9171 // Convert string to WordArray, else assume WordArray already 9172 if (typeof key == 'string') { 9173 key = Utf8.parse(key); 9174 } 9175 9176 // Shortcuts 9177 var hasherBlockSize = hasher.blockSize; 9178 var hasherBlockSizeBytes = hasherBlockSize * 4; 9179 9180 // Allow arbitrary length keys 9181 if (key.sigBytes > hasherBlockSizeBytes) { 9182 key = hasher.finalize(key); 9183 } 9184 9185 // Clamp excess bits 9186 key.clamp(); 9187 9188 // Clone key for inner and outer pads 9189 var oKey = this._oKey = key.clone(); 9190 var iKey = this._iKey = key.clone(); 9191 9192 // Shortcuts 9193 var oKeyWords = oKey.words; 9194 var iKeyWords = iKey.words; 9195 9196 // XOR keys with pad constants 9197 for (var i = 0; i < hasherBlockSize; i++) { 9198 oKeyWords[i] ^= 0x5c5c5c5c; 9199 iKeyWords[i] ^= 0x36363636; 9200 } 9201 oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; 9202 9203 // Set initial values 9204 this.reset(); 9205 }, 9206 9207 /** 9208 * Resets this HMAC to its initial state. 9209 * 9210 * @example 9211 * 9212 * hmacHasher.reset(); 9213 */ 9214 reset: function () { 9215 // Shortcut 9216 var hasher = this._hasher; 9217 9218 // Reset 9219 hasher.reset(); 9220 hasher.update(this._iKey); 9221 }, 9222 9223 /** 9224 * Updates this HMAC with a message. 9225 * 9226 * @param {WordArray|string} messageUpdate The message to append. 9227 * 9228 * @return {HMAC} This HMAC instance. 9229 * 9230 * @example 9231 * 9232 * hmacHasher.update('message'); 9233 * hmacHasher.update(wordArray); 9234 */ 9235 update: function (messageUpdate) { 9236 this._hasher.update(messageUpdate); 9237 9238 // Chainable 9239 return this; 9240 }, 9241 9242 /** 9243 * Finalizes the HMAC computation. 9244 * Note that the finalize operation is effectively a destructive, read-once operation. 9245 * 9246 * @param {WordArray|string} messageUpdate (Optional) A final message update. 9247 * 9248 * @return {WordArray} The HMAC. 9249 * 9250 * @example 9251 * 9252 * var hmac = hmacHasher.finalize(); 9253 * var hmac = hmacHasher.finalize('message'); 9254 * var hmac = hmacHasher.finalize(wordArray); 9255 */ 9256 finalize: function (messageUpdate) { 9257 // Shortcut 9258 var hasher = this._hasher; 9259 9260 // Compute HMAC 9261 var innerHash = hasher.finalize(messageUpdate); 9262 hasher.reset(); 9263 var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); 9264 9265 return hmac; 9266 } 9267 }); 9268 }()); 9269 9270 9271 })); 9272 },{"./core":53}],59:[function(require,module,exports){ 9273 ;(function (root, factory, undef) { 9274 if (typeof exports === "object") { 9275 // CommonJS 9276 module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); 9277 } 9278 else if (typeof define === "function" && define.amd) { 9279 // AMD 9280 define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); 9281 } 9282 else { 9283 // Global (browser) 9284 root.CryptoJS = factory(root.CryptoJS); 9285 } 9286 }(this, function (CryptoJS) { 9287 9288 return CryptoJS; 9289 9290 })); 9291 },{"./aes":51,"./cipher-core":52,"./core":53,"./enc-base64":54,"./enc-utf16":55,"./evpkdf":56,"./format-hex":57,"./hmac":58,"./lib-typedarrays":60,"./md5":61,"./mode-cfb":62,"./mode-ctr":64,"./mode-ctr-gladman":63,"./mode-ecb":65,"./mode-ofb":66,"./pad-ansix923":67,"./pad-iso10126":68,"./pad-iso97971":69,"./pad-nopadding":70,"./pad-zeropadding":71,"./pbkdf2":72,"./rabbit":74,"./rabbit-legacy":73,"./rc4":75,"./ripemd160":76,"./sha1":77,"./sha224":78,"./sha256":79,"./sha3":80,"./sha384":81,"./sha512":82,"./tripledes":83,"./x64-core":84}],60:[function(require,module,exports){ 9292 ;(function (root, factory) { 9293 if (typeof exports === "object") { 9294 // CommonJS 9295 module.exports = exports = factory(require("./core")); 9296 } 9297 else if (typeof define === "function" && define.amd) { 9298 // AMD 9299 define(["./core"], factory); 9300 } 9301 else { 9302 // Global (browser) 9303 factory(root.CryptoJS); 9304 } 9305 }(this, function (CryptoJS) { 9306 9307 (function () { 9308 // Check if typed arrays are supported 9309 if (typeof ArrayBuffer != 'function') { 9310 return; 9311 } 9312 9313 // Shortcuts 9314 var C = CryptoJS; 9315 var C_lib = C.lib; 9316 var WordArray = C_lib.WordArray; 9317 9318 // Reference original init 9319 var superInit = WordArray.init; 9320 9321 // Augment WordArray.init to handle typed arrays 9322 var subInit = WordArray.init = function (typedArray) { 9323 // Convert buffers to uint8 9324 if (typedArray instanceof ArrayBuffer) { 9325 typedArray = new Uint8Array(typedArray); 9326 } 9327 9328 // Convert other array views to uint8 9329 if ( 9330 typedArray instanceof Int8Array || 9331 (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || 9332 typedArray instanceof Int16Array || 9333 typedArray instanceof Uint16Array || 9334 typedArray instanceof Int32Array || 9335 typedArray instanceof Uint32Array || 9336 typedArray instanceof Float32Array || 9337 typedArray instanceof Float64Array 9338 ) { 9339 typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); 9340 } 9341 9342 // Handle Uint8Array 9343 if (typedArray instanceof Uint8Array) { 9344 // Shortcut 9345 var typedArrayByteLength = typedArray.byteLength; 9346 9347 // Extract bytes 9348 var words = []; 9349 for (var i = 0; i < typedArrayByteLength; i++) { 9350 words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); 9351 } 9352 9353 // Initialize this word array 9354 superInit.call(this, words, typedArrayByteLength); 9355 } else { 9356 // Else call normal init 9357 superInit.apply(this, arguments); 9358 } 9359 }; 9360 9361 subInit.prototype = WordArray; 9362 }()); 9363 9364 9365 return CryptoJS.lib.WordArray; 9366 9367 })); 9368 },{"./core":53}],61:[function(require,module,exports){ 9369 ;(function (root, factory) { 9370 if (typeof exports === "object") { 9371 // CommonJS 9372 module.exports = exports = factory(require("./core")); 9373 } 9374 else if (typeof define === "function" && define.amd) { 9375 // AMD 9376 define(["./core"], factory); 9377 } 9378 else { 9379 // Global (browser) 9380 factory(root.CryptoJS); 9381 } 9382 }(this, function (CryptoJS) { 9383 9384 (function (Math) { 9385 // Shortcuts 9386 var C = CryptoJS; 9387 var C_lib = C.lib; 9388 var WordArray = C_lib.WordArray; 9389 var Hasher = C_lib.Hasher; 9390 var C_algo = C.algo; 9391 9392 // Constants table 9393 var T = []; 9394 9395 // Compute constants 9396 (function () { 9397 for (var i = 0; i < 64; i++) { 9398 T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; 9399 } 9400 }()); 9401 9402 /** 9403 * MD5 hash algorithm. 9404 */ 9405 var MD5 = C_algo.MD5 = Hasher.extend({ 9406 _doReset: function () { 9407 this._hash = new WordArray.init([ 9408 0x67452301, 0xefcdab89, 9409 0x98badcfe, 0x10325476 9410 ]); 9411 }, 9412 9413 _doProcessBlock: function (M, offset) { 9414 // Swap endian 9415 for (var i = 0; i < 16; i++) { 9416 // Shortcuts 9417 var offset_i = offset + i; 9418 var M_offset_i = M[offset_i]; 9419 9420 M[offset_i] = ( 9421 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | 9422 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) 9423 ); 9424 } 9425 9426 // Shortcuts 9427 var H = this._hash.words; 9428 9429 var M_offset_0 = M[offset + 0]; 9430 var M_offset_1 = M[offset + 1]; 9431 var M_offset_2 = M[offset + 2]; 9432 var M_offset_3 = M[offset + 3]; 9433 var M_offset_4 = M[offset + 4]; 9434 var M_offset_5 = M[offset + 5]; 9435 var M_offset_6 = M[offset + 6]; 9436 var M_offset_7 = M[offset + 7]; 9437 var M_offset_8 = M[offset + 8]; 9438 var M_offset_9 = M[offset + 9]; 9439 var M_offset_10 = M[offset + 10]; 9440 var M_offset_11 = M[offset + 11]; 9441 var M_offset_12 = M[offset + 12]; 9442 var M_offset_13 = M[offset + 13]; 9443 var M_offset_14 = M[offset + 14]; 9444 var M_offset_15 = M[offset + 15]; 9445 9446 // Working varialbes 9447 var a = H[0]; 9448 var b = H[1]; 9449 var c = H[2]; 9450 var d = H[3]; 9451 9452 // Computation 9453 a = FF(a, b, c, d, M_offset_0, 7, T[0]); 9454 d = FF(d, a, b, c, M_offset_1, 12, T[1]); 9455 c = FF(c, d, a, b, M_offset_2, 17, T[2]); 9456 b = FF(b, c, d, a, M_offset_3, 22, T[3]); 9457 a = FF(a, b, c, d, M_offset_4, 7, T[4]); 9458 d = FF(d, a, b, c, M_offset_5, 12, T[5]); 9459 c = FF(c, d, a, b, M_offset_6, 17, T[6]); 9460 b = FF(b, c, d, a, M_offset_7, 22, T[7]); 9461 a = FF(a, b, c, d, M_offset_8, 7, T[8]); 9462 d = FF(d, a, b, c, M_offset_9, 12, T[9]); 9463 c = FF(c, d, a, b, M_offset_10, 17, T[10]); 9464 b = FF(b, c, d, a, M_offset_11, 22, T[11]); 9465 a = FF(a, b, c, d, M_offset_12, 7, T[12]); 9466 d = FF(d, a, b, c, M_offset_13, 12, T[13]); 9467 c = FF(c, d, a, b, M_offset_14, 17, T[14]); 9468 b = FF(b, c, d, a, M_offset_15, 22, T[15]); 9469 9470 a = GG(a, b, c, d, M_offset_1, 5, T[16]); 9471 d = GG(d, a, b, c, M_offset_6, 9, T[17]); 9472 c = GG(c, d, a, b, M_offset_11, 14, T[18]); 9473 b = GG(b, c, d, a, M_offset_0, 20, T[19]); 9474 a = GG(a, b, c, d, M_offset_5, 5, T[20]); 9475 d = GG(d, a, b, c, M_offset_10, 9, T[21]); 9476 c = GG(c, d, a, b, M_offset_15, 14, T[22]); 9477 b = GG(b, c, d, a, M_offset_4, 20, T[23]); 9478 a = GG(a, b, c, d, M_offset_9, 5, T[24]); 9479 d = GG(d, a, b, c, M_offset_14, 9, T[25]); 9480 c = GG(c, d, a, b, M_offset_3, 14, T[26]); 9481 b = GG(b, c, d, a, M_offset_8, 20, T[27]); 9482 a = GG(a, b, c, d, M_offset_13, 5, T[28]); 9483 d = GG(d, a, b, c, M_offset_2, 9, T[29]); 9484 c = GG(c, d, a, b, M_offset_7, 14, T[30]); 9485 b = GG(b, c, d, a, M_offset_12, 20, T[31]); 9486 9487 a = HH(a, b, c, d, M_offset_5, 4, T[32]); 9488 d = HH(d, a, b, c, M_offset_8, 11, T[33]); 9489 c = HH(c, d, a, b, M_offset_11, 16, T[34]); 9490 b = HH(b, c, d, a, M_offset_14, 23, T[35]); 9491 a = HH(a, b, c, d, M_offset_1, 4, T[36]); 9492 d = HH(d, a, b, c, M_offset_4, 11, T[37]); 9493 c = HH(c, d, a, b, M_offset_7, 16, T[38]); 9494 b = HH(b, c, d, a, M_offset_10, 23, T[39]); 9495 a = HH(a, b, c, d, M_offset_13, 4, T[40]); 9496 d = HH(d, a, b, c, M_offset_0, 11, T[41]); 9497 c = HH(c, d, a, b, M_offset_3, 16, T[42]); 9498 b = HH(b, c, d, a, M_offset_6, 23, T[43]); 9499 a = HH(a, b, c, d, M_offset_9, 4, T[44]); 9500 d = HH(d, a, b, c, M_offset_12, 11, T[45]); 9501 c = HH(c, d, a, b, M_offset_15, 16, T[46]); 9502 b = HH(b, c, d, a, M_offset_2, 23, T[47]); 9503 9504 a = II(a, b, c, d, M_offset_0, 6, T[48]); 9505 d = II(d, a, b, c, M_offset_7, 10, T[49]); 9506 c = II(c, d, a, b, M_offset_14, 15, T[50]); 9507 b = II(b, c, d, a, M_offset_5, 21, T[51]); 9508 a = II(a, b, c, d, M_offset_12, 6, T[52]); 9509 d = II(d, a, b, c, M_offset_3, 10, T[53]); 9510 c = II(c, d, a, b, M_offset_10, 15, T[54]); 9511 b = II(b, c, d, a, M_offset_1, 21, T[55]); 9512 a = II(a, b, c, d, M_offset_8, 6, T[56]); 9513 d = II(d, a, b, c, M_offset_15, 10, T[57]); 9514 c = II(c, d, a, b, M_offset_6, 15, T[58]); 9515 b = II(b, c, d, a, M_offset_13, 21, T[59]); 9516 a = II(a, b, c, d, M_offset_4, 6, T[60]); 9517 d = II(d, a, b, c, M_offset_11, 10, T[61]); 9518 c = II(c, d, a, b, M_offset_2, 15, T[62]); 9519 b = II(b, c, d, a, M_offset_9, 21, T[63]); 9520 9521 // Intermediate hash value 9522 H[0] = (H[0] + a) | 0; 9523 H[1] = (H[1] + b) | 0; 9524 H[2] = (H[2] + c) | 0; 9525 H[3] = (H[3] + d) | 0; 9526 }, 9527 9528 _doFinalize: function () { 9529 // Shortcuts 9530 var data = this._data; 9531 var dataWords = data.words; 9532 9533 var nBitsTotal = this._nDataBytes * 8; 9534 var nBitsLeft = data.sigBytes * 8; 9535 9536 // Add padding 9537 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 9538 9539 var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); 9540 var nBitsTotalL = nBitsTotal; 9541 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( 9542 (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | 9543 (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) 9544 ); 9545 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( 9546 (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | 9547 (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) 9548 ); 9549 9550 data.sigBytes = (dataWords.length + 1) * 4; 9551 9552 // Hash final blocks 9553 this._process(); 9554 9555 // Shortcuts 9556 var hash = this._hash; 9557 var H = hash.words; 9558 9559 // Swap endian 9560 for (var i = 0; i < 4; i++) { 9561 // Shortcut 9562 var H_i = H[i]; 9563 9564 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | 9565 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); 9566 } 9567 9568 // Return final computed hash 9569 return hash; 9570 }, 9571 9572 clone: function () { 9573 var clone = Hasher.clone.call(this); 9574 clone._hash = this._hash.clone(); 9575 9576 return clone; 9577 } 9578 }); 9579 9580 function FF(a, b, c, d, x, s, t) { 9581 var n = a + ((b & c) | (~b & d)) + x + t; 9582 return ((n << s) | (n >>> (32 - s))) + b; 9583 } 9584 9585 function GG(a, b, c, d, x, s, t) { 9586 var n = a + ((b & d) | (c & ~d)) + x + t; 9587 return ((n << s) | (n >>> (32 - s))) + b; 9588 } 9589 9590 function HH(a, b, c, d, x, s, t) { 9591 var n = a + (b ^ c ^ d) + x + t; 9592 return ((n << s) | (n >>> (32 - s))) + b; 9593 } 9594 9595 function II(a, b, c, d, x, s, t) { 9596 var n = a + (c ^ (b | ~d)) + x + t; 9597 return ((n << s) | (n >>> (32 - s))) + b; 9598 } 9599 9600 /** 9601 * Shortcut function to the hasher's object interface. 9602 * 9603 * @param {WordArray|string} message The message to hash. 9604 * 9605 * @return {WordArray} The hash. 9606 * 9607 * @static 9608 * 9609 * @example 9610 * 9611 * var hash = CryptoJS.MD5('message'); 9612 * var hash = CryptoJS.MD5(wordArray); 9613 */ 9614 C.MD5 = Hasher._createHelper(MD5); 9615 9616 /** 9617 * Shortcut function to the HMAC's object interface. 9618 * 9619 * @param {WordArray|string} message The message to hash. 9620 * @param {WordArray|string} key The secret key. 9621 * 9622 * @return {WordArray} The HMAC. 9623 * 9624 * @static 9625 * 9626 * @example 9627 * 9628 * var hmac = CryptoJS.HmacMD5(message, key); 9629 */ 9630 C.HmacMD5 = Hasher._createHmacHelper(MD5); 9631 }(Math)); 9632 9633 9634 return CryptoJS.MD5; 9635 9636 })); 9637 },{"./core":53}],62:[function(require,module,exports){ 9638 ;(function (root, factory, undef) { 9639 if (typeof exports === "object") { 9640 // CommonJS 9641 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9642 } 9643 else if (typeof define === "function" && define.amd) { 9644 // AMD 9645 define(["./core", "./cipher-core"], factory); 9646 } 9647 else { 9648 // Global (browser) 9649 factory(root.CryptoJS); 9650 } 9651 }(this, function (CryptoJS) { 9652 9653 /** 9654 * Cipher Feedback block mode. 9655 */ 9656 CryptoJS.mode.CFB = (function () { 9657 var CFB = CryptoJS.lib.BlockCipherMode.extend(); 9658 9659 CFB.Encryptor = CFB.extend({ 9660 processBlock: function (words, offset) { 9661 // Shortcuts 9662 var cipher = this._cipher; 9663 var blockSize = cipher.blockSize; 9664 9665 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); 9666 9667 // Remember this block to use with next block 9668 this._prevBlock = words.slice(offset, offset + blockSize); 9669 } 9670 }); 9671 9672 CFB.Decryptor = CFB.extend({ 9673 processBlock: function (words, offset) { 9674 // Shortcuts 9675 var cipher = this._cipher; 9676 var blockSize = cipher.blockSize; 9677 9678 // Remember this block to use with next block 9679 var thisBlock = words.slice(offset, offset + blockSize); 9680 9681 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); 9682 9683 // This block becomes the previous block 9684 this._prevBlock = thisBlock; 9685 } 9686 }); 9687 9688 function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { 9689 // Shortcut 9690 var iv = this._iv; 9691 9692 // Generate keystream 9693 if (iv) { 9694 var keystream = iv.slice(0); 9695 9696 // Remove IV for subsequent blocks 9697 this._iv = undefined; 9698 } else { 9699 var keystream = this._prevBlock; 9700 } 9701 cipher.encryptBlock(keystream, 0); 9702 9703 // Encrypt 9704 for (var i = 0; i < blockSize; i++) { 9705 words[offset + i] ^= keystream[i]; 9706 } 9707 } 9708 9709 return CFB; 9710 }()); 9711 9712 9713 return CryptoJS.mode.CFB; 9714 9715 })); 9716 },{"./cipher-core":52,"./core":53}],63:[function(require,module,exports){ 9717 ;(function (root, factory, undef) { 9718 if (typeof exports === "object") { 9719 // CommonJS 9720 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9721 } 9722 else if (typeof define === "function" && define.amd) { 9723 // AMD 9724 define(["./core", "./cipher-core"], factory); 9725 } 9726 else { 9727 // Global (browser) 9728 factory(root.CryptoJS); 9729 } 9730 }(this, function (CryptoJS) { 9731 9732 /** @preserve 9733 * Counter block mode compatible with Dr Brian Gladman fileenc.c 9734 * derived from CryptoJS.mode.CTR 9735 * Jan Hruby jhruby.web@gmail.com 9736 */ 9737 CryptoJS.mode.CTRGladman = (function () { 9738 var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); 9739 9740 function incWord(word) 9741 { 9742 if (((word >> 24) & 0xff) === 0xff) { //overflow 9743 var b1 = (word >> 16)&0xff; 9744 var b2 = (word >> 8)&0xff; 9745 var b3 = word & 0xff; 9746 9747 if (b1 === 0xff) // overflow b1 9748 { 9749 b1 = 0; 9750 if (b2 === 0xff) 9751 { 9752 b2 = 0; 9753 if (b3 === 0xff) 9754 { 9755 b3 = 0; 9756 } 9757 else 9758 { 9759 ++b3; 9760 } 9761 } 9762 else 9763 { 9764 ++b2; 9765 } 9766 } 9767 else 9768 { 9769 ++b1; 9770 } 9771 9772 word = 0; 9773 word += (b1 << 16); 9774 word += (b2 << 8); 9775 word += b3; 9776 } 9777 else 9778 { 9779 word += (0x01 << 24); 9780 } 9781 return word; 9782 } 9783 9784 function incCounter(counter) 9785 { 9786 if ((counter[0] = incWord(counter[0])) === 0) 9787 { 9788 // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 9789 counter[1] = incWord(counter[1]); 9790 } 9791 return counter; 9792 } 9793 9794 var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ 9795 processBlock: function (words, offset) { 9796 // Shortcuts 9797 var cipher = this._cipher 9798 var blockSize = cipher.blockSize; 9799 var iv = this._iv; 9800 var counter = this._counter; 9801 9802 // Generate keystream 9803 if (iv) { 9804 counter = this._counter = iv.slice(0); 9805 9806 // Remove IV for subsequent blocks 9807 this._iv = undefined; 9808 } 9809 9810 incCounter(counter); 9811 9812 var keystream = counter.slice(0); 9813 cipher.encryptBlock(keystream, 0); 9814 9815 // Encrypt 9816 for (var i = 0; i < blockSize; i++) { 9817 words[offset + i] ^= keystream[i]; 9818 } 9819 } 9820 }); 9821 9822 CTRGladman.Decryptor = Encryptor; 9823 9824 return CTRGladman; 9825 }()); 9826 9827 9828 9829 9830 return CryptoJS.mode.CTRGladman; 9831 9832 })); 9833 },{"./cipher-core":52,"./core":53}],64:[function(require,module,exports){ 9834 ;(function (root, factory, undef) { 9835 if (typeof exports === "object") { 9836 // CommonJS 9837 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9838 } 9839 else if (typeof define === "function" && define.amd) { 9840 // AMD 9841 define(["./core", "./cipher-core"], factory); 9842 } 9843 else { 9844 // Global (browser) 9845 factory(root.CryptoJS); 9846 } 9847 }(this, function (CryptoJS) { 9848 9849 /** 9850 * Counter block mode. 9851 */ 9852 CryptoJS.mode.CTR = (function () { 9853 var CTR = CryptoJS.lib.BlockCipherMode.extend(); 9854 9855 var Encryptor = CTR.Encryptor = CTR.extend({ 9856 processBlock: function (words, offset) { 9857 // Shortcuts 9858 var cipher = this._cipher 9859 var blockSize = cipher.blockSize; 9860 var iv = this._iv; 9861 var counter = this._counter; 9862 9863 // Generate keystream 9864 if (iv) { 9865 counter = this._counter = iv.slice(0); 9866 9867 // Remove IV for subsequent blocks 9868 this._iv = undefined; 9869 } 9870 var keystream = counter.slice(0); 9871 cipher.encryptBlock(keystream, 0); 9872 9873 // Increment counter 9874 counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 9875 9876 // Encrypt 9877 for (var i = 0; i < blockSize; i++) { 9878 words[offset + i] ^= keystream[i]; 9879 } 9880 } 9881 }); 9882 9883 CTR.Decryptor = Encryptor; 9884 9885 return CTR; 9886 }()); 9887 9888 9889 return CryptoJS.mode.CTR; 9890 9891 })); 9892 },{"./cipher-core":52,"./core":53}],65:[function(require,module,exports){ 9893 ;(function (root, factory, undef) { 9894 if (typeof exports === "object") { 9895 // CommonJS 9896 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9897 } 9898 else if (typeof define === "function" && define.amd) { 9899 // AMD 9900 define(["./core", "./cipher-core"], factory); 9901 } 9902 else { 9903 // Global (browser) 9904 factory(root.CryptoJS); 9905 } 9906 }(this, function (CryptoJS) { 9907 9908 /** 9909 * Electronic Codebook block mode. 9910 */ 9911 CryptoJS.mode.ECB = (function () { 9912 var ECB = CryptoJS.lib.BlockCipherMode.extend(); 9913 9914 ECB.Encryptor = ECB.extend({ 9915 processBlock: function (words, offset) { 9916 this._cipher.encryptBlock(words, offset); 9917 } 9918 }); 9919 9920 ECB.Decryptor = ECB.extend({ 9921 processBlock: function (words, offset) { 9922 this._cipher.decryptBlock(words, offset); 9923 } 9924 }); 9925 9926 return ECB; 9927 }()); 9928 9929 9930 return CryptoJS.mode.ECB; 9931 9932 })); 9933 },{"./cipher-core":52,"./core":53}],66:[function(require,module,exports){ 9934 ;(function (root, factory, undef) { 9935 if (typeof exports === "object") { 9936 // CommonJS 9937 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9938 } 9939 else if (typeof define === "function" && define.amd) { 9940 // AMD 9941 define(["./core", "./cipher-core"], factory); 9942 } 9943 else { 9944 // Global (browser) 9945 factory(root.CryptoJS); 9946 } 9947 }(this, function (CryptoJS) { 9948 9949 /** 9950 * Output Feedback block mode. 9951 */ 9952 CryptoJS.mode.OFB = (function () { 9953 var OFB = CryptoJS.lib.BlockCipherMode.extend(); 9954 9955 var Encryptor = OFB.Encryptor = OFB.extend({ 9956 processBlock: function (words, offset) { 9957 // Shortcuts 9958 var cipher = this._cipher 9959 var blockSize = cipher.blockSize; 9960 var iv = this._iv; 9961 var keystream = this._keystream; 9962 9963 // Generate keystream 9964 if (iv) { 9965 keystream = this._keystream = iv.slice(0); 9966 9967 // Remove IV for subsequent blocks 9968 this._iv = undefined; 9969 } 9970 cipher.encryptBlock(keystream, 0); 9971 9972 // Encrypt 9973 for (var i = 0; i < blockSize; i++) { 9974 words[offset + i] ^= keystream[i]; 9975 } 9976 } 9977 }); 9978 9979 OFB.Decryptor = Encryptor; 9980 9981 return OFB; 9982 }()); 9983 9984 9985 return CryptoJS.mode.OFB; 9986 9987 })); 9988 },{"./cipher-core":52,"./core":53}],67:[function(require,module,exports){ 9989 ;(function (root, factory, undef) { 9990 if (typeof exports === "object") { 9991 // CommonJS 9992 module.exports = exports = factory(require("./core"), require("./cipher-core")); 9993 } 9994 else if (typeof define === "function" && define.amd) { 9995 // AMD 9996 define(["./core", "./cipher-core"], factory); 9997 } 9998 else { 9999 // Global (browser) 10000 factory(root.CryptoJS); 10001 } 10002 }(this, function (CryptoJS) { 10003 10004 /** 10005 * ANSI X.923 padding strategy. 10006 */ 10007 CryptoJS.pad.AnsiX923 = { 10008 pad: function (data, blockSize) { 10009 // Shortcuts 10010 var dataSigBytes = data.sigBytes; 10011 var blockSizeBytes = blockSize * 4; 10012 10013 // Count padding bytes 10014 var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; 10015 10016 // Compute last byte position 10017 var lastBytePos = dataSigBytes + nPaddingBytes - 1; 10018 10019 // Pad 10020 data.clamp(); 10021 data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); 10022 data.sigBytes += nPaddingBytes; 10023 }, 10024 10025 unpad: function (data) { 10026 // Get number of padding bytes from last byte 10027 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; 10028 10029 // Remove padding 10030 data.sigBytes -= nPaddingBytes; 10031 } 10032 }; 10033 10034 10035 return CryptoJS.pad.Ansix923; 10036 10037 })); 10038 },{"./cipher-core":52,"./core":53}],68:[function(require,module,exports){ 10039 ;(function (root, factory, undef) { 10040 if (typeof exports === "object") { 10041 // CommonJS 10042 module.exports = exports = factory(require("./core"), require("./cipher-core")); 10043 } 10044 else if (typeof define === "function" && define.amd) { 10045 // AMD 10046 define(["./core", "./cipher-core"], factory); 10047 } 10048 else { 10049 // Global (browser) 10050 factory(root.CryptoJS); 10051 } 10052 }(this, function (CryptoJS) { 10053 10054 /** 10055 * ISO 10126 padding strategy. 10056 */ 10057 CryptoJS.pad.Iso10126 = { 10058 pad: function (data, blockSize) { 10059 // Shortcut 10060 var blockSizeBytes = blockSize * 4; 10061 10062 // Count padding bytes 10063 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; 10064 10065 // Pad 10066 data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). 10067 concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); 10068 }, 10069 10070 unpad: function (data) { 10071 // Get number of padding bytes from last byte 10072 var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; 10073 10074 // Remove padding 10075 data.sigBytes -= nPaddingBytes; 10076 } 10077 }; 10078 10079 10080 return CryptoJS.pad.Iso10126; 10081 10082 })); 10083 },{"./cipher-core":52,"./core":53}],69:[function(require,module,exports){ 10084 ;(function (root, factory, undef) { 10085 if (typeof exports === "object") { 10086 // CommonJS 10087 module.exports = exports = factory(require("./core"), require("./cipher-core")); 10088 } 10089 else if (typeof define === "function" && define.amd) { 10090 // AMD 10091 define(["./core", "./cipher-core"], factory); 10092 } 10093 else { 10094 // Global (browser) 10095 factory(root.CryptoJS); 10096 } 10097 }(this, function (CryptoJS) { 10098 10099 /** 10100 * ISO/IEC 9797-1 Padding Method 2. 10101 */ 10102 CryptoJS.pad.Iso97971 = { 10103 pad: function (data, blockSize) { 10104 // Add 0x80 byte 10105 data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); 10106 10107 // Zero pad the rest 10108 CryptoJS.pad.ZeroPadding.pad(data, blockSize); 10109 }, 10110 10111 unpad: function (data) { 10112 // Remove zero padding 10113 CryptoJS.pad.ZeroPadding.unpad(data); 10114 10115 // Remove one more byte -- the 0x80 byte 10116 data.sigBytes--; 10117 } 10118 }; 10119 10120 10121 return CryptoJS.pad.Iso97971; 10122 10123 })); 10124 },{"./cipher-core":52,"./core":53}],70:[function(require,module,exports){ 10125 ;(function (root, factory, undef) { 10126 if (typeof exports === "object") { 10127 // CommonJS 10128 module.exports = exports = factory(require("./core"), require("./cipher-core")); 10129 } 10130 else if (typeof define === "function" && define.amd) { 10131 // AMD 10132 define(["./core", "./cipher-core"], factory); 10133 } 10134 else { 10135 // Global (browser) 10136 factory(root.CryptoJS); 10137 } 10138 }(this, function (CryptoJS) { 10139 10140 /** 10141 * A noop padding strategy. 10142 */ 10143 CryptoJS.pad.NoPadding = { 10144 pad: function () { 10145 }, 10146 10147 unpad: function () { 10148 } 10149 }; 10150 10151 10152 return CryptoJS.pad.NoPadding; 10153 10154 })); 10155 },{"./cipher-core":52,"./core":53}],71:[function(require,module,exports){ 10156 ;(function (root, factory, undef) { 10157 if (typeof exports === "object") { 10158 // CommonJS 10159 module.exports = exports = factory(require("./core"), require("./cipher-core")); 10160 } 10161 else if (typeof define === "function" && define.amd) { 10162 // AMD 10163 define(["./core", "./cipher-core"], factory); 10164 } 10165 else { 10166 // Global (browser) 10167 factory(root.CryptoJS); 10168 } 10169 }(this, function (CryptoJS) { 10170 10171 /** 10172 * Zero padding strategy. 10173 */ 10174 CryptoJS.pad.ZeroPadding = { 10175 pad: function (data, blockSize) { 10176 // Shortcut 10177 var blockSizeBytes = blockSize * 4; 10178 10179 // Pad 10180 data.clamp(); 10181 data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); 10182 }, 10183 10184 unpad: function (data) { 10185 // Shortcut 10186 var dataWords = data.words; 10187 10188 // Unpad 10189 var i = data.sigBytes - 1; 10190 while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { 10191 i--; 10192 } 10193 data.sigBytes = i + 1; 10194 } 10195 }; 10196 10197 10198 return CryptoJS.pad.ZeroPadding; 10199 10200 })); 10201 },{"./cipher-core":52,"./core":53}],72:[function(require,module,exports){ 10202 ;(function (root, factory, undef) { 10203 if (typeof exports === "object") { 10204 // CommonJS 10205 module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); 10206 } 10207 else if (typeof define === "function" && define.amd) { 10208 // AMD 10209 define(["./core", "./sha1", "./hmac"], factory); 10210 } 10211 else { 10212 // Global (browser) 10213 factory(root.CryptoJS); 10214 } 10215 }(this, function (CryptoJS) { 10216 10217 (function () { 10218 // Shortcuts 10219 var C = CryptoJS; 10220 var C_lib = C.lib; 10221 var Base = C_lib.Base; 10222 var WordArray = C_lib.WordArray; 10223 var C_algo = C.algo; 10224 var SHA1 = C_algo.SHA1; 10225 var HMAC = C_algo.HMAC; 10226 10227 /** 10228 * Password-Based Key Derivation Function 2 algorithm. 10229 */ 10230 var PBKDF2 = C_algo.PBKDF2 = Base.extend({ 10231 /** 10232 * Configuration options. 10233 * 10234 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) 10235 * @property {Hasher} hasher The hasher to use. Default: SHA1 10236 * @property {number} iterations The number of iterations to perform. Default: 1 10237 */ 10238 cfg: Base.extend({ 10239 keySize: 128/32, 10240 hasher: SHA1, 10241 iterations: 1 10242 }), 10243 10244 /** 10245 * Initializes a newly created key derivation function. 10246 * 10247 * @param {Object} cfg (Optional) The configuration options to use for the derivation. 10248 * 10249 * @example 10250 * 10251 * var kdf = CryptoJS.algo.PBKDF2.create(); 10252 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); 10253 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); 10254 */ 10255 init: function (cfg) { 10256 this.cfg = this.cfg.extend(cfg); 10257 }, 10258 10259 /** 10260 * Computes the Password-Based Key Derivation Function 2. 10261 * 10262 * @param {WordArray|string} password The password. 10263 * @param {WordArray|string} salt A salt. 10264 * 10265 * @return {WordArray} The derived key. 10266 * 10267 * @example 10268 * 10269 * var key = kdf.compute(password, salt); 10270 */ 10271 compute: function (password, salt) { 10272 // Shortcut 10273 var cfg = this.cfg; 10274 10275 // Init HMAC 10276 var hmac = HMAC.create(cfg.hasher, password); 10277 10278 // Initial values 10279 var derivedKey = WordArray.create(); 10280 var blockIndex = WordArray.create([0x00000001]); 10281 10282 // Shortcuts 10283 var derivedKeyWords = derivedKey.words; 10284 var blockIndexWords = blockIndex.words; 10285 var keySize = cfg.keySize; 10286 var iterations = cfg.iterations; 10287 10288 // Generate key 10289 while (derivedKeyWords.length < keySize) { 10290 var block = hmac.update(salt).finalize(blockIndex); 10291 hmac.reset(); 10292 10293 // Shortcuts 10294 var blockWords = block.words; 10295 var blockWordsLength = blockWords.length; 10296 10297 // Iterations 10298 var intermediate = block; 10299 for (var i = 1; i < iterations; i++) { 10300 intermediate = hmac.finalize(intermediate); 10301 hmac.reset(); 10302 10303 // Shortcut 10304 var intermediateWords = intermediate.words; 10305 10306 // XOR intermediate with block 10307 for (var j = 0; j < blockWordsLength; j++) { 10308 blockWords[j] ^= intermediateWords[j]; 10309 } 10310 } 10311 10312 derivedKey.concat(block); 10313 blockIndexWords[0]++; 10314 } 10315 derivedKey.sigBytes = keySize * 4; 10316 10317 return derivedKey; 10318 } 10319 }); 10320 10321 /** 10322 * Computes the Password-Based Key Derivation Function 2. 10323 * 10324 * @param {WordArray|string} password The password. 10325 * @param {WordArray|string} salt A salt. 10326 * @param {Object} cfg (Optional) The configuration options to use for this computation. 10327 * 10328 * @return {WordArray} The derived key. 10329 * 10330 * @static 10331 * 10332 * @example 10333 * 10334 * var key = CryptoJS.PBKDF2(password, salt); 10335 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); 10336 * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); 10337 */ 10338 C.PBKDF2 = function (password, salt, cfg) { 10339 return PBKDF2.create(cfg).compute(password, salt); 10340 }; 10341 }()); 10342 10343 10344 return CryptoJS.PBKDF2; 10345 10346 })); 10347 },{"./core":53,"./hmac":58,"./sha1":77}],73:[function(require,module,exports){ 10348 ;(function (root, factory, undef) { 10349 if (typeof exports === "object") { 10350 // CommonJS 10351 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); 10352 } 10353 else if (typeof define === "function" && define.amd) { 10354 // AMD 10355 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); 10356 } 10357 else { 10358 // Global (browser) 10359 factory(root.CryptoJS); 10360 } 10361 }(this, function (CryptoJS) { 10362 10363 (function () { 10364 // Shortcuts 10365 var C = CryptoJS; 10366 var C_lib = C.lib; 10367 var StreamCipher = C_lib.StreamCipher; 10368 var C_algo = C.algo; 10369 10370 // Reusable objects 10371 var S = []; 10372 var C_ = []; 10373 var G = []; 10374 10375 /** 10376 * Rabbit stream cipher algorithm. 10377 * 10378 * This is a legacy version that neglected to convert the key to little-endian. 10379 * This error doesn't affect the cipher's security, 10380 * but it does affect its compatibility with other implementations. 10381 */ 10382 var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ 10383 _doReset: function () { 10384 // Shortcuts 10385 var K = this._key.words; 10386 var iv = this.cfg.iv; 10387 10388 // Generate initial state values 10389 var X = this._X = [ 10390 K[0], (K[3] << 16) | (K[2] >>> 16), 10391 K[1], (K[0] << 16) | (K[3] >>> 16), 10392 K[2], (K[1] << 16) | (K[0] >>> 16), 10393 K[3], (K[2] << 16) | (K[1] >>> 16) 10394 ]; 10395 10396 // Generate initial counter values 10397 var C = this._C = [ 10398 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), 10399 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), 10400 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), 10401 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) 10402 ]; 10403 10404 // Carry bit 10405 this._b = 0; 10406 10407 // Iterate the system four times 10408 for (var i = 0; i < 4; i++) { 10409 nextState.call(this); 10410 } 10411 10412 // Modify the counters 10413 for (var i = 0; i < 8; i++) { 10414 C[i] ^= X[(i + 4) & 7]; 10415 } 10416 10417 // IV setup 10418 if (iv) { 10419 // Shortcuts 10420 var IV = iv.words; 10421 var IV_0 = IV[0]; 10422 var IV_1 = IV[1]; 10423 10424 // Generate four subvectors 10425 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); 10426 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); 10427 var i1 = (i0 >>> 16) | (i2 & 0xffff0000); 10428 var i3 = (i2 << 16) | (i0 & 0x0000ffff); 10429 10430 // Modify counter values 10431 C[0] ^= i0; 10432 C[1] ^= i1; 10433 C[2] ^= i2; 10434 C[3] ^= i3; 10435 C[4] ^= i0; 10436 C[5] ^= i1; 10437 C[6] ^= i2; 10438 C[7] ^= i3; 10439 10440 // Iterate the system four times 10441 for (var i = 0; i < 4; i++) { 10442 nextState.call(this); 10443 } 10444 } 10445 }, 10446 10447 _doProcessBlock: function (M, offset) { 10448 // Shortcut 10449 var X = this._X; 10450 10451 // Iterate the system 10452 nextState.call(this); 10453 10454 // Generate four keystream words 10455 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); 10456 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); 10457 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); 10458 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); 10459 10460 for (var i = 0; i < 4; i++) { 10461 // Swap endian 10462 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | 10463 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); 10464 10465 // Encrypt 10466 M[offset + i] ^= S[i]; 10467 } 10468 }, 10469 10470 blockSize: 128/32, 10471 10472 ivSize: 64/32 10473 }); 10474 10475 function nextState() { 10476 // Shortcuts 10477 var X = this._X; 10478 var C = this._C; 10479 10480 // Save old counter values 10481 for (var i = 0; i < 8; i++) { 10482 C_[i] = C[i]; 10483 } 10484 10485 // Calculate new counter values 10486 C[0] = (C[0] + 0x4d34d34d + this._b) | 0; 10487 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; 10488 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; 10489 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; 10490 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; 10491 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; 10492 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; 10493 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; 10494 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; 10495 10496 // Calculate the g-values 10497 for (var i = 0; i < 8; i++) { 10498 var gx = X[i] + C[i]; 10499 10500 // Construct high and low argument for squaring 10501 var ga = gx & 0xffff; 10502 var gb = gx >>> 16; 10503 10504 // Calculate high and low result of squaring 10505 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; 10506 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); 10507 10508 // High XOR low 10509 G[i] = gh ^ gl; 10510 } 10511 10512 // Calculate new state values 10513 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; 10514 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; 10515 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; 10516 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; 10517 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; 10518 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; 10519 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; 10520 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; 10521 } 10522 10523 /** 10524 * Shortcut functions to the cipher's object interface. 10525 * 10526 * @example 10527 * 10528 * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); 10529 * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); 10530 */ 10531 C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); 10532 }()); 10533 10534 10535 return CryptoJS.RabbitLegacy; 10536 10537 })); 10538 },{"./cipher-core":52,"./core":53,"./enc-base64":54,"./evpkdf":56,"./md5":61}],74:[function(require,module,exports){ 10539 ;(function (root, factory, undef) { 10540 if (typeof exports === "object") { 10541 // CommonJS 10542 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); 10543 } 10544 else if (typeof define === "function" && define.amd) { 10545 // AMD 10546 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); 10547 } 10548 else { 10549 // Global (browser) 10550 factory(root.CryptoJS); 10551 } 10552 }(this, function (CryptoJS) { 10553 10554 (function () { 10555 // Shortcuts 10556 var C = CryptoJS; 10557 var C_lib = C.lib; 10558 var StreamCipher = C_lib.StreamCipher; 10559 var C_algo = C.algo; 10560 10561 // Reusable objects 10562 var S = []; 10563 var C_ = []; 10564 var G = []; 10565 10566 /** 10567 * Rabbit stream cipher algorithm 10568 */ 10569 var Rabbit = C_algo.Rabbit = StreamCipher.extend({ 10570 _doReset: function () { 10571 // Shortcuts 10572 var K = this._key.words; 10573 var iv = this.cfg.iv; 10574 10575 // Swap endian 10576 for (var i = 0; i < 4; i++) { 10577 K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | 10578 (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); 10579 } 10580 10581 // Generate initial state values 10582 var X = this._X = [ 10583 K[0], (K[3] << 16) | (K[2] >>> 16), 10584 K[1], (K[0] << 16) | (K[3] >>> 16), 10585 K[2], (K[1] << 16) | (K[0] >>> 16), 10586 K[3], (K[2] << 16) | (K[1] >>> 16) 10587 ]; 10588 10589 // Generate initial counter values 10590 var C = this._C = [ 10591 (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), 10592 (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), 10593 (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), 10594 (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) 10595 ]; 10596 10597 // Carry bit 10598 this._b = 0; 10599 10600 // Iterate the system four times 10601 for (var i = 0; i < 4; i++) { 10602 nextState.call(this); 10603 } 10604 10605 // Modify the counters 10606 for (var i = 0; i < 8; i++) { 10607 C[i] ^= X[(i + 4) & 7]; 10608 } 10609 10610 // IV setup 10611 if (iv) { 10612 // Shortcuts 10613 var IV = iv.words; 10614 var IV_0 = IV[0]; 10615 var IV_1 = IV[1]; 10616 10617 // Generate four subvectors 10618 var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); 10619 var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); 10620 var i1 = (i0 >>> 16) | (i2 & 0xffff0000); 10621 var i3 = (i2 << 16) | (i0 & 0x0000ffff); 10622 10623 // Modify counter values 10624 C[0] ^= i0; 10625 C[1] ^= i1; 10626 C[2] ^= i2; 10627 C[3] ^= i3; 10628 C[4] ^= i0; 10629 C[5] ^= i1; 10630 C[6] ^= i2; 10631 C[7] ^= i3; 10632 10633 // Iterate the system four times 10634 for (var i = 0; i < 4; i++) { 10635 nextState.call(this); 10636 } 10637 } 10638 }, 10639 10640 _doProcessBlock: function (M, offset) { 10641 // Shortcut 10642 var X = this._X; 10643 10644 // Iterate the system 10645 nextState.call(this); 10646 10647 // Generate four keystream words 10648 S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); 10649 S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); 10650 S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); 10651 S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); 10652 10653 for (var i = 0; i < 4; i++) { 10654 // Swap endian 10655 S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | 10656 (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); 10657 10658 // Encrypt 10659 M[offset + i] ^= S[i]; 10660 } 10661 }, 10662 10663 blockSize: 128/32, 10664 10665 ivSize: 64/32 10666 }); 10667 10668 function nextState() { 10669 // Shortcuts 10670 var X = this._X; 10671 var C = this._C; 10672 10673 // Save old counter values 10674 for (var i = 0; i < 8; i++) { 10675 C_[i] = C[i]; 10676 } 10677 10678 // Calculate new counter values 10679 C[0] = (C[0] + 0x4d34d34d + this._b) | 0; 10680 C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; 10681 C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; 10682 C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; 10683 C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; 10684 C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; 10685 C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; 10686 C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; 10687 this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; 10688 10689 // Calculate the g-values 10690 for (var i = 0; i < 8; i++) { 10691 var gx = X[i] + C[i]; 10692 10693 // Construct high and low argument for squaring 10694 var ga = gx & 0xffff; 10695 var gb = gx >>> 16; 10696 10697 // Calculate high and low result of squaring 10698 var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; 10699 var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); 10700 10701 // High XOR low 10702 G[i] = gh ^ gl; 10703 } 10704 10705 // Calculate new state values 10706 X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; 10707 X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; 10708 X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; 10709 X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; 10710 X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; 10711 X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; 10712 X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; 10713 X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; 10714 } 10715 10716 /** 10717 * Shortcut functions to the cipher's object interface. 10718 * 10719 * @example 10720 * 10721 * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); 10722 * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); 10723 */ 10724 C.Rabbit = StreamCipher._createHelper(Rabbit); 10725 }()); 10726 10727 10728 return CryptoJS.Rabbit; 10729 10730 })); 10731 },{"./cipher-core":52,"./core":53,"./enc-base64":54,"./evpkdf":56,"./md5":61}],75:[function(require,module,exports){ 10732 ;(function (root, factory, undef) { 10733 if (typeof exports === "object") { 10734 // CommonJS 10735 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); 10736 } 10737 else if (typeof define === "function" && define.amd) { 10738 // AMD 10739 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); 10740 } 10741 else { 10742 // Global (browser) 10743 factory(root.CryptoJS); 10744 } 10745 }(this, function (CryptoJS) { 10746 10747 (function () { 10748 // Shortcuts 10749 var C = CryptoJS; 10750 var C_lib = C.lib; 10751 var StreamCipher = C_lib.StreamCipher; 10752 var C_algo = C.algo; 10753 10754 /** 10755 * RC4 stream cipher algorithm. 10756 */ 10757 var RC4 = C_algo.RC4 = StreamCipher.extend({ 10758 _doReset: function () { 10759 // Shortcuts 10760 var key = this._key; 10761 var keyWords = key.words; 10762 var keySigBytes = key.sigBytes; 10763 10764 // Init sbox 10765 var S = this._S = []; 10766 for (var i = 0; i < 256; i++) { 10767 S[i] = i; 10768 } 10769 10770 // Key setup 10771 for (var i = 0, j = 0; i < 256; i++) { 10772 var keyByteIndex = i % keySigBytes; 10773 var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; 10774 10775 j = (j + S[i] + keyByte) % 256; 10776 10777 // Swap 10778 var t = S[i]; 10779 S[i] = S[j]; 10780 S[j] = t; 10781 } 10782 10783 // Counters 10784 this._i = this._j = 0; 10785 }, 10786 10787 _doProcessBlock: function (M, offset) { 10788 M[offset] ^= generateKeystreamWord.call(this); 10789 }, 10790 10791 keySize: 256/32, 10792 10793 ivSize: 0 10794 }); 10795 10796 function generateKeystreamWord() { 10797 // Shortcuts 10798 var S = this._S; 10799 var i = this._i; 10800 var j = this._j; 10801 10802 // Generate keystream word 10803 var keystreamWord = 0; 10804 for (var n = 0; n < 4; n++) { 10805 i = (i + 1) % 256; 10806 j = (j + S[i]) % 256; 10807 10808 // Swap 10809 var t = S[i]; 10810 S[i] = S[j]; 10811 S[j] = t; 10812 10813 keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); 10814 } 10815 10816 // Update counters 10817 this._i = i; 10818 this._j = j; 10819 10820 return keystreamWord; 10821 } 10822 10823 /** 10824 * Shortcut functions to the cipher's object interface. 10825 * 10826 * @example 10827 * 10828 * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); 10829 * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); 10830 */ 10831 C.RC4 = StreamCipher._createHelper(RC4); 10832 10833 /** 10834 * Modified RC4 stream cipher algorithm. 10835 */ 10836 var RC4Drop = C_algo.RC4Drop = RC4.extend({ 10837 /** 10838 * Configuration options. 10839 * 10840 * @property {number} drop The number of keystream words to drop. Default 192 10841 */ 10842 cfg: RC4.cfg.extend({ 10843 drop: 192 10844 }), 10845 10846 _doReset: function () { 10847 RC4._doReset.call(this); 10848 10849 // Drop 10850 for (var i = this.cfg.drop; i > 0; i--) { 10851 generateKeystreamWord.call(this); 10852 } 10853 } 10854 }); 10855 10856 /** 10857 * Shortcut functions to the cipher's object interface. 10858 * 10859 * @example 10860 * 10861 * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); 10862 * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); 10863 */ 10864 C.RC4Drop = StreamCipher._createHelper(RC4Drop); 10865 }()); 10866 10867 10868 return CryptoJS.RC4; 10869 10870 })); 10871 },{"./cipher-core":52,"./core":53,"./enc-base64":54,"./evpkdf":56,"./md5":61}],76:[function(require,module,exports){ 10872 ;(function (root, factory) { 10873 if (typeof exports === "object") { 10874 // CommonJS 10875 module.exports = exports = factory(require("./core")); 10876 } 10877 else if (typeof define === "function" && define.amd) { 10878 // AMD 10879 define(["./core"], factory); 10880 } 10881 else { 10882 // Global (browser) 10883 factory(root.CryptoJS); 10884 } 10885 }(this, function (CryptoJS) { 10886 10887 /** @preserve 10888 (c) 2012 by Cédric Mesnil. All rights reserved. 10889 10890 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 10891 10892 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 10893 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 10894 10895 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 10896 */ 10897 10898 (function (Math) { 10899 // Shortcuts 10900 var C = CryptoJS; 10901 var C_lib = C.lib; 10902 var WordArray = C_lib.WordArray; 10903 var Hasher = C_lib.Hasher; 10904 var C_algo = C.algo; 10905 10906 // Constants table 10907 var _zl = WordArray.create([ 10908 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10909 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 10910 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 10911 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 10912 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); 10913 var _zr = WordArray.create([ 10914 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 10915 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 10916 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 10917 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 10918 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); 10919 var _sl = WordArray.create([ 10920 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 10921 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 10922 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 10923 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 10924 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); 10925 var _sr = WordArray.create([ 10926 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 10927 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 10928 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 10929 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 10930 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); 10931 10932 var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); 10933 var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); 10934 10935 /** 10936 * RIPEMD160 hash algorithm. 10937 */ 10938 var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ 10939 _doReset: function () { 10940 this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); 10941 }, 10942 10943 _doProcessBlock: function (M, offset) { 10944 10945 // Swap endian 10946 for (var i = 0; i < 16; i++) { 10947 // Shortcuts 10948 var offset_i = offset + i; 10949 var M_offset_i = M[offset_i]; 10950 10951 // Swap 10952 M[offset_i] = ( 10953 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | 10954 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) 10955 ); 10956 } 10957 // Shortcut 10958 var H = this._hash.words; 10959 var hl = _hl.words; 10960 var hr = _hr.words; 10961 var zl = _zl.words; 10962 var zr = _zr.words; 10963 var sl = _sl.words; 10964 var sr = _sr.words; 10965 10966 // Working variables 10967 var al, bl, cl, dl, el; 10968 var ar, br, cr, dr, er; 10969 10970 ar = al = H[0]; 10971 br = bl = H[1]; 10972 cr = cl = H[2]; 10973 dr = dl = H[3]; 10974 er = el = H[4]; 10975 // Computation 10976 var t; 10977 for (var i = 0; i < 80; i += 1) { 10978 t = (al + M[offset+zl[i]])|0; 10979 if (i<16){ 10980 t += f1(bl,cl,dl) + hl[0]; 10981 } else if (i<32) { 10982 t += f2(bl,cl,dl) + hl[1]; 10983 } else if (i<48) { 10984 t += f3(bl,cl,dl) + hl[2]; 10985 } else if (i<64) { 10986 t += f4(bl,cl,dl) + hl[3]; 10987 } else {// if (i<80) { 10988 t += f5(bl,cl,dl) + hl[4]; 10989 } 10990 t = t|0; 10991 t = rotl(t,sl[i]); 10992 t = (t+el)|0; 10993 al = el; 10994 el = dl; 10995 dl = rotl(cl, 10); 10996 cl = bl; 10997 bl = t; 10998 10999 t = (ar + M[offset+zr[i]])|0; 11000 if (i<16){ 11001 t += f5(br,cr,dr) + hr[0]; 11002 } else if (i<32) { 11003 t += f4(br,cr,dr) + hr[1]; 11004 } else if (i<48) { 11005 t += f3(br,cr,dr) + hr[2]; 11006 } else if (i<64) { 11007 t += f2(br,cr,dr) + hr[3]; 11008 } else {// if (i<80) { 11009 t += f1(br,cr,dr) + hr[4]; 11010 } 11011 t = t|0; 11012 t = rotl(t,sr[i]) ; 11013 t = (t+er)|0; 11014 ar = er; 11015 er = dr; 11016 dr = rotl(cr, 10); 11017 cr = br; 11018 br = t; 11019 } 11020 // Intermediate hash value 11021 t = (H[1] + cl + dr)|0; 11022 H[1] = (H[2] + dl + er)|0; 11023 H[2] = (H[3] + el + ar)|0; 11024 H[3] = (H[4] + al + br)|0; 11025 H[4] = (H[0] + bl + cr)|0; 11026 H[0] = t; 11027 }, 11028 11029 _doFinalize: function () { 11030 // Shortcuts 11031 var data = this._data; 11032 var dataWords = data.words; 11033 11034 var nBitsTotal = this._nDataBytes * 8; 11035 var nBitsLeft = data.sigBytes * 8; 11036 11037 // Add padding 11038 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 11039 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( 11040 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | 11041 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) 11042 ); 11043 data.sigBytes = (dataWords.length + 1) * 4; 11044 11045 // Hash final blocks 11046 this._process(); 11047 11048 // Shortcuts 11049 var hash = this._hash; 11050 var H = hash.words; 11051 11052 // Swap endian 11053 for (var i = 0; i < 5; i++) { 11054 // Shortcut 11055 var H_i = H[i]; 11056 11057 // Swap 11058 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | 11059 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); 11060 } 11061 11062 // Return final computed hash 11063 return hash; 11064 }, 11065 11066 clone: function () { 11067 var clone = Hasher.clone.call(this); 11068 clone._hash = this._hash.clone(); 11069 11070 return clone; 11071 } 11072 }); 11073 11074 11075 function f1(x, y, z) { 11076 return ((x) ^ (y) ^ (z)); 11077 11078 } 11079 11080 function f2(x, y, z) { 11081 return (((x)&(y)) | ((~x)&(z))); 11082 } 11083 11084 function f3(x, y, z) { 11085 return (((x) | (~(y))) ^ (z)); 11086 } 11087 11088 function f4(x, y, z) { 11089 return (((x) & (z)) | ((y)&(~(z)))); 11090 } 11091 11092 function f5(x, y, z) { 11093 return ((x) ^ ((y) |(~(z)))); 11094 11095 } 11096 11097 function rotl(x,n) { 11098 return (x<<n) | (x>>>(32-n)); 11099 } 11100 11101 11102 /** 11103 * Shortcut function to the hasher's object interface. 11104 * 11105 * @param {WordArray|string} message The message to hash. 11106 * 11107 * @return {WordArray} The hash. 11108 * 11109 * @static 11110 * 11111 * @example 11112 * 11113 * var hash = CryptoJS.RIPEMD160('message'); 11114 * var hash = CryptoJS.RIPEMD160(wordArray); 11115 */ 11116 C.RIPEMD160 = Hasher._createHelper(RIPEMD160); 11117 11118 /** 11119 * Shortcut function to the HMAC's object interface. 11120 * 11121 * @param {WordArray|string} message The message to hash. 11122 * @param {WordArray|string} key The secret key. 11123 * 11124 * @return {WordArray} The HMAC. 11125 * 11126 * @static 11127 * 11128 * @example 11129 * 11130 * var hmac = CryptoJS.HmacRIPEMD160(message, key); 11131 */ 11132 C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); 11133 }(Math)); 11134 11135 11136 return CryptoJS.RIPEMD160; 11137 11138 })); 11139 },{"./core":53}],77:[function(require,module,exports){ 11140 ;(function (root, factory) { 11141 if (typeof exports === "object") { 11142 // CommonJS 11143 module.exports = exports = factory(require("./core")); 11144 } 11145 else if (typeof define === "function" && define.amd) { 11146 // AMD 11147 define(["./core"], factory); 11148 } 11149 else { 11150 // Global (browser) 11151 factory(root.CryptoJS); 11152 } 11153 }(this, function (CryptoJS) { 11154 11155 (function () { 11156 // Shortcuts 11157 var C = CryptoJS; 11158 var C_lib = C.lib; 11159 var WordArray = C_lib.WordArray; 11160 var Hasher = C_lib.Hasher; 11161 var C_algo = C.algo; 11162 11163 // Reusable object 11164 var W = []; 11165 11166 /** 11167 * SHA-1 hash algorithm. 11168 */ 11169 var SHA1 = C_algo.SHA1 = Hasher.extend({ 11170 _doReset: function () { 11171 this._hash = new WordArray.init([ 11172 0x67452301, 0xefcdab89, 11173 0x98badcfe, 0x10325476, 11174 0xc3d2e1f0 11175 ]); 11176 }, 11177 11178 _doProcessBlock: function (M, offset) { 11179 // Shortcut 11180 var H = this._hash.words; 11181 11182 // Working variables 11183 var a = H[0]; 11184 var b = H[1]; 11185 var c = H[2]; 11186 var d = H[3]; 11187 var e = H[4]; 11188 11189 // Computation 11190 for (var i = 0; i < 80; i++) { 11191 if (i < 16) { 11192 W[i] = M[offset + i] | 0; 11193 } else { 11194 var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; 11195 W[i] = (n << 1) | (n >>> 31); 11196 } 11197 11198 var t = ((a << 5) | (a >>> 27)) + e + W[i]; 11199 if (i < 20) { 11200 t += ((b & c) | (~b & d)) + 0x5a827999; 11201 } else if (i < 40) { 11202 t += (b ^ c ^ d) + 0x6ed9eba1; 11203 } else if (i < 60) { 11204 t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; 11205 } else /* if (i < 80) */ { 11206 t += (b ^ c ^ d) - 0x359d3e2a; 11207 } 11208 11209 e = d; 11210 d = c; 11211 c = (b << 30) | (b >>> 2); 11212 b = a; 11213 a = t; 11214 } 11215 11216 // Intermediate hash value 11217 H[0] = (H[0] + a) | 0; 11218 H[1] = (H[1] + b) | 0; 11219 H[2] = (H[2] + c) | 0; 11220 H[3] = (H[3] + d) | 0; 11221 H[4] = (H[4] + e) | 0; 11222 }, 11223 11224 _doFinalize: function () { 11225 // Shortcuts 11226 var data = this._data; 11227 var dataWords = data.words; 11228 11229 var nBitsTotal = this._nDataBytes * 8; 11230 var nBitsLeft = data.sigBytes * 8; 11231 11232 // Add padding 11233 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 11234 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); 11235 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; 11236 data.sigBytes = dataWords.length * 4; 11237 11238 // Hash final blocks 11239 this._process(); 11240 11241 // Return final computed hash 11242 return this._hash; 11243 }, 11244 11245 clone: function () { 11246 var clone = Hasher.clone.call(this); 11247 clone._hash = this._hash.clone(); 11248 11249 return clone; 11250 } 11251 }); 11252 11253 /** 11254 * Shortcut function to the hasher's object interface. 11255 * 11256 * @param {WordArray|string} message The message to hash. 11257 * 11258 * @return {WordArray} The hash. 11259 * 11260 * @static 11261 * 11262 * @example 11263 * 11264 * var hash = CryptoJS.SHA1('message'); 11265 * var hash = CryptoJS.SHA1(wordArray); 11266 */ 11267 C.SHA1 = Hasher._createHelper(SHA1); 11268 11269 /** 11270 * Shortcut function to the HMAC's object interface. 11271 * 11272 * @param {WordArray|string} message The message to hash. 11273 * @param {WordArray|string} key The secret key. 11274 * 11275 * @return {WordArray} The HMAC. 11276 * 11277 * @static 11278 * 11279 * @example 11280 * 11281 * var hmac = CryptoJS.HmacSHA1(message, key); 11282 */ 11283 C.HmacSHA1 = Hasher._createHmacHelper(SHA1); 11284 }()); 11285 11286 11287 return CryptoJS.SHA1; 11288 11289 })); 11290 },{"./core":53}],78:[function(require,module,exports){ 11291 ;(function (root, factory, undef) { 11292 if (typeof exports === "object") { 11293 // CommonJS 11294 module.exports = exports = factory(require("./core"), require("./sha256")); 11295 } 11296 else if (typeof define === "function" && define.amd) { 11297 // AMD 11298 define(["./core", "./sha256"], factory); 11299 } 11300 else { 11301 // Global (browser) 11302 factory(root.CryptoJS); 11303 } 11304 }(this, function (CryptoJS) { 11305 11306 (function () { 11307 // Shortcuts 11308 var C = CryptoJS; 11309 var C_lib = C.lib; 11310 var WordArray = C_lib.WordArray; 11311 var C_algo = C.algo; 11312 var SHA256 = C_algo.SHA256; 11313 11314 /** 11315 * SHA-224 hash algorithm. 11316 */ 11317 var SHA224 = C_algo.SHA224 = SHA256.extend({ 11318 _doReset: function () { 11319 this._hash = new WordArray.init([ 11320 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 11321 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 11322 ]); 11323 }, 11324 11325 _doFinalize: function () { 11326 var hash = SHA256._doFinalize.call(this); 11327 11328 hash.sigBytes -= 4; 11329 11330 return hash; 11331 } 11332 }); 11333 11334 /** 11335 * Shortcut function to the hasher's object interface. 11336 * 11337 * @param {WordArray|string} message The message to hash. 11338 * 11339 * @return {WordArray} The hash. 11340 * 11341 * @static 11342 * 11343 * @example 11344 * 11345 * var hash = CryptoJS.SHA224('message'); 11346 * var hash = CryptoJS.SHA224(wordArray); 11347 */ 11348 C.SHA224 = SHA256._createHelper(SHA224); 11349 11350 /** 11351 * Shortcut function to the HMAC's object interface. 11352 * 11353 * @param {WordArray|string} message The message to hash. 11354 * @param {WordArray|string} key The secret key. 11355 * 11356 * @return {WordArray} The HMAC. 11357 * 11358 * @static 11359 * 11360 * @example 11361 * 11362 * var hmac = CryptoJS.HmacSHA224(message, key); 11363 */ 11364 C.HmacSHA224 = SHA256._createHmacHelper(SHA224); 11365 }()); 11366 11367 11368 return CryptoJS.SHA224; 11369 11370 })); 11371 },{"./core":53,"./sha256":79}],79:[function(require,module,exports){ 11372 ;(function (root, factory) { 11373 if (typeof exports === "object") { 11374 // CommonJS 11375 module.exports = exports = factory(require("./core")); 11376 } 11377 else if (typeof define === "function" && define.amd) { 11378 // AMD 11379 define(["./core"], factory); 11380 } 11381 else { 11382 // Global (browser) 11383 factory(root.CryptoJS); 11384 } 11385 }(this, function (CryptoJS) { 11386 11387 (function (Math) { 11388 // Shortcuts 11389 var C = CryptoJS; 11390 var C_lib = C.lib; 11391 var WordArray = C_lib.WordArray; 11392 var Hasher = C_lib.Hasher; 11393 var C_algo = C.algo; 11394 11395 // Initialization and round constants tables 11396 var H = []; 11397 var K = []; 11398 11399 // Compute constants 11400 (function () { 11401 function isPrime(n) { 11402 var sqrtN = Math.sqrt(n); 11403 for (var factor = 2; factor <= sqrtN; factor++) { 11404 if (!(n % factor)) { 11405 return false; 11406 } 11407 } 11408 11409 return true; 11410 } 11411 11412 function getFractionalBits(n) { 11413 return ((n - (n | 0)) * 0x100000000) | 0; 11414 } 11415 11416 var n = 2; 11417 var nPrime = 0; 11418 while (nPrime < 64) { 11419 if (isPrime(n)) { 11420 if (nPrime < 8) { 11421 H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); 11422 } 11423 K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); 11424 11425 nPrime++; 11426 } 11427 11428 n++; 11429 } 11430 }()); 11431 11432 // Reusable object 11433 var W = []; 11434 11435 /** 11436 * SHA-256 hash algorithm. 11437 */ 11438 var SHA256 = C_algo.SHA256 = Hasher.extend({ 11439 _doReset: function () { 11440 this._hash = new WordArray.init(H.slice(0)); 11441 }, 11442 11443 _doProcessBlock: function (M, offset) { 11444 // Shortcut 11445 var H = this._hash.words; 11446 11447 // Working variables 11448 var a = H[0]; 11449 var b = H[1]; 11450 var c = H[2]; 11451 var d = H[3]; 11452 var e = H[4]; 11453 var f = H[5]; 11454 var g = H[6]; 11455 var h = H[7]; 11456 11457 // Computation 11458 for (var i = 0; i < 64; i++) { 11459 if (i < 16) { 11460 W[i] = M[offset + i] | 0; 11461 } else { 11462 var gamma0x = W[i - 15]; 11463 var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ 11464 ((gamma0x << 14) | (gamma0x >>> 18)) ^ 11465 (gamma0x >>> 3); 11466 11467 var gamma1x = W[i - 2]; 11468 var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ 11469 ((gamma1x << 13) | (gamma1x >>> 19)) ^ 11470 (gamma1x >>> 10); 11471 11472 W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; 11473 } 11474 11475 var ch = (e & f) ^ (~e & g); 11476 var maj = (a & b) ^ (a & c) ^ (b & c); 11477 11478 var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); 11479 var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); 11480 11481 var t1 = h + sigma1 + ch + K[i] + W[i]; 11482 var t2 = sigma0 + maj; 11483 11484 h = g; 11485 g = f; 11486 f = e; 11487 e = (d + t1) | 0; 11488 d = c; 11489 c = b; 11490 b = a; 11491 a = (t1 + t2) | 0; 11492 } 11493 11494 // Intermediate hash value 11495 H[0] = (H[0] + a) | 0; 11496 H[1] = (H[1] + b) | 0; 11497 H[2] = (H[2] + c) | 0; 11498 H[3] = (H[3] + d) | 0; 11499 H[4] = (H[4] + e) | 0; 11500 H[5] = (H[5] + f) | 0; 11501 H[6] = (H[6] + g) | 0; 11502 H[7] = (H[7] + h) | 0; 11503 }, 11504 11505 _doFinalize: function () { 11506 // Shortcuts 11507 var data = this._data; 11508 var dataWords = data.words; 11509 11510 var nBitsTotal = this._nDataBytes * 8; 11511 var nBitsLeft = data.sigBytes * 8; 11512 11513 // Add padding 11514 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 11515 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); 11516 dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; 11517 data.sigBytes = dataWords.length * 4; 11518 11519 // Hash final blocks 11520 this._process(); 11521 11522 // Return final computed hash 11523 return this._hash; 11524 }, 11525 11526 clone: function () { 11527 var clone = Hasher.clone.call(this); 11528 clone._hash = this._hash.clone(); 11529 11530 return clone; 11531 } 11532 }); 11533 11534 /** 11535 * Shortcut function to the hasher's object interface. 11536 * 11537 * @param {WordArray|string} message The message to hash. 11538 * 11539 * @return {WordArray} The hash. 11540 * 11541 * @static 11542 * 11543 * @example 11544 * 11545 * var hash = CryptoJS.SHA256('message'); 11546 * var hash = CryptoJS.SHA256(wordArray); 11547 */ 11548 C.SHA256 = Hasher._createHelper(SHA256); 11549 11550 /** 11551 * Shortcut function to the HMAC's object interface. 11552 * 11553 * @param {WordArray|string} message The message to hash. 11554 * @param {WordArray|string} key The secret key. 11555 * 11556 * @return {WordArray} The HMAC. 11557 * 11558 * @static 11559 * 11560 * @example 11561 * 11562 * var hmac = CryptoJS.HmacSHA256(message, key); 11563 */ 11564 C.HmacSHA256 = Hasher._createHmacHelper(SHA256); 11565 }(Math)); 11566 11567 11568 return CryptoJS.SHA256; 11569 11570 })); 11571 },{"./core":53}],80:[function(require,module,exports){ 11572 ;(function (root, factory, undef) { 11573 if (typeof exports === "object") { 11574 // CommonJS 11575 module.exports = exports = factory(require("./core"), require("./x64-core")); 11576 } 11577 else if (typeof define === "function" && define.amd) { 11578 // AMD 11579 define(["./core", "./x64-core"], factory); 11580 } 11581 else { 11582 // Global (browser) 11583 factory(root.CryptoJS); 11584 } 11585 }(this, function (CryptoJS) { 11586 11587 (function (Math) { 11588 // Shortcuts 11589 var C = CryptoJS; 11590 var C_lib = C.lib; 11591 var WordArray = C_lib.WordArray; 11592 var Hasher = C_lib.Hasher; 11593 var C_x64 = C.x64; 11594 var X64Word = C_x64.Word; 11595 var C_algo = C.algo; 11596 11597 // Constants tables 11598 var RHO_OFFSETS = []; 11599 var PI_INDEXES = []; 11600 var ROUND_CONSTANTS = []; 11601 11602 // Compute Constants 11603 (function () { 11604 // Compute rho offset constants 11605 var x = 1, y = 0; 11606 for (var t = 0; t < 24; t++) { 11607 RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; 11608 11609 var newX = y % 5; 11610 var newY = (2 * x + 3 * y) % 5; 11611 x = newX; 11612 y = newY; 11613 } 11614 11615 // Compute pi index constants 11616 for (var x = 0; x < 5; x++) { 11617 for (var y = 0; y < 5; y++) { 11618 PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; 11619 } 11620 } 11621 11622 // Compute round constants 11623 var LFSR = 0x01; 11624 for (var i = 0; i < 24; i++) { 11625 var roundConstantMsw = 0; 11626 var roundConstantLsw = 0; 11627 11628 for (var j = 0; j < 7; j++) { 11629 if (LFSR & 0x01) { 11630 var bitPosition = (1 << j) - 1; 11631 if (bitPosition < 32) { 11632 roundConstantLsw ^= 1 << bitPosition; 11633 } else /* if (bitPosition >= 32) */ { 11634 roundConstantMsw ^= 1 << (bitPosition - 32); 11635 } 11636 } 11637 11638 // Compute next LFSR 11639 if (LFSR & 0x80) { 11640 // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 11641 LFSR = (LFSR << 1) ^ 0x71; 11642 } else { 11643 LFSR <<= 1; 11644 } 11645 } 11646 11647 ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); 11648 } 11649 }()); 11650 11651 // Reusable objects for temporary values 11652 var T = []; 11653 (function () { 11654 for (var i = 0; i < 25; i++) { 11655 T[i] = X64Word.create(); 11656 } 11657 }()); 11658 11659 /** 11660 * SHA-3 hash algorithm. 11661 */ 11662 var SHA3 = C_algo.SHA3 = Hasher.extend({ 11663 /** 11664 * Configuration options. 11665 * 11666 * @property {number} outputLength 11667 * The desired number of bits in the output hash. 11668 * Only values permitted are: 224, 256, 384, 512. 11669 * Default: 512 11670 */ 11671 cfg: Hasher.cfg.extend({ 11672 outputLength: 512 11673 }), 11674 11675 _doReset: function () { 11676 var state = this._state = [] 11677 for (var i = 0; i < 25; i++) { 11678 state[i] = new X64Word.init(); 11679 } 11680 11681 this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; 11682 }, 11683 11684 _doProcessBlock: function (M, offset) { 11685 // Shortcuts 11686 var state = this._state; 11687 var nBlockSizeLanes = this.blockSize / 2; 11688 11689 // Absorb 11690 for (var i = 0; i < nBlockSizeLanes; i++) { 11691 // Shortcuts 11692 var M2i = M[offset + 2 * i]; 11693 var M2i1 = M[offset + 2 * i + 1]; 11694 11695 // Swap endian 11696 M2i = ( 11697 (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | 11698 (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) 11699 ); 11700 M2i1 = ( 11701 (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | 11702 (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) 11703 ); 11704 11705 // Absorb message into state 11706 var lane = state[i]; 11707 lane.high ^= M2i1; 11708 lane.low ^= M2i; 11709 } 11710 11711 // Rounds 11712 for (var round = 0; round < 24; round++) { 11713 // Theta 11714 for (var x = 0; x < 5; x++) { 11715 // Mix column lanes 11716 var tMsw = 0, tLsw = 0; 11717 for (var y = 0; y < 5; y++) { 11718 var lane = state[x + 5 * y]; 11719 tMsw ^= lane.high; 11720 tLsw ^= lane.low; 11721 } 11722 11723 // Temporary values 11724 var Tx = T[x]; 11725 Tx.high = tMsw; 11726 Tx.low = tLsw; 11727 } 11728 for (var x = 0; x < 5; x++) { 11729 // Shortcuts 11730 var Tx4 = T[(x + 4) % 5]; 11731 var Tx1 = T[(x + 1) % 5]; 11732 var Tx1Msw = Tx1.high; 11733 var Tx1Lsw = Tx1.low; 11734 11735 // Mix surrounding columns 11736 var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); 11737 var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); 11738 for (var y = 0; y < 5; y++) { 11739 var lane = state[x + 5 * y]; 11740 lane.high ^= tMsw; 11741 lane.low ^= tLsw; 11742 } 11743 } 11744 11745 // Rho Pi 11746 for (var laneIndex = 1; laneIndex < 25; laneIndex++) { 11747 // Shortcuts 11748 var lane = state[laneIndex]; 11749 var laneMsw = lane.high; 11750 var laneLsw = lane.low; 11751 var rhoOffset = RHO_OFFSETS[laneIndex]; 11752 11753 // Rotate lanes 11754 if (rhoOffset < 32) { 11755 var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); 11756 var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); 11757 } else /* if (rhoOffset >= 32) */ { 11758 var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); 11759 var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); 11760 } 11761 11762 // Transpose lanes 11763 var TPiLane = T[PI_INDEXES[laneIndex]]; 11764 TPiLane.high = tMsw; 11765 TPiLane.low = tLsw; 11766 } 11767 11768 // Rho pi at x = y = 0 11769 var T0 = T[0]; 11770 var state0 = state[0]; 11771 T0.high = state0.high; 11772 T0.low = state0.low; 11773 11774 // Chi 11775 for (var x = 0; x < 5; x++) { 11776 for (var y = 0; y < 5; y++) { 11777 // Shortcuts 11778 var laneIndex = x + 5 * y; 11779 var lane = state[laneIndex]; 11780 var TLane = T[laneIndex]; 11781 var Tx1Lane = T[((x + 1) % 5) + 5 * y]; 11782 var Tx2Lane = T[((x + 2) % 5) + 5 * y]; 11783 11784 // Mix rows 11785 lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); 11786 lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); 11787 } 11788 } 11789 11790 // Iota 11791 var lane = state[0]; 11792 var roundConstant = ROUND_CONSTANTS[round]; 11793 lane.high ^= roundConstant.high; 11794 lane.low ^= roundConstant.low;; 11795 } 11796 }, 11797 11798 _doFinalize: function () { 11799 // Shortcuts 11800 var data = this._data; 11801 var dataWords = data.words; 11802 var nBitsTotal = this._nDataBytes * 8; 11803 var nBitsLeft = data.sigBytes * 8; 11804 var blockSizeBits = this.blockSize * 32; 11805 11806 // Add padding 11807 dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); 11808 dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; 11809 data.sigBytes = dataWords.length * 4; 11810 11811 // Hash final blocks 11812 this._process(); 11813 11814 // Shortcuts 11815 var state = this._state; 11816 var outputLengthBytes = this.cfg.outputLength / 8; 11817 var outputLengthLanes = outputLengthBytes / 8; 11818 11819 // Squeeze 11820 var hashWords = []; 11821 for (var i = 0; i < outputLengthLanes; i++) { 11822 // Shortcuts 11823 var lane = state[i]; 11824 var laneMsw = lane.high; 11825 var laneLsw = lane.low; 11826 11827 // Swap endian 11828 laneMsw = ( 11829 (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | 11830 (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) 11831 ); 11832 laneLsw = ( 11833 (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | 11834 (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) 11835 ); 11836 11837 // Squeeze state to retrieve hash 11838 hashWords.push(laneLsw); 11839 hashWords.push(laneMsw); 11840 } 11841 11842 // Return final computed hash 11843 return new WordArray.init(hashWords, outputLengthBytes); 11844 }, 11845 11846 clone: function () { 11847 var clone = Hasher.clone.call(this); 11848 11849 var state = clone._state = this._state.slice(0); 11850 for (var i = 0; i < 25; i++) { 11851 state[i] = state[i].clone(); 11852 } 11853 11854 return clone; 11855 } 11856 }); 11857 11858 /** 11859 * Shortcut function to the hasher's object interface. 11860 * 11861 * @param {WordArray|string} message The message to hash. 11862 * 11863 * @return {WordArray} The hash. 11864 * 11865 * @static 11866 * 11867 * @example 11868 * 11869 * var hash = CryptoJS.SHA3('message'); 11870 * var hash = CryptoJS.SHA3(wordArray); 11871 */ 11872 C.SHA3 = Hasher._createHelper(SHA3); 11873 11874 /** 11875 * Shortcut function to the HMAC's object interface. 11876 * 11877 * @param {WordArray|string} message The message to hash. 11878 * @param {WordArray|string} key The secret key. 11879 * 11880 * @return {WordArray} The HMAC. 11881 * 11882 * @static 11883 * 11884 * @example 11885 * 11886 * var hmac = CryptoJS.HmacSHA3(message, key); 11887 */ 11888 C.HmacSHA3 = Hasher._createHmacHelper(SHA3); 11889 }(Math)); 11890 11891 11892 return CryptoJS.SHA3; 11893 11894 })); 11895 },{"./core":53,"./x64-core":84}],81:[function(require,module,exports){ 11896 ;(function (root, factory, undef) { 11897 if (typeof exports === "object") { 11898 // CommonJS 11899 module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); 11900 } 11901 else if (typeof define === "function" && define.amd) { 11902 // AMD 11903 define(["./core", "./x64-core", "./sha512"], factory); 11904 } 11905 else { 11906 // Global (browser) 11907 factory(root.CryptoJS); 11908 } 11909 }(this, function (CryptoJS) { 11910 11911 (function () { 11912 // Shortcuts 11913 var C = CryptoJS; 11914 var C_x64 = C.x64; 11915 var X64Word = C_x64.Word; 11916 var X64WordArray = C_x64.WordArray; 11917 var C_algo = C.algo; 11918 var SHA512 = C_algo.SHA512; 11919 11920 /** 11921 * SHA-384 hash algorithm. 11922 */ 11923 var SHA384 = C_algo.SHA384 = SHA512.extend({ 11924 _doReset: function () { 11925 this._hash = new X64WordArray.init([ 11926 new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), 11927 new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), 11928 new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), 11929 new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) 11930 ]); 11931 }, 11932 11933 _doFinalize: function () { 11934 var hash = SHA512._doFinalize.call(this); 11935 11936 hash.sigBytes -= 16; 11937 11938 return hash; 11939 } 11940 }); 11941 11942 /** 11943 * Shortcut function to the hasher's object interface. 11944 * 11945 * @param {WordArray|string} message The message to hash. 11946 * 11947 * @return {WordArray} The hash. 11948 * 11949 * @static 11950 * 11951 * @example 11952 * 11953 * var hash = CryptoJS.SHA384('message'); 11954 * var hash = CryptoJS.SHA384(wordArray); 11955 */ 11956 C.SHA384 = SHA512._createHelper(SHA384); 11957 11958 /** 11959 * Shortcut function to the HMAC's object interface. 11960 * 11961 * @param {WordArray|string} message The message to hash. 11962 * @param {WordArray|string} key The secret key. 11963 * 11964 * @return {WordArray} The HMAC. 11965 * 11966 * @static 11967 * 11968 * @example 11969 * 11970 * var hmac = CryptoJS.HmacSHA384(message, key); 11971 */ 11972 C.HmacSHA384 = SHA512._createHmacHelper(SHA384); 11973 }()); 11974 11975 11976 return CryptoJS.SHA384; 11977 11978 })); 11979 },{"./core":53,"./sha512":82,"./x64-core":84}],82:[function(require,module,exports){ 11980 ;(function (root, factory, undef) { 11981 if (typeof exports === "object") { 11982 // CommonJS 11983 module.exports = exports = factory(require("./core"), require("./x64-core")); 11984 } 11985 else if (typeof define === "function" && define.amd) { 11986 // AMD 11987 define(["./core", "./x64-core"], factory); 11988 } 11989 else { 11990 // Global (browser) 11991 factory(root.CryptoJS); 11992 } 11993 }(this, function (CryptoJS) { 11994 11995 (function () { 11996 // Shortcuts 11997 var C = CryptoJS; 11998 var C_lib = C.lib; 11999 var Hasher = C_lib.Hasher; 12000 var C_x64 = C.x64; 12001 var X64Word = C_x64.Word; 12002 var X64WordArray = C_x64.WordArray; 12003 var C_algo = C.algo; 12004 12005 function X64Word_create() { 12006 return X64Word.create.apply(X64Word, arguments); 12007 } 12008 12009 // Constants 12010 var K = [ 12011 X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), 12012 X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), 12013 X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), 12014 X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), 12015 X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), 12016 X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), 12017 X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), 12018 X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), 12019 X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), 12020 X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), 12021 X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), 12022 X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), 12023 X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), 12024 X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), 12025 X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), 12026 X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), 12027 X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), 12028 X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), 12029 X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), 12030 X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), 12031 X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), 12032 X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), 12033 X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), 12034 X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), 12035 X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), 12036 X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), 12037 X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), 12038 X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), 12039 X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), 12040 X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), 12041 X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), 12042 X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), 12043 X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), 12044 X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), 12045 X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), 12046 X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), 12047 X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), 12048 X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), 12049 X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), 12050 X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) 12051 ]; 12052 12053 // Reusable objects 12054 var W = []; 12055 (function () { 12056 for (var i = 0; i < 80; i++) { 12057 W[i] = X64Word_create(); 12058 } 12059 }()); 12060 12061 /** 12062 * SHA-512 hash algorithm. 12063 */ 12064 var SHA512 = C_algo.SHA512 = Hasher.extend({ 12065 _doReset: function () { 12066 this._hash = new X64WordArray.init([ 12067 new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), 12068 new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), 12069 new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), 12070 new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) 12071 ]); 12072 }, 12073 12074 _doProcessBlock: function (M, offset) { 12075 // Shortcuts 12076 var H = this._hash.words; 12077 12078 var H0 = H[0]; 12079 var H1 = H[1]; 12080 var H2 = H[2]; 12081 var H3 = H[3]; 12082 var H4 = H[4]; 12083 var H5 = H[5]; 12084 var H6 = H[6]; 12085 var H7 = H[7]; 12086 12087 var H0h = H0.high; 12088 var H0l = H0.low; 12089 var H1h = H1.high; 12090 var H1l = H1.low; 12091 var H2h = H2.high; 12092 var H2l = H2.low; 12093 var H3h = H3.high; 12094 var H3l = H3.low; 12095 var H4h = H4.high; 12096 var H4l = H4.low; 12097 var H5h = H5.high; 12098 var H5l = H5.low; 12099 var H6h = H6.high; 12100 var H6l = H6.low; 12101 var H7h = H7.high; 12102 var H7l = H7.low; 12103 12104 // Working variables 12105 var ah = H0h; 12106 var al = H0l; 12107 var bh = H1h; 12108 var bl = H1l; 12109 var ch = H2h; 12110 var cl = H2l; 12111 var dh = H3h; 12112 var dl = H3l; 12113 var eh = H4h; 12114 var el = H4l; 12115 var fh = H5h; 12116 var fl = H5l; 12117 var gh = H6h; 12118 var gl = H6l; 12119 var hh = H7h; 12120 var hl = H7l; 12121 12122 // Rounds 12123 for (var i = 0; i < 80; i++) { 12124 // Shortcut 12125 var Wi = W[i]; 12126 12127 // Extend message 12128 if (i < 16) { 12129 var Wih = Wi.high = M[offset + i * 2] | 0; 12130 var Wil = Wi.low = M[offset + i * 2 + 1] | 0; 12131 } else { 12132 // Gamma0 12133 var gamma0x = W[i - 15]; 12134 var gamma0xh = gamma0x.high; 12135 var gamma0xl = gamma0x.low; 12136 var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); 12137 var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); 12138 12139 // Gamma1 12140 var gamma1x = W[i - 2]; 12141 var gamma1xh = gamma1x.high; 12142 var gamma1xl = gamma1x.low; 12143 var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); 12144 var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); 12145 12146 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] 12147 var Wi7 = W[i - 7]; 12148 var Wi7h = Wi7.high; 12149 var Wi7l = Wi7.low; 12150 12151 var Wi16 = W[i - 16]; 12152 var Wi16h = Wi16.high; 12153 var Wi16l = Wi16.low; 12154 12155 var Wil = gamma0l + Wi7l; 12156 var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); 12157 var Wil = Wil + gamma1l; 12158 var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); 12159 var Wil = Wil + Wi16l; 12160 var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); 12161 12162 Wi.high = Wih; 12163 Wi.low = Wil; 12164 } 12165 12166 var chh = (eh & fh) ^ (~eh & gh); 12167 var chl = (el & fl) ^ (~el & gl); 12168 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); 12169 var majl = (al & bl) ^ (al & cl) ^ (bl & cl); 12170 12171 var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); 12172 var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); 12173 var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); 12174 var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); 12175 12176 // t1 = h + sigma1 + ch + K[i] + W[i] 12177 var Ki = K[i]; 12178 var Kih = Ki.high; 12179 var Kil = Ki.low; 12180 12181 var t1l = hl + sigma1l; 12182 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); 12183 var t1l = t1l + chl; 12184 var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); 12185 var t1l = t1l + Kil; 12186 var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); 12187 var t1l = t1l + Wil; 12188 var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); 12189 12190 // t2 = sigma0 + maj 12191 var t2l = sigma0l + majl; 12192 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); 12193 12194 // Update working variables 12195 hh = gh; 12196 hl = gl; 12197 gh = fh; 12198 gl = fl; 12199 fh = eh; 12200 fl = el; 12201 el = (dl + t1l) | 0; 12202 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; 12203 dh = ch; 12204 dl = cl; 12205 ch = bh; 12206 cl = bl; 12207 bh = ah; 12208 bl = al; 12209 al = (t1l + t2l) | 0; 12210 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; 12211 } 12212 12213 // Intermediate hash value 12214 H0l = H0.low = (H0l + al); 12215 H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); 12216 H1l = H1.low = (H1l + bl); 12217 H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); 12218 H2l = H2.low = (H2l + cl); 12219 H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); 12220 H3l = H3.low = (H3l + dl); 12221 H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); 12222 H4l = H4.low = (H4l + el); 12223 H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); 12224 H5l = H5.low = (H5l + fl); 12225 H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); 12226 H6l = H6.low = (H6l + gl); 12227 H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); 12228 H7l = H7.low = (H7l + hl); 12229 H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); 12230 }, 12231 12232 _doFinalize: function () { 12233 // Shortcuts 12234 var data = this._data; 12235 var dataWords = data.words; 12236 12237 var nBitsTotal = this._nDataBytes * 8; 12238 var nBitsLeft = data.sigBytes * 8; 12239 12240 // Add padding 12241 dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); 12242 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); 12243 dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; 12244 data.sigBytes = dataWords.length * 4; 12245 12246 // Hash final blocks 12247 this._process(); 12248 12249 // Convert hash to 32-bit word array before returning 12250 var hash = this._hash.toX32(); 12251 12252 // Return final computed hash 12253 return hash; 12254 }, 12255 12256 clone: function () { 12257 var clone = Hasher.clone.call(this); 12258 clone._hash = this._hash.clone(); 12259 12260 return clone; 12261 }, 12262 12263 blockSize: 1024/32 12264 }); 12265 12266 /** 12267 * Shortcut function to the hasher's object interface. 12268 * 12269 * @param {WordArray|string} message The message to hash. 12270 * 12271 * @return {WordArray} The hash. 12272 * 12273 * @static 12274 * 12275 * @example 12276 * 12277 * var hash = CryptoJS.SHA512('message'); 12278 * var hash = CryptoJS.SHA512(wordArray); 12279 */ 12280 C.SHA512 = Hasher._createHelper(SHA512); 12281 12282 /** 12283 * Shortcut function to the HMAC's object interface. 12284 * 12285 * @param {WordArray|string} message The message to hash. 12286 * @param {WordArray|string} key The secret key. 12287 * 12288 * @return {WordArray} The HMAC. 12289 * 12290 * @static 12291 * 12292 * @example 12293 * 12294 * var hmac = CryptoJS.HmacSHA512(message, key); 12295 */ 12296 C.HmacSHA512 = Hasher._createHmacHelper(SHA512); 12297 }()); 12298 12299 12300 return CryptoJS.SHA512; 12301 12302 })); 12303 },{"./core":53,"./x64-core":84}],83:[function(require,module,exports){ 12304 ;(function (root, factory, undef) { 12305 if (typeof exports === "object") { 12306 // CommonJS 12307 module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); 12308 } 12309 else if (typeof define === "function" && define.amd) { 12310 // AMD 12311 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); 12312 } 12313 else { 12314 // Global (browser) 12315 factory(root.CryptoJS); 12316 } 12317 }(this, function (CryptoJS) { 12318 12319 (function () { 12320 // Shortcuts 12321 var C = CryptoJS; 12322 var C_lib = C.lib; 12323 var WordArray = C_lib.WordArray; 12324 var BlockCipher = C_lib.BlockCipher; 12325 var C_algo = C.algo; 12326 12327 // Permuted Choice 1 constants 12328 var PC1 = [ 12329 57, 49, 41, 33, 25, 17, 9, 1, 12330 58, 50, 42, 34, 26, 18, 10, 2, 12331 59, 51, 43, 35, 27, 19, 11, 3, 12332 60, 52, 44, 36, 63, 55, 47, 39, 12333 31, 23, 15, 7, 62, 54, 46, 38, 12334 30, 22, 14, 6, 61, 53, 45, 37, 12335 29, 21, 13, 5, 28, 20, 12, 4 12336 ]; 12337 12338 // Permuted Choice 2 constants 12339 var PC2 = [ 12340 14, 17, 11, 24, 1, 5, 12341 3, 28, 15, 6, 21, 10, 12342 23, 19, 12, 4, 26, 8, 12343 16, 7, 27, 20, 13, 2, 12344 41, 52, 31, 37, 47, 55, 12345 30, 40, 51, 45, 33, 48, 12346 44, 49, 39, 56, 34, 53, 12347 46, 42, 50, 36, 29, 32 12348 ]; 12349 12350 // Cumulative bit shift constants 12351 var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; 12352 12353 // SBOXes and round permutation constants 12354 var SBOX_P = [ 12355 { 12356 0x0: 0x808200, 12357 0x10000000: 0x8000, 12358 0x20000000: 0x808002, 12359 0x30000000: 0x2, 12360 0x40000000: 0x200, 12361 0x50000000: 0x808202, 12362 0x60000000: 0x800202, 12363 0x70000000: 0x800000, 12364 0x80000000: 0x202, 12365 0x90000000: 0x800200, 12366 0xa0000000: 0x8200, 12367 0xb0000000: 0x808000, 12368 0xc0000000: 0x8002, 12369 0xd0000000: 0x800002, 12370 0xe0000000: 0x0, 12371 0xf0000000: 0x8202, 12372 0x8000000: 0x0, 12373 0x18000000: 0x808202, 12374 0x28000000: 0x8202, 12375 0x38000000: 0x8000, 12376 0x48000000: 0x808200, 12377 0x58000000: 0x200, 12378 0x68000000: 0x808002, 12379 0x78000000: 0x2, 12380 0x88000000: 0x800200, 12381 0x98000000: 0x8200, 12382 0xa8000000: 0x808000, 12383 0xb8000000: 0x800202, 12384 0xc8000000: 0x800002, 12385 0xd8000000: 0x8002, 12386 0xe8000000: 0x202, 12387 0xf8000000: 0x800000, 12388 0x1: 0x8000, 12389 0x10000001: 0x2, 12390 0x20000001: 0x808200, 12391 0x30000001: 0x800000, 12392 0x40000001: 0x808002, 12393 0x50000001: 0x8200, 12394 0x60000001: 0x200, 12395 0x70000001: 0x800202, 12396 0x80000001: 0x808202, 12397 0x90000001: 0x808000, 12398 0xa0000001: 0x800002, 12399 0xb0000001: 0x8202, 12400 0xc0000001: 0x202, 12401 0xd0000001: 0x800200, 12402 0xe0000001: 0x8002, 12403 0xf0000001: 0x0, 12404 0x8000001: 0x808202, 12405 0x18000001: 0x808000, 12406 0x28000001: 0x800000, 12407 0x38000001: 0x200, 12408 0x48000001: 0x8000, 12409 0x58000001: 0x800002, 12410 0x68000001: 0x2, 12411 0x78000001: 0x8202, 12412 0x88000001: 0x8002, 12413 0x98000001: 0x800202, 12414 0xa8000001: 0x202, 12415 0xb8000001: 0x808200, 12416 0xc8000001: 0x800200, 12417 0xd8000001: 0x0, 12418 0xe8000001: 0x8200, 12419 0xf8000001: 0x808002 12420 }, 12421 { 12422 0x0: 0x40084010, 12423 0x1000000: 0x4000, 12424 0x2000000: 0x80000, 12425 0x3000000: 0x40080010, 12426 0x4000000: 0x40000010, 12427 0x5000000: 0x40084000, 12428 0x6000000: 0x40004000, 12429 0x7000000: 0x10, 12430 0x8000000: 0x84000, 12431 0x9000000: 0x40004010, 12432 0xa000000: 0x40000000, 12433 0xb000000: 0x84010, 12434 0xc000000: 0x80010, 12435 0xd000000: 0x0, 12436 0xe000000: 0x4010, 12437 0xf000000: 0x40080000, 12438 0x800000: 0x40004000, 12439 0x1800000: 0x84010, 12440 0x2800000: 0x10, 12441 0x3800000: 0x40004010, 12442 0x4800000: 0x40084010, 12443 0x5800000: 0x40000000, 12444 0x6800000: 0x80000, 12445 0x7800000: 0x40080010, 12446 0x8800000: 0x80010, 12447 0x9800000: 0x0, 12448 0xa800000: 0x4000, 12449 0xb800000: 0x40080000, 12450 0xc800000: 0x40000010, 12451 0xd800000: 0x84000, 12452 0xe800000: 0x40084000, 12453 0xf800000: 0x4010, 12454 0x10000000: 0x0, 12455 0x11000000: 0x40080010, 12456 0x12000000: 0x40004010, 12457 0x13000000: 0x40084000, 12458 0x14000000: 0x40080000, 12459 0x15000000: 0x10, 12460 0x16000000: 0x84010, 12461 0x17000000: 0x4000, 12462 0x18000000: 0x4010, 12463 0x19000000: 0x80000, 12464 0x1a000000: 0x80010, 12465 0x1b000000: 0x40000010, 12466 0x1c000000: 0x84000, 12467 0x1d000000: 0x40004000, 12468 0x1e000000: 0x40000000, 12469 0x1f000000: 0x40084010, 12470 0x10800000: 0x84010, 12471 0x11800000: 0x80000, 12472 0x12800000: 0x40080000, 12473 0x13800000: 0x4000, 12474 0x14800000: 0x40004000, 12475 0x15800000: 0x40084010, 12476 0x16800000: 0x10, 12477 0x17800000: 0x40000000, 12478 0x18800000: 0x40084000, 12479 0x19800000: 0x40000010, 12480 0x1a800000: 0x40004010, 12481 0x1b800000: 0x80010, 12482 0x1c800000: 0x0, 12483 0x1d800000: 0x4010, 12484 0x1e800000: 0x40080010, 12485 0x1f800000: 0x84000 12486 }, 12487 { 12488 0x0: 0x104, 12489 0x100000: 0x0, 12490 0x200000: 0x4000100, 12491 0x300000: 0x10104, 12492 0x400000: 0x10004, 12493 0x500000: 0x4000004, 12494 0x600000: 0x4010104, 12495 0x700000: 0x4010000, 12496 0x800000: 0x4000000, 12497 0x900000: 0x4010100, 12498 0xa00000: 0x10100, 12499 0xb00000: 0x4010004, 12500 0xc00000: 0x4000104, 12501 0xd00000: 0x10000, 12502 0xe00000: 0x4, 12503 0xf00000: 0x100, 12504 0x80000: 0x4010100, 12505 0x180000: 0x4010004, 12506 0x280000: 0x0, 12507 0x380000: 0x4000100, 12508 0x480000: 0x4000004, 12509 0x580000: 0x10000, 12510 0x680000: 0x10004, 12511 0x780000: 0x104, 12512 0x880000: 0x4, 12513 0x980000: 0x100, 12514 0xa80000: 0x4010000, 12515 0xb80000: 0x10104, 12516 0xc80000: 0x10100, 12517 0xd80000: 0x4000104, 12518 0xe80000: 0x4010104, 12519 0xf80000: 0x4000000, 12520 0x1000000: 0x4010100, 12521 0x1100000: 0x10004, 12522 0x1200000: 0x10000, 12523 0x1300000: 0x4000100, 12524 0x1400000: 0x100, 12525 0x1500000: 0x4010104, 12526 0x1600000: 0x4000004, 12527 0x1700000: 0x0, 12528 0x1800000: 0x4000104, 12529 0x1900000: 0x4000000, 12530 0x1a00000: 0x4, 12531 0x1b00000: 0x10100, 12532 0x1c00000: 0x4010000, 12533 0x1d00000: 0x104, 12534 0x1e00000: 0x10104, 12535 0x1f00000: 0x4010004, 12536 0x1080000: 0x4000000, 12537 0x1180000: 0x104, 12538 0x1280000: 0x4010100, 12539 0x1380000: 0x0, 12540 0x1480000: 0x10004, 12541 0x1580000: 0x4000100, 12542 0x1680000: 0x100, 12543 0x1780000: 0x4010004, 12544 0x1880000: 0x10000, 12545 0x1980000: 0x4010104, 12546 0x1a80000: 0x10104, 12547 0x1b80000: 0x4000004, 12548 0x1c80000: 0x4000104, 12549 0x1d80000: 0x4010000, 12550 0x1e80000: 0x4, 12551 0x1f80000: 0x10100 12552 }, 12553 { 12554 0x0: 0x80401000, 12555 0x10000: 0x80001040, 12556 0x20000: 0x401040, 12557 0x30000: 0x80400000, 12558 0x40000: 0x0, 12559 0x50000: 0x401000, 12560 0x60000: 0x80000040, 12561 0x70000: 0x400040, 12562 0x80000: 0x80000000, 12563 0x90000: 0x400000, 12564 0xa0000: 0x40, 12565 0xb0000: 0x80001000, 12566 0xc0000: 0x80400040, 12567 0xd0000: 0x1040, 12568 0xe0000: 0x1000, 12569 0xf0000: 0x80401040, 12570 0x8000: 0x80001040, 12571 0x18000: 0x40, 12572 0x28000: 0x80400040, 12573 0x38000: 0x80001000, 12574 0x48000: 0x401000, 12575 0x58000: 0x80401040, 12576 0x68000: 0x0, 12577 0x78000: 0x80400000, 12578 0x88000: 0x1000, 12579 0x98000: 0x80401000, 12580 0xa8000: 0x400000, 12581 0xb8000: 0x1040, 12582 0xc8000: 0x80000000, 12583 0xd8000: 0x400040, 12584 0xe8000: 0x401040, 12585 0xf8000: 0x80000040, 12586 0x100000: 0x400040, 12587 0x110000: 0x401000, 12588 0x120000: 0x80000040, 12589 0x130000: 0x0, 12590 0x140000: 0x1040, 12591 0x150000: 0x80400040, 12592 0x160000: 0x80401000, 12593 0x170000: 0x80001040, 12594 0x180000: 0x80401040, 12595 0x190000: 0x80000000, 12596 0x1a0000: 0x80400000, 12597 0x1b0000: 0x401040, 12598 0x1c0000: 0x80001000, 12599 0x1d0000: 0x400000, 12600 0x1e0000: 0x40, 12601 0x1f0000: 0x1000, 12602 0x108000: 0x80400000, 12603 0x118000: 0x80401040, 12604 0x128000: 0x0, 12605 0x138000: 0x401000, 12606 0x148000: 0x400040, 12607 0x158000: 0x80000000, 12608 0x168000: 0x80001040, 12609 0x178000: 0x40, 12610 0x188000: 0x80000040, 12611 0x198000: 0x1000, 12612 0x1a8000: 0x80001000, 12613 0x1b8000: 0x80400040, 12614 0x1c8000: 0x1040, 12615 0x1d8000: 0x80401000, 12616 0x1e8000: 0x400000, 12617 0x1f8000: 0x401040 12618 }, 12619 { 12620 0x0: 0x80, 12621 0x1000: 0x1040000, 12622 0x2000: 0x40000, 12623 0x3000: 0x20000000, 12624 0x4000: 0x20040080, 12625 0x5000: 0x1000080, 12626 0x6000: 0x21000080, 12627 0x7000: 0x40080, 12628 0x8000: 0x1000000, 12629 0x9000: 0x20040000, 12630 0xa000: 0x20000080, 12631 0xb000: 0x21040080, 12632 0xc000: 0x21040000, 12633 0xd000: 0x0, 12634 0xe000: 0x1040080, 12635 0xf000: 0x21000000, 12636 0x800: 0x1040080, 12637 0x1800: 0x21000080, 12638 0x2800: 0x80, 12639 0x3800: 0x1040000, 12640 0x4800: 0x40000, 12641 0x5800: 0x20040080, 12642 0x6800: 0x21040000, 12643 0x7800: 0x20000000, 12644 0x8800: 0x20040000, 12645 0x9800: 0x0, 12646 0xa800: 0x21040080, 12647 0xb800: 0x1000080, 12648 0xc800: 0x20000080, 12649 0xd800: 0x21000000, 12650 0xe800: 0x1000000, 12651 0xf800: 0x40080, 12652 0x10000: 0x40000, 12653 0x11000: 0x80, 12654 0x12000: 0x20000000, 12655 0x13000: 0x21000080, 12656 0x14000: 0x1000080, 12657 0x15000: 0x21040000, 12658 0x16000: 0x20040080, 12659 0x17000: 0x1000000, 12660 0x18000: 0x21040080, 12661 0x19000: 0x21000000, 12662 0x1a000: 0x1040000, 12663 0x1b000: 0x20040000, 12664 0x1c000: 0x40080, 12665 0x1d000: 0x20000080, 12666 0x1e000: 0x0, 12667 0x1f000: 0x1040080, 12668 0x10800: 0x21000080, 12669 0x11800: 0x1000000, 12670 0x12800: 0x1040000, 12671 0x13800: 0x20040080, 12672 0x14800: 0x20000000, 12673 0x15800: 0x1040080, 12674 0x16800: 0x80, 12675 0x17800: 0x21040000, 12676 0x18800: 0x40080, 12677 0x19800: 0x21040080, 12678 0x1a800: 0x0, 12679 0x1b800: 0x21000000, 12680 0x1c800: 0x1000080, 12681 0x1d800: 0x40000, 12682 0x1e800: 0x20040000, 12683 0x1f800: 0x20000080 12684 }, 12685 { 12686 0x0: 0x10000008, 12687 0x100: 0x2000, 12688 0x200: 0x10200000, 12689 0x300: 0x10202008, 12690 0x400: 0x10002000, 12691 0x500: 0x200000, 12692 0x600: 0x200008, 12693 0x700: 0x10000000, 12694 0x800: 0x0, 12695 0x900: 0x10002008, 12696 0xa00: 0x202000, 12697 0xb00: 0x8, 12698 0xc00: 0x10200008, 12699 0xd00: 0x202008, 12700 0xe00: 0x2008, 12701 0xf00: 0x10202000, 12702 0x80: 0x10200000, 12703 0x180: 0x10202008, 12704 0x280: 0x8, 12705 0x380: 0x200000, 12706 0x480: 0x202008, 12707 0x580: 0x10000008, 12708 0x680: 0x10002000, 12709 0x780: 0x2008, 12710 0x880: 0x200008, 12711 0x980: 0x2000, 12712 0xa80: 0x10002008, 12713 0xb80: 0x10200008, 12714 0xc80: 0x0, 12715 0xd80: 0x10202000, 12716 0xe80: 0x202000, 12717 0xf80: 0x10000000, 12718 0x1000: 0x10002000, 12719 0x1100: 0x10200008, 12720 0x1200: 0x10202008, 12721 0x1300: 0x2008, 12722 0x1400: 0x200000, 12723 0x1500: 0x10000000, 12724 0x1600: 0x10000008, 12725 0x1700: 0x202000, 12726 0x1800: 0x202008, 12727 0x1900: 0x0, 12728 0x1a00: 0x8, 12729 0x1b00: 0x10200000, 12730 0x1c00: 0x2000, 12731 0x1d00: 0x10002008, 12732 0x1e00: 0x10202000, 12733 0x1f00: 0x200008, 12734 0x1080: 0x8, 12735 0x1180: 0x202000, 12736 0x1280: 0x200000, 12737 0x1380: 0x10000008, 12738 0x1480: 0x10002000, 12739 0x1580: 0x2008, 12740 0x1680: 0x10202008, 12741 0x1780: 0x10200000, 12742 0x1880: 0x10202000, 12743 0x1980: 0x10200008, 12744 0x1a80: 0x2000, 12745 0x1b80: 0x202008, 12746 0x1c80: 0x200008, 12747 0x1d80: 0x0, 12748 0x1e80: 0x10000000, 12749 0x1f80: 0x10002008 12750 }, 12751 { 12752 0x0: 0x100000, 12753 0x10: 0x2000401, 12754 0x20: 0x400, 12755 0x30: 0x100401, 12756 0x40: 0x2100401, 12757 0x50: 0x0, 12758 0x60: 0x1, 12759 0x70: 0x2100001, 12760 0x80: 0x2000400, 12761 0x90: 0x100001, 12762 0xa0: 0x2000001, 12763 0xb0: 0x2100400, 12764 0xc0: 0x2100000, 12765 0xd0: 0x401, 12766 0xe0: 0x100400, 12767 0xf0: 0x2000000, 12768 0x8: 0x2100001, 12769 0x18: 0x0, 12770 0x28: 0x2000401, 12771 0x38: 0x2100400, 12772 0x48: 0x100000, 12773 0x58: 0x2000001, 12774 0x68: 0x2000000, 12775 0x78: 0x401, 12776 0x88: 0x100401, 12777 0x98: 0x2000400, 12778 0xa8: 0x2100000, 12779 0xb8: 0x100001, 12780 0xc8: 0x400, 12781 0xd8: 0x2100401, 12782 0xe8: 0x1, 12783 0xf8: 0x100400, 12784 0x100: 0x2000000, 12785 0x110: 0x100000, 12786 0x120: 0x2000401, 12787 0x130: 0x2100001, 12788 0x140: 0x100001, 12789 0x150: 0x2000400, 12790 0x160: 0x2100400, 12791 0x170: 0x100401, 12792 0x180: 0x401, 12793 0x190: 0x2100401, 12794 0x1a0: 0x100400, 12795 0x1b0: 0x1, 12796 0x1c0: 0x0, 12797 0x1d0: 0x2100000, 12798 0x1e0: 0x2000001, 12799 0x1f0: 0x400, 12800 0x108: 0x100400, 12801 0x118: 0x2000401, 12802 0x128: 0x2100001, 12803 0x138: 0x1, 12804 0x148: 0x2000000, 12805 0x158: 0x100000, 12806 0x168: 0x401, 12807 0x178: 0x2100400, 12808 0x188: 0x2000001, 12809 0x198: 0x2100000, 12810 0x1a8: 0x0, 12811 0x1b8: 0x2100401, 12812 0x1c8: 0x100401, 12813 0x1d8: 0x400, 12814 0x1e8: 0x2000400, 12815 0x1f8: 0x100001 12816 }, 12817 { 12818 0x0: 0x8000820, 12819 0x1: 0x20000, 12820 0x2: 0x8000000, 12821 0x3: 0x20, 12822 0x4: 0x20020, 12823 0x5: 0x8020820, 12824 0x6: 0x8020800, 12825 0x7: 0x800, 12826 0x8: 0x8020000, 12827 0x9: 0x8000800, 12828 0xa: 0x20800, 12829 0xb: 0x8020020, 12830 0xc: 0x820, 12831 0xd: 0x0, 12832 0xe: 0x8000020, 12833 0xf: 0x20820, 12834 0x80000000: 0x800, 12835 0x80000001: 0x8020820, 12836 0x80000002: 0x8000820, 12837 0x80000003: 0x8000000, 12838 0x80000004: 0x8020000, 12839 0x80000005: 0x20800, 12840 0x80000006: 0x20820, 12841 0x80000007: 0x20, 12842 0x80000008: 0x8000020, 12843 0x80000009: 0x820, 12844 0x8000000a: 0x20020, 12845 0x8000000b: 0x8020800, 12846 0x8000000c: 0x0, 12847 0x8000000d: 0x8020020, 12848 0x8000000e: 0x8000800, 12849 0x8000000f: 0x20000, 12850 0x10: 0x20820, 12851 0x11: 0x8020800, 12852 0x12: 0x20, 12853 0x13: 0x800, 12854 0x14: 0x8000800, 12855 0x15: 0x8000020, 12856 0x16: 0x8020020, 12857 0x17: 0x20000, 12858 0x18: 0x0, 12859 0x19: 0x20020, 12860 0x1a: 0x8020000, 12861 0x1b: 0x8000820, 12862 0x1c: 0x8020820, 12863 0x1d: 0x20800, 12864 0x1e: 0x820, 12865 0x1f: 0x8000000, 12866 0x80000010: 0x20000, 12867 0x80000011: 0x800, 12868 0x80000012: 0x8020020, 12869 0x80000013: 0x20820, 12870 0x80000014: 0x20, 12871 0x80000015: 0x8020000, 12872 0x80000016: 0x8000000, 12873 0x80000017: 0x8000820, 12874 0x80000018: 0x8020820, 12875 0x80000019: 0x8000020, 12876 0x8000001a: 0x8000800, 12877 0x8000001b: 0x0, 12878 0x8000001c: 0x20800, 12879 0x8000001d: 0x820, 12880 0x8000001e: 0x20020, 12881 0x8000001f: 0x8020800 12882 } 12883 ]; 12884 12885 // Masks that select the SBOX input 12886 var SBOX_MASK = [ 12887 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 12888 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f 12889 ]; 12890 12891 /** 12892 * DES block cipher algorithm. 12893 */ 12894 var DES = C_algo.DES = BlockCipher.extend({ 12895 _doReset: function () { 12896 // Shortcuts 12897 var key = this._key; 12898 var keyWords = key.words; 12899 12900 // Select 56 bits according to PC1 12901 var keyBits = []; 12902 for (var i = 0; i < 56; i++) { 12903 var keyBitPos = PC1[i] - 1; 12904 keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; 12905 } 12906 12907 // Assemble 16 subkeys 12908 var subKeys = this._subKeys = []; 12909 for (var nSubKey = 0; nSubKey < 16; nSubKey++) { 12910 // Create subkey 12911 var subKey = subKeys[nSubKey] = []; 12912 12913 // Shortcut 12914 var bitShift = BIT_SHIFTS[nSubKey]; 12915 12916 // Select 48 bits according to PC2 12917 for (var i = 0; i < 24; i++) { 12918 // Select from the left 28 key bits 12919 subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); 12920 12921 // Select from the right 28 key bits 12922 subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); 12923 } 12924 12925 // Since each subkey is applied to an expanded 32-bit input, 12926 // the subkey can be broken into 8 values scaled to 32-bits, 12927 // which allows the key to be used without expansion 12928 subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); 12929 for (var i = 1; i < 7; i++) { 12930 subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); 12931 } 12932 subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); 12933 } 12934 12935 // Compute inverse subkeys 12936 var invSubKeys = this._invSubKeys = []; 12937 for (var i = 0; i < 16; i++) { 12938 invSubKeys[i] = subKeys[15 - i]; 12939 } 12940 }, 12941 12942 encryptBlock: function (M, offset) { 12943 this._doCryptBlock(M, offset, this._subKeys); 12944 }, 12945 12946 decryptBlock: function (M, offset) { 12947 this._doCryptBlock(M, offset, this._invSubKeys); 12948 }, 12949 12950 _doCryptBlock: function (M, offset, subKeys) { 12951 // Get input 12952 this._lBlock = M[offset]; 12953 this._rBlock = M[offset + 1]; 12954 12955 // Initial permutation 12956 exchangeLR.call(this, 4, 0x0f0f0f0f); 12957 exchangeLR.call(this, 16, 0x0000ffff); 12958 exchangeRL.call(this, 2, 0x33333333); 12959 exchangeRL.call(this, 8, 0x00ff00ff); 12960 exchangeLR.call(this, 1, 0x55555555); 12961 12962 // Rounds 12963 for (var round = 0; round < 16; round++) { 12964 // Shortcuts 12965 var subKey = subKeys[round]; 12966 var lBlock = this._lBlock; 12967 var rBlock = this._rBlock; 12968 12969 // Feistel function 12970 var f = 0; 12971 for (var i = 0; i < 8; i++) { 12972 f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; 12973 } 12974 this._lBlock = rBlock; 12975 this._rBlock = lBlock ^ f; 12976 } 12977 12978 // Undo swap from last round 12979 var t = this._lBlock; 12980 this._lBlock = this._rBlock; 12981 this._rBlock = t; 12982 12983 // Final permutation 12984 exchangeLR.call(this, 1, 0x55555555); 12985 exchangeRL.call(this, 8, 0x00ff00ff); 12986 exchangeRL.call(this, 2, 0x33333333); 12987 exchangeLR.call(this, 16, 0x0000ffff); 12988 exchangeLR.call(this, 4, 0x0f0f0f0f); 12989 12990 // Set output 12991 M[offset] = this._lBlock; 12992 M[offset + 1] = this._rBlock; 12993 }, 12994 12995 keySize: 64/32, 12996 12997 ivSize: 64/32, 12998 12999 blockSize: 64/32 13000 }); 13001 13002 // Swap bits across the left and right words 13003 function exchangeLR(offset, mask) { 13004 var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; 13005 this._rBlock ^= t; 13006 this._lBlock ^= t << offset; 13007 } 13008 13009 function exchangeRL(offset, mask) { 13010 var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; 13011 this._lBlock ^= t; 13012 this._rBlock ^= t << offset; 13013 } 13014 13015 /** 13016 * Shortcut functions to the cipher's object interface. 13017 * 13018 * @example 13019 * 13020 * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); 13021 * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); 13022 */ 13023 C.DES = BlockCipher._createHelper(DES); 13024 13025 /** 13026 * Triple-DES block cipher algorithm. 13027 */ 13028 var TripleDES = C_algo.TripleDES = BlockCipher.extend({ 13029 _doReset: function () { 13030 // Shortcuts 13031 var key = this._key; 13032 var keyWords = key.words; 13033 13034 // Create DES instances 13035 this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); 13036 this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); 13037 this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); 13038 }, 13039 13040 encryptBlock: function (M, offset) { 13041 this._des1.encryptBlock(M, offset); 13042 this._des2.decryptBlock(M, offset); 13043 this._des3.encryptBlock(M, offset); 13044 }, 13045 13046 decryptBlock: function (M, offset) { 13047 this._des3.decryptBlock(M, offset); 13048 this._des2.encryptBlock(M, offset); 13049 this._des1.decryptBlock(M, offset); 13050 }, 13051 13052 keySize: 192/32, 13053 13054 ivSize: 64/32, 13055 13056 blockSize: 64/32 13057 }); 13058 13059 /** 13060 * Shortcut functions to the cipher's object interface. 13061 * 13062 * @example 13063 * 13064 * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); 13065 * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); 13066 */ 13067 C.TripleDES = BlockCipher._createHelper(TripleDES); 13068 }()); 13069 13070 13071 return CryptoJS.TripleDES; 13072 13073 })); 13074 },{"./cipher-core":52,"./core":53,"./enc-base64":54,"./evpkdf":56,"./md5":61}],84:[function(require,module,exports){ 13075 ;(function (root, factory) { 13076 if (typeof exports === "object") { 13077 // CommonJS 13078 module.exports = exports = factory(require("./core")); 13079 } 13080 else if (typeof define === "function" && define.amd) { 13081 // AMD 13082 define(["./core"], factory); 13083 } 13084 else { 13085 // Global (browser) 13086 factory(root.CryptoJS); 13087 } 13088 }(this, function (CryptoJS) { 13089 13090 (function (undefined) { 13091 // Shortcuts 13092 var C = CryptoJS; 13093 var C_lib = C.lib; 13094 var Base = C_lib.Base; 13095 var X32WordArray = C_lib.WordArray; 13096 13097 /** 13098 * x64 namespace. 13099 */ 13100 var C_x64 = C.x64 = {}; 13101 13102 /** 13103 * A 64-bit word. 13104 */ 13105 var X64Word = C_x64.Word = Base.extend({ 13106 /** 13107 * Initializes a newly created 64-bit word. 13108 * 13109 * @param {number} high The high 32 bits. 13110 * @param {number} low The low 32 bits. 13111 * 13112 * @example 13113 * 13114 * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); 13115 */ 13116 init: function (high, low) { 13117 this.high = high; 13118 this.low = low; 13119 } 13120 13121 /** 13122 * Bitwise NOTs this word. 13123 * 13124 * @return {X64Word} A new x64-Word object after negating. 13125 * 13126 * @example 13127 * 13128 * var negated = x64Word.not(); 13129 */ 13130 // not: function () { 13131 // var high = ~this.high; 13132 // var low = ~this.low; 13133 13134 // return X64Word.create(high, low); 13135 // }, 13136 13137 /** 13138 * Bitwise ANDs this word with the passed word. 13139 * 13140 * @param {X64Word} word The x64-Word to AND with this word. 13141 * 13142 * @return {X64Word} A new x64-Word object after ANDing. 13143 * 13144 * @example 13145 * 13146 * var anded = x64Word.and(anotherX64Word); 13147 */ 13148 // and: function (word) { 13149 // var high = this.high & word.high; 13150 // var low = this.low & word.low; 13151 13152 // return X64Word.create(high, low); 13153 // }, 13154 13155 /** 13156 * Bitwise ORs this word with the passed word. 13157 * 13158 * @param {X64Word} word The x64-Word to OR with this word. 13159 * 13160 * @return {X64Word} A new x64-Word object after ORing. 13161 * 13162 * @example 13163 * 13164 * var ored = x64Word.or(anotherX64Word); 13165 */ 13166 // or: function (word) { 13167 // var high = this.high | word.high; 13168 // var low = this.low | word.low; 13169 13170 // return X64Word.create(high, low); 13171 // }, 13172 13173 /** 13174 * Bitwise XORs this word with the passed word. 13175 * 13176 * @param {X64Word} word The x64-Word to XOR with this word. 13177 * 13178 * @return {X64Word} A new x64-Word object after XORing. 13179 * 13180 * @example 13181 * 13182 * var xored = x64Word.xor(anotherX64Word); 13183 */ 13184 // xor: function (word) { 13185 // var high = this.high ^ word.high; 13186 // var low = this.low ^ word.low; 13187 13188 // return X64Word.create(high, low); 13189 // }, 13190 13191 /** 13192 * Shifts this word n bits to the left. 13193 * 13194 * @param {number} n The number of bits to shift. 13195 * 13196 * @return {X64Word} A new x64-Word object after shifting. 13197 * 13198 * @example 13199 * 13200 * var shifted = x64Word.shiftL(25); 13201 */ 13202 // shiftL: function (n) { 13203 // if (n < 32) { 13204 // var high = (this.high << n) | (this.low >>> (32 - n)); 13205 // var low = this.low << n; 13206 // } else { 13207 // var high = this.low << (n - 32); 13208 // var low = 0; 13209 // } 13210 13211 // return X64Word.create(high, low); 13212 // }, 13213 13214 /** 13215 * Shifts this word n bits to the right. 13216 * 13217 * @param {number} n The number of bits to shift. 13218 * 13219 * @return {X64Word} A new x64-Word object after shifting. 13220 * 13221 * @example 13222 * 13223 * var shifted = x64Word.shiftR(7); 13224 */ 13225 // shiftR: function (n) { 13226 // if (n < 32) { 13227 // var low = (this.low >>> n) | (this.high << (32 - n)); 13228 // var high = this.high >>> n; 13229 // } else { 13230 // var low = this.high >>> (n - 32); 13231 // var high = 0; 13232 // } 13233 13234 // return X64Word.create(high, low); 13235 // }, 13236 13237 /** 13238 * Rotates this word n bits to the left. 13239 * 13240 * @param {number} n The number of bits to rotate. 13241 * 13242 * @return {X64Word} A new x64-Word object after rotating. 13243 * 13244 * @example 13245 * 13246 * var rotated = x64Word.rotL(25); 13247 */ 13248 // rotL: function (n) { 13249 // return this.shiftL(n).or(this.shiftR(64 - n)); 13250 // }, 13251 13252 /** 13253 * Rotates this word n bits to the right. 13254 * 13255 * @param {number} n The number of bits to rotate. 13256 * 13257 * @return {X64Word} A new x64-Word object after rotating. 13258 * 13259 * @example 13260 * 13261 * var rotated = x64Word.rotR(7); 13262 */ 13263 // rotR: function (n) { 13264 // return this.shiftR(n).or(this.shiftL(64 - n)); 13265 // }, 13266 13267 /** 13268 * Adds this word with the passed word. 13269 * 13270 * @param {X64Word} word The x64-Word to add with this word. 13271 * 13272 * @return {X64Word} A new x64-Word object after adding. 13273 * 13274 * @example 13275 * 13276 * var added = x64Word.add(anotherX64Word); 13277 */ 13278 // add: function (word) { 13279 // var low = (this.low + word.low) | 0; 13280 // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; 13281 // var high = (this.high + word.high + carry) | 0; 13282 13283 // return X64Word.create(high, low); 13284 // } 13285 }); 13286 13287 /** 13288 * An array of 64-bit words. 13289 * 13290 * @property {Array} words The array of CryptoJS.x64.Word objects. 13291 * @property {number} sigBytes The number of significant bytes in this word array. 13292 */ 13293 var X64WordArray = C_x64.WordArray = Base.extend({ 13294 /** 13295 * Initializes a newly created word array. 13296 * 13297 * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. 13298 * @param {number} sigBytes (Optional) The number of significant bytes in the words. 13299 * 13300 * @example 13301 * 13302 * var wordArray = CryptoJS.x64.WordArray.create(); 13303 * 13304 * var wordArray = CryptoJS.x64.WordArray.create([ 13305 * CryptoJS.x64.Word.create(0x00010203, 0x04050607), 13306 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) 13307 * ]); 13308 * 13309 * var wordArray = CryptoJS.x64.WordArray.create([ 13310 * CryptoJS.x64.Word.create(0x00010203, 0x04050607), 13311 * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) 13312 * ], 10); 13313 */ 13314 init: function (words, sigBytes) { 13315 words = this.words = words || []; 13316 13317 if (sigBytes != undefined) { 13318 this.sigBytes = sigBytes; 13319 } else { 13320 this.sigBytes = words.length * 8; 13321 } 13322 }, 13323 13324 /** 13325 * Converts this 64-bit word array to a 32-bit word array. 13326 * 13327 * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. 13328 * 13329 * @example 13330 * 13331 * var x32WordArray = x64WordArray.toX32(); 13332 */ 13333 toX32: function () { 13334 // Shortcuts 13335 var x64Words = this.words; 13336 var x64WordsLength = x64Words.length; 13337 13338 // Convert 13339 var x32Words = []; 13340 for (var i = 0; i < x64WordsLength; i++) { 13341 var x64Word = x64Words[i]; 13342 x32Words.push(x64Word.high); 13343 x32Words.push(x64Word.low); 13344 } 13345 13346 return X32WordArray.create(x32Words, this.sigBytes); 13347 }, 13348 13349 /** 13350 * Creates a copy of this word array. 13351 * 13352 * @return {X64WordArray} The clone. 13353 * 13354 * @example 13355 * 13356 * var clone = x64WordArray.clone(); 13357 */ 13358 clone: function () { 13359 var clone = Base.clone.call(this); 13360 13361 // Clone "words" array 13362 var words = clone.words = this.words.slice(0); 13363 13364 // Clone each X64Word object 13365 var wordsLength = words.length; 13366 for (var i = 0; i < wordsLength; i++) { 13367 words[i] = words[i].clone(); 13368 } 13369 13370 return clone; 13371 } 13372 }); 13373 }()); 13374 13375 13376 return CryptoJS; 13377 13378 })); 13379 },{"./core":53}],85:[function(require,module,exports){ 13380 /*! https://mths.be/utf8js v2.1.2 by @mathias */ 13381 ;(function(root) { 13382 13383 // Detect free variables `exports` 13384 var freeExports = typeof exports == 'object' && exports; 13385 13386 // Detect free variable `module` 13387 var freeModule = typeof module == 'object' && module && 13388 module.exports == freeExports && module; 13389 13390 // Detect free variable `global`, from Node.js or Browserified code, 13391 // and use it as `root` 13392 var freeGlobal = typeof global == 'object' && global; 13393 if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { 13394 root = freeGlobal; 13395 } 13396 13397 /*--------------------------------------------------------------------------*/ 13398 13399 var stringFromCharCode = String.fromCharCode; 13400 13401 // Taken from https://mths.be/punycode 13402 function ucs2decode(string) { 13403 var output = []; 13404 var counter = 0; 13405 var length = string.length; 13406 var value; 13407 var extra; 13408 while (counter < length) { 13409 value = string.charCodeAt(counter++); 13410 if (value >= 0xD800 && value <= 0xDBFF && counter < length) { 13411 // high surrogate, and there is a next character 13412 extra = string.charCodeAt(counter++); 13413 if ((extra & 0xFC00) == 0xDC00) { // low surrogate 13414 output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); 13415 } else { 13416 // unmatched surrogate; only append this code unit, in case the next 13417 // code unit is the high surrogate of a surrogate pair 13418 output.push(value); 13419 counter--; 13420 } 13421 } else { 13422 output.push(value); 13423 } 13424 } 13425 return output; 13426 } 13427 13428 // Taken from https://mths.be/punycode 13429 function ucs2encode(array) { 13430 var length = array.length; 13431 var index = -1; 13432 var value; 13433 var output = ''; 13434 while (++index < length) { 13435 value = array[index]; 13436 if (value > 0xFFFF) { 13437 value -= 0x10000; 13438 output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); 13439 value = 0xDC00 | value & 0x3FF; 13440 } 13441 output += stringFromCharCode(value); 13442 } 13443 return output; 13444 } 13445 13446 function checkScalarValue(codePoint) { 13447 if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { 13448 throw Error( 13449 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + 13450 ' is not a scalar value' 13451 ); 13452 } 13453 } 13454 /*--------------------------------------------------------------------------*/ 13455 13456 function createByte(codePoint, shift) { 13457 return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); 13458 } 13459 13460 function encodeCodePoint(codePoint) { 13461 if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence 13462 return stringFromCharCode(codePoint); 13463 } 13464 var symbol = ''; 13465 if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence 13466 symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); 13467 } 13468 else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence 13469 checkScalarValue(codePoint); 13470 symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); 13471 symbol += createByte(codePoint, 6); 13472 } 13473 else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence 13474 symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); 13475 symbol += createByte(codePoint, 12); 13476 symbol += createByte(codePoint, 6); 13477 } 13478 symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); 13479 return symbol; 13480 } 13481 13482 function utf8encode(string) { 13483 var codePoints = ucs2decode(string); 13484 var length = codePoints.length; 13485 var index = -1; 13486 var codePoint; 13487 var byteString = ''; 13488 while (++index < length) { 13489 codePoint = codePoints[index]; 13490 byteString += encodeCodePoint(codePoint); 13491 } 13492 return byteString; 13493 } 13494 13495 /*--------------------------------------------------------------------------*/ 13496 13497 function readContinuationByte() { 13498 if (byteIndex >= byteCount) { 13499 throw Error('Invalid byte index'); 13500 } 13501 13502 var continuationByte = byteArray[byteIndex] & 0xFF; 13503 byteIndex++; 13504 13505 if ((continuationByte & 0xC0) == 0x80) { 13506 return continuationByte & 0x3F; 13507 } 13508 13509 // If we end up here, it’s not a continuation byte 13510 throw Error('Invalid continuation byte'); 13511 } 13512 13513 function decodeSymbol() { 13514 var byte1; 13515 var byte2; 13516 var byte3; 13517 var byte4; 13518 var codePoint; 13519 13520 if (byteIndex > byteCount) { 13521 throw Error('Invalid byte index'); 13522 } 13523 13524 if (byteIndex == byteCount) { 13525 return false; 13526 } 13527 13528 // Read first byte 13529 byte1 = byteArray[byteIndex] & 0xFF; 13530 byteIndex++; 13531 13532 // 1-byte sequence (no continuation bytes) 13533 if ((byte1 & 0x80) == 0) { 13534 return byte1; 13535 } 13536 13537 // 2-byte sequence 13538 if ((byte1 & 0xE0) == 0xC0) { 13539 byte2 = readContinuationByte(); 13540 codePoint = ((byte1 & 0x1F) << 6) | byte2; 13541 if (codePoint >= 0x80) { 13542 return codePoint; 13543 } else { 13544 throw Error('Invalid continuation byte'); 13545 } 13546 } 13547 13548 // 3-byte sequence (may include unpaired surrogates) 13549 if ((byte1 & 0xF0) == 0xE0) { 13550 byte2 = readContinuationByte(); 13551 byte3 = readContinuationByte(); 13552 codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; 13553 if (codePoint >= 0x0800) { 13554 checkScalarValue(codePoint); 13555 return codePoint; 13556 } else { 13557 throw Error('Invalid continuation byte'); 13558 } 13559 } 13560 13561 // 4-byte sequence 13562 if ((byte1 & 0xF8) == 0xF0) { 13563 byte2 = readContinuationByte(); 13564 byte3 = readContinuationByte(); 13565 byte4 = readContinuationByte(); 13566 codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) | 13567 (byte3 << 0x06) | byte4; 13568 if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { 13569 return codePoint; 13570 } 13571 } 13572 13573 throw Error('Invalid UTF-8 detected'); 13574 } 13575 13576 var byteArray; 13577 var byteCount; 13578 var byteIndex; 13579 function utf8decode(byteString) { 13580 byteArray = ucs2decode(byteString); 13581 byteCount = byteArray.length; 13582 byteIndex = 0; 13583 var codePoints = []; 13584 var tmp; 13585 while ((tmp = decodeSymbol()) !== false) { 13586 codePoints.push(tmp); 13587 } 13588 return ucs2encode(codePoints); 13589 } 13590 13591 /*--------------------------------------------------------------------------*/ 13592 13593 var utf8 = { 13594 'version': '2.1.2', 13595 'encode': utf8encode, 13596 'decode': utf8decode 13597 }; 13598 13599 // Some AMD build optimizers, like r.js, check for specific condition patterns 13600 // like the following: 13601 if ( 13602 typeof define == 'function' && 13603 typeof define.amd == 'object' && 13604 define.amd 13605 ) { 13606 define(function() { 13607 return utf8; 13608 }); 13609 } else if (freeExports && !freeExports.nodeType) { 13610 if (freeModule) { // in Node.js or RingoJS v0.8.0+ 13611 freeModule.exports = utf8; 13612 } else { // in Narwhal or RingoJS v0.7.0- 13613 var object = {}; 13614 var hasOwnProperty = object.hasOwnProperty; 13615 for (var key in utf8) { 13616 hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); 13617 } 13618 } 13619 } else { // in Rhino or a web browser 13620 root.utf8 = utf8; 13621 } 13622 13623 }(this)); 13624 13625 },{}],86:[function(require,module,exports){ 13626 module.exports = XMLHttpRequest; 13627 13628 },{}],"bignumber.js":[function(require,module,exports){ 13629 'use strict'; 13630 13631 module.exports = BigNumber; // jshint ignore:line 13632 13633 13634 },{}],"web3":[function(require,module,exports){ 13635 var Web3 = require('./lib/web3'); 13636 13637 // don't override global variable 13638 if (typeof window !== 'undefined' && typeof window.Web3 === 'undefined') { 13639 window.Web3 = Web3; 13640 } 13641 13642 module.exports = Web3; 13643 13644 },{"./lib/web3":22}]},{},["web3"]) 13645