{"version":3,"sources":["webpack:///./node_modules/@steemit/libcrypto/lib/crypto.js","webpack:///./node_modules/@steemit/rpc-auth/lib/index.js"],"names":["root","factory","self","this","exports","PrivateKey","PublicKey","generateKeys","serializePair","sjcl","ecc","ecdsa","curves","k256","keysFromPassword","accountName","accountPassword","keys","codec","steemit","owner","memo","posting","active","sha256","data","fromBits","hash","toBits","ripemd160","hexify","result","view","Uint8Array","i","byteLength","toString","cipher","keyexchange","mode","misc","exception","corrupt","message","invalid","bug","notReady","bitArray","bitSlice","a","bstart","bend","_shiftRight","slice","undefined","clamp","extract","blength","sh","Math","floor","concat","a1","a2","length","last","shift","getPartial","bitLength","x","l","len","ceil","partial","_end","round","equal","b","carry","out","last2","shift2","push","pop","_xor4","y","byteswapM","v","aes","key","_tables","_precompute","j","tmp","encKey","decKey","sbox","decTable","keyLen","rcon","_key","prototype","encrypt","_crypt","decrypt","xInv","x2","x4","s","tEnc","tDec","encTable","sboxInv","d","th","input","dir","b2","c2","c","nInnerRounds","kIndex","table","t0","t1","t2","t3","bn","it","initWith","radix","maxMul","_class","copy","k","limbs","normalize","replace","parseInt","substring","max","equals","that","difference","fullReduce","getLimb","greaterEquals","less","greater","addM","ll","doubleM","r","m","radixMask","halveM","subM","mod","neg","ci","sub","trim","inverseMod","p","nz","add","mul","ai","al","bl","ii","cnormalize","reduce","square","power","pow","mulmod","N","powermod","montOut","montpowermod","R","wind","bitsize","map","RR","NN","RP","NP","RT","R2","montIn","montMul","ab","right","abBar","mask","h","precomp","cap","getBit","exp","off","indx","pv","placeVal","ipv","exponent","w","e","min","bits","words","t","unshift","pseudoMersennePrime","coeff","mo","ppr","modOffset","offset","factor","minOffset","fullMask","fullOffset","fullFactor","modulus","ol","fac","_strongReduce","inverse","globals","sbp","prime","p127","p25519","p192k","p224k","p256k","p192","p224","p256","p384","p521","random","paranoia","randomWords","ArrayBuffer","DataView","arrayBuffer","arr","padding","padding_count","smallest","setUint32","buffer","setUint8","getUint8","inView","getUint32","hexDumpBuffer","n","width","stringBufferView","string","getUint16","Array","join","console","log","toUpperCase","utf8String","String","fromCharCode","decodeURIComponent","escape","str","unescape","encodeURIComponent","charCodeAt","point","curve","isIdentity","field","toJac","pointJac","mult","toAffine","mult2","k2","affine2","multiples","_multiples","doubl","negate","newY","isValid","z","T","sz2","x1","y1","y2","S","z2","zi","zi2","affine","k1","l1","l2","m1","m2","z4","z6","Field","G","c192","c224","c256","c384","c521","k192","k224","curveName","curcurve","hasOwnProperty","deserialize","indexOf","type","secretKey","hex","publicKey","basicKey","_curve","_curveBitLength","_point","serialize","getType","get","pointbits","_exponent","cn","sec","pub","elGamal","apply","arguments","kem","tag","unkem","dh","pk","dhJavaEc","verify","rs","fakeLegacyVersion","ss","hG","hA","r2","sign","fixedKForTesting","_h","_buffer","_length","reset","update","finalize","_h0","nl","splice","_cvt","_block","call","zp","_k1","_k2","_r1","_r2","_s1","_s2","_f0","_f1","_f2","_f3","_f4","_rol","X","A1","B1","C1","D1","E1","A2","B2","C2","D2","E2","blockSize","_init","Uint32Array","subarray","isPrime","frac","h0","h1","h2","h3","h4","h5","h6","h7","prng","defaultParanoia","_pools","_poolEntropy","_reseedCount","_robins","_eventId","_collectorIds","_collectorIdNext","_strength","_poolStrength","_nextReseed","_counter","_cipher","_defaultParanoia","_collectorsStarted","_callbacks","progress","seeded","_callbackI","_NOT_READY","_READY","_REQUIRES_RESEED","_MAX_WORDS_PER_BURST","_PARANOIA_LEVELS","_MILLISECONDS_PER_RESEED","_BITS_PER_RESEED","nwords","g","readiness","isReady","_reseedFromPools","_gate","_gen4words","setDefaultParanoia","allowZeroParanoia","addEntropy","estimatedEntropy","source","id","objName","Date","valueOf","robin","oldReady","err","Object","_fireEvent","getProgress","entropyRequired","startCollectors","_eventListener","loadTimeCollector","_bind","_loadTimeCollector","mouseCollector","_mouseCollector","keyboardCollector","_keyboardCollector","accelerometerCollector","_accelerometerCollector","touchCollector","_touchCollector","window","addEventListener","document","attachEvent","stopCollectors","removeEventListener","detachEvent","name","callback","cb","cbs","jsTemp","func","_reseed","seedWords","full","reseedData","strength","_addCurrentTimeToEntropy","ev","clientX","offsetX","clientY","offsetY","touch","touches","changedTouches","pageX","pageY","performance","now","ac","accelerationIncludingGravity","orientation","or","arg","cbsTemp","buf","crypt","module","getCryptoModule","randomBytes","crypto","getRandomValues","msCrypto","base58","alpha","lookup","A","B","C","D","E","F","H","J","K","L","M","P","Q","U","V","W","Y","Z","f","o","q","u","fromDigits","work","fb","digit","num","bitlen","base","iBig","pos","base58Check","defaultChecksumFn","version","checksumFn","bitsWithHeader","checksum","headerPayloadAndChecksum","base58str","leadingZeroBits","payload","transmittedChecksum","computedChecksum","Error","ROLES","MAINNET","pubHeader","privHeader","pubPrefix","TESTNET","keyChecksum","account","password","keyPairs","CURVE","role","seed","secret","signRecoverably","recoveryParam","rBitArray","sBitArray","r0","r1","s0","s1","rawSig","recoverPublicKey","sig","recoveryParameter","hasOddParity","_yFromX","rInv","eNeg","keyPoint","_","serializePublicKey","net","header","deserializePublicKey","pubKey","headerByte","isOdd","xBits","serializePrivateKey","deserializePrivateKey","wif","keyBits","shouldBeOdd","PIDENT","_getPident","yIsOdd","priv","getPublicKey","_p","private","public","from","recover","signature","nodeName","extendStatics","__extends","setPrototypeOf","__proto__","__","constructor","create","__awaiter","thisArg","_arguments","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","done","then","__generator","body","label","sent","trys","ops","verb","Symbol","iterator","op","TypeError","defineProperty","libcrypto_1","crypto_1","Buffer","ValidationError","_super","cause","_this","hashMessage","timestamp","method","params","nonce","first","createHash","second","digest","request","JSON","stringify","nonceBytes","toISOString","signatures","_i","keys_1","jsonrpc","__signed","validate","signed","jsonString","cause_1","_a","parse","Number","isNaN"],"mappings":"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","file":"vendor.steemit~9d6f4b51.279fbddf6b9f03621e60.chunk.js","sourcesContent":["/* global self */\n(function(root, factory) {\n if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {\n // CommonJS\n factory(exports);\n } else {\n // Browser globals\n root.steemit = root.steemit || {};\n factory((root.steemit.crypto = {}));\n }\n})(typeof self !== 'undefined' ? self : this, function(exports) {\n exports.PrivateKey = PrivateKey;\n exports.PublicKey = PublicKey;\n exports.generateKeys = generateKeys;\n exports.keysFromPassword = keysFromPassword;\n exports.sha256 = sha256;\n exports.ripemd160 = ripemd160;\n exports.hexify = hexify;\n\n var sjcl = (function() {\n // SJCL is inserted here automatically by the build process.\n /** @fileOverview Javascript cryptography implementation.\n *\n * Crush to remove comments, shorten variable names and\n * generally reduce transmission size.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n\"use strict\";\n/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */\n/*global document, window, escape, unescape, module, require, Uint32Array */\n\n/**\n * The Stanford Javascript Crypto Library, top-level namespace.\n * @namespace\n */\nvar sjcl = {\n /**\n * Symmetric ciphers.\n * @namespace\n */\n cipher: {},\n\n /**\n * Hash functions. Right now only SHA256 is implemented.\n * @namespace\n */\n hash: {},\n\n /**\n * Key exchange functions. Right now only SRP is implemented.\n * @namespace\n */\n keyexchange: {},\n \n /**\n * Cipher modes of operation.\n * @namespace\n */\n mode: {},\n\n /**\n * Miscellaneous. HMAC and PBKDF2.\n * @namespace\n */\n misc: {},\n \n /**\n * Bit array encoders and decoders.\n * @namespace\n *\n * @description\n * The members of this namespace are functions which translate between\n * SJCL's bitArrays and other objects (usually strings). Because it\n * isn't always clear which direction is encoding and which is decoding,\n * the method names are \"fromBits\" and \"toBits\".\n */\n codec: {},\n \n /**\n * Exceptions.\n * @namespace\n */\n exception: {\n /**\n * Ciphertext is corrupt.\n * @constructor\n */\n corrupt: function(message) {\n this.toString = function() { return \"CORRUPT: \"+this.message; };\n this.message = message;\n },\n \n /**\n * Invalid parameter.\n * @constructor\n */\n invalid: function(message) {\n this.toString = function() { return \"INVALID: \"+this.message; };\n this.message = message;\n },\n \n /**\n * Bug or missing feature in SJCL.\n * @constructor\n */\n bug: function(message) {\n this.toString = function() { return \"BUG: \"+this.message; };\n this.message = message;\n },\n\n /**\n * Something isn't ready.\n * @constructor\n */\n notReady: function(message) {\n this.toString = function() { return \"NOT READY: \"+this.message; };\n this.message = message;\n }\n }\n};\n/** @fileOverview Arrays of bits, encoded as arrays of Numbers.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * Arrays of bits, encoded as arrays of Numbers.\n * @namespace\n * @description\n *

\n * These objects are the currency accepted by SJCL's crypto functions.\n *

\n *\n *

\n * Most of our crypto primitives operate on arrays of 4-byte words internally,\n * but many of them can take arguments that are not a multiple of 4 bytes.\n * This library encodes arrays of bits (whose size need not be a multiple of 8\n * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an\n * array of words, 32 bits at a time. Since the words are double-precision\n * floating point numbers, they fit some extra data. We use this (in a private,\n * possibly-changing manner) to encode the number of bits actually present\n * in the last word of the array.\n *

\n *\n *

\n * Because bitwise ops clear this out-of-band data, these arrays can be passed\n * to ciphers like AES which want arrays of words.\n *

\n */\nsjcl.bitArray = {\n /**\n * Array slices in units of bits.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,\n * slice until the end of the array.\n * @return {bitArray} The requested slice.\n */\n bitSlice: function (a, bstart, bend) {\n a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);\n return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);\n },\n\n /**\n * Extract a number packed into a bit array.\n * @param {bitArray} a The array to slice.\n * @param {Number} bstart The offset to the start of the slice, in bits.\n * @param {Number} blength The length of the number to extract.\n * @return {Number} The requested slice.\n */\n extract: function(a, bstart, blength) {\n // FIXME: this Math.floor is not necessary at all, but for some reason\n // seems to suppress a bug in the Chromium JIT.\n var x, sh = Math.floor((-bstart-blength) & 31);\n if ((bstart + blength - 1 ^ bstart) & -32) {\n // it crosses a boundary\n x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);\n } else {\n // within a single word\n x = a[bstart/32|0] >>> sh;\n }\n return x & ((1< 0 && len) {\n a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);\n }\n return a;\n },\n\n /**\n * Make a partial word for a bit array.\n * @param {Number} len The number of bits in the word.\n * @param {Number} x The bits.\n * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.\n * @return {Number} The partial word.\n */\n partial: function (len, x, _end) {\n if (len === 32) { return x; }\n return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;\n },\n\n /**\n * Get the number of bits used by a partial word.\n * @param {Number} x The partial word.\n * @return {Number} The number of bits used by the partial word.\n */\n getPartial: function (x) {\n return Math.round(x/0x10000000000) || 32;\n },\n\n /**\n * Compare two arrays for equality in a predictable amount of time.\n * @param {bitArray} a The first array.\n * @param {bitArray} b The second array.\n * @return {boolean} true if a == b; false otherwise.\n */\n equal: function (a, b) {\n if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {\n return false;\n }\n var x = 0, i;\n for (i=0; i= 32; shift -= 32) {\n out.push(carry);\n carry = 0;\n }\n if (shift === 0) {\n return out.concat(a);\n }\n \n for (i=0; i>>shift);\n carry = a[i] << (32-shift);\n }\n last2 = a.length ? a[a.length-1] : 0;\n shift2 = sjcl.bitArray.getPartial(last2);\n out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));\n return out;\n },\n \n /** xor a block of 4 words together.\n * @private\n */\n _xor4: function(x,y) {\n return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];\n },\n\n /** byteswap a word array inplace.\n * (does not handle partial words)\n * @param {sjcl.bitArray} a word array\n * @return {sjcl.bitArray} byteswapped array\n */\n byteswapM: function(a) {\n var i, v, m = 0xff00;\n for (i = 0; i < a.length; ++i) {\n v = a[i];\n a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);\n }\n return a;\n }\n};\n/** @fileOverview Low-level AES implementation.\n *\n * This file contains a low-level implementation of AES, optimized for\n * size and for efficiency on several browsers. It is based on\n * OpenSSL's aes_core.c, a public-domain implementation by Vincent\n * Rijmen, Antoon Bosselaers and Paulo Barreto.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param {Array} key The key as an array of 4, 6 or 8 words.\n */\nsjcl.cipher.aes = function (key) {\n if (!this._tables[0][0][0]) {\n this._precompute();\n }\n \n var i, j, tmp,\n encKey, decKey,\n sbox = this._tables[0][4], decTable = this._tables[1],\n keyLen = key.length, rcon = 1;\n \n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new sjcl.exception.invalid(\"invalid aes key size\");\n }\n \n this._key = [encKey = key.slice(0), decKey = []];\n \n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i-1];\n \n // apply sbox\n if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) {\n tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255];\n \n // shift rows and add rcon\n if (i%keyLen === 0) {\n tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24;\n rcon = rcon<<1 ^ (rcon>>7)*283;\n }\n }\n \n encKey[i] = encKey[i-keyLen] ^ tmp;\n }\n \n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j&3 ? i : i - 4];\n if (i<=4 || j<4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^\n decTable[1][sbox[tmp>>16 & 255]] ^\n decTable[2][sbox[tmp>>8 & 255]] ^\n decTable[3][sbox[tmp & 255]];\n }\n }\n};\n\nsjcl.cipher.aes.prototype = {\n // public\n /* Something like this might appear here eventually\n name: \"AES\",\n blockSize: 4,\n keySizes: [4,6,8],\n */\n \n /**\n * Encrypt an array of 4 big-endian words.\n * @param {Array} data The plaintext.\n * @return {Array} The ciphertext.\n */\n encrypt:function (data) { return this._crypt(data,0); },\n \n /**\n * Decrypt an array of 4 big-endian words.\n * @param {Array} data The ciphertext.\n * @return {Array} The plaintext.\n */\n decrypt:function (data) { return this._crypt(data,1); },\n \n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n _tables: [[[],[],[],[],[]],[[],[],[],[],[]]],\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n _precompute: function () {\n var encTable = this._tables[0], decTable = this._tables[1],\n sbox = encTable[4], sboxInv = decTable[4],\n i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec;\n\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i;\n }\n \n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4;\n s = s>>8 ^ s&255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n \n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100;\n tEnc = d[s]*0x101 ^ s*0x1010100;\n \n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8;\n decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8;\n }\n }\n \n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n },\n \n /**\n * Encryption and decryption core.\n * @param {Array} input Four words to be encrypted or decrypted.\n * @param dir The direction, 0 for encrypt and 1 for decrypt.\n * @return {Array} The four encrypted or decrypted words.\n * @private\n */\n _crypt:function (input, dir) {\n if (input.length !== 4) {\n throw new sjcl.exception.invalid(\"invalid aes block size\");\n }\n \n var key = this._key[dir],\n // state variables a,b,c,d are loaded with pre-whitened data\n a = input[0] ^ key[0],\n b = input[dir ? 3 : 1] ^ key[1],\n c = input[2] ^ key[2],\n d = input[dir ? 1 : 3] ^ key[3],\n a2, b2, c2,\n \n nInnerRounds = key.length/4 - 2,\n i,\n kIndex = 4,\n out = [0,0,0,0],\n table = this._tables[dir],\n \n // load up the tables\n t0 = table[0],\n t1 = table[1],\n t2 = table[2],\n t3 = table[3],\n sbox = table[4];\n \n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex];\n b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];\n c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];\n d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a=a2; b=b2; c=c2;\n }\n \n // Last round.\n for (i = 0; i < 4; i++) {\n out[dir ? 3&-i : i] =\n sbox[a>>>24 ]<<24 ^ \n sbox[b>>16 & 255]<<16 ^\n sbox[c>>8 & 255]<<8 ^\n sbox[d & 255] ^\n key[kIndex++];\n a2=a; a=b; b=c; c=d; d=a2;\n }\n \n return out;\n }\n};\n\n/**\n * Constructs a new bignum from another bignum, a number or a hex string.\n * @constructor\n */\nsjcl.bn = function(it) {\n this.initWith(it);\n};\n\nsjcl.bn.prototype = {\n radix: 24,\n maxMul: 8,\n _class: sjcl.bn,\n\n copy: function() {\n return new this._class(this);\n },\n\n /**\n * Initializes this with it, either as a bn, a number, or a hex string.\n */\n initWith: function(it) {\n var i=0, k;\n switch(typeof it) {\n case \"object\":\n this.limbs = it.limbs.slice(0);\n break;\n\n case \"number\":\n this.limbs = [it];\n this.normalize();\n break;\n\n case \"string\":\n it = it.replace(/^0x/, '');\n this.limbs = [];\n // hack\n k = this.radix / 4;\n for (i=0; i < it.length; i+=k) {\n this.limbs.push(parseInt(it.substring(Math.max(it.length - i - k, 0), it.length - i),16));\n }\n break;\n\n default:\n this.limbs = [0];\n }\n return this;\n },\n\n /**\n * Returns true if \"this\" and \"that\" are equal. Calls fullReduce().\n * Equality test is in constant time.\n */\n equals: function(that) {\n if (typeof that === \"number\") { that = new this._class(that); }\n var difference = 0, i;\n this.fullReduce();\n that.fullReduce();\n for (i = 0; i < this.limbs.length || i < that.limbs.length; i++) {\n difference |= this.getLimb(i) ^ that.getLimb(i);\n }\n return (difference === 0);\n },\n\n /**\n * Get the i'th limb of this, zero if i is too large.\n */\n getLimb: function(i) {\n return (i >= this.limbs.length) ? 0 : this.limbs[i];\n },\n\n /**\n * Constant time comparison function.\n * Returns 1 if this >= that, or zero otherwise.\n */\n greaterEquals: function(that) {\n if (typeof that === \"number\") { that = new this._class(that); }\n var less = 0, greater = 0, i, a, b;\n i = Math.max(this.limbs.length, that.limbs.length) - 1;\n for (; i>= 0; i--) {\n a = this.getLimb(i);\n b = that.getLimb(i);\n greater |= (b - a) & ~less;\n less |= (a - b) & ~greater;\n }\n return (greater | ~less) >>> 31;\n },\n\n /**\n * Convert to a hex string.\n */\n toString: function() {\n this.fullReduce();\n var out=\"\", i, s, l = this.limbs;\n for (i=0; i < this.limbs.length; i++) {\n s = l[i].toString(16);\n while (i < this.limbs.length - 1 && s.length < 6) {\n s = \"0\" + s;\n }\n out = s + out;\n }\n return \"0x\"+out;\n },\n\n /** this += that. Does not normalize. */\n addM: function(that) {\n if (typeof(that) !== \"object\") { that = new this._class(that); }\n var i, l=this.limbs, ll=that.limbs;\n for (i=l.length; i> r;\n }\n if (carry) {\n l.push(carry);\n }\n return this;\n },\n\n /** this /= 2, rounded down. Requires normalized; ends up normalized. */\n halveM: function() {\n var i, carry=0, tmp, r=this.radix, l=this.limbs;\n for (i=l.length-1; i>=0; i--) {\n tmp = l[i];\n l[i] = (tmp+carry)>>1;\n carry = (tmp&1) << r;\n }\n if (!l[l.length-1]) {\n l.pop();\n }\n return this;\n },\n\n /** this -= that. Does not normalize. */\n subM: function(that) {\n if (typeof(that) !== \"object\") { that = new this._class(that); }\n var i, l=this.limbs, ll=that.limbs;\n for (i=l.length; i 0; ci--) {\n that.halveM();\n if (out.greaterEquals(that)) {\n out.subM(that).normalize();\n }\n }\n return out.trim();\n },\n\n /** return inverse mod prime p. p must be odd. Binary extended Euclidean algorithm mod p. */\n inverseMod: function(p) {\n var a = new sjcl.bn(1), b = new sjcl.bn(0), x = new sjcl.bn(this), y = new sjcl.bn(p), tmp, i, nz=1;\n\n if (!(p.limbs[0] & 1)) {\n throw (new sjcl.exception.invalid(\"inverseMod: p must be odd\"));\n }\n\n // invariant: y is odd\n do {\n if (x.limbs[0] & 1) {\n if (!x.greaterEquals(y)) {\n // x < y; swap everything\n tmp = x; x = y; y = tmp;\n tmp = a; a = b; b = tmp;\n }\n x.subM(y);\n x.normalize();\n\n if (!a.greaterEquals(b)) {\n a.addM(p);\n }\n a.subM(b);\n }\n\n // cut everything in half\n x.halveM();\n if (a.limbs[0] & 1) {\n a.addM(p);\n }\n a.normalize();\n a.halveM();\n\n // check for termination: x ?= 0\n for (i=nz=0; i>(j + 1) == 0) { break; }\n\n pow = pow.square();\n }\n }\n\n return out;\n },\n\n /** this * that mod N */\n mulmod: function(that, N) {\n return this.mod(N).mul(that.mod(N)).mod(N);\n },\n\n /** this ^ x mod N */\n powermod: function(x, N) {\n x = new sjcl.bn(x);\n N = new sjcl.bn(N);\n\n // Jump to montpowermod if possible.\n if ((N.limbs[0] & 1) == 1) {\n var montOut = this.montpowermod(x, N);\n\n if (montOut != false) { return montOut; } // else go to slow powermod\n }\n\n var i, j, l = x.normalize().trim().limbs, out = new this._class(1), pow = this;\n\n for (i=0; i>(j + 1) == 0) { break; }\n\n pow = pow.mulmod(pow, N);\n }\n }\n\n return out;\n },\n\n /** this ^ x mod N with Montomery reduction */\n montpowermod: function(x, N) {\n x = new sjcl.bn(x).normalize().trim();\n N = new sjcl.bn(N);\n\n var i, j,\n radix = this.radix,\n out = new this._class(1),\n pow = this.copy();\n\n // Generate R as a cap of N.\n var R, s, wind, bitsize = x.bitLength();\n\n R = new sjcl.bn({\n limbs: N.copy().normalize().trim().limbs.map(function() { return 0; })\n });\n\n for (s = this.radix; s > 0; s--) {\n if (((N.limbs[N.limbs.length - 1] >> s) & 1) == 1) {\n R.limbs[R.limbs.length - 1] = 1 << s;\n break;\n }\n }\n\n // Calculate window size as a function of the exponent's size.\n if (bitsize == 0) {\n return this;\n } else if (bitsize < 18) {\n wind = 1;\n } else if (bitsize < 48) {\n wind = 3;\n } else if (bitsize < 144) {\n wind = 4;\n } else if (bitsize < 768) {\n wind = 5;\n } else {\n wind = 6;\n }\n\n // Find R' and N' such that R * R' - N * N' = 1.\n var RR = R.copy(), NN = N.copy(), RP = new sjcl.bn(1), NP = new sjcl.bn(0), RT = R.copy();\n\n while (RT.greaterEquals(1)) {\n RT.halveM();\n\n if ((RP.limbs[0] & 1) == 0) {\n RP.halveM();\n NP.halveM();\n } else {\n RP.addM(NN);\n RP.halveM();\n\n NP.halveM();\n NP.addM(RR);\n }\n }\n\n RP = RP.normalize();\n NP = NP.normalize();\n\n RR.doubleM();\n var R2 = RR.mulmod(RR, N);\n\n // Check whether the invariant holds.\n // If it doesn't, we can't use Montgomery reduction on this modulus.\n if (!RR.mul(RP).sub(N.mul(NP)).equals(1)) {\n return false;\n }\n\n var montIn = function(c) { return montMul(c, R2); },\n montMul = function(a, b) {\n // Standard Montgomery reduction\n var k, carry, ab, right, abBar, mask = (1 << (s + 1)) - 1;\n\n ab = a.mul(b);\n\n right = ab.mul(NP);\n right.limbs = right.limbs.slice(0, R.limbs.length);\n\n if (right.limbs.length == R.limbs.length) {\n right.limbs[R.limbs.length - 1] &= mask;\n }\n\n right = right.mul(N);\n\n abBar = ab.add(right).normalize().trim();\n abBar.limbs = abBar.limbs.slice(R.limbs.length - 1);\n\n // Division. Equivelent to calling *.halveM() s times.\n for (k=0; k < abBar.limbs.length; k++) {\n if (k > 0) {\n abBar.limbs[k - 1] |= (abBar.limbs[k] & mask) << (radix - s - 1);\n }\n\n abBar.limbs[k] = abBar.limbs[k] >> (s + 1);\n }\n\n if (abBar.greaterEquals(N)) {\n abBar.subM(N);\n }\n\n return abBar;\n },\n montOut = function(c) { return montMul(c, 1); };\n\n pow = montIn(pow);\n out = montIn(out);\n\n // Sliding-Window Exponentiation (HAC 14.85)\n var h, precomp = {}, cap = (1 << (wind - 1)) - 1;\n\n precomp[1] = pow.copy();\n precomp[2] = montMul(pow, pow);\n\n for (h=1; h<=cap; h++) {\n precomp[(2 * h) + 1] = montMul(precomp[(2 * h) - 1], precomp[2]);\n }\n\n var getBit = function(exp, i) { // Gets ith bit of exp.\n var off = i % exp.radix;\n\n return (exp.limbs[Math.floor(i / exp.radix)] & (1 << off)) >> off;\n };\n\n for (i = x.bitLength() - 1; i >= 0; ) {\n if (getBit(x, i) == 0) {\n // If the next bit is zero:\n // Square, move forward one bit.\n out = montMul(out, out);\n i = i - 1;\n } else {\n // If the next bit is one:\n // Find the longest sequence of bits after this one, less than `wind`\n // bits long, that ends with a 1. Convert the sequence into an\n // integer and look up the pre-computed value to add.\n var l = i - wind + 1;\n\n while (getBit(x, l) == 0) {\n l++;\n }\n\n var indx = 0;\n for (j = l; j <= i; j++) {\n indx += getBit(x, j) << (j - l);\n out = montMul(out, out);\n }\n\n out = montMul(out, precomp[indx]);\n\n i = l - 1;\n }\n }\n\n return montOut(out);\n },\n\n trim: function() {\n var l = this.limbs, p;\n do {\n p = l.pop();\n } while (l.length && p === 0);\n l.push(p);\n return this;\n },\n\n /** Reduce mod a modulus. Stubbed for subclassing. */\n reduce: function() {\n return this;\n },\n\n /** Reduce and normalize. */\n fullReduce: function() {\n return this.normalize();\n },\n\n /** Propagate carries. */\n normalize: function() {\n var carry=0, i, pv = this.placeVal, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i=0; i < ll || (carry !== 0 && carry !== -1); i++) {\n l = (limbs[i]||0) + carry;\n m = limbs[i] = l & mask;\n carry = (l-m)*ipv;\n }\n if (carry === -1) {\n limbs[i-1] -= pv;\n }\n this.trim();\n return this;\n },\n\n /** Constant-time normalize. Does not allocate additional space. */\n cnormalize: function() {\n var carry=0, i, ipv = this.ipv, l, m, limbs = this.limbs, ll = limbs.length, mask = this.radixMask;\n for (i=0; i < ll-1; i++) {\n l = limbs[i] + carry;\n m = limbs[i] = l & mask;\n carry = (l-m)*ipv;\n }\n limbs[i] += carry;\n return this;\n },\n\n /** Serialize to a bit array */\n toBits: function(len) {\n this.fullReduce();\n len = len || this.exponent || this.bitLength();\n var i = Math.floor((len-1)/24), w=sjcl.bitArray, e = (len + 7 & -8) % this.radix || this.radix,\n out = [w.partial(e, this.getLimb(i))];\n for (i--; i >= 0; i--) {\n out = w.concat(out, [w.partial(Math.min(this.radix,len), this.getLimb(i))]);\n len -= this.radix;\n }\n return out;\n },\n\n /** Return the length in bits, rounded up to the nearest byte. */\n bitLength: function() {\n this.fullReduce();\n var out = this.radix * (this.limbs.length - 1),\n b = this.limbs[this.limbs.length - 1];\n for (; b; b >>>= 1) {\n out ++;\n }\n return out+7 & -8;\n }\n};\n\n/** @memberOf sjcl.bn\n* @this { sjcl.bn }\n*/\nsjcl.bn.fromBits = function(bits) {\n var Class = this, out = new Class(), words=[], w=sjcl.bitArray, t = this.prototype,\n l = Math.min(this.bitLength || 0x100000000, w.bitLength(bits)), e = l % t.radix || t.radix;\n\n words[0] = w.extract(bits, 0, e);\n for (; e < l; e += t.radix) {\n words.unshift(w.extract(bits, e, t.radix));\n }\n\n out.limbs = words;\n return out;\n};\n\n\n\nsjcl.bn.prototype.ipv = 1 / (sjcl.bn.prototype.placeVal = Math.pow(2,sjcl.bn.prototype.radix));\nsjcl.bn.prototype.radixMask = (1 << sjcl.bn.prototype.radix) - 1;\n\n/**\n * Creates a new subclass of bn, based on reduction modulo a pseudo-Mersenne prime,\n * i.e. a prime of the form 2^e + sum(a * 2^b),where the sum is negative and sparse.\n */\nsjcl.bn.pseudoMersennePrime = function(exponent, coeff) {\n /** @constructor\n * @private\n */\n function p(it) {\n this.initWith(it);\n /*if (this.limbs[this.modOffset]) {\n this.reduce();\n }*/\n }\n\n var ppr = p.prototype = new sjcl.bn(), i, tmp, mo;\n mo = ppr.modOffset = Math.ceil(tmp = exponent / ppr.radix);\n ppr.exponent = exponent;\n ppr.offset = [];\n ppr.factor = [];\n ppr.minOffset = mo;\n ppr.fullMask = 0;\n ppr.fullOffset = [];\n ppr.fullFactor = [];\n ppr.modulus = p.modulus = new sjcl.bn(Math.pow(2,exponent));\n\n ppr.fullMask = 0|-Math.pow(2, exponent % ppr.radix);\n\n for (i=0; i mo) {\n l = limbs.pop();\n ll = limbs.length;\n for (k=0; k= width ? n : new Array(width - n.length + 1).join('0') + n;\n };\n\n for (var i = 0; i < stringBufferView.byteLength; i+=2) {\n if (i%16 == 0) string += ('\\n'+(i).toString(16)+'\\t');\n string += ( pad(stringBufferView.getUint16(i).toString(16),4) + ' ');\n }\n\n if ( typeof console === undefined ){\n console = console || {log:function(){}}; //fix for IE\n }\n console.log(string.toUpperCase());\n }\n};\n\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * UTF-8 strings\n * @namespace\n */\nsjcl.codec.utf8String = {\n /** Convert from a bitArray to a UTF-8 string. */\n fromBits: function (arr) {\n var out = \"\", bl = sjcl.bitArray.bitLength(arr), i, tmp;\n for (i=0; i>> 8 >>> 8 >>> 8);\n tmp <<= 8;\n }\n return decodeURIComponent(escape(out));\n },\n\n /** Convert from a UTF-8 string to a bitArray. */\n toBits: function (str) {\n str = unescape(encodeURIComponent(str));\n var out = [], i, tmp=0;\n for (i=0; i=0; i--) {\n for (j=sjcl.bn.prototype.radix-4; j>=0; j-=4) {\n out = out.doubl().doubl().doubl().doubl().add(multiples[k[i]>>j & 0xF]);\n }\n }\n\n return out;\n },\n\n /**\n * Multiply this point by k, added to affine2*k2, and return the answer in Jacobian coordinates.\n * @param {bigInt} k The coefficient to multiply this by.\n * @param {sjcl.ecc.point} affine This point in affine coordinates.\n * @param {bigInt} k2 The coefficient to multiply affine2 this by.\n * @param {sjcl.ecc.point} affine The other point in affine coordinates.\n * @return {sjcl.ecc.pointJac} The result of the multiplication and addition, in Jacobian coordinates.\n */\n mult2: function(k1, affine, k2, affine2) {\n if (typeof(k1) === \"number\") {\n k1 = [k1];\n } else if (k1.limbs !== undefined) {\n k1 = k1.normalize().limbs;\n }\n\n if (typeof(k2) === \"number\") {\n k2 = [k2];\n } else if (k2.limbs !== undefined) {\n k2 = k2.normalize().limbs;\n }\n\n var i, j, out = new sjcl.ecc.point(this.curve).toJac(), m1 = affine.multiples(),\n m2 = affine2.multiples(), l1, l2;\n\n for (i=Math.max(k1.length,k2.length)-1; i>=0; i--) {\n l1 = k1[i] | 0;\n l2 = k2[i] | 0;\n for (j=sjcl.bn.prototype.radix-4; j>=0; j-=4) {\n out = out.doubl().doubl().doubl().doubl().add(m1[l1>>j & 0xF]).add(m2[l2>>j & 0xF]);\n }\n }\n\n return out;\n },\n\n negate: function() {\n return this.toAffine().negate().toJac();\n },\n\n isValid: function() {\n var z2 = this.z.square(), z4 = z2.square(), z6 = z4.mul(z2);\n return this.y.square().equals(\n this.curve.b.mul(z6).add(this.x.mul(\n this.curve.a.mul(z4).add(this.x.square()))));\n }\n};\n\n/**\n * Construct an elliptic curve. Most users will not use this and instead start with one of the NIST curves defined below.\n *\n * @constructor\n * @param {bigInt} p The prime modulus.\n * @param {bigInt} r The prime order of the curve.\n * @param {bigInt} a The constant a in the equation of the curve y^2 = x^3 + ax + b (for NIST curves, a is always -3).\n * @param {bigInt} x The x coordinate of a base point of the curve.\n * @param {bigInt} y The y coordinate of a base point of the curve.\n */\nsjcl.ecc.curve = function(Field, r, a, b, x, y) {\n this.field = Field;\n this.r = new sjcl.bn(r);\n this.a = new Field(a);\n this.b = new Field(b);\n this.G = new sjcl.ecc.point(this, new Field(x), new Field(y));\n};\n\nsjcl.ecc.curve.prototype.fromBits = function (bits) {\n var w = sjcl.bitArray, l = this.field.prototype.exponent + 7 & -8,\n p = new sjcl.ecc.point(this, this.field.fromBits(w.bitSlice(bits, 0, l)),\n this.field.fromBits(w.bitSlice(bits, l, 2*l)));\n if (!p.isValid()) {\n throw new sjcl.exception.corrupt(\"not on the curve!\");\n }\n return p;\n};\n\nsjcl.ecc.curves = {\n c192: new sjcl.ecc.curve(\n sjcl.bn.prime.p192,\n \"0xffffffffffffffffffffffff99def836146bc9b1b4d22831\",\n -3,\n \"0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1\",\n \"0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012\",\n \"0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811\"),\n\n c224: new sjcl.ecc.curve(\n sjcl.bn.prime.p224,\n \"0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d\",\n -3,\n \"0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4\",\n \"0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21\",\n \"0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34\"),\n\n c256: new sjcl.ecc.curve(\n sjcl.bn.prime.p256,\n \"0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\",\n -3,\n \"0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b\",\n \"0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296\",\n \"0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5\"),\n\n c384: new sjcl.ecc.curve(\n sjcl.bn.prime.p384,\n \"0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\",\n -3,\n \"0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef\",\n \"0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7\",\n \"0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\"),\n \n c521: new sjcl.ecc.curve(\n sjcl.bn.prime.p521,\n \"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\",\n -3,\n \"0x051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\",\n \"0xC6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\",\n \"0x11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650\"),\n\n k192: new sjcl.ecc.curve(\n sjcl.bn.prime.p192k,\n \"0xfffffffffffffffffffffffe26f2fc170f69466a74defd8d\",\n 0,\n 3,\n \"0xdb4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d\",\n \"0x9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d\"),\n\n k224: new sjcl.ecc.curve(\n sjcl.bn.prime.p224k,\n \"0x010000000000000000000000000001dce8d2ec6184caf0a971769fb1f7\",\n 0,\n 5,\n \"0xa1455b334df099df30fc28a169a467e9e47075a90f7e650eb6b7a45c\",\n \"0x7e089fed7fba344282cafbd6f7e319f7c0b0bd59e2ca4bdb556d61a5\"),\n\n k256: new sjcl.ecc.curve(\n sjcl.bn.prime.p256k,\n \"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\",\n 0,\n 7,\n \"0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\",\n \"0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\")\n\n};\n\nsjcl.ecc.curveName = function (curve) {\n var curcurve;\n for (curcurve in sjcl.ecc.curves) {\n if (sjcl.ecc.curves.hasOwnProperty(curcurve)) {\n if (sjcl.ecc.curves[curcurve] === curve) {\n return curcurve;\n }\n }\n }\n\n throw new sjcl.exception.invalid(\"no such curve\");\n};\n\nsjcl.ecc.deserialize = function (key) {\n var types = [\"elGamal\", \"ecdsa\"];\n\n if (!key || !key.curve || !sjcl.ecc.curves[key.curve]) { throw new sjcl.exception.invalid(\"invalid serialization\"); }\n if (types.indexOf(key.type) === -1) { throw new sjcl.exception.invalid(\"invalid type\"); }\n\n var curve = sjcl.ecc.curves[key.curve];\n\n if (key.secretKey) {\n if (!key.exponent) { throw new sjcl.exception.invalid(\"invalid exponent\"); }\n var exponent = new sjcl.bn(key.exponent);\n return new sjcl.ecc[key.type].secretKey(curve, exponent);\n } else {\n if (!key.point) { throw new sjcl.exception.invalid(\"invalid point\"); }\n \n var point = curve.fromBits(sjcl.codec.hex.toBits(key.point));\n return new sjcl.ecc[key.type].publicKey(curve, point);\n }\n};\n\n/** our basicKey classes\n*/\nsjcl.ecc.basicKey = {\n /** ecc publicKey.\n * @constructor\n * @param {curve} curve the elliptic curve\n * @param {point} point the point on the curve\n */\n publicKey: function(curve, point) {\n this._curve = curve;\n this._curveBitLength = curve.r.bitLength();\n if (point instanceof Array) {\n this._point = curve.fromBits(point);\n } else {\n this._point = point;\n }\n\n this.serialize = function () {\n var curveName = sjcl.ecc.curveName(curve);\n return {\n type: this.getType(),\n secretKey: false,\n point: sjcl.codec.hex.fromBits(this._point.toBits()),\n curve: curveName\n };\n };\n\n /** get this keys point data\n * @return x and y as bitArrays\n */\n this.get = function() {\n var pointbits = this._point.toBits();\n var len = sjcl.bitArray.bitLength(pointbits);\n var x = sjcl.bitArray.bitSlice(pointbits, 0, len/2);\n var y = sjcl.bitArray.bitSlice(pointbits, len/2);\n return { x: x, y: y };\n };\n },\n\n /** ecc secretKey\n * @constructor\n * @param {curve} curve the elliptic curve\n * @param exponent\n */\n secretKey: function(curve, exponent) {\n this._curve = curve;\n this._curveBitLength = curve.r.bitLength();\n this._exponent = exponent;\n\n this.serialize = function () {\n var exponent = this.get();\n var curveName = sjcl.ecc.curveName(curve);\n return {\n type: this.getType(),\n secretKey: true,\n exponent: sjcl.codec.hex.fromBits(exponent),\n curve: curveName\n };\n };\n\n /** get this keys exponent data\n * @return {bitArray} exponent\n */\n this.get = function () {\n return this._exponent.toBits();\n };\n }\n};\n\n/** @private */\nsjcl.ecc.basicKey.generateKeys = function(cn) {\n return function generateKeys(curve, paranoia, sec) {\n curve = curve || 256;\n\n if (typeof curve === \"number\") {\n curve = sjcl.ecc.curves['c'+curve];\n if (curve === undefined) {\n throw new sjcl.exception.invalid(\"no such curve\");\n }\n }\n sec = sec || sjcl.bn.random(curve.r, paranoia);\n\n var pub = curve.G.mult(sec);\n return { pub: new sjcl.ecc[cn].publicKey(curve, pub),\n sec: new sjcl.ecc[cn].secretKey(curve, sec) };\n };\n};\n\n/** elGamal keys */\nsjcl.ecc.elGamal = {\n /** generate keys\n * @function\n * @param curve\n * @param {int} paranoia Paranoia for generation (default 6)\n * @param {secretKey} sec secret Key to use. used to get the publicKey for ones secretKey\n */\n generateKeys: sjcl.ecc.basicKey.generateKeys(\"elGamal\"),\n /** elGamal publicKey.\n * @constructor\n * @augments sjcl.ecc.basicKey.publicKey\n */\n publicKey: function (curve, point) {\n sjcl.ecc.basicKey.publicKey.apply(this, arguments);\n },\n /** elGamal secretKey\n * @constructor\n * @augments sjcl.ecc.basicKey.secretKey\n */\n secretKey: function (curve, exponent) {\n sjcl.ecc.basicKey.secretKey.apply(this, arguments);\n }\n};\n\nsjcl.ecc.elGamal.publicKey.prototype = {\n /** Kem function of elGamal Public Key\n * @param paranoia paranoia to use for randomization.\n * @return {object} key and tag. unkem(tag) with the corresponding secret key results in the key returned.\n */\n kem: function(paranoia) {\n var sec = sjcl.bn.random(this._curve.r, paranoia),\n tag = this._curve.G.mult(sec).toBits(),\n key = sjcl.hash.sha256.hash(this._point.mult(sec).toBits());\n return { key: key, tag: tag };\n },\n \n getType: function() {\n return \"elGamal\";\n }\n};\n\nsjcl.ecc.elGamal.secretKey.prototype = {\n /** UnKem function of elGamal Secret Key\n * @param {bitArray} tag The Tag to decrypt.\n * @return {bitArray} decrypted key.\n */\n unkem: function(tag) {\n return sjcl.hash.sha256.hash(this._curve.fromBits(tag).mult(this._exponent).toBits());\n },\n\n /** Diffie-Hellmann function\n * @param {elGamal.publicKey} pk The Public Key to do Diffie-Hellmann with\n * @return {bitArray} diffie-hellmann result for this key combination.\n */\n dh: function(pk) {\n return sjcl.hash.sha256.hash(pk._point.mult(this._exponent).toBits());\n },\n\n /** Diffie-Hellmann function, compatible with Java generateSecret\n * @param {elGamal.publicKey} pk The Public Key to do Diffie-Hellmann with\n * @return {bitArray} undigested X value, diffie-hellmann result for this key combination,\n * compatible with Java generateSecret().\n */\n dhJavaEc: function(pk) {\n return pk._point.mult(this._exponent).x.toBits();\n }, \n\n getType: function() {\n return \"elGamal\";\n }\n};\n\n/** ecdsa keys */\nsjcl.ecc.ecdsa = {\n /** generate keys\n * @function\n * @param curve\n * @param {int} paranoia Paranoia for generation (default 6)\n * @param {secretKey} sec secret Key to use. used to get the publicKey for ones secretKey\n */\n generateKeys: sjcl.ecc.basicKey.generateKeys(\"ecdsa\")\n};\n\n/** ecdsa publicKey.\n* @constructor\n* @augments sjcl.ecc.basicKey.publicKey\n*/\nsjcl.ecc.ecdsa.publicKey = function (curve, point) {\n sjcl.ecc.basicKey.publicKey.apply(this, arguments);\n};\n\n/** specific functions for ecdsa publicKey. */\nsjcl.ecc.ecdsa.publicKey.prototype = {\n /** Diffie-Hellmann function\n * @param {bitArray} hash hash to verify.\n * @param {bitArray} rs signature bitArray.\n * @param {boolean} fakeLegacyVersion use old legacy version\n */\n verify: function(hash, rs, fakeLegacyVersion) {\n if (sjcl.bitArray.bitLength(hash) > this._curveBitLength) {\n hash = sjcl.bitArray.clamp(hash, this._curveBitLength);\n }\n var w = sjcl.bitArray,\n R = this._curve.r,\n l = this._curveBitLength,\n r = sjcl.bn.fromBits(w.bitSlice(rs,0,l)),\n ss = sjcl.bn.fromBits(w.bitSlice(rs,l,2*l)),\n s = fakeLegacyVersion ? ss : ss.inverseMod(R),\n hG = sjcl.bn.fromBits(hash).mul(s).mod(R),\n hA = r.mul(s).mod(R),\n r2 = this._curve.G.mult2(hG, hA, this._point).x;\n if (r.equals(0) || ss.equals(0) || r.greaterEquals(R) || ss.greaterEquals(R) || !r2.equals(r)) {\n if (fakeLegacyVersion === undefined) {\n return this.verify(hash, rs, true);\n } else {\n throw (new sjcl.exception.corrupt(\"signature didn't check out\"));\n }\n }\n return true;\n },\n\n getType: function() {\n return \"ecdsa\";\n }\n};\n\n/** ecdsa secretKey\n* @constructor\n* @augments sjcl.ecc.basicKey.publicKey\n*/\nsjcl.ecc.ecdsa.secretKey = function (curve, exponent) {\n sjcl.ecc.basicKey.secretKey.apply(this, arguments);\n};\n\n/** specific functions for ecdsa secretKey. */\nsjcl.ecc.ecdsa.secretKey.prototype = {\n /** Diffie-Hellmann function\n * @param {bitArray} hash hash to sign.\n * @param {int} paranoia paranoia for random number generation\n * @param {boolean} fakeLegacyVersion use old legacy version\n */\n sign: function(hash, paranoia, fakeLegacyVersion, fixedKForTesting) {\n if (sjcl.bitArray.bitLength(hash) > this._curveBitLength) {\n hash = sjcl.bitArray.clamp(hash, this._curveBitLength);\n }\n var R = this._curve.r,\n l = R.bitLength(),\n k = fixedKForTesting || sjcl.bn.random(R.sub(1), paranoia).add(1),\n r = this._curve.G.mult(k).x.mod(R),\n ss = sjcl.bn.fromBits(hash).add(r.mul(this._exponent)),\n s = fakeLegacyVersion ? ss.inverseMod(R).mul(k).mod(R)\n : ss.mul(k.inverseMod(R)).mod(R);\n return sjcl.bitArray.concat(r.toBits(l), s.toBits(l));\n },\n\n getType: function() {\n return \"ecdsa\";\n }\n};\n/** @fileOverview Javascript RIPEMD-160 implementation.\n *\n * @author Artem S Vybornov \n */\n(function() {\n\n/**\n * Context for a RIPEMD-160 operation in progress.\n * @constructor\n */\nsjcl.hash.ripemd160 = function (hash) {\n if (hash) {\n this._h = hash._h.slice(0);\n this._buffer = hash._buffer.slice(0);\n this._length = hash._length;\n } else {\n this.reset();\n }\n};\n\n/**\n * Hash a string or an array of words.\n * @static\n * @param {bitArray|String} data the data to hash.\n * @return {bitArray} The hash value, an array of 5 big-endian words.\n */\nsjcl.hash.ripemd160.hash = function (data) {\n return (new sjcl.hash.ripemd160()).update(data).finalize();\n};\n\nsjcl.hash.ripemd160.prototype = {\n /**\n * Reset the hash state.\n * @return this\n */\n reset: function () {\n this._h = _h0.slice(0);\n this._buffer = [];\n this._length = 0;\n return this;\n },\n\n /**\n * Reset the hash state.\n * @param {bitArray|String} data the data to hash.\n * @return this\n */\n update: function (data) {\n if ( typeof data === \"string\" )\n data = sjcl.codec.utf8String.toBits(data);\n\n var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),\n ol = this._length,\n nl = this._length = ol + sjcl.bitArray.bitLength(data);\n if (nl > 9007199254740991){\n throw new sjcl.exception.invalid(\"Cannot hash more than 2^53 - 1 bits\");\n }\n for (i = 512+ol - ((512+ol) & 511); i <= nl; i+= 512) {\n var words = b.splice(0,16);\n for ( var w = 0; w < 16; ++w )\n words[w] = _cvt(words[w]);\n\n _block.call( this, words );\n }\n\n return this;\n },\n\n /**\n * Complete hashing and output the hash value.\n * @return {bitArray} The hash value, an array of 5 big-endian words.\n */\n finalize: function () {\n var b = sjcl.bitArray.concat( this._buffer, [ sjcl.bitArray.partial(1,1) ] ),\n l = ( this._length + 1 ) % 512,\n z = ( l > 448 ? 512 : 448 ) - l % 448,\n zp = z % 32;\n\n if ( zp > 0 )\n b = sjcl.bitArray.concat( b, [ sjcl.bitArray.partial(zp,0) ] );\n for ( ; z >= 32; z -= 32 )\n b.push(0);\n\n b.push( _cvt( this._length | 0 ) );\n b.push( _cvt( Math.floor(this._length / 0x100000000) ) );\n\n while ( b.length ) {\n var words = b.splice(0,16);\n for ( var w = 0; w < 16; ++w )\n words[w] = _cvt(words[w]);\n\n _block.call( this, words );\n }\n\n var h = this._h;\n this.reset();\n\n for ( var w = 0; w < 5; ++w )\n h[w] = _cvt(h[w]);\n\n return h;\n }\n};\n\nvar _h0 = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n\nvar _k1 = [ 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e ];\nvar _k2 = [ 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000 ];\nfor ( var i = 4; i >= 0; --i ) {\n for ( var j = 1; j < 16; ++j ) {\n _k1.splice(i,0,_k1[i]);\n _k2.splice(i,0,_k2[i]);\n }\n}\n\nvar _r1 = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 ];\nvar _r2 = [ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 ];\n\nvar _s1 = [ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ];\nvar _s2 = [ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ];\n\nfunction _f0(x,y,z) {\n return x ^ y ^ z;\n}\n\nfunction _f1(x,y,z) {\n return (x & y) | (~x & z);\n}\n\nfunction _f2(x,y,z) {\n return (x | ~y) ^ z;\n}\n\nfunction _f3(x,y,z) {\n return (x & z) | (y & ~z);\n}\n\nfunction _f4(x,y,z) {\n return x ^ (y | ~z);\n}\n\nfunction _rol(n,l) {\n return (n << l) | (n >>> (32-l));\n}\n\nfunction _cvt(n) {\n return ( (n & 0xff << 0) << 24 )\n | ( (n & 0xff << 8) << 8 )\n | ( (n & 0xff << 16) >>> 8 )\n | ( (n & 0xff << 24) >>> 24 );\n}\n\nfunction _block(X) {\n var A1 = this._h[0], B1 = this._h[1], C1 = this._h[2], D1 = this._h[3], E1 = this._h[4],\n A2 = this._h[0], B2 = this._h[1], C2 = this._h[2], D2 = this._h[3], E2 = this._h[4];\n\n var j = 0, T;\n\n for ( ; j < 16; ++j ) {\n T = _rol( A1 + _f0(B1,C1,D1) + X[_r1[j]] + _k1[j], _s1[j] ) + E1;\n A1 = E1; E1 = D1; D1 = _rol(C1,10); C1 = B1; B1 = T;\n T = _rol( A2 + _f4(B2,C2,D2) + X[_r2[j]] + _k2[j], _s2[j] ) + E2;\n A2 = E2; E2 = D2; D2 = _rol(C2,10); C2 = B2; B2 = T; }\n for ( ; j < 32; ++j ) {\n T = _rol( A1 + _f1(B1,C1,D1) + X[_r1[j]] + _k1[j], _s1[j] ) + E1;\n A1 = E1; E1 = D1; D1 = _rol(C1,10); C1 = B1; B1 = T;\n T = _rol( A2 + _f3(B2,C2,D2) + X[_r2[j]] + _k2[j], _s2[j] ) + E2;\n A2 = E2; E2 = D2; D2 = _rol(C2,10); C2 = B2; B2 = T; }\n for ( ; j < 48; ++j ) {\n T = _rol( A1 + _f2(B1,C1,D1) + X[_r1[j]] + _k1[j], _s1[j] ) + E1;\n A1 = E1; E1 = D1; D1 = _rol(C1,10); C1 = B1; B1 = T;\n T = _rol( A2 + _f2(B2,C2,D2) + X[_r2[j]] + _k2[j], _s2[j] ) + E2;\n A2 = E2; E2 = D2; D2 = _rol(C2,10); C2 = B2; B2 = T; }\n for ( ; j < 64; ++j ) {\n T = _rol( A1 + _f3(B1,C1,D1) + X[_r1[j]] + _k1[j], _s1[j] ) + E1;\n A1 = E1; E1 = D1; D1 = _rol(C1,10); C1 = B1; B1 = T;\n T = _rol( A2 + _f1(B2,C2,D2) + X[_r2[j]] + _k2[j], _s2[j] ) + E2;\n A2 = E2; E2 = D2; D2 = _rol(C2,10); C2 = B2; B2 = T; }\n for ( ; j < 80; ++j ) {\n T = _rol( A1 + _f4(B1,C1,D1) + X[_r1[j]] + _k1[j], _s1[j] ) + E1;\n A1 = E1; E1 = D1; D1 = _rol(C1,10); C1 = B1; B1 = T;\n T = _rol( A2 + _f0(B2,C2,D2) + X[_r2[j]] + _k2[j], _s2[j] ) + E2;\n A2 = E2; E2 = D2; D2 = _rol(C2,10); C2 = B2; B2 = T; }\n\n T = this._h[1] + C1 + D2;\n this._h[1] = this._h[2] + D1 + E2;\n this._h[2] = this._h[3] + E1 + A2;\n this._h[3] = this._h[4] + A1 + B2;\n this._h[4] = this._h[0] + B1 + C2;\n this._h[0] = T;\n}\n\n})();\n/** @fileOverview Javascript SHA-256 implementation.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * Special thanks to Aldo Cortesi for pointing out several bugs in\n * this code.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * Context for a SHA-256 operation in progress.\n * @constructor\n */\nsjcl.hash.sha256 = function (hash) {\n if (!this._key[0]) { this._precompute(); }\n if (hash) {\n this._h = hash._h.slice(0);\n this._buffer = hash._buffer.slice(0);\n this._length = hash._length;\n } else {\n this.reset();\n }\n};\n\n/**\n * Hash a string or an array of words.\n * @static\n * @param {bitArray|String} data the data to hash.\n * @return {bitArray} The hash value, an array of 16 big-endian words.\n */\nsjcl.hash.sha256.hash = function (data) {\n return (new sjcl.hash.sha256()).update(data).finalize();\n};\n\nsjcl.hash.sha256.prototype = {\n /**\n * The hash's block size, in bits.\n * @constant\n */\n blockSize: 512,\n \n /**\n * Reset the hash state.\n * @return this\n */\n reset:function () {\n this._h = this._init.slice(0);\n this._buffer = [];\n this._length = 0;\n return this;\n },\n \n /**\n * Input several words to the hash.\n * @param {bitArray|String} data the data to hash.\n * @return this\n */\n update: function (data) {\n if (typeof data === \"string\") {\n data = sjcl.codec.utf8String.toBits(data);\n }\n var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),\n ol = this._length,\n nl = this._length = ol + sjcl.bitArray.bitLength(data);\n if (nl > 9007199254740991){\n throw new sjcl.exception.invalid(\"Cannot hash more than 2^53 - 1 bits\");\n }\n\n if (typeof Uint32Array !== 'undefined') {\n\tvar c = new Uint32Array(b);\n \tvar j = 0;\n \tfor (i = 512+ol - ((512+ol) & 511); i <= nl; i+= 512) {\n \t this._block(c.subarray(16 * j, 16 * (j+1)));\n \t j += 1;\n \t}\n \tb.splice(0, 16 * j);\n } else {\n\tfor (i = 512+ol - ((512+ol) & 511); i <= nl; i+= 512) {\n \t this._block(b.splice(0,16));\n \t}\n }\n return this;\n },\n \n /**\n * Complete hashing and output the hash value.\n * @return {bitArray} The hash value, an array of 8 big-endian words.\n */\n finalize:function () {\n var i, b = this._buffer, h = this._h;\n\n // Round out and push the buffer\n b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);\n \n // Round out the buffer to a multiple of 16 words, less the 2 length words.\n for (i = b.length + 2; i & 15; i++) {\n b.push(0);\n }\n \n // append the length\n b.push(Math.floor(this._length / 0x100000000));\n b.push(this._length | 0);\n\n while (b.length) {\n this._block(b.splice(0,16));\n }\n\n this.reset();\n return h;\n },\n\n /**\n * The SHA-256 initialization vector, to be precomputed.\n * @private\n */\n _init:[],\n /*\n _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],\n */\n \n /**\n * The SHA-256 hash key, to be precomputed.\n * @private\n */\n _key:[],\n /*\n _key:\n [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],\n */\n\n\n /**\n * Function to precompute _init and _key.\n * @private\n */\n _precompute: function () {\n var i = 0, prime = 2, factor, isPrime;\n\n function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }\n\n for (; i<64; prime++) {\n isPrime = true;\n for (factor=2; factor*factor <= prime; factor++) {\n if (prime % factor === 0) {\n isPrime = false;\n break;\n }\n }\n if (isPrime) {\n if (i<8) {\n this._init[i] = frac(Math.pow(prime, 1/2));\n }\n this._key[i] = frac(Math.pow(prime, 1/3));\n i++;\n }\n }\n },\n \n /**\n * Perform one cycle of SHA-256.\n * @param {Uint32Array|bitArray} w one block of words.\n * @private\n */\n _block:function (w) { \n var i, tmp, a, b,\n h = this._h,\n k = this._key,\n h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],\n h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];\n\n /* Rationale for placement of |0 :\n * If a value can overflow is original 32 bits by a factor of more than a few\n * million (2^23 ish), there is a possibility that it might overflow the\n * 53-bit mantissa and lose precision.\n *\n * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that\n * propagates around the loop, and on the hash state h[]. I don't believe\n * that the clamps on h4 and on h0 are strictly necessary, but it's close\n * (for h4 anyway), and better safe than sorry.\n *\n * The clamps on h[] are necessary for the output to be correct even in the\n * common case and for short inputs.\n */\n for (i=0; i<64; i++) {\n // load up the input word for this round\n if (i<16) {\n tmp = w[i];\n } else {\n a = w[(i+1 ) & 15];\n b = w[(i+14) & 15];\n tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) + \n (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +\n w[i&15] + w[(i+9) & 15]) | 0;\n }\n \n tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;\n \n // shift register\n h7 = h6; h6 = h5; h5 = h4;\n h4 = h3 + tmp | 0;\n h3 = h2; h2 = h1; h1 = h0;\n\n h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;\n }\n\n h[0] = h[0]+h0 | 0;\n h[1] = h[1]+h1 | 0;\n h[2] = h[2]+h2 | 0;\n h[3] = h[3]+h3 | 0;\n h[4] = h[4]+h4 | 0;\n h[5] = h[5]+h5 | 0;\n h[6] = h[6]+h6 | 0;\n h[7] = h[7]+h7 | 0;\n }\n};\n\n\n/** @fileOverview Random number generator.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n * @author Michael Brooks\n * @author Steve Thomas\n */\n\n/** \n * @class Random number generator\n * @description\n * Use sjcl.random as a singleton for this class!\n *

\n * This random number generator is a derivative of Ferguson and Schneier's\n * generator Fortuna. It collects entropy from various events into several\n * pools, implemented by streaming SHA-256 instances. It differs from\n * ordinary Fortuna in a few ways, though.\n *

\n *\n *

\n * Most importantly, it has an entropy estimator. This is present because\n * there is a strong conflict here between making the generator available\n * as soon as possible, and making sure that it doesn't \"run on empty\".\n * In Fortuna, there is a saved state file, and the system is likely to have\n * time to warm up.\n *

\n *\n *

\n * Second, because users are unlikely to stay on the page for very long,\n * and to speed startup time, the number of pools increases logarithmically:\n * a new pool is created when the previous one is actually used for a reseed.\n * This gives the same asymptotic guarantees as Fortuna, but gives more\n * entropy to early reseeds.\n *

\n *\n *

\n * The entire mechanism here feels pretty klunky. Furthermore, there are\n * several improvements that should be made, including support for\n * dedicated cryptographic functions that may be present in some browsers;\n * state files in local storage; cookies containing randomness; etc. So\n * look for improvements in future versions.\n *

\n * @constructor\n */\nsjcl.prng = function(defaultParanoia) {\n \n /* private */\n this._pools = [new sjcl.hash.sha256()];\n this._poolEntropy = [0];\n this._reseedCount = 0;\n this._robins = {};\n this._eventId = 0;\n \n this._collectorIds = {};\n this._collectorIdNext = 0;\n \n this._strength = 0;\n this._poolStrength = 0;\n this._nextReseed = 0;\n this._key = [0,0,0,0,0,0,0,0];\n this._counter = [0,0,0,0];\n this._cipher = undefined;\n this._defaultParanoia = defaultParanoia;\n \n /* event listener stuff */\n this._collectorsStarted = false;\n this._callbacks = {progress: {}, seeded: {}};\n this._callbackI = 0;\n \n /* constants */\n this._NOT_READY = 0;\n this._READY = 1;\n this._REQUIRES_RESEED = 2;\n\n this._MAX_WORDS_PER_BURST = 65536;\n this._PARANOIA_LEVELS = [0,48,64,96,128,192,256,384,512,768,1024];\n this._MILLISECONDS_PER_RESEED = 30000;\n this._BITS_PER_RESEED = 80;\n};\n \nsjcl.prng.prototype = {\n /** Generate several random words, and return them in an array.\n * A word consists of 32 bits (4 bytes)\n * @param {Number} nwords The number of words to generate.\n */\n randomWords: function (nwords, paranoia) {\n var out = [], i, readiness = this.isReady(paranoia), g;\n \n if (readiness === this._NOT_READY) {\n throw new sjcl.exception.notReady(\"generator isn't seeded\");\n } else if (readiness & this._REQUIRES_RESEED) {\n this._reseedFromPools(!(readiness & this._READY));\n }\n \n for (i=0; i0) {\n estimatedEntropy++;\n tmp = tmp >>> 1;\n }\n }\n }\n this._pools[robin].update([id,this._eventId++,2,estimatedEntropy,t,data.length].concat(data));\n }\n break;\n \n case \"string\":\n if (estimatedEntropy === undefined) {\n /* English text has just over 1 bit per character of entropy.\n * But this might be HTML or something, and have far less\n * entropy than English... Oh well, let's just say one bit.\n */\n estimatedEntropy = data.length;\n }\n this._pools[robin].update([id,this._eventId++,3,estimatedEntropy,t,data.length]);\n this._pools[robin].update(data);\n break;\n \n default:\n err=1;\n }\n if (err) {\n throw new sjcl.exception.bug(\"random: addEntropy only supports number, array of numbers or string\");\n }\n \n /* record the new strength */\n this._poolEntropy[robin] += estimatedEntropy;\n this._poolStrength += estimatedEntropy;\n \n /* fire off events */\n if (oldReady === this._NOT_READY) {\n if (this.isReady() !== this._NOT_READY) {\n this._fireEvent(\"seeded\", Math.max(this._strength, this._poolStrength));\n }\n this._fireEvent(\"progress\", this.getProgress());\n }\n },\n \n /** Is the generator ready? */\n isReady: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[ (paranoia !== undefined) ? paranoia : this._defaultParanoia ];\n \n if (this._strength && this._strength >= entropyRequired) {\n return (this._poolEntropy[0] > this._BITS_PER_RESEED && (new Date()).valueOf() > this._nextReseed) ?\n this._REQUIRES_RESEED | this._READY :\n this._READY;\n } else {\n return (this._poolStrength >= entropyRequired) ?\n this._REQUIRES_RESEED | this._NOT_READY :\n this._NOT_READY;\n }\n },\n \n /** Get the generator's progress toward readiness, as a fraction */\n getProgress: function (paranoia) {\n var entropyRequired = this._PARANOIA_LEVELS[ paranoia ? paranoia : this._defaultParanoia ];\n \n if (this._strength >= entropyRequired) {\n return 1.0;\n } else {\n return (this._poolStrength > entropyRequired) ?\n 1.0 :\n this._poolStrength / entropyRequired;\n }\n },\n \n /** start the built-in entropy collectors */\n startCollectors: function () {\n if (this._collectorsStarted) { return; }\n \n this._eventListener = {\n loadTimeCollector: this._bind(this._loadTimeCollector),\n mouseCollector: this._bind(this._mouseCollector),\n keyboardCollector: this._bind(this._keyboardCollector),\n accelerometerCollector: this._bind(this._accelerometerCollector),\n touchCollector: this._bind(this._touchCollector)\n };\n\n if (window.addEventListener) {\n window.addEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.addEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.addEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.addEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.addEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n } else if (document.attachEvent) {\n document.attachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.attachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.attachEvent(\"keypress\", this._eventListener.keyboardCollector);\n } else {\n throw new sjcl.exception.bug(\"can't attach event\");\n }\n \n this._collectorsStarted = true;\n },\n \n /** stop the built-in entropy collectors */\n stopCollectors: function () {\n if (!this._collectorsStarted) { return; }\n \n if (window.removeEventListener) {\n window.removeEventListener(\"load\", this._eventListener.loadTimeCollector, false);\n window.removeEventListener(\"mousemove\", this._eventListener.mouseCollector, false);\n window.removeEventListener(\"keypress\", this._eventListener.keyboardCollector, false);\n window.removeEventListener(\"devicemotion\", this._eventListener.accelerometerCollector, false);\n window.removeEventListener(\"touchmove\", this._eventListener.touchCollector, false);\n } else if (document.detachEvent) {\n document.detachEvent(\"onload\", this._eventListener.loadTimeCollector);\n document.detachEvent(\"onmousemove\", this._eventListener.mouseCollector);\n document.detachEvent(\"keypress\", this._eventListener.keyboardCollector);\n }\n\n this._collectorsStarted = false;\n },\n \n /* use a cookie to store entropy.\n useCookie: function (all_cookies) {\n throw new sjcl.exception.bug(\"random: useCookie is unimplemented\");\n },*/\n \n /** add an event listener for progress or seeded-ness. */\n addEventListener: function (name, callback) {\n this._callbacks[name][this._callbackI++] = callback;\n },\n \n /** remove an event listener for progress or seeded-ness */\n removeEventListener: function (name, cb) {\n var i, j, cbs=this._callbacks[name], jsTemp=[];\n\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n\n for (j in cbs) {\n if (cbs.hasOwnProperty(j) && cbs[j] === cb) {\n jsTemp.push(j);\n }\n }\n\n for (i=0; i= 1 << this._pools.length) {\n this._pools.push(new sjcl.hash.sha256());\n this._poolEntropy.push(0);\n }\n \n /* how strong was this reseed? */\n this._poolStrength -= strength;\n if (strength > this._strength) {\n this._strength = strength;\n }\n \n this._reseedCount ++;\n this._reseed(reseedData);\n },\n \n _keyboardCollector: function () {\n this._addCurrentTimeToEntropy(1);\n },\n \n _mouseCollector: function (ev) {\n var x, y;\n\n try {\n x = ev.x || ev.clientX || ev.offsetX || 0;\n y = ev.y || ev.clientY || ev.offsetY || 0;\n } catch (err) {\n // Event originated from a secure element. No mouse position available.\n x = 0;\n y = 0;\n }\n\n if (x != 0 && y!= 0) {\n this.addEntropy([x,y], 2, \"mouse\");\n }\n\n this._addCurrentTimeToEntropy(0);\n },\n\n _touchCollector: function(ev) {\n var touch = ev.touches[0] || ev.changedTouches[0];\n var x = touch.pageX || touch.clientX,\n y = touch.pageY || touch.clientY;\n\n this.addEntropy([x,y],1,\"touch\");\n\n this._addCurrentTimeToEntropy(0);\n },\n \n _loadTimeCollector: function () {\n this._addCurrentTimeToEntropy(2);\n },\n\n _addCurrentTimeToEntropy: function (estimatedEntropy) {\n if (typeof window !== 'undefined' && window.performance && typeof window.performance.now === \"function\") {\n //how much entropy do we want to add here?\n this.addEntropy(window.performance.now(), estimatedEntropy, \"loadtime\");\n } else {\n this.addEntropy((new Date()).valueOf(), estimatedEntropy, \"loadtime\");\n }\n },\n _accelerometerCollector: function (ev) {\n var ac = ev.accelerationIncludingGravity.x||ev.accelerationIncludingGravity.y||ev.accelerationIncludingGravity.z;\n if(window.orientation){\n var or = window.orientation;\n if (typeof or === \"number\") {\n this.addEntropy(or, 1, \"accelerometer\");\n }\n }\n if (ac) {\n this.addEntropy(ac, 2, \"accelerometer\");\n }\n this._addCurrentTimeToEntropy(0);\n },\n\n _fireEvent: function (name, arg) {\n var j, cbs=sjcl.random._callbacks[name], cbsTemp=[];\n /* TODO: there is a race condition between removing collectors and firing them */\n\n /* I'm not sure if this is necessary; in C++, iterating over a\n * collection and modifying it at the same time is a no-no.\n */\n\n for (j in cbs) {\n if (cbs.hasOwnProperty(j)) {\n cbsTemp.push(cbs[j]);\n }\n }\n\n for (j=0; j= 0; i--) {\n var iBig = new sjcl.bn(i);\n var exp = base.power(iBig);\n\n var pos = 0;\n while (num.greaterEquals(exp)) {\n num.subM(exp);\n num.normalize();\n pos++;\n }\n if (!(i === len - 1 && pos === 0)) {\n str += sjcl.codec.base58.alpha[pos];\n }\n }\n return str;\n }\n};\n/* global sjcl */\n\nsjcl.codec.base58Check = {\n defaultChecksumFn: function(bits) {\n return sjcl.bitArray.bitSlice(\n sjcl.hash.sha256.hash(sjcl.hash.sha256.hash(bits)),\n 0,\n 32\n );\n },\n\n fromBits: function(version, bits, checksumFn) {\n checksumFn = checksumFn || sjcl.codec.base58Check.defaultChecksumFn;\n\n var bitsWithHeader = sjcl.bitArray.concat(\n [sjcl.bitArray.partial(8, version)],\n bits\n );\n var checksum = checksumFn(bitsWithHeader);\n var headerPayloadAndChecksum = sjcl.bitArray.concat(\n bitsWithHeader,\n checksum\n );\n var base58str = sjcl.codec.base58.fromBits(headerPayloadAndChecksum);\n\n var leadingZeroBits = 0;\n while (\n sjcl.bitArray.extract(headerPayloadAndChecksum, leadingZeroBits, 8) == 0\n ) {\n base58str = '1' + base58str;\n leadingZeroBits += 8;\n }\n\n return base58str;\n },\n toBits: function(str, checksumFn) {\n checksumFn = checksumFn || sjcl.codec.base58Check.defaultChecksumFn;\n\n var bits = sjcl.codec.base58.toBits(str);\n var bitlen = sjcl.bitArray.bitLength(bits);\n // var headerByte = sjcl.bitArray.extract(bits, 0, 8);\n var payload = sjcl.bitArray.bitSlice(bits, 0, bitlen - 32);\n\n var transmittedChecksum = sjcl.bitArray.bitSlice(bits, bitlen - 32);\n var computedChecksum = checksumFn(payload);\n if (!sjcl.bitArray.equal(computedChecksum, transmittedChecksum)) {\n throw new Error('Checksums do not match');\n }\n\n return payload;\n }\n};\n/* global sjcl */\nsjcl.codec.steemit = {\n ROLES: ['owner', 'memo', 'active', 'posting'],\n MAINNET: {\n pubHeader: 0x0,\n privHeader: 0x80,\n pubPrefix: 'STM'\n },\n TESTNET: {\n pubHeader: 0x0,\n privHeader: 0x80,\n pubPrefix: 'TST'\n },\n keyChecksum: function(bits) {\n return sjcl.bitArray.bitSlice(sjcl.hash.ripemd160.hash(bits), 0, 32);\n },\n\n keysFromPassword: function(account, password) {\n var keyPairs = {};\n var CURVE = sjcl.ecc.curves.k256;\n for (var i = 0; i < sjcl.codec.steemit.ROLES.length; i++) {\n var role = sjcl.codec.steemit.ROLES[i];\n var seed = account + role + password;\n var secret = sjcl.bn.fromBits(\n sjcl.hash.sha256.hash(sjcl.codec.utf8String.toBits(seed))\n );\n keyPairs[role] = sjcl.ecc.ecdsa.generateKeys(CURVE, 0, secret);\n }\n return keyPairs;\n },\n\n signRecoverably: function(sec, hash, paranoia, fixedKForTesting) {\n /*\n * an explanation of the format of the recovery parameter.\n * given any ECDSA signature (r, s), there are 4 possible public keys that could have\n * generated the signature over the hash. Two have odd Y-coordinates and two have\n * even Y-coordinates. the recovery parameter deterministically identifies the public key\n * that _did_ generate the signature.\n *\n * to get the public key given the recovery parameter, do the following:\n * a. if the recovery parameter is between 27 and 31, subtract 27 and remember that the public\n * key that produced the signature is canonically an \"uncompressed\" public key (i.e. known by\n * its X and Y coordinates)\n * b. If the recovery parameter is between 31 and 34, subtract 31 and remember that the public\n * key that produced the signature is canonically a \"compressed\" public key (i.e. known by only\n * its X coordinate).\n *\n * note that in the Steem blockchain, all public keys are canonically compressed and therefore the\n * recovery parameter will always be between 31 and 34. therefore only case \"b\" applies here.\n *\n * after the subtraction, you will get a number between 0 and 4. this number, i, encodes the parity\n * and \"overflow\" of the candidate public key among the four options.\n *\n * the lowest bit of i in binary notation indicates the parity of the candidate public key.\n * if the lowest bit is set, the candidate public key's Y coordinate is odd. If it is cleared, the\n * Y coordinate is even.\n *\n * The next-lowest bit of i, if set, indicates that the candidate public key's x was greater than\n * the order of k. This is true of approximately 1 in 1^127 points on the secp256k1 curve.\n * considering the rarity of this condition, it's much much simpler to just brute-force this\n * condition when it occurs, following ยง4.1.6.\n */\n\n if (sjcl.bitArray.bitLength(hash) > this._curveBitLength) {\n hash = sjcl.bitArray.clamp(hash, this._curveBitLength);\n }\n\n while (true) {\n\n var CURVE = sjcl.ecc.curves.k256,\n n = CURVE.r,\n l = n.bitLength(),\n k = fixedKForTesting || sjcl.bn.random(n.sub(1), paranoia).add(1),\n R = CURVE.G.mult(k);\n\n if (fixedKForTesting) {\n fixedKForTesting = fixedKForTesting.add(1);\n }\n \n if (R.isIdentity) {\n continue;\n }\n\n var r = R.x.mod(n),\n ss = sjcl.bn.fromBits(hash).add(r.mul(sec._exponent)),\n s = ss.mul(k.inverseMod(n)).mod(n),\n isOdd = R.y.limbs[0] & (0x1 == 1),\n recoveryParam = 31;\n\n if (isOdd) {\n recoveryParam++;\n }\n \n var rBitArray = r.toBits(l);\n var sBitArray = s.toBits(l);\n\n var r0 = sjcl.bitArray.extract(rBitArray, 0, 8);\n var r1 = sjcl.bitArray.extract(rBitArray, 8, 8);\n var s0 = sjcl.bitArray.extract(sBitArray, 0, 8);\n var s1 = sjcl.bitArray.extract(sBitArray, 8, 8);\n \n if (!(r0 & 0x80)\n && !(r0 == 0 && !(r1 & 0x80))\n && !(s0 & 0x80)\n && !(s0 == 0 && !(s1 & 0x80))) {\n var rawSig = sjcl.bitArray.concat(r.toBits(l), s.toBits(l));\n \n return sjcl.bitArray.concat(\n [sjcl.bitArray.partial(8, recoveryParam)],\n rawSig\n );\n }\n }\n },\n\n recoverPublicKey: function(hash, sig) {\n var CURVE = sjcl.ecc.curves.k256;\n var n = CURVE.r;\n var G = CURVE.G;\n\n var recoveryParameter = sjcl.bitArray.extract(sig, 0, 8) - 31;\n var e = sjcl.bn.fromBits(hash);\n var r = sjcl.bn.fromBits(sjcl.bitArray.bitSlice(sig, 8, 264));\n var s = sjcl.bn.fromBits(sjcl.bitArray.bitSlice(sig, 264));\n\n if (recoveryParameter < 0 || recoveryParameter > 4) {\n throw new Error('Corrupt signature: recovery parameter is wrong');\n }\n\n var hasOddParity = (recoveryParameter & 0x1) === 1;\n\n for (var j = 0; j <= 1; j++) {\n var x = r.add(n.mul(j));\n\n var y = sjcl.codec.steemit._yFromX(x, hasOddParity);\n var p = new sjcl.ecc.point(CURVE, x, y);\n\n var rInv = r.inverseMod(n);\n var eNeg = new sjcl.bn(0).sub(e).mod(n);\n var keyPoint = G.mult2(eNeg, s, p).mult(rInv);\n var key = new sjcl.ecc.ecdsa.publicKey(CURVE, keyPoint);\n try {\n key.verify(hash, sjcl.bitArray.bitSlice(sig, 8));\n return key;\n } catch (_) {\n // do nothing, wait for next j\n }\n }\n throw new Error('public key was unrecoverable');\n },\n\n serializePublicKey: function(key, net) {\n net = net || sjcl.codec.steemit.MAINNET;\n\n var point = key.get();\n var header = net.pubHeader;\n\n // the public key header sets 0x3 if X is odd, 0x2 if even\n if (sjcl.bn.fromBits(point.y).limbs[0] & 0x1) {\n header |= 0x3;\n } else {\n header |= 0x2;\n }\n return (\n net.pubPrefix +\n sjcl.codec.base58Check.fromBits(\n header,\n point.x,\n sjcl.codec.steemit.keyChecksum\n )\n );\n },\n\n deserializePublicKey: function(pubKey, net) {\n net = net || sjcl.codec.steemit.MAINNET;\n var CURVE = sjcl.ecc.curves.k256;\n\n if (pubKey.indexOf(net.pubPrefix) !== 0) {\n throw new Error(\n 'Public key is not in correct format, it should begin with \"' +\n net.pubPrefix +\n '\"'\n );\n }\n\n var payload = sjcl.codec.base58Check.toBits(\n pubKey.slice(3),\n sjcl.codec.steemit.keyChecksum\n );\n var headerByte = sjcl.bitArray.extract(payload, 0, 8);\n var isOdd = headerByte == 0x3;\n if ((headerByte & net.pubHeader) !== net.pubHeader) {\n throw new Error('public key has invalid header');\n } else if ((headerByte & 0x3) === 0 && (headerByte & 0x2) === 0) {\n throw new Error(\n 'public key has invalid header: should set 0x2 or 0x3, but got 0x' +\n headerByte.toString(16)\n );\n }\n\n var xBits = sjcl.bitArray.bitSlice(payload, 8);\n var x = sjcl.bn.fromBits(xBits);\n var y = sjcl.codec.steemit._yFromX(x, isOdd);\n\n return new sjcl.ecc.ecdsa.publicKey(CURVE, new sjcl.ecc.point(CURVE, x, y));\n },\n\n serializePrivateKey: function(key, net) {\n net = net || sjcl.codec.steemit.MAINNET;\n return sjcl.codec.base58Check.fromBits(net.privHeader, key.get());\n },\n\n deserializePrivateKey: function(wif, header) {\n header = header || sjcl.codec.steemit.MAINNET.privHeader;\n var curve = sjcl.ecc.curves.k256;\n var payload = sjcl.codec.base58Check.toBits(wif);\n var headerByte = sjcl.bitArray.extract(payload, 0, 8);\n if (headerByte !== header) {\n throw new Error(\n 'private key has invalid header: wanted 0x' +\n header.toString(16) +\n ', got 0x' +\n headerByte.toString(16)\n );\n }\n\n var keyBits = sjcl.bitArray.bitSlice(payload, 8);\n return new sjcl.ecc.ecdsa.secretKey(curve, sjcl.bn.fromBits(keyBits));\n },\n\n _yFromX: function(x, shouldBeOdd) {\n var CURVE = sjcl.ecc.curves.k256;\n var PIDENT = sjcl.codec.steemit._getPident();\n\n var alpha = x\n .powermod(3, CURVE.field.modulus)\n .add(x.mulmod(CURVE.a, CURVE.field.modulus))\n .add(CURVE.b)\n .mod(CURVE.field.modulus);\n\n var y = alpha.powermod(PIDENT, CURVE.field.modulus);\n var yIsOdd = y.mod(2).equals(1);\n\n if ((yIsOdd && shouldBeOdd) || (!yIsOdd && !shouldBeOdd)) {\n return y;\n } else {\n return CURVE.field.modulus.sub(y).normalize();\n }\n },\n\n _getPident: function() {\n if (!sjcl.codec.steemit.PIDENT) {\n sjcl.codec.steemit.PIDENT = sjcl.ecc.curves.k256.field.modulus\n .add(1)\n .normalize()\n .halveM()\n .halveM()\n .normalize();\n }\n return sjcl.codec.steemit.PIDENT;\n }\n};\n\n\n return sjcl;\n })();\n\n exports.sjcl = sjcl;\n\n function PrivateKey(priv, pub) {\n // we deliberately avoid exposing private key material on the instance.\n // this is paranoid and probably doesn't protect against a determined\n // attack, but why make things easy?\n this.getPublicKey = function() {\n if (!pub) {\n pub = sjcl.ecc.ecdsa.generateKeys(\n sjcl.ecc.curves.k256,\n undefined,\n sjcl.bn.fromBits(priv.get())\n ).pub;\n }\n return new PublicKey(pub);\n };\n\n this.sign = function(hash) {\n return fromBits(sjcl.codec.steemit.signRecoverably(priv, toBits(hash)));\n };\n }\n\n PrivateKey.from = function(wif, header) {\n return new PrivateKey(\n sjcl.codec.steemit.deserializePrivateKey(wif, header)\n );\n };\n\n function PublicKey(pub) {\n this._p = pub;\n }\n\n PublicKey.from = function(str) {\n return new PublicKey(sjcl.codec.steemit.deserializePublicKey(str));\n };\n\n PublicKey.recover = function(hash, sig) {\n return new PublicKey(\n sjcl.codec.steemit.recoverPublicKey(toBits(hash), toBits(sig))\n );\n };\n\n PublicKey.prototype = {\n toString: function() {\n return sjcl.codec.steemit.serializePublicKey(this._p);\n },\n verify: function(hash, signature) {\n try {\n var rawSig = sjcl.bitArray.bitSlice(toBits(signature), 8);\n this._p.verify(toBits(hash), rawSig);\n return true;\n } catch (_) {\n return false;\n }\n }\n };\n\n function generateKeys() {\n var k = sjcl.ecc.ecdsa.generateKeys(sjcl.ecc.curves.k256);\n return serializePair(k);\n }\n\n function keysFromPassword(accountName, accountPassword) {\n var keys = sjcl.codec.steemit.keysFromPassword(\n accountName,\n accountPassword\n );\n return {\n owner: serializePair(keys.owner),\n memo: serializePair(keys.memo),\n posting: serializePair(keys.posting),\n active: serializePair(keys.active)\n };\n }\n\n function sha256(data) {\n return fromBits(sjcl.hash.sha256.hash(toBits(data)));\n }\n\n function ripemd160(data) {\n return fromBits(sjcl.hash.ripemd160.hash(toBits(data)));\n }\n\n function hexify(data) {\n var result = '';\n var view = new Uint8Array(data);\n for (var i = 0; i < view.byteLength; i++) {\n if (view[i] < 16) {\n result += '0';\n }\n result += view[i].toString(16);\n }\n return result;\n }\n\n function serializePair(k) {\n return {\n private: sjcl.codec.steemit.serializePrivateKey(k.sec),\n public: sjcl.codec.steemit.serializePublicKey(k.pub)\n };\n }\n\n function toBits(a) {\n if (a instanceof ArrayBuffer) {\n return sjcl.codec.arrayBuffer.toBits(a);\n } else {\n throw new Error('You must supply an ArrayBuffer');\n }\n }\n\n function fromBits(a) {\n return sjcl.codec.arrayBuffer.fromBits(a, 0, 0);\n }\n});\n","\"use strict\";\n/**\n * @file JSONRPC 2.0 request authentication with steem authorities.\n * @author Johan Nordberg \n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar libcrypto_1 = require(\"@steemit/libcrypto\");\nvar crypto_1 = require(\"crypto\");\n/**\n * Signing constant used to reserve opcode space and prevent cross-protocol attacks.\n * Output of `sha256('steem_jsonrpc_auth')`.\n */\nexports.K = Buffer.from('3b3b081e46ea808d5a96b08c4bc5003f5e15767090f344faab531ec57565136b', 'hex');\n/**\n * Thrown when a request fails validation.\n */\nvar ValidationError = /** @class */ (function (_super) {\n __extends(ValidationError, _super);\n function ValidationError(message, cause) {\n var _this = _super.call(this, message) || this;\n _this.name = 'ValidationError';\n if (cause) {\n _this.cause = cause;\n _this.message += \" (\" + cause.message + \")\";\n }\n return _this;\n }\n return ValidationError;\n}(Error));\n/**\n * Create request hash to be signed.\n *\n * @param timestamp ISO8601 formatted date e.g. `2017-11-14T19:40:29.077Z`.\n * @param account Steem account name that is the signer.\n * @param method RPC request method.\n * @param params Base64 encoded JSON string containing request params.\n * @param nonce 8 bytes of random data.\n *\n * @returns bytes to be signed or validated.\n */\nfunction hashMessage(timestamp, account, method, params, nonce) {\n var first = crypto_1.createHash('sha256');\n first.update(timestamp);\n first.update(account);\n first.update(method);\n first.update(params);\n var second = crypto_1.createHash('sha256');\n second.update(exports.K);\n second.update(first.digest());\n second.update(nonce);\n return second.digest();\n}\n/**\n * Sign a JSON RPC Request.\n */\nfunction sign(request, account, keys) {\n if (!request.params) {\n throw new Error('Unable to sign a request without params');\n }\n var params = Buffer.from(JSON.stringify(request.params), 'utf8').toString('base64');\n var nonceBytes = crypto_1.randomBytes(8);\n var nonce = nonceBytes.toString('hex');\n var timestamp = new Date().toISOString();\n var message = hashMessage(timestamp, account, request.method, params, nonceBytes);\n var signatures = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (typeof key === 'string') {\n key = libcrypto_1.PrivateKey.from(key);\n }\n var signature = libcrypto_1.hexify(key.sign(message.buffer));\n signatures.push(signature);\n }\n return {\n jsonrpc: '2.0',\n method: request.method,\n id: request.id,\n params: {\n __signed: {\n account: account,\n nonce: nonce,\n params: params,\n signatures: signatures,\n timestamp: timestamp,\n }\n }\n };\n}\nexports.sign = sign;\n/**\n * Validate a signed JSON RPC request.\n * Throws a {@link ValidationError} if the request fails validation.\n *\n * @returns Resolved request params.\n */\nfunction validate(request, verify) {\n return __awaiter(this, void 0, void 0, function () {\n var signed, params, jsonString, nonce, timestamp, message, cause_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (request.jsonrpc !== '2.0' || typeof request.method !== 'string') {\n throw new ValidationError('Invalid JSON RPC Request');\n }\n if (request.params == undefined || request.params.__signed == undefined) {\n throw new ValidationError('Signed payload missing');\n }\n if (Object.keys(request.params).length !== 1) {\n throw new ValidationError('Invalid request params');\n }\n signed = request.params.__signed;\n if (signed.account == undefined) {\n throw new ValidationError('Missing account');\n }\n try {\n jsonString = Buffer.from(signed.params, 'base64').toString('utf8');\n params = JSON.parse(jsonString);\n }\n catch (cause) {\n throw new ValidationError('Invalid encoded params', cause);\n }\n if (signed.nonce == undefined || typeof signed.nonce !== 'string') {\n throw new ValidationError('Invalid nonce');\n }\n nonce = Buffer.from(signed.nonce, 'hex');\n if (nonce.length !== 8) {\n throw new ValidationError('Invalid nonce');\n }\n timestamp = Date.parse(signed.timestamp);\n if (Number.isNaN(timestamp)) {\n throw new ValidationError('Invalid timestamp');\n }\n if (Date.now() - timestamp > 60 * 1000) {\n throw new ValidationError('Signature expired');\n }\n message = hashMessage(signed.timestamp, signed.account, request.method, signed.params, nonce);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, verify(message, signed.signatures, signed.account)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n cause_1 = _a.sent();\n throw new ValidationError('Verification failed', cause_1);\n case 4: return [2 /*return*/, params];\n }\n });\n });\n}\nexports.validate = validate;\n"],"sourceRoot":""}