Develop and Download Open Source Software

Browse Subversion Repository

Contents of /js/sha256.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show 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 /**
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