Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /js/sha256.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (hide annotations) (download) (as text)
Fri Dec 4 12:17:36 2009 UTC (14 years, 5 months ago) by berupon
File MIME type: application/x-javascript
File size: 4207 byte(s)
まだ完成していないけど途中経過の記録というか…backupとしてcommit
1 berupon 4 /**
2     *
3     * Secure Hash Algorithm (SHA256)
4     * http://www.webtoolkit.info/
5     *
6     * Original code by Angel Marin, Paul Johnston.
7     *
8     **/
9    
10     function SHA256(s)
11     {
12    
13     var chrsz = 8;
14     var hexcase = 0;
15    
16     function safe_add (x, y) {
17     var lsw = (x & 0xFFFF) + (y & 0xFFFF);
18     var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
19     return (msw << 16) | (lsw & 0xFFFF);
20     }
21    
22     function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
23     function R (X, n) { return ( X >>> n ); }
24     function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }
25     function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }
26     function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }
27     function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }
28     function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }
29     function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }
30    
31     function core_sha256 (m, l) {
32     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);
33     var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
34     var W = new Array(64);
35     var a, b, c, d, e, f, g, h, i, j;
36     var T1, T2;
37    
38     m[l >> 5] |= 0x80 << (24 - l % 32);
39     m[((l + 64 >> 9) << 4) + 15] = l;
40    
41     for ( var i = 0; i<m.length; i+=16 ) {
42     a = HASH[0];
43     b = HASH[1];
44     c = HASH[2];
45     d = HASH[3];
46     e = HASH[4];
47     f = HASH[5];
48     g = HASH[6];
49     h = HASH[7];
50    
51     for ( var j = 0; j<64; j++) {
52     if (j < 16) W[j] = m[j + i];
53     else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);
54    
55     T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
56     T2 = safe_add(Sigma0256(a), Maj(a, b, c));
57    
58     h = g;
59     g = f;
60     f = e;
61     e = safe_add(d, T1);
62     d = c;
63     c = b;
64     b = a;
65     a = safe_add(T1, T2);
66     }
67    
68     HASH[0] = safe_add(a, HASH[0]);
69     HASH[1] = safe_add(b, HASH[1]);
70     HASH[2] = safe_add(c, HASH[2]);
71     HASH[3] = safe_add(d, HASH[3]);
72     HASH[4] = safe_add(e, HASH[4]);
73     HASH[5] = safe_add(f, HASH[5]);
74     HASH[6] = safe_add(g, HASH[6]);
75     HASH[7] = safe_add(h, HASH[7]);
76     }
77     return HASH;
78     }
79    
80     function str2binb (str) {
81     var bin = Array();
82     var mask = (1 << chrsz) - 1;
83     for(var i = 0; i < str.length * chrsz; i += chrsz) {
84     bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
85     }
86     return bin;
87     }
88    
89     function Utf8Encode(string) {
90     string = string.replace(/\r\n/g,"\n");
91     var utftext = "";
92    
93     for (var n = 0; n < string.length; n++) {
94    
95     var c = string.charCodeAt(n);
96    
97     if (c < 128) {
98     utftext += String.fromCharCode(c);
99     }
100     else if((c > 127) && (c < 2048)) {
101     utftext += String.fromCharCode((c >> 6) | 192);
102     utftext += String.fromCharCode((c & 63) | 128);
103     }
104     else {
105     utftext += String.fromCharCode((c >> 12) | 224);
106     utftext += String.fromCharCode(((c >> 6) & 63) | 128);
107     utftext += String.fromCharCode((c & 63) | 128);
108     }
109    
110     }
111    
112     return utftext;
113     }
114    
115     function binb2hex (binarray) {
116     var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
117     var str = "";
118     for(var i = 0; i < binarray.length * 4; i++) {
119     str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
120     hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
121     }
122     return str;
123     }
124    
125     s = Utf8Encode(s);
126     return binb2hex(core_sha256(str2binb(s), s.length * chrsz));
127    
128     }

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