Develop and Download Open Source Software

Browse Subversion Repository

Contents of /js/hashing.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Sun Aug 9 04:27:21 2020 UTC (3 years, 9 months ago) by achmadkoko
File MIME type: application/x-javascript
File size: 3073 byte(s)
version  1.0
1 var Sha1 = {};
2
3 Sha1.hash = function(msg, utf8encode) {
4 utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode;
5
6 if (utf8encode) msg = Utf8.encode(msg);
7
8 var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
9
10 msg += String.fromCharCode(0x80);
11
12 var l = msg.length/4 + 2;
13 var N = Math.ceil(l/16);
14 var M = new Array(N);
15
16 for (var i=0; i<N; i++) {
17 M[i] = new Array(16);
18 for (var j=0; j<16; j++) {
19 M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) |
20 (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
21 }
22 }
23
24 M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14])
25 M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;
26
27 var H0 = 0x67452301;
28 var H1 = 0xefcdab89;
29 var H2 = 0x98badcfe;
30 var H3 = 0x10325476;
31 var H4 = 0xc3d2e1f0;
32
33 var W = new Array(80); var a, b, c, d, e;
34 for (var i=0; i<N; i++) {
35
36 for (var t=0; t<16; t++) W[t] = M[i][t];
37 for (var t=16; t<80; t++) W[t] = Sha1.ROTL(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
38
39 a = H0; b = H1; c = H2; d = H3; e = H4;
40
41 for (var t=0; t<80; t++) {
42 var s = Math.floor(t/20);
43 var T = (Sha1.ROTL(a,5) + Sha1.f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
44 e = d;
45 d = c;
46 c = Sha1.ROTL(b, 30);
47 b = a;
48 a = T;
49 }
50
51 H0 = (H0+a) & 0xffffffff;
52 H1 = (H1+b) & 0xffffffff;
53 H2 = (H2+c) & 0xffffffff;
54 H3 = (H3+d) & 0xffffffff;
55 H4 = (H4+e) & 0xffffffff;
56 }
57
58 return Sha1.toHexStr(H0) + Sha1.toHexStr(H1) +
59 Sha1.toHexStr(H2) + Sha1.toHexStr(H3) + Sha1.toHexStr(H4);
60 }
61
62 Sha1.f = function(s, x, y, z) {
63 switch (s) {
64 case 0: return (x & y) ^ (~x & z); // Ch()
65 case 1: return x ^ y ^ z; // Parity()
66 case 2: return (x & y) ^ (x & z) ^ (y & z); // Maj()
67 case 3: return x ^ y ^ z; // Parity()
68 }
69 }
70
71 Sha1.ROTL = function(x, n) {
72 return (x<<n) | (x>>>(32-n));
73 }
74
75 Sha1.toHexStr = function(n) {
76 var s="", v;
77 for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); }
78 return s;
79 }
80
81
82 var Utf8 = {};
83
84 Utf8.encode = function(strUni) {
85
86 var strUtf = strUni.replace(
87 /[\u0080-\u07ff]/g,
88 function(c) {
89 var cc = c.charCodeAt(0);
90 return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
91 );
92 strUtf = strUtf.replace(
93 /[\u0800-\uffff]/g,
94 function(c) {
95 var cc = c.charCodeAt(0);
96 return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
97 );
98 return strUtf;
99 }
100
101 Utf8.decode = function(strUtf) {
102
103 var strUni = strUtf.replace(
104 /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,
105 function(c) {
106 var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f);
107 return String.fromCharCode(cc); }
108 );
109 strUni = strUni.replace(
110 /[\u00c0-\u00df][\u0080-\u00bf]/g,
111 function(c) {
112 var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
113 return String.fromCharCode(cc); }
114 );
115 return strUni;
116 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26