Diffstat (limited to 'frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js b/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js index ae2b8fb..be197e3 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js | |||
@@ -1,152 +1,149 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2011 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz's Javascript Crypto Library. | 5 | This file is part of Clipperz Community Edition. |
6 | Javascript Crypto Library provides web developers with an extensive | 6 | Clipperz Community Edition is an online password manager. |
7 | and efficient set of cryptographic functions. The library aims to | ||
8 | obtain maximum execution speed while preserving modularity and | ||
9 | reusability. | ||
10 | For further information about its features and functionalities please | 7 | For further information about its features and functionalities please |
11 | refer to http://www.clipperz.com | 8 | refer to http://www.clipperz.com. |
12 | 9 | ||
13 | * Javascript Crypto Library is free software: you can redistribute | 10 | * Clipperz Community Edition is free software: you can redistribute |
14 | it and/or modify it under the terms of the GNU Affero General Public | 11 | it and/or modify it under the terms of the GNU Affero General Public |
15 | License as published by the Free Software Foundation, either version | 12 | License as published by the Free Software Foundation, either version |
16 | 3 of the License, or (at your option) any later version. | 13 | 3 of the License, or (at your option) any later version. |
17 | 14 | ||
18 | * Javascript Crypto Library is distributed in the hope that it will | 15 | * Clipperz Community Edition is distributed in the hope that it will |
19 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 16 | be useful, but WITHOUT ANY WARRANTY; without even the implied |
20 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
21 | See the GNU Affero General Public License for more details. | 18 | See the GNU Affero General Public License for more details. |
22 | 19 | ||
23 | * You should have received a copy of the GNU Affero General Public | 20 | * You should have received a copy of the GNU Affero General Public |
24 | License along with Javascript Crypto Library. If not, see | 21 | License along with Clipperz Community Edition. If not, see |
25 | <http://www.gnu.org/licenses/>. | 22 | <http://www.gnu.org/licenses/>. |
26 | 23 | ||
27 | */ | 24 | */ |
28 | 25 | ||
29 | //try { if (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) == 'undefined') { throw ""; }} catch (e) { | 26 | //try { if (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) == 'undefined') { throw ""; }} catch (e) { |
30 | //throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.BinaryField.Curve!"; | 27 | //throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.BinaryField.Curve!"; |
31 | //} | 28 | //} |
32 | //try { if (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) == 'undefined') { throw ""; }} catch (e) { | 29 | //try { if (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) == 'undefined') { throw ""; }} catch (e) { |
33 | //throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.Koblitz.Curve!"; | 30 | //throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.Koblitz.Curve!"; |
34 | //} | 31 | //} |
35 | 32 | ||
36 | Clipperz.Crypto.ECC.StandardCurves = {}; | 33 | Clipperz.Crypto.ECC.StandardCurves = {}; |
37 | 34 | ||
38 | MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { | 35 | MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { |
39 | 36 | ||
40 | //============================================================================== | 37 | //============================================================================== |
41 | 38 | ||
42 | '_K571': null, | 39 | '_K571': null, |
43 | 'K571': function() { //f(z) = z^571 + z^10 + z^5 + z^2 + 1 | 40 | 'K571': function() { //f(z) = z^571 + z^10 + z^5 + z^2 + 1 |
44 | if ((Clipperz.Crypto.ECC.StandardCurves._K571 == null) && (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) != 'undefined')) { | 41 | if ((Clipperz.Crypto.ECC.StandardCurves._K571 == null) && (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) != 'undefined')) { |
45 | Clipperz.Crypto.ECC.StandardCurves._K571 = new Clipperz.Crypto.ECC.Koblitz.Curve({ | 42 | Clipperz.Crypto.ECC.StandardCurves._K571 = new Clipperz.Crypto.ECC.Koblitz.Curve({ |
46 | modulus: new Clipperz.Crypto.ECC.Koblitz.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000425', 16), | 43 | modulus: new Clipperz.Crypto.ECC.Koblitz.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000425', 16), |
47 | a: new Clipperz.Crypto.ECC.Koblitz.Value('0', 16), | 44 | a: new Clipperz.Crypto.ECC.Koblitz.Value('0', 16), |
48 | b: new Clipperz.Crypto.ECC.Koblitz.Value('1', 16), | 45 | b: new Clipperz.Crypto.ECC.Koblitz.Value('1', 16), |
49 | G: new Clipperz.Crypto.ECC.Koblitz.Point({ | 46 | G: new Clipperz.Crypto.ECC.Koblitz.Point({ |
50 | x: new Clipperz.Crypto.ECC.Koblitz.Value('026eb7a8 59923fbc 82189631 f8103fe4 ac9ca297 0012d5d4 60248048 01841ca4 43709584 93b205e6 47da304d b4ceb08c bbd1ba39 494776fb 988b4717 4dca88c7 e2945283 a01c8972', 16), | 47 | x: new Clipperz.Crypto.ECC.Koblitz.Value('026eb7a8 59923fbc 82189631 f8103fe4 ac9ca297 0012d5d4 60248048 01841ca4 43709584 93b205e6 47da304d b4ceb08c bbd1ba39 494776fb 988b4717 4dca88c7 e2945283 a01c8972', 16), |
51 | y: new Clipperz.Crypto.ECC.Koblitz.Value('0349dc80 7f4fbf37 4f4aeade 3bca9531 4dd58cec 9f307a54 ffc61efc 006d8a2c 9d4979c0 ac44aea7 4fbebbb9 f772aedc b620b01a 7ba7af1b 320430c8 591984f6 01cd4c14 3ef1c7a3', 16) | 48 | y: new Clipperz.Crypto.ECC.Koblitz.Value('0349dc80 7f4fbf37 4f4aeade 3bca9531 4dd58cec 9f307a54 ffc61efc 006d8a2c 9d4979c0 ac44aea7 4fbebbb9 f772aedc b620b01a 7ba7af1b 320430c8 591984f6 01cd4c14 3ef1c7a3', 16) |
52 | }), | 49 | }), |
53 | r: new Clipperz.Crypto.ECC.Koblitz.Value('02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 131850e1 f19a63e4 b391a8db 917f4138 b630d84b e5d63938 1e91deb4 5cfe778f 637c1001', 16), | 50 | r: new Clipperz.Crypto.ECC.Koblitz.Value('02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 131850e1 f19a63e4 b391a8db 917f4138 b630d84b e5d63938 1e91deb4 5cfe778f 637c1001', 16), |
54 | h: new Clipperz.Crypto.ECC.Koblitz.Value('4', 16), | 51 | h: new Clipperz.Crypto.ECC.Koblitz.Value('4', 16), |
55 | primeFactor: new Clipperz.Crypto.ECC.Koblitz.Value('02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 131850e1 f19a63e4 b391a8db 917f4138 b630d84b e5d63938 1e91deb4 5cfe778f 637c1001', 16) | 52 | primeFactor: new Clipperz.Crypto.ECC.Koblitz.Value('02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 131850e1 f19a63e4 b391a8db 917f4138 b630d84b e5d63938 1e91deb4 5cfe778f 637c1001', 16) |
56 | }); | 53 | }); |
57 | } | 54 | } |
58 | 55 | ||
59 | return Clipperz.Crypto.ECC.StandardCurves._K571; | 56 | return Clipperz.Crypto.ECC.StandardCurves._K571; |
60 | }, | 57 | }, |
61 | 58 | ||
62 | //----------------------------------------------------------------------------- | 59 | //----------------------------------------------------------------------------- |
63 | 60 | ||
64 | '_K283': null, | 61 | '_K283': null, |
65 | 'K283': function() { //f(z) = z^283 + z^12 + z^7 + z^5 + 1 | 62 | 'K283': function() { //f(z) = z^283 + z^12 + z^7 + z^5 + 1 |
66 | if ((Clipperz.Crypto.ECC.StandardCurves._K283 == null) && (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) != 'undefined')) { | 63 | if ((Clipperz.Crypto.ECC.StandardCurves._K283 == null) && (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) != 'undefined')) { |
67 | Clipperz.Crypto.ECC.StandardCurves._K283 = new Clipperz.Crypto.ECC.Koblitz.Curve({ | 64 | Clipperz.Crypto.ECC.StandardCurves._K283 = new Clipperz.Crypto.ECC.Koblitz.Curve({ |
68 | modulus: new Clipperz.Crypto.ECC.Koblitz.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000010a1', 16), | 65 | modulus: new Clipperz.Crypto.ECC.Koblitz.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000010a1', 16), |
69 | a: new Clipperz.Crypto.ECC.Koblitz.Value('0', 16), | 66 | a: new Clipperz.Crypto.ECC.Koblitz.Value('0', 16), |
70 | b: new Clipperz.Crypto.ECC.Koblitz.Value('1', 16), | 67 | b: new Clipperz.Crypto.ECC.Koblitz.Value('1', 16), |
71 | G: new Clipperz.Crypto.ECC.Koblitz.Point({ | 68 | G: new Clipperz.Crypto.ECC.Koblitz.Point({ |
72 | x: new Clipperz.Crypto.ECC.Koblitz.Value('0503213f 78ca4488 3f1a3b81 62f188e5 53cd265f 23c1567a 16876913 b0c2ac24 58492836', 16), | 69 | x: new Clipperz.Crypto.ECC.Koblitz.Value('0503213f 78ca4488 3f1a3b81 62f188e5 53cd265f 23c1567a 16876913 b0c2ac24 58492836', 16), |
73 | y: new Clipperz.Crypto.ECC.Koblitz.Value('01ccda38 0f1c9e31 8d90f95d 07e5426f e87e45c0 e8184698 e4596236 4e341161 77dd2259', 16) | 70 | y: new Clipperz.Crypto.ECC.Koblitz.Value('01ccda38 0f1c9e31 8d90f95d 07e5426f e87e45c0 e8184698 e4596236 4e341161 77dd2259', 16) |
74 | }), | 71 | }), |
75 | r: new Clipperz.Crypto.ECC.Koblitz.Value('01ffffff ffffffff ffffffff ffffffff ffffe9ae 2ed07577 265dff7f 94451e06 1e163c61', 16), | 72 | r: new Clipperz.Crypto.ECC.Koblitz.Value('01ffffff ffffffff ffffffff ffffffff ffffe9ae 2ed07577 265dff7f 94451e06 1e163c61', 16), |
76 | h: new Clipperz.Crypto.ECC.Koblitz.Value('4', 16), | 73 | h: new Clipperz.Crypto.ECC.Koblitz.Value('4', 16), |
77 | primeFactor: new Clipperz.Crypto.ECC.Koblitz.Value('01ffffff ffffffff ffffffff ffffffff ffffe9ae 2ed07577 265dff7f 94451e06 1e163c61', 16) | 74 | primeFactor: new Clipperz.Crypto.ECC.Koblitz.Value('01ffffff ffffffff ffffffff ffffffff ffffe9ae 2ed07577 265dff7f 94451e06 1e163c61', 16) |
78 | }); | 75 | }); |
79 | } | 76 | } |
80 | 77 | ||
81 | return Clipperz.Crypto.ECC.StandardCurves._K283; | 78 | return Clipperz.Crypto.ECC.StandardCurves._K283; |
82 | }, | 79 | }, |
83 | 80 | ||
84 | //============================================================================== | 81 | //============================================================================== |
85 | 82 | ||
86 | '_B571': null, | 83 | '_B571': null, |
87 | 'B571': function() { //f(z) = z^571 + z^10 + z^5 + z^2 + 1 | 84 | 'B571': function() { //f(z) = z^571 + z^10 + z^5 + z^2 + 1 |
88 | if ((Clipperz.Crypto.ECC.StandardCurves._B571 == null) && (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) != 'undefined')) { | 85 | if ((Clipperz.Crypto.ECC.StandardCurves._B571 == null) && (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) != 'undefined')) { |
89 | Clipperz.Crypto.ECC.StandardCurves._B571 = new Clipperz.Crypto.ECC.BinaryField.Curve({ | 86 | Clipperz.Crypto.ECC.StandardCurves._B571 = new Clipperz.Crypto.ECC.BinaryField.Curve({ |
90 | modulus: new Clipperz.Crypto.ECC.BinaryField.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000425', 16), | 87 | modulus: new Clipperz.Crypto.ECC.BinaryField.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000425', 16), |
91 | a: new Clipperz.Crypto.ECC.BinaryField.Value('1', 16), | 88 | a: new Clipperz.Crypto.ECC.BinaryField.Value('1', 16), |
92 | b: new Clipperz.Crypto.ECC.BinaryField.Value('02f40e7e 2221f295 de297117 b7f3d62f 5c6a97ff cb8ceff1 cd6ba8ce 4a9a18ad 84ffabbd 8efa5933 2be7ad67 56a66e29 4afd185a 78ff12aa 520e4de7 39baca0c 7ffeff7f 2955727a', 16), | 89 | b: new Clipperz.Crypto.ECC.BinaryField.Value('02f40e7e 2221f295 de297117 b7f3d62f 5c6a97ff cb8ceff1 cd6ba8ce 4a9a18ad 84ffabbd 8efa5933 2be7ad67 56a66e29 4afd185a 78ff12aa 520e4de7 39baca0c 7ffeff7f 2955727a', 16), |
93 | G: new Clipperz.Crypto.ECC.BinaryField.Point({ | 90 | G: new Clipperz.Crypto.ECC.BinaryField.Point({ |
94 | x: new Clipperz.Crypto.ECC.BinaryField.Value('0303001d 34b85629 6c16c0d4 0d3cd775 0a93d1d2 955fa80a a5f40fc8 db7b2abd bde53950 f4c0d293 cdd711a3 5b67fb14 99ae6003 8614f139 4abfa3b4 c850d927 e1e7769c 8eec2d19', 16), | 91 | x: new Clipperz.Crypto.ECC.BinaryField.Value('0303001d 34b85629 6c16c0d4 0d3cd775 0a93d1d2 955fa80a a5f40fc8 db7b2abd bde53950 f4c0d293 cdd711a3 5b67fb14 99ae6003 8614f139 4abfa3b4 c850d927 e1e7769c 8eec2d19', 16), |
95 | y: new Clipperz.Crypto.ECC.BinaryField.Value('037bf273 42da639b 6dccfffe b73d69d7 8c6c27a6 009cbbca 1980f853 3921e8a6 84423e43 bab08a57 6291af8f 461bb2a8 b3531d2f 0485c19b 16e2f151 6e23dd3c 1a4827af 1b8ac15b', 16) | 92 | y: new Clipperz.Crypto.ECC.BinaryField.Value('037bf273 42da639b 6dccfffe b73d69d7 8c6c27a6 009cbbca 1980f853 3921e8a6 84423e43 bab08a57 6291af8f 461bb2a8 b3531d2f 0485c19b 16e2f151 6e23dd3c 1a4827af 1b8ac15b', 16) |
96 | }), | 93 | }), |
97 | r: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff e661ce18 ff559873 08059b18 6823851e c7dd9ca1 161de93d 5174d66e 8382e9bb 2fe84e47', 16), | 94 | r: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff e661ce18 ff559873 08059b18 6823851e c7dd9ca1 161de93d 5174d66e 8382e9bb 2fe84e47', 16), |
98 | h: new Clipperz.Crypto.ECC.BinaryField.Value('2', 16) | 95 | h: new Clipperz.Crypto.ECC.BinaryField.Value('2', 16) |
99 | 96 | ||
100 | // S: new Clipperz.Crypto.ECC.BinaryField.Value('2aa058f73a0e33ab486b0f610410c53a7f132310', 10), | 97 | // S: new Clipperz.Crypto.ECC.BinaryField.Value('2aa058f73a0e33ab486b0f610410c53a7f132310', 10), |
101 | // n: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ce18ff55987308059b186823851ec7dd9ca1161de93d5174d66e8382e9bb2fe84e47', 16) | 98 | // n: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ce18ff55987308059b186823851ec7dd9ca1161de93d5174d66e8382e9bb2fe84e47', 16) |
102 | }); | 99 | }); |
103 | 100 | ||
104 | //----------------------------------------------------------------------------- | 101 | //----------------------------------------------------------------------------- |
105 | // | 102 | // |
106 | //Guide to Elliptic Curve Cryptography | 103 | //Guide to Elliptic Curve Cryptography |
107 | //Darrel Hankerson, Alfred Menezes, Scott Vanstone | 104 | //Darrel Hankerson, Alfred Menezes, Scott Vanstone |
108 | //- Pag: 56, Alorithm 2.45 (with a typo!!!) | 105 | //- Pag: 56, Alorithm 2.45 (with a typo!!!) |
109 | // | 106 | // |
110 | //----------------------------------------------------------------------------- | 107 | //----------------------------------------------------------------------------- |
111 | // | 108 | // |
112 | // http://www.milw0rm.com/papers/136 | 109 | // http://www.milw0rm.com/papers/136 |
113 | // | 110 | // |
114 | // ------------------------------------------------------------------------- | 111 | // ------------------------------------------------------------------------- |
115 | // Polynomial Reduction Algorithm Modulo f571 | 112 | // Polynomial Reduction Algorithm Modulo f571 |
116 | // ------------------------------------------------------------------------- | 113 | // ------------------------------------------------------------------------- |
117 | // | 114 | // |
118 | // Input: Polynomial p(x) of degree 1140 or less, stored as | 115 | // Input: Polynomial p(x) of degree 1140 or less, stored as |
119 | // an array of 2T machinewords. | 116 | // an array of 2T machinewords. |
120 | // Output: p(x) mod f571(x) | 117 | // Output: p(x) mod f571(x) |
121 | // | 118 | // |
122 | // FOR i = T-1, ..., 0 DO | 119 | // FOR i = T-1, ..., 0 DO |
123 | // SET X := P[i+T] | 120 | // SET X := P[i+T] |
124 | // P[i] := P[i] ^ (X<<5) ^ (X<<7) ^ (X<<10) ^ (X<<15) | 121 | // P[i] := P[i] ^ (X<<5) ^ (X<<7) ^ (X<<10) ^ (X<<15) |
125 | // P[i+1] := P[i+1] ^ (X>>17) ^ (X>>22) ^ (X>>25) ^ (X>>27) | 122 | // P[i+1] := P[i+1] ^ (X>>17) ^ (X>>22) ^ (X>>25) ^ (X>>27) |
126 | // | 123 | // |
127 | // SET X := P[T-1] >> 27 | 124 | // SET X := P[T-1] >> 27 |
128 | // P[0] := P[0] ^ X ^ (X<<2) ^ (X<<5) ^ (X<<10) | 125 | // P[0] := P[0] ^ X ^ (X<<2) ^ (X<<5) ^ (X<<10) |
129 | // P[T-1] := P[T-1] & 0x07ffffff | 126 | // P[T-1] := P[T-1] & 0x07ffffff |
130 | // | 127 | // |
131 | // RETURN P[T-1],...,P[0] | 128 | // RETURN P[T-1],...,P[0] |
132 | // | 129 | // |
133 | // ------------------------------------------------------------------------- | 130 | // ------------------------------------------------------------------------- |
134 | // | 131 | // |
135 | Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module; | 132 | Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module; |
136 | Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module = function(aValue) { | 133 | Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module = function(aValue) { |
137 | varresult; | 134 | varresult; |
138 | 135 | ||
139 | if (aValue.bitSize() > 1140) { | 136 | if (aValue.bitSize() > 1140) { |
140 | MochiKit.Logging.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); | 137 | MochiKit.Logging.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); |
141 | result = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule(aValue); | 138 | result = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule(aValue); |
142 | } else { | 139 | } else { |
143 | varC, T; | 140 | varC, T; |
144 | var i; | 141 | var i; |
145 | 142 | ||
146 | //console.log(">>> binaryField.finiteField.(improved)module"); | 143 | //console.log(">>> binaryField.finiteField.(improved)module"); |
147 | // C = aValue.value().slice(0); | 144 | // C = aValue.value().slice(0); |
148 | C = aValue._value.slice(0); | 145 | C = aValue._value.slice(0); |
149 | for (i=35; i>=18; i--) { | 146 | for (i=35; i>=18; i--) { |
150 | T = C[i]; | 147 | T = C[i]; |
151 | C[i-18] = (((C[i-18] ^ (T<<5) ^ (T<<7) ^ (T<<10) ^ (T<<15)) & 0xffffffff) >>> 0); | 148 | C[i-18] = (((C[i-18] ^ (T<<5) ^ (T<<7) ^ (T<<10) ^ (T<<15)) & 0xffffffff) >>> 0); |
152 | C[i-17] = ((C[i-17] ^ (T>>>27) ^ (T>>>25) ^ (T>>>22) ^ (T>>>17)) >>> 0); | 149 | C[i-17] = ((C[i-17] ^ (T>>>27) ^ (T>>>25) ^ (T>>>22) ^ (T>>>17)) >>> 0); |