@ -5,14 +5,14 @@ sjcl.cipher.aes.prototype={encrypt:function(a){return this.H(a,0)},decrypt:funct
0 ; e < 5 ; e ++ ) { a [ e ] = a [ e ] . slice ( 0 ) ; b [ e ] = b [ e ] . slice ( 0 ) } } , H : function ( a , b ) { if ( a . length !== 4 ) throw new sjcl . exception . invalid ( "invalid aes block size" ) ; var c = this . a [ b ] , d = a [ 0 ] ^ c [ 0 ] , e = a [ b ? 3 : 1 ] ^ c [ 1 ] , f = a [ 2 ] ^ c [ 2 ] ; a = a [ b ? 1 : 3 ] ^ c [ 3 ] ; var g , h , i , k = c . length / 4 - 2 , j , l = 4 , m = [ 0 , 0 , 0 , 0 ] ; g = this . h [ b ] ; var n = g [ 0 ] , o = g [ 1 ] , p = g [ 2 ] , q = g [ 3 ] , r = g [ 4 ] ; for ( j = 0 ; j < k ; j ++ ) { g = n [ d >>> 24 ] ^ o [ e >> 16 & 255 ] ^ p [ f >> 8 & 255 ] ^ q [ a & 255 ] ^ c [ l ] ; h = n [ e >>> 24 ] ^ o [ f >> 16 & 255 ] ^ p [ a >> 8 & 255 ] ^ q [ d & 255 ] ^ c [ l + 1 ] ; i = n [ f >>> 24 ] ^ o [ a >> 16 & 255 ] ^ p [ d >> 8 & 255 ] ^ q [ e & 255 ] ^ c [ l + 2 ] ; a = n [ a >>> 24 ] ^ o [ d >> 16 &
255 ] ^ p [ e >> 8 & 255 ] ^ q [ f & 255 ] ^ c [ l + 3 ] ; l += 4 ; d = g ; e = h ; f = i } for ( j = 0 ; j < 4 ; j ++ ) { m [ b ? 3 & - j : j ] = r [ d >>> 24 ] << 24 ^ r [ e >> 16 & 255 ] << 16 ^ r [ f >> 8 & 255 ] << 8 ^ r [ a & 255 ] ^ c [ l ++ ] ; g = d ; d = e ; e = f ; f = a ; a = g } return m } } ;
sjcl . bitArray = { bitSlice : function ( a , b , c ) { a = sjcl . bitArray . P ( a . slice ( b / 32 ) , 32 - ( b & 31 ) ) . slice ( 1 ) ; return c === undefined ? a : sjcl . bitArray . clamp ( a , c - b ) } , concat : function ( a , b ) { if ( a . length === 0 || b . length === 0 ) return a . concat ( b ) ; var c = a [ a . length - 1 ] , d = sjcl . bitArray . getPartial ( c ) ; return d === 32 ? a . concat ( b ) : sjcl . bitArray . P ( b , d , c | 0 , a . slice ( 0 , a . length - 1 ) ) } , bitLength : function ( a ) { var b = a . length ; if ( b === 0 ) return 0 ; return ( b - 1 ) * 32 + sjcl . bitArray . getPartial ( a [ b - 1 ] ) } , clamp : function ( a , b ) { if ( a . length * 32 < b ) return a ; a = a . slice ( 0 , Math . ceil ( b /
32 ) ) ; var c = a . length ; b &= 31 ; if ( c > 0 && b ) a [ c - 1 ] = sjcl . bitArray . partial ( b , a [ c - 1 ] & 2147483648 >> b - 1 , 1 ) ; return a } , partial : function ( a , b , c ) { if ( a === 32 ) return b ; return ( c ? b | 0 : b << 32 - a ) + a * 0x ffffffff } , getPartial : function ( a ) { return Math . round ( a / 0x ffffffff ) || 32 } , equal : function ( a , b ) { if ( sjcl . bitArray . bitLength ( a ) !== sjcl . bitArray . bitLength ( b ) ) return false ; var c = 0 , d ; for ( d = 0 ; d < a . length ; d ++ ) c |= a [ d ] ^ b [ d ] ; return c === 0 } , P : function ( a , b , c , d ) { var e ; e = 0 ; if ( d === undefined ) d = [ ] ; for ( ; b >= 32 ; b -= 32 ) { d . push ( c ) ; c = 0 } if ( b === 0 ) return d . concat ( a ) ;
32 ) ) ; var c = a . length ; b &= 31 ; if ( c > 0 && b ) a [ c - 1 ] = sjcl . bitArray . partial ( b , a [ c - 1 ] & 2147483648 >> b - 1 , 1 ) ; return a } , partial : function ( a , b , c ) { if ( a === 32 ) return b ; return ( c ? b | 0 : b << 32 - a ) + a * 0x 10000000000 } , getPartial : function ( a ) { return Math . round ( a / 0x 10000000000 ) || 32 } , equal : function ( a , b ) { if ( sjcl . bitArray . bitLength ( a ) !== sjcl . bitArray . bitLength ( b ) ) return false ; var c = 0 , d ; for ( d = 0 ; d < a . length ; d ++ ) c |= a [ d ] ^ b [ d ] ; return c === 0 } , P : function ( a , b , c , d ) { var e ; e = 0 ; if ( d === undefined ) d = [ ] ; for ( ; b >= 32 ; b -= 32 ) { d . push ( c ) ; c = 0 } if ( b === 0 ) return d . concat ( a ) ;
for ( e = 0 ; e < a . length ; e ++ ) { d . push ( c | a [ e ] >>> b ) ; c = a [ e ] << 32 - b } e = a . length ? a [ a . length - 1 ] : 0 ; a = sjcl . bitArray . getPartial ( e ) ; d . push ( sjcl . bitArray . partial ( b + a & 31 , b + a > 32 ? c : d . pop ( ) , 1 ) ) ; return d } , k : function ( a , b ) { return [ a [ 0 ] ^ b [ 0 ] , a [ 1 ] ^ b [ 1 ] , a [ 2 ] ^ b [ 2 ] , a [ 3 ] ^ b [ 3 ] ] } } ;
sjcl . codec . utf8String = { fromBits : function ( a ) { var b = "" , c = sjcl . bitArray . bitLength ( a ) , d , e ; for ( d = 0 ; d < c / 8 ; d ++ ) { if ( ( d & 3 ) === 0 ) e = a [ d / 4 ] ; b += String . fromCharCode ( e >>> 24 ) ; e <<= 8 } return decodeURIComponent ( escape ( b ) ) } , toBits : function ( a ) { a = unescape ( encodeURIComponent ( a ) ) ; var b = [ ] , c , d = 0 ; for ( c = 0 ; c < a . length ; c ++ ) { d = d << 8 | a . charCodeAt ( c ) ; if ( ( c & 3 ) === 3 ) { b . push ( d ) ; d = 0 } } c & 3 && b . push ( sjcl . bitArray . partial ( 8 * ( c & 3 ) , d ) ) ; return b } } ;
sjcl . codec . hex = { fromBits : function ( a ) { var b = "" , c ; for ( c = 0 ; c < a . length ; c ++ ) b += ( ( a [ c ] | 0 ) + 0xf fffffff ) . toString ( 16 ) . substr ( 4 ) ; return b . substr ( 0 , sjcl . bitArray . bitLength ( a ) / 4 ) } , toBits : function ( a ) { var b , c = [ ] , d ; a = a . replace ( /\s|0x/g , "" ) ; d = a . length ; a += "00000000" ; for ( b = 0 ; b < a . length ; b += 8 ) c . push ( parseInt ( a . substr ( b , 8 ) , 16 ) ^ 0 ) ; return sjcl . bitArray . clamp ( c , d * 4 ) } } ;
sjcl . codec . hex = { fromBits : function ( a ) { var b = "" , c ; for ( c = 0 ; c < a . length ; c ++ ) b += ( ( a [ c ] | 0 ) + 0xf 00000000000 ) . toString ( 16 ) . substr ( 4 ) ; return b . substr ( 0 , sjcl . bitArray . bitLength ( a ) / 4 ) } , toBits : function ( a ) { var b , c = [ ] , d ; a = a . replace ( /\s|0x/g , "" ) ; d = a . length ; a += "00000000" ; for ( b = 0 ; b < a . length ; b += 8 ) c . push ( parseInt ( a . substr ( b , 8 ) , 16 ) ^ 0 ) ; return sjcl . bitArray . clamp ( c , d * 4 ) } } ;
sjcl . codec . base64 = { D : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" , fromBits : function ( a , b ) { var c = "" , d , e = 0 , f = sjcl . codec . base64 . D , g = 0 , h = sjcl . bitArray . bitLength ( a ) ; for ( d = 0 ; c . length * 6 < h ; ) { c += f . charAt ( ( g ^ a [ d ] >>> e ) >>> 26 ) ; if ( e < 6 ) { g = a [ d ] << 6 - e ; e += 26 ; d ++ } else { g <<= 6 ; e -= 6 } } for ( ; c . length & 3 && ! b ; ) c += "=" ; return c } , toBits : function ( a ) { a = a . replace ( /\s|=/g , "" ) ; var b = [ ] , c , d = 0 , e = sjcl . codec . base64 . D , f = 0 , g ; for ( c = 0 ; c < a . length ; c ++ ) { g = e . indexOf ( a . charAt ( c ) ) ; if ( g < 0 ) throw new sjcl . exception . invalid ( "this isn't base64!" ) ;
if ( d > 26 ) { d -= 26 ; b . push ( f ^ g >>> d ) ; f = g << 32 - d } else { d += 6 ; f ^= g << 32 - d } } d & 56 && b . push ( sjcl . bitArray . partial ( d & 56 , f , 1 ) ) ; return b } } ; sjcl . hash . sha256 = function ( a ) { this . a [ 0 ] || this . w ( ) ; if ( a ) { this . n = a . n . slice ( 0 ) ; this . i = a . i . slice ( 0 ) ; this . e = a . e } else this . reset ( ) } ; sjcl . hash . sha256 . hash = function ( a ) { return ( new sjcl . hash . sha256 ) . update ( a ) . finalize ( ) } ;
sjcl . hash . sha256 . prototype = { blockSize : 512 , reset : function ( ) { this . n = this . N . slice ( 0 ) ; this . i = [ ] ; this . e = 0 ; return this } , update : function ( a ) { if ( typeof a === "string" ) a = sjcl . codec . utf8String . toBits ( a ) ; var b , c = this . i = sjcl . bitArray . concat ( this . i , a ) ; b = this . e ; a = this . e = b + sjcl . bitArray . bitLength ( a ) ; for ( b = 512 + b & - 512 ; b <= a ; b += 512 ) this . C ( c . splice ( 0 , 16 ) ) ; return this } , finalize : function ( ) { var a , b = this . i , c = this . n ; b = sjcl . bitArray . concat ( b , [ sjcl . bitArray . partial ( 1 , 1 ) ] ) ; for ( a = b . length + 2 ; a & 15 ; a ++ ) b . push ( 0 ) ; b . push ( Math . floor ( this . e /
4294967296 ) ) ; for ( b . push ( this . e | 0 ) ; b . length ; ) this . C ( b . splice ( 0 , 16 ) ) ; this . reset ( ) ; return c } , N : [ ] , a : [ ] , w : function ( ) { function a ( e ) { return ( e - Math . floor ( e ) ) * 0x ffffffff | 0 } var b = 0 , c = 2 , d ; a : for ( ; b < 64 ; c ++ ) { for ( d = 2 ; d * d <= c ; d ++ ) if ( c % d === 0 ) continue a ; if ( b < 8 ) this . N [ b ] = a ( Math . pow ( c , 0.5 ) ) ; this . a [ b ] = a ( Math . pow ( c , 1 / 3 ) ) ; b ++ } } , C : function ( a ) { var b , c , d = a . slice ( 0 ) , e = this . n , f = this . a , g = e [ 0 ] , h = e [ 1 ] , i = e [ 2 ] , k = e [ 3 ] , j = e [ 4 ] , l = e [ 5 ] , m = e [ 6 ] , n = e [ 7 ] ; for ( a = 0 ; a < 64 ; a ++ ) { if ( a < 16 ) b = d [ a ] ; else { b = d [ a + 1 & 15 ] ; c = d [ a + 14 & 15 ] ; b = d [ a & 15 ] = ( b >>> 7 ^ b >>> 18 ^
4294967296 ) ) ; for ( b . push ( this . e | 0 ) ; b . length ; ) this . C ( b . splice ( 0 , 16 ) ) ; this . reset ( ) ; return c } , N : [ ] , a : [ ] , w : function ( ) { function a ( e ) { return ( e - Math . floor ( e ) ) * 0x 100000000 | 0 } var b = 0 , c = 2 , d ; a : for ( ; b < 64 ; c ++ ) { for ( d = 2 ; d * d <= c ; d ++ ) if ( c % d === 0 ) continue a ; if ( b < 8 ) this . N [ b ] = a ( Math . pow ( c , 0.5 ) ) ; this . a [ b ] = a ( Math . pow ( c , 1 / 3 ) ) ; b ++ } } , C : function ( a ) { var b , c , d = a . slice ( 0 ) , e = this . n , f = this . a , g = e [ 0 ] , h = e [ 1 ] , i = e [ 2 ] , k = e [ 3 ] , j = e [ 4 ] , l = e [ 5 ] , m = e [ 6 ] , n = e [ 7 ] ; for ( a = 0 ; a < 64 ; a ++ ) { if ( a < 16 ) b = d [ a ] ; else { b = d [ a + 1 & 15 ] ; c = d [ a + 14 & 15 ] ; b = d [ a & 15 ] = ( b >>> 7 ^ b >>> 18 ^
b >>> 3 ^ b << 25 ^ b << 14 ) + ( c >>> 17 ^ c >>> 19 ^ c >>> 10 ^ c << 15 ^ c << 13 ) + d [ a & 15 ] + d [ a + 9 & 15 ] | 0 } b = b + n + ( j >>> 6 ^ j >>> 11 ^ j >>> 25 ^ j << 26 ^ j << 21 ^ j << 7 ) + ( m ^ j & ( l ^ m ) ) + f [ a ] ; n = m ; m = l ; l = j ; j = k + b | 0 ; k = i ; i = h ; h = g ; g = b + ( h & i ^ k & ( h ^ i ) ) + ( h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10 ) | 0 } e [ 0 ] = e [ 0 ] + g | 0 ; e [ 1 ] = e [ 1 ] + h | 0 ; e [ 2 ] = e [ 2 ] + i | 0 ; e [ 3 ] = e [ 3 ] + k | 0 ; e [ 4 ] = e [ 4 ] + j | 0 ; e [ 5 ] = e [ 5 ] + l | 0 ; e [ 6 ] = e [ 6 ] + m | 0 ; e [ 7 ] = e [ 7 ] + n | 0 } } ;
sjcl . mode . ccm = { name : "ccm" , encrypt : function ( a , b , c , d , e ) { var f , g = b . slice ( 0 ) , h = sjcl . bitArray , i = h . bitLength ( c ) / 8 , k = h . bitLength ( g ) / 8 ; e = e || 64 ; d = d || [ ] ; if ( i < 7 ) throw new sjcl . exception . invalid ( "ccm: iv must be at least 7 bytes" ) ; for ( f = 2 ; f < 4 && k >>> 8 * f ; f ++ ) ; if ( f < 15 - i ) f = 15 - i ; c = h . clamp ( c , 8 * ( 15 - f ) ) ; b = sjcl . mode . ccm . G ( a , b , c , d , e , f ) ; g = sjcl . mode . ccm . I ( a , g , c , b , e , f ) ; return h . concat ( g . data , g . tag ) } , decrypt : function ( a , b , c , d , e ) { e = e || 64 ; d = d || [ ] ; var f = sjcl . bitArray , g = f . bitLength ( c ) / 8 , h = f . bitLength ( b ) , i = f . clamp ( b , h - e ) , k = f . bitSlice ( b ,
h - e ) ; h = ( h - e ) / 8 ; if ( g < 7 ) throw new sjcl . exception . invalid ( "ccm: iv must be at least 7 bytes" ) ; for ( b = 2 ; b < 4 && h >>> 8 * b ; b ++ ) ; if ( b < 15 - g ) b = 15 - g ; c = f . clamp ( c , 8 * ( 15 - b ) ) ; i = sjcl . mode . ccm . I ( a , i , c , k , e , b ) ; a = sjcl . mode . ccm . G ( a , i . data , c , d , e , b ) ; if ( ! f . equal ( i . tag , a ) ) throw new sjcl . exception . corrupt ( "ccm: tag doesn't match" ) ; return i . data } , G : function ( a , b , c , d , e , f ) { var g = [ ] , h = sjcl . bitArray , i = h . k ; e /= 8 ; if ( e % 2 || e < 4 || e > 16 ) throw new sjcl . exception . invalid ( "ccm: invalid tag length" ) ; if ( d . length > 0xffffffff || b . length > 0xffffffff ) throw new sjcl . exception . bug ( "ccm: can't deal with 4GiB or more data" ) ;
@ -28,7 +28,7 @@ sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0
this . f ) ) ; this . K ( "progress" , this . getProgress ( ) ) } } , isReady : function ( a ) { a = this . B [ a !== undefined ? a : this . t ] ; return this . g && this . g >= a ? this . j [ 0 ] > 80 && ( new Date ) . valueOf ( ) > this . O ? 3 : 1 : this . f >= a ? 2 : 0 } , getProgress : function ( a ) { a = this . B [ a ? a : this . t ] ; return this . g >= a ? 1 [ "0" ] : this . f > a ? 1 [ "0" ] : this . f / a } , startCollectors : function ( ) { if ( ! this . m ) { if ( window . addEventListener ) { window . addEventListener ( "load" , this . o , false ) ; window . addEventListener ( "mousemove" , this . p , false ) } else if ( document . attachEvent ) { document . attachEvent ( "onload" ,
this . o ) ; document . attachEvent ( "onmousemove" , this . p ) } else throw new sjcl . exception . bug ( "can't attach event" ) ; this . m = true } } , stopCollectors : function ( ) { if ( this . m ) { if ( window . removeEventListener ) { window . removeEventListener ( "load" , this . o ) ; window . removeEventListener ( "mousemove" , this . p ) } else if ( window . detachEvent ) { window . detachEvent ( "onload" , this . o ) ; window . detachEvent ( "onmousemove" , this . p ) } this . m = false } } , addEventListener : function ( a , b ) { this . r [ a ] [ this . Q ++ ] = b } , removeEventListener : function ( a , b ) { var c ; a = this . r [ a ] ;
var d = [ ] ; for ( c in a ) a . hasOwnProperty [ c ] && a [ c ] === b && d . push ( c ) ; for ( b = 0 ; b < d . length ; b ++ ) { c = d [ b ] ; delete a [ c ] } } , b : [ new sjcl . hash . sha256 ] , j : [ 0 ] , z : 0 , q : { } , J : 0 , F : { } , R : 0 , g : 0 , f : 0 , O : 0 , a : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , d : [ 0 , 0 , 0 , 0 ] , s : undefined , t : 6 , m : false , r : { progress : { } , seeded : { } } , Q : 0 , B : [ 0 , 48 , 64 , 96 , 128 , 192 , 0x100 , 384 , 512 , 768 , 1024 ] , u : function ( ) { for ( var a = 0 ; a < 4 ; a ++ ) { this . d [ a ] = this . d [ a ] + 1 | 0 ; if ( this . d [ a ] ) break } return this . s . encrypt ( this . d ) } , L : function ( ) { this . a = this . u ( ) . concat ( this . u ( ) ) ; this . s = new sjcl . cipher . aes ( this . a ) } , T : function ( a ) { this . a =
sjcl . hash . sha256 . hash ( this . a . concat ( a ) ) ; this . s = new sjcl . cipher . aes ( this . a ) ; for ( a = 0 ; a < 4 ; a ++ ) { this . d [ a ] = this . d [ a ] + 1 | 0 ; if ( this . d [ a ] ) break } } , U : function ( a ) { var b = [ ] , c = 0 , d ; this . O = b [ 0 ] = ( new Date ) . valueOf ( ) + 3E4 ; for ( d = 0 ; d < 16 ; d ++ ) b . push ( Math . random ( ) * 0x ffffffff | 0 ) ; for ( d = 0 ; d < this . b . length ; d ++ ) { b = b . concat ( this . b [ d ] . finalize ( ) ) ; c += this . j [ d ] ; this . j [ d ] = 0 ; if ( ! a && this . z & 1 << d ) break } if ( this . z >= 1 << this . b . length ) { this . b . push ( new sjcl . hash . sha256 ) ; this . j . push ( 0 ) } this . f -= c ; if ( c > this . g ) this . g = c ; this . z ++ ; this . T ( b ) } , p : function ( a ) { sjcl . random . addEntropy ( [ a . x ||
sjcl . hash . sha256 . hash ( this . a . concat ( a ) ) ; this . s = new sjcl . cipher . aes ( this . a ) ; for ( a = 0 ; a < 4 ; a ++ ) { this . d [ a ] = this . d [ a ] + 1 | 0 ; if ( this . d [ a ] ) break } } , U : function ( a ) { var b = [ ] , c = 0 , d ; this . O = b [ 0 ] = ( new Date ) . valueOf ( ) + 3E4 ; for ( d = 0 ; d < 16 ; d ++ ) b . push ( Math . random ( ) * 0x 100000000 | 0 ) ; for ( d = 0 ; d < this . b . length ; d ++ ) { b = b . concat ( this . b [ d ] . finalize ( ) ) ; c += this . j [ d ] ; this . j [ d ] = 0 ; if ( ! a && this . z & 1 << d ) break } if ( this . z >= 1 << this . b . length ) { this . b . push ( new sjcl . hash . sha256 ) ; this . j . push ( 0 ) } this . f -= c ; if ( c > this . g ) this . g = c ; this . z ++ ; this . T ( b ) } , p : function ( a ) { sjcl . random . addEntropy ( [ a . x ||
a . clientX || a . offsetX , a . y || a . clientY || a . offsetY ] , 2 , "mouse" ) } , o : function ( ) { sjcl . random . addEntropy ( new Date , 2 , "loadtime" ) } , K : function ( a , b ) { var c ; a = sjcl . random . r [ a ] ; var d = [ ] ; for ( c in a ) a . hasOwnProperty ( c ) && d . push ( a [ c ] ) ; for ( c = 0 ; c < d . length ; c ++ ) d [ c ] ( b ) } } ;
sjcl . json = { defaults : { v : 1 , iter : 1E3 , ks : 128 , ts : 64 , mode : "ccm" , adata : "" , cipher : "aes" } , encrypt : function ( a , b , c , d ) { c = c || { } ; d = d || { } ; var e = sjcl . json , f = e . c ( { iv : sjcl . random . randomWords ( 4 , 0 ) } , e . defaults ) ; e . c ( f , c ) ; if ( typeof f . salt === "string" ) f . salt = sjcl . codec . base64 . toBits ( f . salt ) ; if ( typeof f . iv === "string" ) f . iv = sjcl . codec . base64 . toBits ( f . iv ) ; if ( ! sjcl . mode [ f . mode ] || ! sjcl . cipher [ f . cipher ] || typeof a === "string" && f . iter <= 100 || f . ts !== 64 && f . ts !== 96 && f . ts !== 128 || f . ks !== 128 && f . ks !== 192 && f . ks !== 0x100 || f . iv . length < 2 || f . iv . length >
4 ) throw new sjcl . exception . invalid ( "json encrypt: invalid parameters" ) ; if ( typeof a === "string" ) { c = sjcl . misc . cachedPbkdf2 ( a , f ) ; a = c . key . slice ( 0 , f . ks / 32 ) ; f . salt = c . salt } if ( typeof b === "string" ) b = sjcl . codec . utf8String . toBits ( b ) ; c = new sjcl . cipher [ f . cipher ] ( a ) ; e . c ( d , f ) ; d . key = a ; f . ct = sjcl . mode [ f . mode ] . encrypt ( c , b , f . iv , f . adata , f . tag ) ; return e . encode ( e . V ( f , e . defaults ) ) } , decrypt : function ( a , b , c , d ) { c = c || { } ; d = d || { } ; var e = sjcl . json ; b = e . c ( e . c ( e . c ( { } , e . defaults ) , e . decode ( b ) ) , c , true ) ; if ( typeof b . salt === "string" ) b . salt =