@@ -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