summaryrefslogtreecommitdiff
path: root/frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
Unidiff
Diffstat (limited to 'frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js519
1 files changed, 519 insertions, 0 deletions
diff --git a/frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js b/frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
new file mode 100644
index 0000000..7b7c2c6
--- a/dev/null
+++ b/frontend/delta/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js
@@ -0,0 +1,519 @@
1/*
2
3Copyright 2008-2013 Clipperz Srl
4
5This file is part of Clipperz, the online password manager.
6For further information about its features and functionalities please
7refer to http://www.clipperz.com.
8
9* Clipperz is free software: you can redistribute it and/or modify it
10 under the terms of the GNU Affero General Public License as published
11 by the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14* Clipperz is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 See the GNU Affero General Public License for more details.
18
19* You should have received a copy of the GNU Affero General Public
20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
21
22*/
23
24//try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
25 //throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
26//}
27if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
28if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; }
29
30Clipperz.Crypto.ECC.BinaryField.FiniteField = function(args) {
31 args = args || {};
32 this._modulus = args.modulus;
33
34 return this;
35}
36
37Clipperz.Crypto.ECC.BinaryField.FiniteField.prototype = MochiKit.Base.update(null, {
38
39 'asString': function() {
40 return "Clipperz.Crypto.ECC.BinaryField.FiniteField (" + this.modulus().asString() + ")";
41 },
42
43 //-----------------------------------------------------------------------------
44
45 'modulus': function() {
46 return this._modulus;
47 },
48
49 //-----------------------------------------------------------------------------
50
51 '_module': function(aValue) {
52 varresult;
53 var modulusComparison;
54
55 modulusComparison = Clipperz.Crypto.ECC.BinaryField.Value._compare(aValue, this.modulus()._value);
56
57 if (modulusComparison < 0) {
58 result = aValue;
59 } else if (modulusComparison == 0) {
60 result = [0];
61 } else {
62 var modulusBitSize;
63 var resultBitSize;
64
65 result = aValue;
66
67 modulusBitSize = this.modulus().bitSize();
68 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result);
69 while (resultBitSize >= modulusBitSize) {
70 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this.modulus()._value, resultBitSize - modulusBitSize));
71 resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result);
72 }
73 }
74
75 return result;
76 },
77
78 'module': function(aValue) {
79 return new Clipperz.Crypto.ECC.BinaryField.Value(this._module(aValue._value.slice(0)));
80 },
81
82 //-----------------------------------------------------------------------------
83
84 '_add': function(a, b) {
85 return Clipperz.Crypto.ECC.BinaryField.Value._xor(a, b);
86 },
87
88 '_overwriteAdd': function(a, b) {
89 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(a, b);
90 },
91
92 'add': function(a, b) {
93 return new Clipperz.Crypto.ECC.BinaryField.Value(this._add(a._value, b._value));
94 },
95
96 //-----------------------------------------------------------------------------
97
98 'negate': function(aValue) {
99 return aValue.clone();
100 },
101
102 //-----------------------------------------------------------------------------
103
104 '_multiply': function(a, b) {
105 var result;
106 var valueToXor;
107 var i,c;
108
109 result = [0];
110 valueToXor = b;
111 c = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(a);
112 for (i=0; i<c; i++) {
113 if (Clipperz.Crypto.ECC.BinaryField.Value._isBitSet(a, i) === true) {
114 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, valueToXor);
115 }
116 valueToXor = Clipperz.Crypto.ECC.BinaryField.Value._overwriteShiftLeft(valueToXor, 1);
117 }
118 result = this._module(result);
119
120 return result;
121 },
122
123 'multiply': function(a, b) {
124 return new Clipperz.Crypto.ECC.BinaryField.Value(this._multiply(a._value, b._value));
125 },
126
127 //-----------------------------------------------------------------------------
128
129 '_fastMultiply': function(a, b) {
130 var result;
131 var B;
132 var i,c;
133
134 result = [0];
135 B = b.slice(0); //Is this array copy avoidable?
136 c = 32;
137 for (i=0; i<c; i++) {
138 var ii, cc;
139
140 cc = a.length;
141 for (ii=0; ii<cc; ii++) {
142 if (((a[ii] >>> i) & 0x01) == 1) {
143 Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, B, ii);
144 }
145 }
146
147 if (i < (c-1)) {
148 B = Clipperz.Crypto.ECC.BinaryField.Value._overwriteShiftLeft(B, 1);
149 }
150 }
151 result = this._module(result);
152
153 return result;
154 },
155
156 'fastMultiply': function(a, b) {
157 return new Clipperz.Crypto.ECC.BinaryField.Value(this._fastMultiply(a._value, b._value));
158 },
159
160 //-----------------------------------------------------------------------------
161 //
162 //Guide to Elliptic Curve Cryptography
163 //Darrel Hankerson, Alfred Menezes, Scott Vanstone
164 //- Pag: 49, Alorithm 2.34
165 //
166 //-----------------------------------------------------------------------------
167
168 '_square': function(aValue) {
169 var result;
170 var value;
171 var c,i;
172 var precomputedValues;
173
174 value = aValue;
175 result = new Array(value.length * 2);
176 precomputedValues = Clipperz.Crypto.ECC.BinaryField.FiniteField.squarePrecomputedBytes;
177
178 c = value.length;
179 for (i=0; i<c; i++) {
180 result[i*2] = precomputedValues[(value[i] & 0x000000ff)];
181 result[i*2] |= ((precomputedValues[(value[i] & 0x0000ff00) >>> 8]) << 16);
182
183 result[i*2 + 1] = precomputedValues[(value[i] & 0x00ff0000) >>> 16];
184 result[i*2 + 1] |= ((precomputedValues[(value[i] & 0xff000000) >>> 24]) << 16);
185 }
186
187 return this._module(result);
188 },
189
190 'square': function(aValue) {
191 return new Clipperz.Crypto.ECC.BinaryField.Value(this._square(aValue._value));
192 },
193
194 //-----------------------------------------------------------------------------
195
196 '_inverse': function(aValue) {
197 varresult;
198 var b, c;
199 var u, v;
200
201 // b = Clipperz.Crypto.ECC.BinaryField.Value.I._value;
202 b = [1];
203 // c = Clipperz.Crypto.ECC.BinaryField.Value.O._value;
204 c = [0];
205 u = this._module(aValue);
206 v = this.modulus()._value.slice(0);
207
208 while (Clipperz.Crypto.ECC.BinaryField.Value._bitSize(u) > 1) {
209 varbitDifferenceSize;
210
211 bitDifferenceSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(u) - Clipperz.Crypto.ECC.BinaryField.Value._bitSize(v);
212 if (bitDifferenceSize < 0) {
213 var swap;
214
215 swap = u;
216 u = v;
217 v = swap;
218
219 swap = c;
220 c = b;
221 b = swap;
222
223 bitDifferenceSize = -bitDifferenceSize;
224 }
225
226 u = this._add(u, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(v, bitDifferenceSize));
227 b = this._add(b, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(c, bitDifferenceSize));
228 // this._overwriteAdd(u, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(v, bitDifferenceSize));
229 // this._overwriteAdd(b, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(c, bitDifferenceSize));
230 }
231
232 result = this._module(b);
233
234 return result;
235 },
236
237 'inverse': function(aValue) {
238 return new Clipperz.Crypto.ECC.BinaryField.Value(this._inverse(aValue._value));
239 },
240
241 //-----------------------------------------------------------------------------
242 __syntaxFix__: "syntax fix"
243});
244
245
246Clipperz.Crypto.ECC.BinaryField.FiniteField.squarePrecomputedBytes = [
247 0x0000, // 0 = 0000 0000 -> 0000 0000 0000 0000
248 0x0001, // 1 = 0000 0001 -> 0000 0000 0000 0001
249 0x0004, // 2 = 0000 0010 -> 0000 0000 0000 0100
250 0x0005, // 3 = 0000 0011 -> 0000 0000 0000 0101
251 0x0010, // 4 = 0000 0100 -> 0000 0000 0001 0000
252 0x0011, // 5 = 0000 0101 -> 0000 0000 0001 0001
253 0x0014, // 6 = 0000 0110 -> 0000 0000 0001 0100
254 0x0015, // 7 = 0000 0111 -> 0000 0000 0001 0101
255 0x0040, // 8 = 0000 1000 -> 0000 0000 0100 0000
256 0x0041, // 9 = 0000 1001 -> 0000 0000 0100 0001
257 0x0044, // 10 = 0000 1010 -> 0000 0000 0100 0100
258 0x0045, // 11 = 0000 1011 -> 0000 0000 0100 0101
259 0x0050, // 12 = 0000 1100 -> 0000 0000 0101 0000
260 0x0051, // 13 = 0000 1101 -> 0000 0000 0101 0001
261 0x0054, // 14 = 0000 1110 -> 0000 0000 0101 0100
262 0x0055, // 15 = 0000 1111 -> 0000 0000 0101 0101
263
264 0x0100, // 16 = 0001 0000 -> 0000 0001 0000 0000
265 0x0101, // 17 = 0001 0001 -> 0000 0001 0000 0001
266 0x0104, // 18 = 0001 0010 -> 0000 0001 0000 0100
267 0x0105, // 19 = 0001 0011 -> 0000 0001 0000 0101
268 0x0110, // 20 = 0001 0100 -> 0000 0001 0001 0000
269 0x0111, // 21 = 0001 0101 -> 0000 0001 0001 0001
270 0x0114, // 22 = 0001 0110 -> 0000 0001 0001 0100
271 0x0115, // 23 = 0001 0111 -> 0000 0001 0001 0101
272 0x0140, // 24 = 0001 1000 -> 0000 0001 0100 0000
273 0x0141, // 25 = 0001 1001 -> 0000 0001 0100 0001
274 0x0144, // 26 = 0001 1010 -> 0000 0001 0100 0100
275 0x0145, // 27 = 0001 1011 -> 0000 0001 0100 0101
276 0x0150, // 28 = 0001 1100 -> 0000 0001 0101 0000
277 0x0151, // 28 = 0001 1101 -> 0000 0001 0101 0001
278 0x0154, // 30 = 0001 1110 -> 0000 0001 0101 0100
279 0x0155, // 31 = 0001 1111 -> 0000 0001 0101 0101
280
281 0x0400, // 32 = 0010 0000 -> 0000 0100 0000 0000
282 0x0401, // 33 = 0010 0001 -> 0000 0100 0000 0001
283 0x0404, // 34 = 0010 0010 -> 0000 0100 0000 0100
284 0x0405, // 35 = 0010 0011 -> 0000 0100 0000 0101
285 0x0410, // 36 = 0010 0100 -> 0000 0100 0001 0000
286 0x0411, // 37 = 0010 0101 -> 0000 0100 0001 0001
287 0x0414, // 38 = 0010 0110 -> 0000 0100 0001 0100
288 0x0415, // 39 = 0010 0111 -> 0000 0100 0001 0101
289 0x0440, // 40 = 0010 1000 -> 0000 0100 0100 0000
290 0x0441, // 41 = 0010 1001 -> 0000 0100 0100 0001
291 0x0444, // 42 = 0010 1010 -> 0000 0100 0100 0100
292 0x0445, // 43 = 0010 1011 -> 0000 0100 0100 0101
293 0x0450, // 44 = 0010 1100 -> 0000 0100 0101 0000
294 0x0451, // 45 = 0010 1101 -> 0000 0100 0101 0001
295 0x0454, // 46 = 0010 1110 -> 0000 0100 0101 0100
296 0x0455, // 47 = 0010 1111 -> 0000 0100 0101 0101
297
298 0x0500, // 48 = 0011 0000 -> 0000 0101 0000 0000
299 0x0501, // 49 = 0011 0001 -> 0000 0101 0000 0001
300 0x0504, // 50 = 0011 0010 -> 0000 0101 0000 0100
301 0x0505, // 51 = 0011 0011 -> 0000 0101 0000 0101
302 0x0510, // 52 = 0011 0100 -> 0000 0101 0001 0000
303 0x0511, // 53 = 0011 0101 -> 0000 0101 0001 0001
304 0x0514, // 54 = 0011 0110 -> 0000 0101 0001 0100
305 0x0515, // 55 = 0011 0111 -> 0000 0101 0001 0101
306 0x0540, // 56 = 0011 1000 -> 0000 0101 0100 0000
307 0x0541, // 57 = 0011 1001 -> 0000 0101 0100 0001
308 0x0544, // 58 = 0011 1010 -> 0000 0101 0100 0100
309 0x0545, // 59 = 0011 1011 -> 0000 0101 0100 0101
310 0x0550, // 60 = 0011 1100 -> 0000 0101 0101 0000
311 0x0551, // 61 = 0011 1101 -> 0000 0101 0101 0001
312 0x0554, // 62 = 0011 1110 -> 0000 0101 0101 0100
313 0x0555, // 63 = 0011 1111 -> 0000 0101 0101 0101
314
315 0x1000, // 64 = 0100 0000 -> 0001 0000 0000 0000
316 0x1001, // 65 = 0100 0001 -> 0001 0000 0000 0001
317 0x1004, // 66 = 0100 0010 -> 0001 0000 0000 0100
318 0x1005, // 67 = 0100 0011 -> 0001 0000 0000 0101
319 0x1010, // 68 = 0100 0100 -> 0001 0000 0001 0000
320 0x1011, // 69 = 0100 0101 -> 0001 0000 0001 0001
321 0x1014, // 70 = 0100 0110 -> 0001 0000 0001 0100
322 0x1015, // 71 = 0100 0111 -> 0001 0000 0001 0101
323 0x1040, // 72 = 0100 1000 -> 0001 0000 0100 0000
324 0x1041, // 73 = 0100 1001 -> 0001 0000 0100 0001
325 0x1044, // 74 = 0100 1010 -> 0001 0000 0100 0100
326 0x1045, // 75 = 0100 1011 -> 0001 0000 0100 0101
327 0x1050, // 76 = 0100 1100 -> 0001 0000 0101 0000
328 0x1051, // 77 = 0100 1101 -> 0001 0000 0101 0001
329 0x1054, // 78 = 0100 1110 -> 0001 0000 0101 0100
330 0x1055, // 79 = 0100 1111 -> 0001 0000 0101 0101
331
332 0x1100, // 80 = 0101 0000 -> 0001 0001 0000 0000
333 0x1101, // 81 = 0101 0001 -> 0001 0001 0000 0001
334 0x1104, // 82 = 0101 0010 -> 0001 0001 0000 0100
335 0x1105, // 83 = 0101 0011 -> 0001 0001 0000 0101
336 0x1110, // 84 = 0101 0100 -> 0001 0001 0001 0000
337 0x1111, // 85 = 0101 0101 -> 0001 0001 0001 0001
338 0x1114, // 86 = 0101 0110 -> 0001 0001 0001 0100
339 0x1115, // 87 = 0101 0111 -> 0001 0001 0001 0101
340 0x1140, // 88 = 0101 1000 -> 0001 0001 0100 0000
341 0x1141, // 89 = 0101 1001 -> 0001 0001 0100 0001
342 0x1144, // 90 = 0101 1010 -> 0001 0001 0100 0100
343 0x1145, // 91 = 0101 1011 -> 0001 0001 0100 0101
344 0x1150, // 92 = 0101 1100 -> 0001 0001 0101 0000
345 0x1151, // 93 = 0101 1101 -> 0001 0001 0101 0001
346 0x1154, // 94 = 0101 1110 -> 0001 0001 0101 0100
347 0x1155, // 95 = 0101 1111 -> 0001 0001 0101 0101
348
349 0x1400, // 96 = 0110 0000 -> 0001 0100 0000 0000
350 0x1401, // 97 = 0110 0001 -> 0001 0100 0000 0001
351 0x1404, // 98 = 0110 0010 -> 0001 0100 0000 0100
352 0x1405, // 99 = 0110 0011 -> 0001 0100 0000 0101
353 0x1410, //100 = 0110 0100 -> 0001 0100 0001 0000
354 0x1411, //101 = 0110 0101 -> 0001 0100 0001 0001
355 0x1414, //102 = 0110 0110 -> 0001 0100 0001 0100
356 0x1415, //103 = 0110 0111 -> 0001 0100 0001 0101
357 0x1440, //104 = 0110 1000 -> 0001 0100 0100 0000
358 0x1441, //105 = 0110 1001 -> 0001 0100 0100 0001
359 0x1444, //106 = 0110 1010 -> 0001 0100 0100 0100
360 0x1445, //107 = 0110 1011 -> 0001 0100 0100 0101
361 0x1450, //108 = 0110 1100 -> 0001 0100 0101 0000
362 0x1451, //109 = 0110 1101 -> 0001 0100 0101 0001
363 0x1454, //110 = 0110 1110 -> 0001 0100 0101 0100
364 0x1455, //111 = 0110 1111 -> 0001 0100 0101 0101
365
366 0x1500, //112 = 0111 0000 -> 0001 0101 0000 0000
367 0x1501, //113 = 0111 0001 -> 0001 0101 0000 0001
368 0x1504, //114 = 0111 0010 -> 0001 0101 0000 0100
369 0x1505, //115 = 0111 0011 -> 0001 0101 0000 0101
370 0x1510, //116 = 0111 0100 -> 0001 0101 0001 0000
371 0x1511, //117 = 0111 0101 -> 0001 0101 0001 0001
372 0x1514, //118 = 0111 0110 -> 0001 0101 0001 0100
373 0x1515, //119 = 0111 0111 -> 0001 0101 0001 0101
374 0x1540, //120 = 0111 1000 -> 0001 0101 0100 0000
375 0x1541, //121 = 0111 1001 -> 0001 0101 0100 0001
376 0x1544, //122 = 0111 1010 -> 0001 0101 0100 0100
377 0x1545, //123 = 0111 1011 -> 0001 0101 0100 0101
378 0x1550, //124 = 0111 1100 -> 0001 0101 0101 0000
379 0x1551, //125 = 0111 1101 -> 0001 0101 0101 0001
380 0x1554, //126 = 0111 1110 -> 0001 0101 0101 0100
381 0x1555, //127 = 0111 1111 -> 0001 0101 0101 0101
382
383 0x4000, //128 = 1000 0000 -> 0100 0000 0000 0000
384 0x4001, //129 = 1000 0001 -> 0100 0000 0000 0001
385 0x4004, //130 = 1000 0010 -> 0100 0000 0000 0100
386 0x4005, //131 = 1000 0011 -> 0100 0000 0000 0101
387 0x4010, //132 = 1000 0100 -> 0100 0000 0001 0000
388 0x4011, //133 = 1000 0101 -> 0100 0000 0001 0001
389 0x4014, //134 = 1000 0110 -> 0100 0000 0001 0100
390 0x4015, //135 = 1000 0111 -> 0100 0000 0001 0101
391 0x4040, //136 = 1000 1000 -> 0100 0000 0100 0000
392 0x4041, //137 = 1000 1001 -> 0100 0000 0100 0001
393 0x4044, //138 = 1000 1010 -> 0100 0000 0100 0100
394 0x4045, //139 = 1000 1011 -> 0100 0000 0100 0101
395 0x4050, //140 = 1000 1100 -> 0100 0000 0101 0000
396 0x4051, //141 = 1000 1101 -> 0100 0000 0101 0001
397 0x4054, //142 = 1000 1110 -> 0100 0000 0101 0100
398 0x4055, //143 = 1000 1111 -> 0100 0000 0101 0101
399
400 0x4100, //144 = 1001 0000 -> 0100 0001 0000 0000
401 0x4101, //145 = 1001 0001 -> 0100 0001 0000 0001
402 0x4104, //146 = 1001 0010 -> 0100 0001 0000 0100
403 0x4105, //147 = 1001 0011 -> 0100 0001 0000 0101
404 0x4110, //148 = 1001 0100 -> 0100 0001 0001 0000
405 0x4111, //149 = 1001 0101 -> 0100 0001 0001 0001
406 0x4114, //150 = 1001 0110 -> 0100 0001 0001 0100
407 0x4115, //151 = 1001 0111 -> 0100 0001 0001 0101
408 0x4140, //152 = 1001 1000 -> 0100 0001 0100 0000
409 0x4141, //153 = 1001 1001 -> 0100 0001 0100 0001
410 0x4144, //154 = 1001 1010 -> 0100 0001 0100 0100
411 0x4145, //155 = 1001 1011 -> 0100 0001 0100 0101
412 0x4150, //156 = 1001 1100 -> 0100 0001 0101 0000
413 0x4151, //157 = 1001 1101 -> 0100 0001 0101 0001
414 0x4154, //158 = 1001 1110 -> 0100 0001 0101 0100
415 0x4155, //159 = 1001 1111 -> 0100 0001 0101 0101
416
417 0x4400, //160 = 1010 0000 -> 0100 0100 0000 0000
418 0x4401, //161 = 1010 0001 -> 0100 0100 0000 0001
419 0x4404, //162 = 1010 0010 -> 0100 0100 0000 0100
420 0x4405, //163 = 1010 0011 -> 0100 0100 0000 0101
421 0x4410, //164 = 1010 0100 -> 0100 0100 0001 0000
422 0x4411, //165 = 1010 0101 -> 0100 0100 0001 0001
423 0x4414, //166 = 1010 0110 -> 0100 0100 0001 0100
424 0x4415, //167 = 1010 0111 -> 0100 0100 0001 0101
425 0x4440, //168 = 1010 1000 -> 0100 0100 0100 0000
426 0x4441, //169 = 1010 1001 -> 0100 0100 0100 0001
427 0x4444, //170 = 1010 1010 -> 0100 0100 0100 0100
428 0x4445, //171 = 1010 1011 -> 0100 0100 0100 0101
429 0x4450, //172 = 1010 1100 -> 0100 0100 0101 0000
430 0x4451, //173 = 1010 1101 -> 0100 0100 0101 0001
431 0x4454, //174 = 1010 1110 -> 0100 0100 0101 0100
432 0x4455, //175 = 1010 1111 -> 0100 0100 0101 0101
433
434 0x4500, //176 = 1011 0000 -> 0100 0101 0000 0000
435 0x4501, //177 = 1011 0001 -> 0100 0101 0000 0001
436 0x4504, //178 = 1011 0010 -> 0100 0101 0000 0100
437 0x4505, //179 = 1011 0011 -> 0100 0101 0000 0101
438 0x4510, //180 = 1011 0100 -> 0100 0101 0001 0000
439 0x4511, //181 = 1011 0101 -> 0100 0101 0001 0001
440 0x4514, //182 = 1011 0110 -> 0100 0101 0001 0100
441 0x4515, //183 = 1011 0111 -> 0100 0101 0001 0101
442 0x4540, //184 = 1011 1000 -> 0100 0101 0100 0000
443 0x4541, //185 = 1011 1001 -> 0100 0101 0100 0001
444 0x4544, //186 = 1011 1010 -> 0100 0101 0100 0100
445 0x4545, //187 = 1011 1011 -> 0100 0101 0100 0101
446 0x4550, //188 = 1011 1100 -> 0100 0101 0101 0000
447 0x4551, //189 = 1011 1101 -> 0100 0101 0101 0001
448 0x4554, //190 = 1011 1110 -> 0100 0101 0101 0100
449 0x4555, //191 = 1011 1111 -> 0100 0101 0101 0101
450
451 0x5000, //192 = 1100 0000 -> 0101 0000 0000 0000
452 0x5001, //193 = 1100 0001 -> 0101 0000 0000 0001
453 0x5004, //194 = 1100 0010 -> 0101 0000 0000 0100
454 0x5005, //195 = 1100 0011 -> 0101 0000 0000 0101
455 0x5010, //196 = 1100 0100 -> 0101 0000 0001 0000
456 0x5011, //197 = 1100 0101 -> 0101 0000 0001 0001
457 0x5014, //198 = 1100 0110 -> 0101 0000 0001 0100
458 0x5015, //199 = 1100 0111 -> 0101 0000 0001 0101
459 0x5040, //200 = 1100 1000 -> 0101 0000 0100 0000
460 0x5041, //201 = 1100 1001 -> 0101 0000 0100 0001
461 0x5044, //202 = 1100 1010 -> 0101 0000 0100 0100
462 0x5045, //203 = 1100 1011 -> 0101 0000 0100 0101
463 0x5050, //204 = 1100 1100 -> 0101 0000 0101 0000
464 0x5051, //205 = 1100 1101 -> 0101 0000 0101 0001
465 0x5054, //206 = 1100 1110 -> 0101 0000 0101 0100
466 0x5055, //207 = 1100 1111 -> 0101 0000 0101 0101
467
468 0x5100, //208 = 1101 0000 -> 0101 0001 0000 0000
469 0x5101, //209 = 1101 0001 -> 0101 0001 0000 0001
470 0x5104, //210 = 1101 0010 -> 0101 0001 0000 0100
471 0x5105, //211 = 1101 0011 -> 0101 0001 0000 0101
472 0x5110, //212 = 1101 0100 -> 0101 0001 0001 0000
473 0x5111, //213 = 1101 0101 -> 0101 0001 0001 0001
474 0x5114, //214 = 1101 0110 -> 0101 0001 0001 0100
475 0x5115, //215 = 1101 0111 -> 0101 0001 0001 0101
476 0x5140, //216 = 1101 1000 -> 0101 0001 0100 0000
477 0x5141, //217 = 1101 1001 -> 0101 0001 0100 0001
478 0x5144, //218 = 1101 1010 -> 0101 0001 0100 0100
479 0x5145, //219 = 1101 1011 -> 0101 0001 0100 0101
480 0x5150, //220 = 1101 1100 -> 0101 0001 0101 0000
481 0x5151, //221 = 1101 1101 -> 0101 0001 0101 0001
482 0x5154, //222 = 1101 1110 -> 0101 0001 0101 0100
483 0x5155, //223 = 1101 1111 -> 0101 0001 0101 0101
484
485 0x5400, //224 = 1110 0000 -> 0101 0100 0000 0000
486 0x5401, //225 = 1110 0001 -> 0101 0100 0000 0001
487 0x5404, //226 = 1110 0010 -> 0101 0100 0000 0100
488 0x5405, //227 = 1110 0011 -> 0101 0100 0000 0101
489 0x5410, //228 = 1110 0100 -> 0101 0100 0001 0000
490 0x5411, //229 = 1110 0101 -> 0101 0100 0001 0001
491 0x5414, //230 = 1110 0110 -> 0101 0100 0001 0100
492 0x5415, //231 = 1110 0111 -> 0101 0100 0001 0101
493 0x5440, //232 = 1110 1000 -> 0101 0100 0100 0000
494 0x5441, //233 = 1110 1001 -> 0101 0100 0100 0001
495 0x5444, //234 = 1110 1010 -> 0101 0100 0100 0100
496 0x5445, //235 = 1110 1011 -> 0101 0100 0100 0101
497 0x5450, //236 = 1110 1100 -> 0101 0100 0101 0000
498 0x5451, //237 = 1110 1101 -> 0101 0100 0101 0001
499 0x5454, //238 = 1110 1110 -> 0101 0100 0101 0100
500 0x5455, //239 = 1110 1111 -> 0101 0100 0101 0101
501
502 0x5500, //240 = 1111 0000 -> 0101 0101 0000 0000
503 0x5501, //241 = 1111 0001 -> 0101 0101 0000 0001
504 0x5504, //242 = 1111 0010 -> 0101 0101 0000 0100
505 0x5505, //243 = 1111 0011 -> 0101 0101 0000 0101
506 0x5510, //244 = 1111 0100 -> 0101 0101 0001 0000
507 0x5511, //245 = 1111 0101 -> 0101 0101 0001 0001
508 0x5514, //246 = 1111 0110 -> 0101 0101 0001 0100
509 0x5515, //247 = 1111 0111 -> 0101 0101 0001 0101
510 0x5540, //248 = 1111 1000 -> 0101 0101 0100 0000
511 0x5541, //249 = 1111 1001 -> 0101 0101 0100 0001
512 0x5544, //250 = 1111 1010 -> 0101 0101 0100 0100
513 0x5545, //251 = 1111 1011 -> 0101 0101 0100 0101
514 0x5550, //252 = 1111 1100 -> 0101 0101 0101 0000
515 0x5551, //253 = 1111 1101 -> 0101 0101 0101 0001
516 0x5554, //254 = 1111 1110 -> 0101 0101 0101 0100
517 0x5555 //255 = 1111 1111 -> 0101 0101 0101 0101
518
519]