@ -30,7 +30,7 @@ sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0
this . w [ c ] = ( this . w [ c ] + 1 ) % this . f . length ; switch ( typeof a ) { case "number" : break ; case "object" : if ( b === undefined ) for ( c = b = 0 ; c < a . length ; c ++ ) for ( e = a [ c ] ; e > 0 ; ) { b ++ ; e >>>= 1 } this . f [ g ] . update ( [ d , this . R ++ , 2 , b , f , a . length ] . concat ( a ) ) ; break ; case "string" : if ( b === undefined ) b = a . length ; this . f [ g ] . update ( [ d , this . R ++ , 3 , b , f , a . length ] ) ; this . f [ g ] . update ( a ) ; break ; default : throw new sjcl . exception . bug ( "random: addEntropy only supports number, array or string" ) ; } this . o [ g ] += b ; this . k += b ; if ( h === 0 ) { this . isReady ( ) !== 0 && this . T ( "seeded" ,
Math . max ( this . l , this . k ) ) ; this . T ( "progress" , this . getProgress ( ) ) } } , isReady : function ( a ) { a = this . J [ a !== undefined ? a : this . C ] ; return this . l && this . l >= a ? this . o [ 0 ] > 80 && ( new Date ) . valueOf ( ) > this . Y ? 3 : 1 : this . k >= a ? 2 : 0 } , getProgress : function ( a ) { a = this . J [ a ? a : this . C ] ; return this . l >= a ? 1 [ "0" ] : this . k > a ? 1 [ "0" ] : this . k / a } , startCollectors : function ( ) { if ( ! this . q ) { if ( window . addEventListener ) { window . addEventListener ( "load" , this . t , false ) ; window . addEventListener ( "mousemove" , this . u , false ) } else if ( document . attachEvent ) { document . attachEvent ( "onload" ,
this . t ) ; document . attachEvent ( "onmousemove" , this . u ) } else throw new sjcl . exception . bug ( "can't attach event" ) ; this . q = true } } , stopCollectors : function ( ) { if ( this . q ) { if ( window . removeEventListener ) { window . removeEventListener ( "load" , this . t ) ; window . removeEventListener ( "mousemove" , this . u ) } else if ( window . detachEvent ) { window . detachEvent ( "onload" , this . t ) ; window . detachEvent ( "onmousemove" , this . u ) } this . q = false } } , addEventListener : function ( a , b ) { this . A [ a ] [ this . ba ++ ] = b } , removeEventListener : function ( a , b ) { var c ; a = this . A [ 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 ] } } , f : [ new sjcl . hash . sha256 ] , o : [ 0 ] , H : 0 , w : { } , R : 0 , M : { } , ca : 0 , l : 0 , k : 0 , Y : 0 , c : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , h : [ 0 , 0 , 0 , 0 ] , B : undefined , C : 6 , q : false , A : { progress : { } , seeded : { } } , ba : 0 , J : [ 0 , 48 , 64 , 96 , 128 , 192 , 0x100 , 384 , 512 , 768 , 1024 ] , D : function ( ) { for ( var a = 0 ; a < 4 ; a ++ ) { this . h [ a ] = this . h [ a ] + 1 | 0 ; if ( this . h [ a ] ) break } return this . B . encrypt ( this . h ) } , U : function ( ) { this . c = this . D ( ) . concat ( this . D ( ) ) ; this . B = new sjcl . cipher . aes ( this . c ) } , ea : function ( a ) { this . c =
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 ] } } , f : [ new sjcl . hash . sha256 ] , o : [ 0 ] , H : 0 , w : { } , R : 0 , M : { } , ca : 0 , l : 0 , k : 0 , Y : 0 , c : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , h : [ 0 , 0 , 0 , 0 ] , B : undefined , C : 6 , q : false , A : { progress : { } , seeded : { } } , ba : 0 , J : [ 0 , 48 , 64 , 96 , 128 , 192 , 0x100 , 384 , 512 , 768 , 1024 ] , D : function ( ) { for ( var a = 0 ; a < 4 ; a ++ ) { this . h [ a ] = this . h [ a ] + 1 | 0 ; if ( this . h [ a ] ) break } return this . B . encrypt ( this . h ) } , U : function ( ) { this . c = this . D ( ) . concat ( this . D ( ) ) ; this . B = new sjcl . cipher . aes ( this . c ) } , ea : function ( a ) { this . c =
sjcl . hash . sha256 . hash ( this . c . concat ( a ) ) ; this . B = new sjcl . cipher . aes ( this . c ) ; for ( a = 0 ; a < 4 ; a ++ ) { this . h [ a ] = this . h [ a ] + 1 | 0 ; if ( this . h [ a ] ) break } } , fa : function ( a ) { var b = [ ] , c = 0 , d ; this . Y = b [ 0 ] = ( new Date ) . valueOf ( ) + 3E4 ; for ( d = 0 ; d < 16 ; d ++ ) b . push ( Math . random ( ) * 0x100000000 | 0 ) ; for ( d = 0 ; d < this . f . length ; d ++ ) { b = b . concat ( this . f [ d ] . finalize ( ) ) ; c += this . o [ d ] ; this . o [ d ] = 0 ; if ( ! a && this . H & 1 << d ) break } if ( this . H >= 1 << this . f . length ) { this . f . push ( new sjcl . hash . sha256 ) ; this . o . push ( 0 ) } this . k -= c ; if ( c > this . l ) this . l = c ; this . H ++ ; this . ea ( b ) } , u : function ( a ) { sjcl . random . addEntropy ( [ a . x ||
a . clientX || a . offsetX , a . y || a . clientY || a . offsetY ] , 2 , "mouse" ) } , t : function ( ) { sjcl . random . addEntropy ( new Date , 2 , "loadtime" ) } , T : function ( a , b ) { var c ; a = sjcl . random . A [ 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 . g ( { iv : sjcl . random . randomWords ( 4 , 0 ) } , e . defaults ) ; e . g ( 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 >