PageSourceSearch

https://megagriculture.gov.in/SECURE/js/Sha256.js

js megagriculture.gov.in collected 2026-10-02 20:35:24 UTC 8,475 bytes, 176 lines download raw bytes

1/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
2/*  SHA-256 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk    */
3/*   - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html                             */
4/*         http://csrc.nist.gov/groups/ST/toolkit/examples.html                                   */
5/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
6
7var Sha256 = {};  // Sha256 namespace
8
9/**
10* Generates SHA-256 hash of string
11*
12* @param {String} msg                String to be hashed
13* @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash
14* @returns {String}                  Hash of msg as hex character string
15*/
16Sha256.hash = function(msg, utf8encode) {
17    utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode;
18
19    // convert string to UTF-8, as SHA only deals with byte-streams
20    if (utf8encode) msg = Utf8.encode(msg);
21
22    // constants [§4.2.2]
23    var K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
24             0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
25             0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
26             0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
27             0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
28             0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
29             0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
30             0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
31    // initial hash value [§5.3.1]
32    var H = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
33
34    // PREPROCESSING 
35
36    msg += String.fromCharCode(0x80);  // add trailing '1' bit (+ 0's padding) to string [§5.1.1]
37
38    // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]
39    var l = msg.length / 4 + 2;  // length (in 32-bit integers) of msg + ‘1’ + appended length
40    var N = Math.ceil(l / 16);   // number of 16-integer-blocks required to hold 'l' ints
41    var M = new Array(N);
42
43    for (var i = 0; i < N; i++) {
44        M[i] = new Array(16);
45        for (var j = 0; j < 16; j++) {  // encode 4 chars per integer, big-endian encoding
46            M[i][j] = (msg.charCodeAt(i * 64 + j * 4) << 24) | (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |
47                      (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) | (msg.charCodeAt(i * 64 + j * 4 + 3));
48        } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0
49    }
50    // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]
51    // note: most significant word would be (len-1)*8 >>> 32, but since JS converts
52    // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators
53    M[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32); M[N - 1][14] = Math.floor(M[N - 1][14])
54    M[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff;
55
56
57    // HASH COMPUTATION [§6.1.2]
58
59    var W = new Array(64); var a, b, c, d, e, f, g, h;
60    for (var i = 0; i < N; i++) {
61
62        // 1 - prepare message schedule 'W'
63        for (var t = 0; t < 16; t++) W[t] = M[i][t];
64        for (var t = 16; t < 64; t++) W[t] = (Sha256.sigma1(W[t - 2]) + W[t - 7] + Sha256.sigma0(W[t - 15]) + W[t - 16]) & 0xffffffff;
65
66        // 2 - initialise working variables a, b, c, d, e, f, g, h with previous hash value
67        a = H[0]; b = H[1]; c = H[2]; d = H[3]; e = H[4]; f = H[5]; g = H[6]; h = H[7];
68
69        // 3 - main loop (note 'addition modulo 2^32')
70        for (var t = 0; t < 64; t++) {
71            var T1 = h + Sha256.Sigma1(e) + Sha256.Ch(e, f, g) + K[t] + W[t];
72            var T2 = Sha256.Sigma0(a) + Sha256.Maj(a, b, c);
73            h = g;
74            g = f;
75            f = e;
76            e = (d + T1) & 0xffffffff;
77            d = c;
78            c = b;
79            b = a;
80            a = (T1 + T2) & 0xffffffff;
81        }
82        // 4 - compute the new intermediate hash value (note 'addition modulo 2^32')
83        H[0] = (H[0] + a) & 0xffffffff;
84        H[1] = (H[1] + b) & 0xffffffff;
85        H[2] = (H[2] + c) & 0xffffffff;
86        H[3] = (H[3] + d) & 0xffffffff;
87        H[4] = (H[4] + e) & 0xffffffff;
88        H[5] = (H[5] + f) & 0xffffffff;
89        H[6] = (H[6] + g) & 0xffffffff;
90        H[7] = (H[7] + h) & 0xffffffff;
91    }
92
93    return Sha256.toHexStr(H[0]) + Sha256.toHexStr(H[1]) + Sha256.toHexStr(H[2]) + Sha256.toHexStr(H[3]) +
94           Sha256.toHexStr(H[4]) + Sha256.toHexStr(H[5]) + Sha256.toHexStr(H[6]) + Sha256.toHexStr(H[7]);
95}
96
97Sha256.ROTR = function(n, x) { return (x >>> n) | (x << (32 - n)); }
98Sha256.Sigma0 = function(x) { return Sha256.ROTR(2, x) ^ Sha256.ROTR(13, x) ^ Sha256.ROTR(22, x); }
99Sha256.Sigma1 = function(x) { return Sha256.ROTR(6, x) ^ Sha256.ROTR(11, x) ^ Sha256.ROTR(25, x); }
100Sha256.sigma0 = function(x) { return Sha256.ROTR(7, x) ^ Sha256.ROTR(18, x) ^ (x >>> 3); }
101Sha256.sigma1 = function(x) { return Sha256.ROTR(17, x) ^ Sha256.ROTR(19, x) ^ (x >>> 10); }
102Sha256.Ch = function(x, y, z) { return (x & y) ^ (~x & z); }
103Sha256.Maj = function(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); }
104
105//
106// hexadecimal representation of a number 
107//   (note toString(16) is implementation-dependant, and  
108//   in IE returns signed numbers when used on full words)
109//
110Sha256.toHexStr = function(n) {
111    var s = "", v;
112    for (var i = 7; i >= 0; i--) { v = (n >>> (i * 4)) & 0xf; s += v.toString(16); }
113    return s;
114}
115
116
117/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
118/*  Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple          */
119/*              single-byte character encoding (c) Chris Veness 2002-2010                         */
120/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
121
122var Utf8 = {};  // Utf8 namespace
123
124/**
125* Encode multi-byte Unicode string into utf-8 multiple single-byte characters 
126* (BMP / basic multilingual plane only)
127*
128* Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars
129*
130* @param {String} strUni Unicode string to be encoded as UTF-8
131* @returns {String} encoded string
132*/
133Utf8.encode = function(strUni) {
134    // use regular expressions & String.replace callback function for better efficiency 
135    // than procedural approaches
136    var strUtf = strUni.replace(
137      /[\u0080-\u07ff]/g,  // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz
138      function(c) {
139          var cc = c.charCodeAt(0);
140          return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);
141      }
142    );
143    strUtf = strUtf.replace(
144      /[\u0800-\uffff]/g,  // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
145      function(c) {
146          var cc = c.charCodeAt(0);
147          return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3F, 0x80 | cc & 0x3f);
148      }
149    );
150    return strUtf;
151}
152
153/**
154* Decode utf-8 encoded string back into multi-byte Unicode characters
155*
156* @param {String} strUtf UTF-8 string to be decoded back to Unicode
157* @returns {String} decoded string
158*/
159Utf8.decode = function(strUtf) {
160    // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
161    var strUni = strUtf.replace(
162      /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,  // 3-byte chars
163      function(c) {  // (note parentheses for precence)
164          var cc = ((c.charCodeAt(0) & 0x0f) << 12) | ((c.charCodeAt(1) & 0x3f) << 6) | (c.charCodeAt(2) & 0x3f);
165          return String.fromCharCode(cc);
166      }
167    );
168    strUni = strUni.replace(
169      /[\u00c0-\u00df][\u0080-\u00bf]/g,                 // 2-byte chars
170      function(c) {  // (note parentheses for precence)
171          var cc = (c.charCodeAt(0) & 0x1f) << 6 | c.charCodeAt(1) & 0x3f;
172          return String.fromCharCode(cc);
173      }
174    );
175    return strUni;
176}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.