@ -1,4 +1,4 @@
"use strict" ; var sjcl = { cipher : { } , hash : { } , mode: { } , misc : { } , codec : { } , exception : { corrupt : function ( a ) { this . toString = function ( ) { return "CORRUPT: " + this . message } ; this . message = a } , invalid : function ( a ) { this . toString = function ( ) { return "INVALID: " + this . message } ; this . message = a } , bug : function ( a ) { this . toString = function ( ) { return "BUG: " + this . message } ; this . message = a } } } ;
"use strict" ; var sjcl = { cipher : { } , hash : { } , keyexchange: { } , mode: { } , misc : { } , codec : { } , exception : { corrupt : function ( a ) { this . toString = function ( ) { return "CORRUPT: " + this . message } ; this . message = a } , invalid : function ( a ) { this . toString = function ( ) { return "INVALID: " + this . message } ; this . message = a } , bug : function ( a ) { this . toString = function ( ) { return "BUG: " + this . message } ; this . message = a } } } ;
sjcl . cipher . aes = function ( a ) { this . h [ 0 ] [ 0 ] [ 0 ] || this . w ( ) ; var b , c , d , e , f = this . h [ 0 ] [ 4 ] , g = this . h [ 1 ] ; b = a . length ; var h = 1 ; if ( b !== 4 && b !== 6 && b !== 8 ) throw new sjcl . exception . invalid ( "invalid aes key size" ) ; this . a = [ d = a . slice ( 0 ) , e = [ ] ] ; for ( a = b ; a < 4 * b + 28 ; a ++ ) { c = d [ a - 1 ] ; if ( a % b === 0 || b === 8 && a % b === 4 ) { c = f [ c >>> 24 ] << 24 ^ f [ c >> 16 & 255 ] << 16 ^ f [ c >> 8 & 255 ] << 8 ^ f [ c & 255 ] ; if ( a % b === 0 ) { c = c << 8 ^ c >>> 24 ^ h << 24 ; h = h << 1 ^ ( h >> 7 ) * 283 } } d [ a ] = d [ a - b ] ^ c } for ( b = 0 ; a ; b ++ , a -- ) { c = d [ b & 3 ? a : a - 4 ] ; e [ b ] = a <= 4 || b < 4 ? c : g [ 0 ] [ f [ c >>> 24 ] ] ^ g [ 1 ] [ f [ c >> 16 & 255 ] ] ^ g [ 2 ] [ f [ c >> 8 & 255 ] ] ^
g [ 3 ] [ f [ c & 255 ] ] } } ;
sjcl . cipher . aes . prototype = { encrypt : function ( a ) { return this . H ( a , 0 ) } , decrypt : function ( a ) { return this . H ( a , 1 ) } , h : [ [ [ ] , [ ] , [ ] , [ ] , [ ] ] , [ [ ] , [ ] , [ ] , [ ] , [ ] ] ] , w : function ( ) { var a = this . h [ 0 ] , b = this . h [ 1 ] , c = a [ 4 ] , d = b [ 4 ] , e , f , g , h = [ ] , i = [ ] , k , j , l , m ; for ( e = 0 ; e < 0x100 ; e ++ ) i [ ( h [ e ] = e << 1 ^ ( e >> 7 ) * 283 ) ^ e ] = e ; for ( f = g = 0 ; ! c [ f ] ; f ^= k || 1 , g = i [ g ] || 1 ) { l = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4 ; l = l >> 8 ^ l & 255 ^ 99 ; c [ f ] = l ; d [ l ] = f ; j = h [ e = h [ k = h [ f ] ] ] ; m = j * 0x1010101 ^ e * 0x10001 ^ k * 0x101 ^ f * 0x1010100 ; j = h [ l ] * 0x101 ^ l * 0x1010100 ; for ( e = 0 ; e < 4 ; e ++ ) { a [ e ] [ f ] = j = j << 24 ^ j >>> 8 ; b [ e ] [ l ] = m = m << 24 ^ m >>> 8 } } for ( e =
@ -28,7 +28,7 @@ sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0
( this . q [ c ] + 1 ) % this . b . 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 . b [ g ] . update ( [ d , this . J ++ , 2 , b , f , a . length ] . concat ( a ) ) ; break ; case "string" : if ( b === undefined ) b = a . length ; this . b [ g ] . update ( [ d , this . J ++ , 3 , b , f , a . length ] ) ; this . b [ g ] . update ( a ) ; break ; default : throw new sjcl . exception . bug ( "random: addEntropy only supports number, array or string" ) ; } this . j [ g ] += b ; this . f += b ; if ( h === 0 ) { this . isReady ( ) !== 0 && this . K ( "seeded" , Math . max ( this . g ,
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 =
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 ( ) * 0x100000000 | 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 >