Skip to content

Commit 6e5df09

Browse files
Add code for different mnemonic lengths + their SHA-256 method
1 parent f62a320 commit 6e5df09

File tree

2 files changed

+376
-13
lines changed

2 files changed

+376
-13
lines changed

Src/FinderOuter/Backend/Cryptography/Hashing/Sha256.cs

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,245 @@ internal unsafe void DoHash(byte[] data, int len)
225225
}
226226
}
227227

228+
229+
// TODO: write tests for each CompressX case below:
230+
public unsafe void Compress16(uint* hPt, uint* wPt)
231+
{
232+
// w4 = 0b10000000_00000000_00000000_00000000U
233+
// w5 to w14 = 0
234+
// w15 = 128
235+
wPt[16] = SSIG0(wPt[1]) + wPt[0];
236+
wPt[17] = 5242880 + SSIG0(wPt[2]) + wPt[1];
237+
wPt[18] = SSIG1(wPt[16]) + SSIG0(wPt[3]) + wPt[2];
238+
wPt[19] = SSIG1(wPt[17]) + 285220864 + wPt[3];
239+
wPt[20] = SSIG1(wPt[18]) + 0b10000000_00000000_00000000_00000000U;
240+
wPt[21] = SSIG1(wPt[19]);
241+
wPt[22] = SSIG1(wPt[20]) + 128;
242+
wPt[23] = SSIG1(wPt[21]) + wPt[16];
243+
wPt[24] = SSIG1(wPt[22]) + wPt[17];
244+
wPt[25] = SSIG1(wPt[23]) + wPt[18];
245+
wPt[26] = SSIG1(wPt[24]) + wPt[19];
246+
wPt[27] = SSIG1(wPt[25]) + wPt[20];
247+
wPt[28] = SSIG1(wPt[26]) + wPt[21];
248+
wPt[29] = SSIG1(wPt[27]) + wPt[22];
249+
wPt[30] = SSIG1(wPt[28]) + wPt[23] + 2097169;
250+
wPt[31] = SSIG1(wPt[29]) + wPt[24] + SSIG0(wPt[16]) + 128;
251+
wPt[32] = SSIG1(wPt[30]) + wPt[25] + SSIG0(wPt[17]) + wPt[16];
252+
wPt[33] = SSIG1(wPt[31]) + wPt[26] + SSIG0(wPt[18]) + wPt[17];
253+
wPt[34] = SSIG1(wPt[32]) + wPt[27] + SSIG0(wPt[19]) + wPt[18];
254+
wPt[35] = SSIG1(wPt[33]) + wPt[28] + SSIG0(wPt[20]) + wPt[19];
255+
wPt[36] = SSIG1(wPt[34]) + wPt[29] + SSIG0(wPt[21]) + wPt[20];
256+
wPt[37] = SSIG1(wPt[35]) + wPt[30] + SSIG0(wPt[22]) + wPt[21];
257+
wPt[38] = SSIG1(wPt[36]) + wPt[31] + SSIG0(wPt[23]) + wPt[22];
258+
wPt[39] = SSIG1(wPt[37]) + wPt[32] + SSIG0(wPt[24]) + wPt[23];
259+
wPt[40] = SSIG1(wPt[38]) + wPt[33] + SSIG0(wPt[25]) + wPt[24];
260+
wPt[41] = SSIG1(wPt[39]) + wPt[34] + SSIG0(wPt[26]) + wPt[25];
261+
wPt[42] = SSIG1(wPt[40]) + wPt[35] + SSIG0(wPt[27]) + wPt[26];
262+
wPt[43] = SSIG1(wPt[41]) + wPt[36] + SSIG0(wPt[28]) + wPt[27];
263+
wPt[44] = SSIG1(wPt[42]) + wPt[37] + SSIG0(wPt[29]) + wPt[28];
264+
wPt[45] = SSIG1(wPt[43]) + wPt[38] + SSIG0(wPt[30]) + wPt[29];
265+
wPt[46] = SSIG1(wPt[44]) + wPt[39] + SSIG0(wPt[31]) + wPt[30];
266+
wPt[47] = SSIG1(wPt[45]) + wPt[40] + SSIG0(wPt[32]) + wPt[31];
267+
wPt[48] = SSIG1(wPt[46]) + wPt[41] + SSIG0(wPt[33]) + wPt[32];
268+
wPt[49] = SSIG1(wPt[47]) + wPt[42] + SSIG0(wPt[34]) + wPt[33];
269+
wPt[50] = SSIG1(wPt[48]) + wPt[43] + SSIG0(wPt[35]) + wPt[34];
270+
wPt[51] = SSIG1(wPt[49]) + wPt[44] + SSIG0(wPt[36]) + wPt[35];
271+
wPt[52] = SSIG1(wPt[50]) + wPt[45] + SSIG0(wPt[37]) + wPt[36];
272+
wPt[53] = SSIG1(wPt[51]) + wPt[46] + SSIG0(wPt[38]) + wPt[37];
273+
wPt[54] = SSIG1(wPt[52]) + wPt[47] + SSIG0(wPt[39]) + wPt[38];
274+
wPt[55] = SSIG1(wPt[53]) + wPt[48] + SSIG0(wPt[40]) + wPt[39];
275+
wPt[56] = SSIG1(wPt[54]) + wPt[49] + SSIG0(wPt[41]) + wPt[40];
276+
wPt[57] = SSIG1(wPt[55]) + wPt[50] + SSIG0(wPt[42]) + wPt[41];
277+
wPt[58] = SSIG1(wPt[56]) + wPt[51] + SSIG0(wPt[43]) + wPt[42];
278+
wPt[59] = SSIG1(wPt[57]) + wPt[52] + SSIG0(wPt[44]) + wPt[43];
279+
wPt[60] = SSIG1(wPt[58]) + wPt[53] + SSIG0(wPt[45]) + wPt[44];
280+
wPt[61] = SSIG1(wPt[59]) + wPt[54] + SSIG0(wPt[46]) + wPt[45];
281+
wPt[62] = SSIG1(wPt[60]) + wPt[55] + SSIG0(wPt[47]) + wPt[46];
282+
wPt[63] = SSIG1(wPt[61]) + wPt[56] + SSIG0(wPt[48]) + wPt[47];
283+
284+
Init(hPt);
285+
CompressBlockWithWSet(hPt, wPt);
286+
}
287+
288+
public unsafe void Compress20(uint* hPt, uint* wPt)
289+
{
290+
// w5 = 0b10000000_00000000_00000000_00000000U
291+
// w6 to w14 = 0
292+
// w15 = 160
293+
wPt[16] = SSIG0(wPt[1]) + wPt[0];
294+
wPt[17] = 4456448 + SSIG0(wPt[2]) + wPt[1];
295+
wPt[18] = SSIG1(wPt[16]) + SSIG0(wPt[3]) + wPt[2];
296+
wPt[19] = SSIG1(wPt[17]) + SSIG0(wPt[4]) + wPt[3];
297+
wPt[20] = SSIG1(wPt[18]) + 285220864 + wPt[4];
298+
wPt[21] = SSIG1(wPt[19]) + 0b10000000_00000000_00000000_00000000U;
299+
wPt[22] = SSIG1(wPt[20]) + 160;
300+
wPt[23] = SSIG1(wPt[21]) + wPt[16];
301+
wPt[24] = SSIG1(wPt[22]) + wPt[17];
302+
wPt[25] = SSIG1(wPt[23]) + wPt[18];
303+
wPt[26] = SSIG1(wPt[24]) + wPt[19];
304+
wPt[27] = SSIG1(wPt[25]) + wPt[20];
305+
wPt[28] = SSIG1(wPt[26]) + wPt[21];
306+
wPt[29] = SSIG1(wPt[27]) + wPt[22];
307+
wPt[30] = SSIG1(wPt[28]) + wPt[23] + 1076363285;
308+
wPt[31] = SSIG1(wPt[29]) + wPt[24] + SSIG0(wPt[16]) + 160;
309+
wPt[32] = SSIG1(wPt[30]) + wPt[25] + SSIG0(wPt[17]) + wPt[16];
310+
wPt[33] = SSIG1(wPt[31]) + wPt[26] + SSIG0(wPt[18]) + wPt[17];
311+
wPt[34] = SSIG1(wPt[32]) + wPt[27] + SSIG0(wPt[19]) + wPt[18];
312+
wPt[35] = SSIG1(wPt[33]) + wPt[28] + SSIG0(wPt[20]) + wPt[19];
313+
wPt[36] = SSIG1(wPt[34]) + wPt[29] + SSIG0(wPt[21]) + wPt[20];
314+
wPt[37] = SSIG1(wPt[35]) + wPt[30] + SSIG0(wPt[22]) + wPt[21];
315+
wPt[38] = SSIG1(wPt[36]) + wPt[31] + SSIG0(wPt[23]) + wPt[22];
316+
wPt[39] = SSIG1(wPt[37]) + wPt[32] + SSIG0(wPt[24]) + wPt[23];
317+
wPt[40] = SSIG1(wPt[38]) + wPt[33] + SSIG0(wPt[25]) + wPt[24];
318+
wPt[41] = SSIG1(wPt[39]) + wPt[34] + SSIG0(wPt[26]) + wPt[25];
319+
wPt[42] = SSIG1(wPt[40]) + wPt[35] + SSIG0(wPt[27]) + wPt[26];
320+
wPt[43] = SSIG1(wPt[41]) + wPt[36] + SSIG0(wPt[28]) + wPt[27];
321+
wPt[44] = SSIG1(wPt[42]) + wPt[37] + SSIG0(wPt[29]) + wPt[28];
322+
wPt[45] = SSIG1(wPt[43]) + wPt[38] + SSIG0(wPt[30]) + wPt[29];
323+
wPt[46] = SSIG1(wPt[44]) + wPt[39] + SSIG0(wPt[31]) + wPt[30];
324+
wPt[47] = SSIG1(wPt[45]) + wPt[40] + SSIG0(wPt[32]) + wPt[31];
325+
wPt[48] = SSIG1(wPt[46]) + wPt[41] + SSIG0(wPt[33]) + wPt[32];
326+
wPt[49] = SSIG1(wPt[47]) + wPt[42] + SSIG0(wPt[34]) + wPt[33];
327+
wPt[50] = SSIG1(wPt[48]) + wPt[43] + SSIG0(wPt[35]) + wPt[34];
328+
wPt[51] = SSIG1(wPt[49]) + wPt[44] + SSIG0(wPt[36]) + wPt[35];
329+
wPt[52] = SSIG1(wPt[50]) + wPt[45] + SSIG0(wPt[37]) + wPt[36];
330+
wPt[53] = SSIG1(wPt[51]) + wPt[46] + SSIG0(wPt[38]) + wPt[37];
331+
wPt[54] = SSIG1(wPt[52]) + wPt[47] + SSIG0(wPt[39]) + wPt[38];
332+
wPt[55] = SSIG1(wPt[53]) + wPt[48] + SSIG0(wPt[40]) + wPt[39];
333+
wPt[56] = SSIG1(wPt[54]) + wPt[49] + SSIG0(wPt[41]) + wPt[40];
334+
wPt[57] = SSIG1(wPt[55]) + wPt[50] + SSIG0(wPt[42]) + wPt[41];
335+
wPt[58] = SSIG1(wPt[56]) + wPt[51] + SSIG0(wPt[43]) + wPt[42];
336+
wPt[59] = SSIG1(wPt[57]) + wPt[52] + SSIG0(wPt[44]) + wPt[43];
337+
wPt[60] = SSIG1(wPt[58]) + wPt[53] + SSIG0(wPt[45]) + wPt[44];
338+
wPt[61] = SSIG1(wPt[59]) + wPt[54] + SSIG0(wPt[46]) + wPt[45];
339+
wPt[62] = SSIG1(wPt[60]) + wPt[55] + SSIG0(wPt[47]) + wPt[46];
340+
wPt[63] = SSIG1(wPt[61]) + wPt[56] + SSIG0(wPt[48]) + wPt[47];
341+
342+
Init(hPt);
343+
CompressBlockWithWSet(hPt, wPt);
344+
}
345+
346+
public unsafe void Compress24(uint* hPt, uint* wPt)
347+
{
348+
// w6 = 0b10000000_00000000_00000000_00000000U
349+
// w7 to w14 = 0
350+
// w15 = 192
351+
wPt[16] = SSIG0(wPt[1]) + wPt[0];
352+
wPt[17] = 7864320 + SSIG0(wPt[2]) + wPt[1];
353+
wPt[18] = SSIG1(wPt[16]) + SSIG0(wPt[3]) + wPt[2];
354+
wPt[19] = SSIG1(wPt[17]) + SSIG0(wPt[4]) + wPt[3];
355+
wPt[20] = SSIG1(wPt[18]) + SSIG0(wPt[5]) + wPt[4];
356+
wPt[21] = SSIG1(wPt[19]) + 285220864 + wPt[5];
357+
wPt[22] = SSIG1(wPt[20]) + 0x800000c0U;
358+
wPt[23] = SSIG1(wPt[21]) + wPt[16];
359+
wPt[24] = SSIG1(wPt[22]) + wPt[17];
360+
wPt[25] = SSIG1(wPt[23]) + wPt[18];
361+
wPt[26] = SSIG1(wPt[24]) + wPt[19];
362+
wPt[27] = SSIG1(wPt[25]) + wPt[20];
363+
wPt[28] = SSIG1(wPt[26]) + wPt[21];
364+
wPt[29] = SSIG1(wPt[27]) + wPt[22];
365+
wPt[30] = SSIG1(wPt[28]) + wPt[23] + 2150629401;
366+
wPt[31] = SSIG1(wPt[29]) + wPt[24] + SSIG0(wPt[16]) + 192;
367+
wPt[32] = SSIG1(wPt[30]) + wPt[25] + SSIG0(wPt[17]) + wPt[16];
368+
wPt[33] = SSIG1(wPt[31]) + wPt[26] + SSIG0(wPt[18]) + wPt[17];
369+
wPt[34] = SSIG1(wPt[32]) + wPt[27] + SSIG0(wPt[19]) + wPt[18];
370+
wPt[35] = SSIG1(wPt[33]) + wPt[28] + SSIG0(wPt[20]) + wPt[19];
371+
wPt[36] = SSIG1(wPt[34]) + wPt[29] + SSIG0(wPt[21]) + wPt[20];
372+
wPt[37] = SSIG1(wPt[35]) + wPt[30] + SSIG0(wPt[22]) + wPt[21];
373+
wPt[38] = SSIG1(wPt[36]) + wPt[31] + SSIG0(wPt[23]) + wPt[22];
374+
wPt[39] = SSIG1(wPt[37]) + wPt[32] + SSIG0(wPt[24]) + wPt[23];
375+
wPt[40] = SSIG1(wPt[38]) + wPt[33] + SSIG0(wPt[25]) + wPt[24];
376+
wPt[41] = SSIG1(wPt[39]) + wPt[34] + SSIG0(wPt[26]) + wPt[25];
377+
wPt[42] = SSIG1(wPt[40]) + wPt[35] + SSIG0(wPt[27]) + wPt[26];
378+
wPt[43] = SSIG1(wPt[41]) + wPt[36] + SSIG0(wPt[28]) + wPt[27];
379+
wPt[44] = SSIG1(wPt[42]) + wPt[37] + SSIG0(wPt[29]) + wPt[28];
380+
wPt[45] = SSIG1(wPt[43]) + wPt[38] + SSIG0(wPt[30]) + wPt[29];
381+
wPt[46] = SSIG1(wPt[44]) + wPt[39] + SSIG0(wPt[31]) + wPt[30];
382+
wPt[47] = SSIG1(wPt[45]) + wPt[40] + SSIG0(wPt[32]) + wPt[31];
383+
wPt[48] = SSIG1(wPt[46]) + wPt[41] + SSIG0(wPt[33]) + wPt[32];
384+
wPt[49] = SSIG1(wPt[47]) + wPt[42] + SSIG0(wPt[34]) + wPt[33];
385+
wPt[50] = SSIG1(wPt[48]) + wPt[43] + SSIG0(wPt[35]) + wPt[34];
386+
wPt[51] = SSIG1(wPt[49]) + wPt[44] + SSIG0(wPt[36]) + wPt[35];
387+
wPt[52] = SSIG1(wPt[50]) + wPt[45] + SSIG0(wPt[37]) + wPt[36];
388+
wPt[53] = SSIG1(wPt[51]) + wPt[46] + SSIG0(wPt[38]) + wPt[37];
389+
wPt[54] = SSIG1(wPt[52]) + wPt[47] + SSIG0(wPt[39]) + wPt[38];
390+
wPt[55] = SSIG1(wPt[53]) + wPt[48] + SSIG0(wPt[40]) + wPt[39];
391+
wPt[56] = SSIG1(wPt[54]) + wPt[49] + SSIG0(wPt[41]) + wPt[40];
392+
wPt[57] = SSIG1(wPt[55]) + wPt[50] + SSIG0(wPt[42]) + wPt[41];
393+
wPt[58] = SSIG1(wPt[56]) + wPt[51] + SSIG0(wPt[43]) + wPt[42];
394+
wPt[59] = SSIG1(wPt[57]) + wPt[52] + SSIG0(wPt[44]) + wPt[43];
395+
wPt[60] = SSIG1(wPt[58]) + wPt[53] + SSIG0(wPt[45]) + wPt[44];
396+
wPt[61] = SSIG1(wPt[59]) + wPt[54] + SSIG0(wPt[46]) + wPt[45];
397+
wPt[62] = SSIG1(wPt[60]) + wPt[55] + SSIG0(wPt[47]) + wPt[46];
398+
wPt[63] = SSIG1(wPt[61]) + wPt[56] + SSIG0(wPt[48]) + wPt[47];
399+
400+
Init(hPt);
401+
CompressBlockWithWSet(hPt, wPt);
402+
}
403+
404+
public unsafe void Compress28(uint* hPt, uint* wPt)
405+
{
406+
// w7 = 0b10000000_00000000_00000000_00000000U
407+
// w8 to w14 = 0
408+
// w15 = 224
409+
wPt[16] = SSIG0(wPt[1]) + wPt[0];
410+
wPt[17] = 7077888 + SSIG0(wPt[2]) + wPt[1];
411+
wPt[18] = SSIG1(wPt[16]) + SSIG0(wPt[3]) + wPt[2];
412+
wPt[19] = SSIG1(wPt[17]) + SSIG0(wPt[4]) + wPt[3];
413+
wPt[20] = SSIG1(wPt[18]) + SSIG0(wPt[5]) + wPt[4];
414+
wPt[21] = SSIG1(wPt[19]) + SSIG0(wPt[6]) + wPt[5];
415+
wPt[22] = SSIG1(wPt[20]) + 285221088 + wPt[6];
416+
wPt[23] = SSIG1(wPt[21]) + wPt[16] + 0b10000000_00000000_00000000_00000000U;
417+
wPt[24] = SSIG1(wPt[22]) + wPt[17];
418+
wPt[25] = SSIG1(wPt[23]) + wPt[18];
419+
wPt[26] = SSIG1(wPt[24]) + wPt[19];
420+
wPt[27] = SSIG1(wPt[25]) + wPt[20];
421+
wPt[28] = SSIG1(wPt[26]) + wPt[21];
422+
wPt[29] = SSIG1(wPt[27]) + wPt[22];
423+
wPt[30] = SSIG1(wPt[28]) + wPt[23] + 3224895517;
424+
wPt[31] = SSIG1(wPt[29]) + wPt[24] + SSIG0(wPt[16]) + 224;
425+
wPt[32] = SSIG1(wPt[30]) + wPt[25] + SSIG0(wPt[17]) + wPt[16];
426+
wPt[33] = SSIG1(wPt[31]) + wPt[26] + SSIG0(wPt[18]) + wPt[17];
427+
wPt[34] = SSIG1(wPt[32]) + wPt[27] + SSIG0(wPt[19]) + wPt[18];
428+
wPt[35] = SSIG1(wPt[33]) + wPt[28] + SSIG0(wPt[20]) + wPt[19];
429+
wPt[36] = SSIG1(wPt[34]) + wPt[29] + SSIG0(wPt[21]) + wPt[20];
430+
wPt[37] = SSIG1(wPt[35]) + wPt[30] + SSIG0(wPt[22]) + wPt[21];
431+
wPt[38] = SSIG1(wPt[36]) + wPt[31] + SSIG0(wPt[23]) + wPt[22];
432+
wPt[39] = SSIG1(wPt[37]) + wPt[32] + SSIG0(wPt[24]) + wPt[23];
433+
wPt[40] = SSIG1(wPt[38]) + wPt[33] + SSIG0(wPt[25]) + wPt[24];
434+
wPt[41] = SSIG1(wPt[39]) + wPt[34] + SSIG0(wPt[26]) + wPt[25];
435+
wPt[42] = SSIG1(wPt[40]) + wPt[35] + SSIG0(wPt[27]) + wPt[26];
436+
wPt[43] = SSIG1(wPt[41]) + wPt[36] + SSIG0(wPt[28]) + wPt[27];
437+
wPt[44] = SSIG1(wPt[42]) + wPt[37] + SSIG0(wPt[29]) + wPt[28];
438+
wPt[45] = SSIG1(wPt[43]) + wPt[38] + SSIG0(wPt[30]) + wPt[29];
439+
wPt[46] = SSIG1(wPt[44]) + wPt[39] + SSIG0(wPt[31]) + wPt[30];
440+
wPt[47] = SSIG1(wPt[45]) + wPt[40] + SSIG0(wPt[32]) + wPt[31];
441+
wPt[48] = SSIG1(wPt[46]) + wPt[41] + SSIG0(wPt[33]) + wPt[32];
442+
wPt[49] = SSIG1(wPt[47]) + wPt[42] + SSIG0(wPt[34]) + wPt[33];
443+
wPt[50] = SSIG1(wPt[48]) + wPt[43] + SSIG0(wPt[35]) + wPt[34];
444+
wPt[51] = SSIG1(wPt[49]) + wPt[44] + SSIG0(wPt[36]) + wPt[35];
445+
wPt[52] = SSIG1(wPt[50]) + wPt[45] + SSIG0(wPt[37]) + wPt[36];
446+
wPt[53] = SSIG1(wPt[51]) + wPt[46] + SSIG0(wPt[38]) + wPt[37];
447+
wPt[54] = SSIG1(wPt[52]) + wPt[47] + SSIG0(wPt[39]) + wPt[38];
448+
wPt[55] = SSIG1(wPt[53]) + wPt[48] + SSIG0(wPt[40]) + wPt[39];
449+
wPt[56] = SSIG1(wPt[54]) + wPt[49] + SSIG0(wPt[41]) + wPt[40];
450+
wPt[57] = SSIG1(wPt[55]) + wPt[50] + SSIG0(wPt[42]) + wPt[41];
451+
wPt[58] = SSIG1(wPt[56]) + wPt[51] + SSIG0(wPt[43]) + wPt[42];
452+
wPt[59] = SSIG1(wPt[57]) + wPt[52] + SSIG0(wPt[44]) + wPt[43];
453+
wPt[60] = SSIG1(wPt[58]) + wPt[53] + SSIG0(wPt[45]) + wPt[44];
454+
wPt[61] = SSIG1(wPt[59]) + wPt[54] + SSIG0(wPt[46]) + wPt[45];
455+
wPt[62] = SSIG1(wPt[60]) + wPt[55] + SSIG0(wPt[47]) + wPt[46];
456+
wPt[63] = SSIG1(wPt[61]) + wPt[56] + SSIG0(wPt[48]) + wPt[47];
457+
458+
Init(hPt);
459+
CompressBlockWithWSet(hPt, wPt);
460+
}
461+
228462
public unsafe void Compress32(uint* hPt, uint* wPt)
229463
{
464+
// w8 = 0b10000000_00000000_00000000_00000000U
465+
// w9 to w14 = 0
466+
// w15 = 256
230467
wPt[16] = SSIG0(wPt[1]) + wPt[0];
231468
wPt[17] = 10485760 + SSIG0(wPt[2]) + wPt[1];
232469
wPt[18] = SSIG1(wPt[16]) + SSIG0(wPt[3]) + wPt[2];

0 commit comments

Comments
 (0)