@ -32,9 +32,9 @@ a=this.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&a[c]===b&&d.push(c);for(b=0
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 >
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 . t ag ) ; 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 =
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 . t s ) ; 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 =
sjcl . codec . base64 . toBits ( b . salt ) ; if ( typeof b . iv === "string" ) b . iv = sjcl . codec . base64 . toBits ( b . iv ) ; if ( ! sjcl . mode [ b . mode ] || ! sjcl . cipher [ b . cipher ] || typeof a === "string" && b . iter <= 100 || b . ts !== 64 && b . ts !== 96 && b . ts !== 128 || b . ks !== 128 && b . ks !== 192 && b . ks !== 0x100 || ! b . iv || b . iv . length < 2 || b . iv . length > 4 ) throw new sjcl . exception . invalid ( "json decrypt: invalid parameters" ) ; if ( typeof a === "string" ) { c = sjcl . misc . cachedPbkdf2 ( a , b ) ; a = c . key . slice ( 0 , b . ks / 32 ) ; b . salt = c . salt } c = new sjcl . cipher [ b . cipher ] ( a ) ; c = sjcl . mode [ b . mode ] . decrypt ( c ,
b . ct , b . iv , b . adata , b . t ag ) ; e . c ( d , b ) ; d . key = a ; return sjcl . codec . utf8String . fromBits ( c ) } , encode : function ( a ) { var b , c = "{" , d = "" ; for ( b in a ) if ( a . hasOwnProperty ( b ) ) { if ( ! b . match ( /^[a-z0-9]+$/i ) ) throw new sjcl . exception . invalid ( "json encode: invalid property name" ) ; c += d + b + ":" ; d = "," ; switch ( typeof a [ b ] ) { case "number" : case "boolean" : c += a [ b ] ; break ; case "string" : c += '"' + escape ( a [ b ] ) + '"' ; break ; case "object" : c += '"' + sjcl . codec . base64 . fromBits ( a [ b ] , 1 ) + '"' ; break ; default : throw new sjcl . exception . bug ( "json encode: unsupported type" ) ;
b . ct , b . iv , b . adata , b . t s ) ; e . c ( d , b ) ; d . key = a ; return sjcl . codec . utf8String . fromBits ( c ) } , encode : function ( a ) { var b , c = "{" , d = "" ; for ( b in a ) if ( a . hasOwnProperty ( b ) ) { if ( ! b . match ( /^[a-z0-9]+$/i ) ) throw new sjcl . exception . invalid ( "json encode: invalid property name" ) ; c += d + b + ":" ; d = "," ; switch ( typeof a [ b ] ) { case "number" : case "boolean" : c += a [ b ] ; break ; case "string" : c += '"' + escape ( a [ b ] ) + '"' ; break ; case "object" : c += '"' + sjcl . codec . base64 . fromBits ( a [ b ] , 1 ) + '"' ; break ; default : throw new sjcl . exception . bug ( "json encode: unsupported type" ) ;
} } return c + "}" } , decode : function ( a ) { a = a . replace ( /\s/g , "" ) ; if ( ! a . match ( /^\{.*\}$/ ) ) throw new sjcl . exception . invalid ( "json decode: this isn't json!" ) ; a = a . replace ( /^\{|\}$/g , "" ) . split ( /,/ ) ; var b = { } , c , d ; for ( c = 0 ; c < a . length ; c ++ ) { if ( ! ( d = a [ c ] . match ( /^([a-z][a-z0-9]*):(?:(\d+)|"([a-z0-9+\/%*_.@=\-]*)")$/i ) ) ) throw new sjcl . exception . invalid ( "json decode: this isn't json!" ) ; b [ d [ 1 ] ] = d [ 2 ] ? parseInt ( d [ 2 ] , 10 ) : d [ 1 ] . match ( /^(ct|salt|iv)$/ ) ? sjcl . codec . base64 . toBits ( d [ 3 ] ) : unescape ( d [ 3 ] ) } return b } , c : function ( a , b , c ) { if ( a ===
undefined ) a = { } ; if ( b === undefined ) return a ; var d ; for ( d in b ) if ( b . hasOwnProperty ( d ) ) { if ( c && a [ d ] !== undefined && a [ d ] !== b [ d ] ) throw new sjcl . exception . invalid ( "required parameter overridden" ) ; a [ d ] = b [ d ] } return a } , V : function ( a , b ) { var c = { } , d ; for ( d in a ) if ( a . hasOwnProperty ( d ) && a [ d ] !== b [ d ] ) c [ d ] = a [ d ] ; return c } , W : function ( a , b ) { var c = { } , d ; for ( d = 0 ; d < b . length ; d ++ ) if ( a [ b [ d ] ] !== undefined ) c [ b [ d ] ] = a [ b [ d ] ] ; return c } } ; sjcl . encrypt = sjcl . json . encrypt ; sjcl . decrypt = sjcl . json . decrypt ; sjcl . misc . S = { } ;
sjcl . misc . cachedPbkdf2 = function ( a , b ) { var c = sjcl . misc . S , d ; b = b || { } ; d = b . iter || 1E3 ; c = c [ a ] = c [ a ] || { } ; d = c [ d ] = c [ d ] || { firstSalt : b . salt && b . salt . length ? b . salt . slice ( 0 ) : sjcl . random . randomWords ( 2 , 0 ) } ; c = b . salt === undefined ? d . firstSalt : b . salt ; d [ c ] = d [ c ] || sjcl . misc . pbkdf2 ( a , c , b . iter ) ; return { key : d [ c ] . slice ( 0 ) , salt : c . slice ( 0 ) } } ;