Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.crypto.MD5"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.crypto.MD5"] = true;
dojo.provide("dojox.crypto.MD5");

dojo.require("dojox.crypto._base");

/*      Return to a port of Paul Johnstone's MD5 implementation
 *      http://pajhome.org.uk/crypt/md5/index.html
 *
 *      Copyright (C) Paul Johnston 1999 - 2002.
 *      Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 *      Distributed under the BSD License
 *
 *      Dojo port by Tom Trenka
 *
 *      2005-12-7
 *      All conversions are internalized (no dependencies)
 *      implemented getHMAC for message digest auth.
 */
dojox.crypto.MD5 = new function(){
        //      summary
        //      object for creating digests using the MD5 algorithm
        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("");
        }
        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(n,c){ return (n<<c)|(n>>>(32-c)); }
        function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); }
        function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); }
        function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); }
        function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); }
        function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); }
        function core(x,len){
                x[len>>5]|=0x80<<((len)%32);
                x[(((len+64)>>>9)<<4)+14]=len;
                var a= 1732584193;
                var b=-271733879;
                var c=-1732584194;
                var d= 271733878;
                for(var i=0; i<x.length; i+=16){
                        var olda=a;
                        var oldb=b;
                        var oldc=c;
                        var oldd=d;

                        a=FF(a,b,c,d,x[i+ 0],7 ,-680876936);
                        d=FF(d,a,b,c,x[i+ 1],12,-389564586);
                        c=FF(c,d,a,b,x[i+ 2],17, 606105819);
                        b=FF(b,c,d,a,x[i+ 3],22,-1044525330);
                        a=FF(a,b,c,d,x[i+ 4],7 ,-176418897);
                        d=FF(d,a,b,c,x[i+ 5],12, 1200080426);
                        c=FF(c,d,a,b,x[i+ 6],17,-1473231341);
                        b=FF(b,c,d,a,x[i+ 7],22,-45705983);
                        a=FF(a,b,c,d,x[i+ 8],7 , 1770035416);
                        d=FF(d,a,b,c,x[i+ 9],12,-1958414417);
                        c=FF(c,d,a,b,x[i+10],17,-42063);
                        b=FF(b,c,d,a,x[i+11],22,-1990404162);
                        a=FF(a,b,c,d,x[i+12],7 , 1804603682);
                        d=FF(d,a,b,c,x[i+13],12,-40341101);
                        c=FF(c,d,a,b,x[i+14],17,-1502002290);
                        b=FF(b,c,d,a,x[i+15],22, 1236535329);

                        a=GG(a,b,c,d,x[i+ 1],5 ,-165796510);
                        d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632);
                        c=GG(c,d,a,b,x[i+11],14, 643717713);
                        b=GG(b,c,d,a,x[i+ 0],20,-373897302);
                        a=GG(a,b,c,d,x[i+ 5],5 ,-701558691);
                        d=GG(d,a,b,c,x[i+10],9 , 38016083);
                        c=GG(c,d,a,b,x[i+15],14,-660478335);
                        b=GG(b,c,d,a,x[i+ 4],20,-405537848);
                        a=GG(a,b,c,d,x[i+ 9],5 , 568446438);
                        d=GG(d,a,b,c,x[i+14],9 ,-1019803690);
                        c=GG(c,d,a,b,x[i+ 3],14,-187363961);
                        b=GG(b,c,d,a,x[i+ 8],20, 1163531501);
                        a=GG(a,b,c,d,x[i+13],5 ,-1444681467);
                        d=GG(d,a,b,c,x[i+ 2],9 ,-51403784);
                        c=GG(c,d,a,b,x[i+ 7],14, 1735328473);
                        b=GG(b,c,d,a,x[i+12],20,-1926607734);

                        a=HH(a,b,c,d,x[i+ 5],4 ,-378558);
                        d=HH(d,a,b,c,x[i+ 8],11,-2022574463);
                        c=HH(c,d,a,b,x[i+11],16, 1839030562);
                        b=HH(b,c,d,a,x[i+14],23,-35309556);
                        a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060);
                        d=HH(d,a,b,c,x[i+ 4],11, 1272893353);
                        c=HH(c,d,a,b,x[i+ 7],16,-155497632);
                        b=HH(b,c,d,a,x[i+10],23,-1094730640);
                        a=HH(a,b,c,d,x[i+13],4 , 681279174);
                        d=HH(d,a,b,c,x[i+ 0],11,-358537222);
                        c=HH(c,d,a,b,x[i+ 3],16,-722521979);
                        b=HH(b,c,d,a,x[i+ 6],23, 76029189);
                        a=HH(a,b,c,d,x[i+ 9],4 ,-640364487);
                        d=HH(d,a,b,c,x[i+12],11,-421815835);
                        c=HH(c,d,a,b,x[i+15],16, 530742520);
                        b=HH(b,c,d,a,x[i+ 2],23,-995338651);

                        a=II(a,b,c,d,x[i+ 0],6 ,-198630844);
                        d=II(d,a,b,c,x[i+ 7],10, 1126891415);
                        c=II(c,d,a,b,x[i+14],15,-1416354905);
                        b=II(b,c,d,a,x[i+ 5],21,-57434055);
                        a=II(a,b,c,d,x[i+12],6 , 1700485571);
                        d=II(d,a,b,c,x[i+ 3],10,-1894986606);
                        c=II(c,d,a,b,x[i+10],15,-1051523);
                        b=II(b,c,d,a,x[i+ 1],21,-2054922799);
                        a=II(a,b,c,d,x[i+ 8],6 , 1873313359);
                        d=II(d,a,b,c,x[i+15],10,-30611744);
                        c=II(c,d,a,b,x[i+ 6],15,-1560198380);
                        b=II(b,c,d,a,x[i+13],21, 1309151649);
                        a=II(a,b,c,d,x[i+ 4],6 ,-145523070);
                        d=II(d,a,b,c,x[i+11],10,-1120210379);
                        c=II(c,d,a,b,x[i+ 2],15, 718787259);
                        b=II(b,c,d,a,x[i+ 9],21,-343485551);

                        a = add(a,olda);
                        b = add(b,oldb);
                        c = add(c,oldc);
                        d = add(d,oldd);
                }
                return [a,b,c,d];
        }
        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);
        }

        //      Public functions
        this.compute=function(/* string */data, /* dojox.crypto.outputTypes */outputType){
                //      summary
                //      computes the digest of data, and returns the result as a string of type outputType
                var out=outputType||dojox.crypto.outputTypes.Base64;
                switch(out){
                        case dojox.crypto.outputTypes.Hex:{
                                return toHex(core(toWord(data),data.length*chrsz));     //      string
                        }
                        case dojox.crypto.outputTypes.String:{
                                return toString(core(toWord(data),data.length*chrsz));  //      string
                        }
                        default:{
                                return toBase64(core(toWord(data),data.length*chrsz));  //      string
                        }
                }
        };
        this.getHMAC=function(/* string */data, /* string */key, /* dojox.crypto.outputTypes */outputType){
                //      summary
                //      computes a digest of data using key, and returns the result as a string of outputType
                var out=outputType||dojox.crypto.outputTypes.Base64;
                switch(out){
                        case dojox.crypto.outputTypes.Hex:{
                                return toHex(hmac(data,key));   //      string
                        }
                        case dojox.crypto.outputTypes.String:{
                                return toString(hmac(data,key));        //      string
                        }
                        default:{
                                return toBase64(hmac(data,key));        //      string
                        }
                }
        };
}();

}