Improve output: distinguish between failed assertions (failures) and unexpected exceptions (errors), and print a filtered stack trace for any exception.
This commit is contained in:
commit
4f2e303079
1839 changed files with 235630 additions and 0 deletions
154
webapp/web/src/crypto/SHA1.js
Normal file
154
webapp/web/src/crypto/SHA1.js
Normal file
|
@ -0,0 +1,154 @@
|
|||
dojo.require("dojo.crypto");
|
||||
dojo.provide("dojo.crypto.SHA1");
|
||||
dojo.require("dojo.experimental");
|
||||
|
||||
/*
|
||||
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
|
||||
* in FIPS PUB 180-1
|
||||
*
|
||||
* Version 2.1a Copyright Paul Johnston 2000 - 2002.
|
||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||
* Distributed under the BSD License
|
||||
* See http://pajhome.org.uk/crypt/md5 for details.
|
||||
*
|
||||
* Dojo port by Tom Trenka
|
||||
*/
|
||||
dojo.experimental("dojo.crypto.SHA1");
|
||||
|
||||
dojo.crypto.SHA1 = new function(){
|
||||
var chrsz=8;
|
||||
var mask=(1<<chrsz)-1;
|
||||
function toWord(s) {
|
||||
var wa=[];
|
||||
for(var i=0; i<s.length*chrsz; i+=chrsz)
|
||||
wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
|
||||
return wa;
|
||||
}
|
||||
function toString(wa){
|
||||
var s=[];
|
||||
for(var i=0; i<wa.length*32; i+=chrsz)
|
||||
s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
|
||||
return s.join("");
|
||||
}
|
||||
function toHex(wa) {
|
||||
var h="0123456789abcdef";
|
||||
var s=[];
|
||||
for(var i=0; i<wa.length*4; i++){
|
||||
s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
|
||||
}
|
||||
return s.join("");
|
||||
}
|
||||
function toBase64(wa){
|
||||
var p="=";
|
||||
var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
var s=[];
|
||||
for(var i=0; i<wa.length*4; i+=3){
|
||||
var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
|
||||
for(var j=0; j<4; j++){
|
||||
if(i*8+j*6>wa.length*32) s.push(p);
|
||||
else s.push(tab.charAt((t>>6*(3-j))&0x3F));
|
||||
}
|
||||
}
|
||||
return s.join("");
|
||||
}
|
||||
|
||||
// math
|
||||
function add(x,y){
|
||||
var l=(x&0xffff)+(y&0xffff);
|
||||
var m=(x>>16)+(y>>16)+(l>>16);
|
||||
return (m<<16)|(l&0xffff);
|
||||
}
|
||||
function r(x,n){ return (x<<n)|(x>>>(32-n)); }
|
||||
|
||||
// SHA rounds
|
||||
function f(u,v,w){ return ((u&v)|(~u&w)); }
|
||||
function g(u,v,w){ return ((u&v)|(u&w)|(v&w)); }
|
||||
function h(u,v,w){ return (u^v^w); }
|
||||
|
||||
function fn(i,u,v,w){
|
||||
if(i<20) return f(u,v,w);
|
||||
if(i<40) return h(u,v,w);
|
||||
if(i<60) return g(u,v,w);
|
||||
return h(u,v,w);
|
||||
}
|
||||
function cnst(i){
|
||||
if(i<20) return 1518500249;
|
||||
if(i<40) return 1859775393;
|
||||
if(i<60) return -1894007588;
|
||||
return -899497514;
|
||||
}
|
||||
|
||||
function core(x,len){
|
||||
x[len>>5]|=0x80<<(24-len%32);
|
||||
x[((len+64>>9)<<4)+15]=len;
|
||||
|
||||
var w=[];
|
||||
var a= 1732584193; // 0x67452301
|
||||
var b=-271733879; // 0xefcdab89
|
||||
var c=-1732584194; // 0x98badcfe
|
||||
var d= 271733878; // 0x10325476
|
||||
var e=-1009589776; // 0xc3d2e1f0
|
||||
|
||||
for(var i=0; i<x.length; i+=16){
|
||||
var olda=a;
|
||||
var oldb=b;
|
||||
var oldc=c;
|
||||
var oldd=d;
|
||||
var olde=e;
|
||||
|
||||
for(var j=0; j<80; j++){
|
||||
if(j<16) w[j]=x[i+j];
|
||||
else w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
|
||||
var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
|
||||
e=d; d=c; c=r(b,30); b=a; a=t;
|
||||
}
|
||||
|
||||
a=add(a,olda);
|
||||
b=add(b,oldb);
|
||||
c=add(c,oldc);
|
||||
d=add(d,oldd);
|
||||
e=add(e,olde);
|
||||
}
|
||||
return [a,b,c,d,e];
|
||||
}
|
||||
function hmac(data,key){
|
||||
var wa=toWord(key);
|
||||
if(wa.length>16) wa=core(wa,key.length*chrsz);
|
||||
var l=[], r=[];
|
||||
for(var i=0; i<16; i++){
|
||||
l[i]=wa[i]^0x36363636;
|
||||
r[i]=wa[i]^0x5c5c5c5c;
|
||||
}
|
||||
var h=core(l.concat(toWord(data)),512+data.length*chrsz);
|
||||
return core(r.concat(h),640);
|
||||
}
|
||||
|
||||
this.compute=function(data,outputType){
|
||||
var out=outputType||dojo.crypto.outputTypes.Base64;
|
||||
switch(out){
|
||||
case dojo.crypto.outputTypes.Hex:{
|
||||
return toHex(core(toWord(data),data.length*chrsz));
|
||||
}
|
||||
case dojo.crypto.outputTypes.String:{
|
||||
return toString(core(toWord(data),data.length*chrsz));
|
||||
}
|
||||
default:{
|
||||
return toBase64(core(toWord(data),data.length*chrsz));
|
||||
}
|
||||
}
|
||||
};
|
||||
this.getHMAC=function(data,key,outputType){
|
||||
var out=outputType||dojo.crypto.outputTypes.Base64;
|
||||
switch(out){
|
||||
case dojo.crypto.outputTypes.Hex:{
|
||||
return toHex(hmac(data,key));
|
||||
}
|
||||
case dojo.crypto.outputTypes.String:{
|
||||
return toString(hmac(data,key));
|
||||
}
|
||||
default:{
|
||||
return toBase64(hmac(data,key));
|
||||
}
|
||||
}
|
||||
};
|
||||
}();
|
Loading…
Add table
Add a link
Reference in a new issue