2 * Fichiers sha256.js et login.js concaténés et minifiés
5 function safe_add(x
,y
){
6 var lsw
=(x
&0xFFFF)+(y
&0xFFFF);
7 var msw
=(x
>>16)+(y
>>16)+(lsw
>>16);
8 return(msw
<<16)|(lsw
&0xFFFF);
10 function S(X
,n
){return(X
>>>n
)|(X
<<(32-n
));}
11 function R(X
,n
){return(X
>>>n
);}
12 function Ch(x
,y
,z
){return((x
&y
)^((~x
)&z
));}
13 function Maj(x
,y
,z
){return((x
&y
)^(x
&z
)^(y
&z
));}
14 function Sigma0256(x
){return(S(x
,2)^S(x
,13)^S(x
,22));}
15 function Sigma1256(x
){return(S(x
,6)^S(x
,11)^S(x
,25));}
16 function Gamma0256(x
){return(S(x
,7)^S(x
,18)^R(x
,3));}
17 function Gamma1256(x
){return(S(x
,17)^S(x
,19)^R(x
,10));}
18 function core_sha256(m
,l
){
19 var K
=new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2);
20 var HASH
=new Array(0x6A09E667,0xBB67AE85,0x3C6EF372,0xA54FF53A,0x510E527F,0x9B05688C,0x1F83D9AB,0x5BE0CD19);
22 var a
,b
,c
,d
,e
,f
,g
,h
,i
,j
;
24 m
[l
>>5]|=0x80<<(24-l
%32);
25 m
[((l
+32>>9)<<4)+15]=l
;
26 for(var i
=0;i
<m
.length
;i
+=16){
27 a
=HASH
[0];b
=HASH
[1];c
=HASH
[2];d
=HASH
[3];e
=HASH
[4];f
=HASH
[5];g
=HASH
[6];h
=HASH
[7];
28 for(var j
=0;j
<64;j
++){
30 else W
[j
]=safe_add(safe_add(safe_add(Gamma1256(W
[j
-2]),W
[j
-7]),Gamma0256(W
[j
-15])),W
[j
-16]);
31 T1
=safe_add(safe_add(safe_add(safe_add(h
,Sigma1256(e
)),Ch(e
,f
,g
)),K
[j
]),W
[j
]);
32 T2
=safe_add(Sigma0256(a
),Maj(a
,b
,c
));
33 h
=g
;g
=f
;f
=e
;e
=safe_add(d
,T1
);d
=c
;c
=b
;b
=a
;a
=safe_add(T1
,T2
);
35 HASH
[0]=safe_add(a
,HASH
[0]);HASH
[1]=safe_add(b
,HASH
[1]);HASH
[2]=safe_add(c
,HASH
[2]);HASH
[3]=safe_add(d
,HASH
[3]);HASH
[4]=safe_add(e
,HASH
[4]);HASH
[5]=safe_add(f
,HASH
[5]);HASH
[6]=safe_add(g
,HASH
[6]);HASH
[7]=safe_add(h
,HASH
[7]);
39 function str2binb(str
){
43 for(i
=0;i
<str
.length
;i
++)
44 if(str
.charCodeAt(i
)>0x7F)
46 var mask
=(1<<chrsz
)-1;
47 for(i
=0;i
<str
.length
*chrsz
;i
+=chrsz
)
48 bin
[i
>>5]|=(str
.charCodeAt(i
/chrsz
)&mask
)<<(24-i
%32);
51 function binb2hex(binarray
){
53 var hex_tab
=hexcase
?"0123456789ABCDEF":"0123456789abcdef";
55 for(var i
=0;i
<binarray
.length
*4;i
++){
56 str
+=hex_tab
.charAt((binarray
[i
>>2]>>((3-i
%4)*8+4))&0xF)+hex_tab
.charAt((binarray
[i
>>2]>>((3-i
%4)*8))&0xF);
60 function hex_sha256(s
){return binb2hex(core_sha256(str2binb(s
),s
.length
*chrsz
));}
61 function sha256_self_test(){
62 return hex_sha256("message digest")=="f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650";
64 function affiche_login_secure(){
66 jQuery('#pass_securise').show();
68 jQuery('#pass_securise').hide();
70 function informe_auteur(c
){
71 informe_auteur_en_cours
=false;
74 alea_actuel
=c
.alea_actuel
;
75 alea_futur
=c
.alea_futur
;
76 jQuery('input#session_remember:not(.modifie)')
77 .attr('checked',(c
.cnx
=='1')?'checked':'');
82 jQuery('#spip_logo_auteur').html(c
.logo
);
84 jQuery('#spip_logo_auteur').html('');
85 affiche_login_secure();
87 function calcule_hash_pass(pass
){
88 if((alea_actuel
||alea_futur
)
89 &&!pass
.match(/^\{([0-9a-f]{32});([0-9a-f]{32})\}$/i)
90 &&!pass
.match(/^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$/i)
94 hash
=hex_sha256(alea_actuel
+pass
);
95 hash
=hash
+';'+hex_sha256(alea_futur
+pass
);
97 hash
=hash
+';'+calcMD5(alea_actuel
+pass
);
98 hash
=hash
+';'+calcMD5(alea_futur
+pass
);
100 jQuery('input[name=password]').attr('value','{'+hash
+'}');
103 function actualise_auteur(){
104 if(login
!=jQuery('#var_login').attr('value')){
105 informe_auteur_en_cours
=true;
106 login
=jQuery('#var_login').attr('value');
107 var currentTime
=new Date();
108 jQuery
.get(page_auteur
,{var_login
:login
,var_compteur
:currentTime
.getTime()},informe_auteur
);
111 function login_submit(){
113 var inputpass
=jQuery('input[name=password]');
114 pass
=inputpass
.attr('value');
116 if(informe_auteur_en_cours
&&(attente_informe
<5)){
118 jQuery('form#formulaire_login').animeajax().find('p.boutons input').before('.');
119 setTimeout(function(){
120 jQuery('form#formulaire_login').submit();
124 if(alea_actuel
||alea_futur
){
125 inputpass
.after('<input name="password" type="hidden" value="" />').attr('value',pass
);
126 inputpass
.attr('name','nothing').attr('value','');
127 calcule_hash_pass(pass
);
129 else if(informe_auteur_en_cours
)
130 jQuery('input[name=password]').attr('value','');