Skip to content

Commit 90de5fd

Browse files
Update WebCrypto.cs SecureChecksum.
Update WebCrypto.cs SecureChecksum. Double type ends up being faster, we also remove the additional casting which resulted in a performance loss.
1 parent b167014 commit 90de5fd

File tree

1 file changed

+71
-263
lines changed

1 file changed

+71
-263
lines changed

BackendServices/CyberBackendLibrary/Crypto/WebCrypto.cs

Lines changed: 71 additions & 263 deletions
Original file line numberDiff line numberDiff line change
@@ -11,263 +11,71 @@ public static class WebCrypto
1111
{
1212
public static readonly byte[] AuthIV = new byte[] { 0x30, 0x57, 0xB5, 0x1F, 0x32, 0xD4, 0xAD, 0xBF, 0xAA, 0xAA, 0x21, 0x41, 0x6C, 0xDC, 0x5D, 0xF5 };
1313

14-
private static readonly float[] ChecksumFloatBox = new float[] {
15-
58008202f,
16-
283586167f,
17-
691630987f,
18-
0.0121423f,
19-
24496404f,
20-
100693.8f,
21-
11111.00f,
22-
33743066f,
23-
11161060f,
24-
22.609399f,
25-
8.0000000f,
26-
656079619f,
27-
0.0001639f,
28-
254526166f,
29-
738776787f,
30-
455288633f,
31-
0.0000000f,
32-
float.MinValue,
33-
float.MaxValue,
34-
9.9999999f,
35-
-66916347f,
36-
8.001010f,
37-
24885909f,
38-
0.0335716f,
39-
345748357f,
40-
44845496f,
41-
217480376f,
42-
13121294f,
43-
158692601f,
44-
32197227f,
45-
564358.0f,
46-
0.000000f,
47-
25984833f,
48-
float.MaxValue,
49-
0.000000f,
50-
306495034f,
51-
0.0000000f,
52-
-0.0000000f,
53-
0.0000003f,
54-
-685.0607f,
55-
236381221f,
56-
0.0000000f,
57-
48180597f,
58-
45155118f,
59-
1976.2049f,
60-
-19991440f,
61-
-14114456f,
62-
0.000004f,
63-
0.0000000f,
64-
45522309f,
65-
2.000000f,
66-
154946698f,
67-
-1.0000009f,
68-
63222279f,
69-
-65.03404f,
70-
3.0000000f,
71-
-1.299990f,
72-
0.000000f,
73-
85.476051f,
74-
48973531f,
75-
37662912f,
76-
-0.000000f,
77-
-19991.000f,
78-
307838413f,
79-
904143232f,
80-
-107104265f,
81-
213395580f,
82-
0.000000f,
83-
0.0000000f,
84-
18.33077f,
85-
0.0000000f,
86-
57067016f,
87-
14917448f,
88-
432.62677f,
89-
99999999f,
90-
0.000887f,
91-
-389197792f,
92-
0.0000000f,
93-
52872964f,
94-
0.8713466f,
95-
363465965f,
96-
999999990f,
97-
-0.000000f,
98-
49137600f,
99-
73203757f,
100-
0.000000f,
101-
99984.100f,
102-
-530440842f,
103-
0.0000000f,
104-
1.1807239f,
105-
2584606.7f,
106-
0.000000f,
107-
0.000000f,
108-
0.0000000f,
109-
3383709.5f,
110-
3.278632f,
111-
0.000000f,
112-
0.000000f,
113-
455318494f,
114-
-91443337f,
115-
float.MaxValue,
116-
778152399f,
117-
0.0000000f,
118-
234353870f,
119-
0.0009164f,
120-
1119.0000f,
121-
150841736f,
122-
9.0880000f,
123-
155608066f,
124-
1.5884156f,
125-
113359872f,
126-
0.000000f,
127-
float.MaxValue,
128-
-0.0000000f,
129-
99956886f,
130-
99.000000f,
131-
111.00000f,
132-
337012321f,
133-
12136144f,
134-
4.783637f,
135-
106917.5f,
136-
6.6644000f,
137-
806013785f,
138-
16321673f,
139-
14066396f,
140-
35364254f,
141-
38071700f,
142-
-411691540f,
143-
0.025415f,
144-
31909135f,
145-
13653414f,
146-
9.1100000f,
147-
574320387f,
148-
-28599966f,
149-
2.0403958f,
150-
736205017f,
151-
10.646077f,
152-
0.0004768f,
153-
12589274f,
154-
92538261f,
155-
0.6502635f,
156-
-281029210f,
157-
0.0000000f,
158-
0.000000f,
159-
27956324f,
160-
129829580f,
161-
0.0000000f,
162-
81660997f,
163-
534194995f,
164-
192919466f,
165-
367647210f,
166-
0.55555555f,
167-
-620646330f,
168-
520537602f,
169-
164146190f,
170-
87026353f,
171-
810672770f,
172-
1.0000000f,
173-
0.0007157f,
174-
3.000000f,
175-
10973.481f,
176-
789490777f,
177-
0.000000f,
178-
0.0000122f,
179-
0.0000027f,
180-
-0.007104f,
181-
0.000000f,
182-
0.0000000f,
183-
704.64929f,
184-
13869565f,
185-
-8.000000f,
186-
42714203f,
187-
18517149f,
188-
0.000000f,
189-
-44077661f,
190-
0.000000f,
191-
56232092f,
192-
13171912f,
193-
321896641f,
194-
79.715774f,
195-
116500676f,
196-
33671630f,
197-
113833607f,
198-
0.000027f,
199-
-0.000490f,
200-
4926.680f,
201-
249628960f,
202-
24789044f,
203-
779834022f,
204-
-114004686f,
205-
11813414f,
206-
39849447f,
207-
331297423f,
208-
0.000000f,
209-
298826107f,
210-
4.4202899f,
211-
-0.4316006f,
212-
685650963f,
213-
0.000000f,
214-
114157306f,
215-
-387315200f,
216-
0.0000000f,
217-
288964480f,
218-
144.59900f,
219-
0.099100f,
220-
05614100f,
221-
0.0000001f,
222-
20511712f,
223-
-58915550f,
224-
19.84004f,
225-
0.0000000f,
226-
9.000000f,
227-
0.000000f,
228-
771425661f,
229-
0.000000f,
230-
1.0000000f,
231-
1317.196f,
232-
0.0000014f,
233-
15941265f,
234-
49330645f,
235-
218309042f,
236-
0.000000f,
237-
55.40400f,
238-
36322385f,
239-
0.0030822f,
240-
float.MaxValue,
241-
0.000000f,
242-
948228673f,
243-
-0.000000f,
244-
49617375f,
245-
28899893f,
246-
799385305f,
247-
38902177f,
248-
525543053f,
249-
0.006318f,
250-
32261.566f,
251-
121926.03f,
252-
749418696f,
253-
147206035f,
254-
92048209f,
255-
268444598f,
256-
20088921f,
257-
float.MinValue,
258-
20665186f,
259-
0.0000000f,
260-
26009441f,
261-
141566736f,
262-
0.0000966f,
263-
-0.0000000f,
264-
222.0000f,
265-
-99178045f,
266-
27448502f,
267-
0.000000f,
268-
-9984210f,
269-
0.0000000f,
270-
34751204f
14+
private static readonly double[] ChecksumDoubleBox = new double[] {
15+
2.7887184390393327E-68, -1.8618331480548654E+44, -4.3020517462112105E-88, 2.7690669394447383E-306,
16+
-4.4732610650720826E+186, -1.4390889935876456E-122, 9.011151663372176E-162, 4.2908917155383753E-218,
17+
-2.4128387770212816E-68, -2.302277439516697E+17, -1.42652914942737E+76, -5.8837740751567983E+133,
18+
1.5920040750264217E+296, 1.0396241970410689E+80, -4.5251989463276728E-37, -99908801504.216187,
19+
-9.6938069800013986E-234, 7154320198.8792391, 3.3350146220305454, 4.5992494633926639E+296,
20+
0.00015538478019864411, -2.3770471563162649E-231, -3.7776792306925663E-257, -3.2751772927936956E-79,
21+
2.9753036182759686E+19, -3.4108151155201765E-97, 1.8254489178010996E-150, -1.533309463713607E+223,
22+
-3.3038829395282477E-163, -3.5867627522725082E-44, -8.0575990854406417E+228, -4.5693368234658098E+218,
23+
1.5758545622916187E+250, -3.8469203628037247E+75, -7.7468478373878765E+283, 2.9070685939131584E-109,
24+
6.3703271911431292E-267, 3221.4418522251376, 5.4205212587320372E+146, -8.0205306949294802E+33,
25+
-9.4975431916177958E-136, 3.667794057662362E-115, 7.7199257831233639E-151, -2.1070369526203118E+101,
26+
1.6411659940921769E-155, -3.6168969623686786E-163, 2.1579389902107392E-277, 4.874590773217776E-111,
27+
4.0857360992391282E-165, 1.0606435456003952E+267, 5.7931290514683669E-152, -6.7290098482703866E+52,
28+
1.2606024827897781E+296, -1.6704953006900546E-176, -3.0078722972120132E+48, 3.1447104851678525E+301,
29+
1915.2152581197442, 3.3184196363573966E+181, 6.1149917535759973E-276, 5.4064678119532772E-23,
30+
-1.0984738414178737E-88, 6.1990027968293353E-291, 3.4566479109573149E-196, -5.3509295815048191E-26,
31+
1.6505428070349743E+277, -9.6811524958504798E+67, 1.1280023390074459E+149, -4.9292339788735822E-68,
32+
2.2601210796010041E+178, 8.5226517645726473E+190, -1.0017171101609985E-279, -3.65646314408369E-50,
33+
2.2970458601470527E+32, 1.0565926139826181E+120, -1.2064366402132023E-257, -2.9763571200300399E-212,
34+
7.4113698535820762E+30, 4.8640419208754734E-102, 10521018956905.494, 2.4526076739600515E-218,
35+
-1.5830022524963814E-73, 3.4336565057851734E+189, -2.3577655252445132E-156, -9.8917585013646492E-214,
36+
1.0989790604300809E+275, -1.2587740892853646E+280, 9.4814881264904194E-182, -1.1571531521085438E+237,
37+
1.229603368447179E+177, -2.604114864379276E+231, -9.2664762752613728E+19, 3.1108827462661377E+207,
38+
-0.00097578440812214106, -1.6334311869848364E+64, 2.1522092663265792E-148, -9.703594347075139E-116,
39+
-5.38618978004519E+153, 1.5183273612167631E-68, 1.488965790360276E+231, -1.9635140707561793E+263,
40+
8.3909068205945064E-24, 9.0358877500255654E+296, -9.1999672792620295E+304, 3.5512093967849135E+264,
41+
-2.8892650165544142E+105, 4.3108753206738937E-193, -1.8348272430681013E-43, 5.1858841474652699E-213,
42+
-3.004636725533007E-243, 6.132335794645227E+296, -3.7468512147382775E-154, 7.6218053022237471E-96,
43+
4.3743536049921071E-103, 5.9816034318820231E-216, 1.460199038405993E-91, 6.5876192666238764E+29,
44+
-7.3794025156926594E+268, 5.7991955341983553E-13, -5.6634238293438093E+89, -5.8200791917381605E+113,
45+
-9.382352775848059E+207, 2.861558467972407E-77, 2.4696625114917344E-110, 2.7557374555587394E-267,
46+
-2.4824860795877484E+248, -2.3404664456505793E+142, 1.1936363470265948E-138, -5.1554094132155965E+218,
47+
-2.1345621384067773E+95, 3.9095198281989856E-22, -2.5788222256938449E+115, 1.9099286980025499E-239,
48+
5.5884812735780678E-97, -4.3532845559098668E-234, -1.2510799969917003E-181, 4.5603347604034982E+136,
49+
4.7061203764035123E-83, 9.1737236235132167E-41, -2.613613939729813E-298, 1.9880402498870573E+83,
50+
1.7345656478778084E+249, -3.0319077060207514E-105, -6.7629333338910013E+294, -1.6866269280513859E+99,
51+
-3.3783315435921158E-248, -5.0835175037376279E+51, 2.2823484706956437E+223, -5.2350800373676555E-66,
52+
2.1938940008469276E-254, 2.6638615147066538E+223, 2.4842709854584848E+182, -1.0299057921221703E-27,
53+
3.0990818534379688E+185, 2.0262114067427639E-188, -5.4296554749002973E+66, 4.7675539353956493E+169,
54+
1.3573132727962003E-118, -6.5274465463956772E-14, -4.5392607746338724E-127, 1.6102418832131022E-23,
55+
-1.1847308830399821E+132, 1.2513568633577283E-16, -1.0228949260107244E+112, -8.9922531416247386E+192,
56+
7.916548295980459E-222, 1.2312727320104881E+232, -1.6122158694745404E-18, -3.481233193000274E-90,
57+
1.1167822845877998E-174, 3.0933218387919583E+155, 3.5277642137107372E+44, -2.9137622769215298E+290,
58+
1.9957749835438084E+236, 6.1872472933038688E-164, 5.2600259335078834E+243, -1.4443859349276303E+148,
59+
5.1467859055870169E+229, 7.7995527993037581E+130, -1.1114533180621355E-125, 2.6399665987764258E+231,
60+
4.2784642805717917E+60, 5.4325889050482818E-24, 2.3471782221662184E-139, 1.5023114689184499E+139,
61+
-7.739248628015553E-261, -1.2718020201744012E+243, -1.9381306484670001E+67, -4.6914660580129212E+70,
62+
-1.1133219329239814E-265, 3.6846941503987795E+249, -2.0748351868579771E+204, 6.6937077510630353E+112,
63+
-6.2048307225072857E-139, 3.176804470596129E-165, -2.7918709132760115E-30, -1.0492637299075539E+301,
64+
-2.6913198235452055E+26, -2.9117223403452271E+233, -4.7027363008739307E-228, 1.8114587021063903E-271,
65+
-1.3241417053933245E+48, 3.6325124729858898E+91, -6.2457791807094912E-141, -1.4491174268613238E+237,
66+
9.8874123752594577E+120, -2.0319709324516646E+28, -1.5957803938054728E+152, 3.1874238863547971E+279,
67+
-1.8250643090422224E-303, 5.9599696895418363E+64, -2.2787607401244759E-36, 1.5008922629428054E+65,
68+
1.1505681598544734E+148, -1.3637263423245691E+49, -4.8856652999596355E-147, -2.9116196687899166E+205,
69+
1.8874332547772457E+175, -6.5990215259187729E-33, 2.6264478209319808E+277, 1.5689005450286684E-299,
70+
-6.1497353187898311E-262, 1.9581923365154108E+242, 3.8357464877695169E+219, -7.0508384785114966E+159,
71+
6.0207319343426195E+116, 1.5765702742095276E+54, 4.9958914890061474E+286, -3.6781148546295676E-239,
72+
-6.0586380916259018E-146, 1.0108359360144948E-84, 1.0745744993668423E-293, 9.2956759200531128E+287,
73+
-4.7638929609005592E+115, 9.5054275587231182E-84, -1.8743692919210275E+266, -2.0903280235511906E-65,
74+
2.6520969143313191E+44, 2.5068662790255933E-108, 7.4153606567030972E-173, 0.027621597514295559,
75+
1.4414796379735879E-59, 8.9494241208820869E+230, -1.9129924797775677E+176, -3.8951193066001035E-157,
76+
1.1346280594792284E-121, -2.316668663199865E-205, -1.5072932644663529E-226, -1.629331170675189E-133,
77+
1.9851829729633109E-177, 9.7822255568416942E+240, 9.862710004113815E-199, -6.1538515262395028E+109,
78+
6.7804585434686301E-67, -6.4119939251743156E-51, -5.3875889389093929E+155, 8.3674428579373504E+136
27179
};
27280

27381
private static readonly byte[] ChecksumByteBox = new byte[] { 244, 255, 193, 198, 73,
@@ -409,19 +217,19 @@ public static class WebCrypto
409217
{
410218
byte currentByte = 0;
411219
int DataIndex = 0;
412-
float tempFloat = (float)(initialValue & 0xFFFFFF | 0x3F000000);
220+
double tempDouble = BitConverter.Int64BitsToDouble(!BitConverter.IsLittleEndian ? EndianTools.EndianUtils.EndianSwap(initialValue) : initialValue);
413221
byte[] CheckSumBytes = new byte[inputData.Length];
414222

415223
Ionic.Crc.CRC32 crc = new();
416224

417225
do
418226
{
419-
currentByte = (byte)(inputData[DataIndex] ^ BitConverter.SingleToInt32Bits(!BitConverter.IsLittleEndian ? EndianTools.EndianUtils.EndianSwap(tempFloat) : tempFloat));
227+
currentByte = (byte)(inputData[DataIndex] ^ BitConverter.DoubleToInt64Bits(!BitConverter.IsLittleEndian ? EndianTools.EndianUtils.EndianSwap(tempDouble) : tempDouble));
420228
CheckSumBytes[DataIndex] = currentByte;
421-
tempFloat = (ChecksumFloatBox[currentByte]) /
422-
(float)(((uint)(ChecksumByteBox[(uint)tempFloat & 0xFF]) << 0x10) |
423-
((uint)(ChecksumByteBox[(uint)tempFloat >> 8 & 0xFF]) << 8) |
424-
(uint)(ChecksumByteBox[(uint)tempFloat >> 0x10 & 0xFF]) | 0x3F000000);
229+
tempDouble = ChecksumDoubleBox[currentByte] /
230+
(((uint)ChecksumByteBox[(uint)tempDouble & 0xFF] << 0x10) |
231+
((uint)ChecksumByteBox[(uint)tempDouble >> 8 & 0xFF] << 8) |
232+
ChecksumByteBox[(uint)tempDouble >> 0x10 & 0xFF] | 0x3F000000);
425233
DataIndex++;
426234
} while (DataIndex != inputData.Length);
427235

0 commit comments

Comments
 (0)