@@ -20,15 +20,30 @@ internal class SHA1HashProvider : HashProviderBase
2020 /// </summary>
2121 private const int BlockSize = 64 ;
2222
23+ /// <summary>
24+ /// Constant word to be used on index 0 to 19 of the word sequence.
25+ /// </summary>
2326 private const uint Y1 = 0x5a827999 ;
27+
28+ /// <summary>
29+ /// Constant word to be used on index 20 to 39 of the word sequence.
30+ /// </summary>
2431 private const uint Y2 = 0x6ed9eba1 ;
32+
33+ /// <summary>
34+ /// Constant word to be used on index 40 to 59 of the word sequence.
35+ /// </summary>
2536 private const uint Y3 = 0x8f1bbcdc ;
37+
38+ /// <summary>
39+ /// Constant word to be used on index 60 to 79 of the word sequence.
40+ /// </summary>
2641 private const uint Y4 = 0xca62c1d6 ;
2742
2843 private uint _h1 , _h2 , _h3 , _h4 , _h5 ;
2944
3045 /// <summary>
31- /// The word buffer .
46+ /// The word sequence .
3247 /// </summary>
3348 private readonly uint [ ] _words ;
3449
@@ -257,277 +272,95 @@ private void ProcessBlock(byte[] buffer, int offset)
257272 var d = _h4 ;
258273 var e = _h5 ;
259274
275+ var idx = 0 ;
276+
260277 //
261278 // round 1
262279 //
263- var idx = 0 ;
264-
265- // E = rotateLeft(A, 5) + F(B, C, D) + E + X[idx++] + Y1
266- // B = rotateLeft(B, 30)
267- e += ( a << 5 | ( a >> 27 ) ) + F ( b , c , d ) + _words [ idx ++ ] + Y1 ;
268- b = b << 30 | ( b >> 2 ) ;
269-
270- d += ( e << 5 | ( e >> 27 ) ) + F ( a , b , c ) + _words [ idx ++ ] + Y1 ;
271- a = a << 30 | ( a >> 2 ) ;
272-
273- c += ( d << 5 | ( d >> 27 ) ) + F ( e , a , b ) + _words [ idx ++ ] + Y1 ;
274- e = e << 30 | ( e >> 2 ) ;
275280
276- b += ( c << 5 | ( c >> 27 ) ) + F ( d , e , a ) + _words [ idx ++ ] + Y1 ;
277- d = d << 30 | ( d >> 2 ) ;
278-
279- a += ( b << 5 | ( b >> 27 ) ) + F ( c , d , e ) + _words [ idx ++ ] + Y1 ;
280- c = c << 30 | ( c >> 2 ) ;
281- // E = rotateLeft(A, 5) + F(B, C, D) + E + X[idx++] + Y1
282- // B = rotateLeft(B, 30)
283- e += ( a << 5 | ( a >> 27 ) ) + F ( b , c , d ) + _words [ idx ++ ] + Y1 ;
284- b = b << 30 | ( b >> 2 ) ;
285-
286- d += ( e << 5 | ( e >> 27 ) ) + F ( a , b , c ) + _words [ idx ++ ] + Y1 ;
287- a = a << 30 | ( a >> 2 ) ;
288-
289- c += ( d << 5 | ( d >> 27 ) ) + F ( e , a , b ) + _words [ idx ++ ] + Y1 ;
290- e = e << 30 | ( e >> 2 ) ;
291-
292- b += ( c << 5 | ( c >> 27 ) ) + F ( d , e , a ) + _words [ idx ++ ] + Y1 ;
293- d = d << 30 | ( d >> 2 ) ;
294-
295- a += ( b << 5 | ( b >> 27 ) ) + F ( c , d , e ) + _words [ idx ++ ] + Y1 ;
296- c = c << 30 | ( c >> 2 ) ;
297- // E = rotateLeft(A, 5) + F(B, C, D) + E + X[idx++] + Y1
298- // B = rotateLeft(B, 30)
299- e += ( a << 5 | ( a >> 27 ) ) + F ( b , c , d ) + _words [ idx ++ ] + Y1 ;
300- b = b << 30 | ( b >> 2 ) ;
301-
302- d += ( e << 5 | ( e >> 27 ) ) + F ( a , b , c ) + _words [ idx ++ ] + Y1 ;
303- a = a << 30 | ( a >> 2 ) ;
304-
305- c += ( d << 5 | ( d >> 27 ) ) + F ( e , a , b ) + _words [ idx ++ ] + Y1 ;
306- e = e << 30 | ( e >> 2 ) ;
307-
308- b += ( c << 5 | ( c >> 27 ) ) + F ( d , e , a ) + _words [ idx ++ ] + Y1 ;
309- d = d << 30 | ( d >> 2 ) ;
281+ for ( var i = 0 ; i < 4 ; i ++ )
282+ {
283+ e += ( a << 5 | ( a >> 27 ) ) + F ( b , c , d ) + _words [ idx ++ ] + Y1 ;
284+ b = b << 30 | ( b >> 2 ) ;
310285
311- a += ( b << 5 | ( b >> 27 ) ) + F ( c , d , e ) + _words [ idx ++ ] + Y1 ;
312- c = c << 30 | ( c >> 2 ) ;
313- // E = rotateLeft(A, 5) + F(B, C, D) + E + X[idx++] + Y1
314- // B = rotateLeft(B, 30)
315- e += ( a << 5 | ( a >> 27 ) ) + F ( b , c , d ) + _words [ idx ++ ] + Y1 ;
316- b = b << 30 | ( b >> 2 ) ;
286+ d += ( e << 5 | ( e >> 27 ) ) + F ( a , b , c ) + _words [ idx ++ ] + Y1 ;
287+ a = a << 30 | ( a >> 2 ) ;
317288
318- d += ( e << 5 | ( e >> 27 ) ) + F ( a , b , c ) + _words [ idx ++ ] + Y1 ;
319- a = a << 30 | ( a >> 2 ) ;
289+ c += ( d << 5 | ( d >> 27 ) ) + F ( e , a , b ) + _words [ idx ++ ] + Y1 ;
290+ e = e << 30 | ( e >> 2 ) ;
320291
321- c += ( d << 5 | ( d >> 27 ) ) + F ( e , a , b ) + _words [ idx ++ ] + Y1 ;
322- e = e << 30 | ( e >> 2 ) ;
292+ b += ( c << 5 | ( c >> 27 ) ) + F ( d , e , a ) + _words [ idx ++ ] + Y1 ;
293+ d = d << 30 | ( d >> 2 ) ;
323294
324- b += ( c << 5 | ( c >> 27 ) ) + F ( d , e , a ) + _words [ idx ++ ] + Y1 ;
325- d = d << 30 | ( d >> 2 ) ;
295+ a += ( b << 5 | ( b >> 27 ) ) + F ( c , d , e ) + _words [ idx ++ ] + Y1 ;
296+ c = c << 30 | ( c >> 2 ) ;
297+ }
326298
327- a += ( b << 5 | ( b >> 27 ) ) + F ( c , d , e ) + _words [ idx ++ ] + Y1 ;
328- c = c << 30 | ( c >> 2 ) ;
329299 //
330300 // round 2
331301 //
332- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y2
333- // B = rotateLeft(B, 30)
334- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y2 ;
335- b = b << 30 | ( b >> 2 ) ;
336-
337- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y2 ;
338- a = a << 30 | ( a >> 2 ) ;
339-
340- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y2 ;
341- e = e << 30 | ( e >> 2 ) ;
342-
343- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y2 ;
344- d = d << 30 | ( d >> 2 ) ;
345-
346- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y2 ;
347- c = c << 30 | ( c >> 2 ) ;
348- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y2
349- // B = rotateLeft(B, 30)
350- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y2 ;
351- b = b << 30 | ( b >> 2 ) ;
352-
353- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y2 ;
354- a = a << 30 | ( a >> 2 ) ;
355-
356- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y2 ;
357- e = e << 30 | ( e >> 2 ) ;
358-
359- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y2 ;
360- d = d << 30 | ( d >> 2 ) ;
361302
362- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y2 ;
363- c = c << 30 | ( c >> 2 ) ;
364- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y2
365- // B = rotateLeft(B, 30)
366- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y2 ;
367- b = b << 30 | ( b >> 2 ) ;
368-
369- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y2 ;
370- a = a << 30 | ( a >> 2 ) ;
371-
372- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y2 ;
373- e = e << 30 | ( e >> 2 ) ;
374-
375- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y2 ;
376- d = d << 30 | ( d >> 2 ) ;
377-
378- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y2 ;
379- c = c << 30 | ( c >> 2 ) ;
380- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y2
381- // B = rotateLeft(B, 30)
382- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y2 ;
383- b = b << 30 | ( b >> 2 ) ;
303+ for ( var i = 0 ; i < 4 ; i ++ )
304+ {
305+ e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y2 ;
306+ b = b << 30 | ( b >> 2 ) ;
384307
385- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y2 ;
386- a = a << 30 | ( a >> 2 ) ;
308+ d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y2 ;
309+ a = a << 30 | ( a >> 2 ) ;
387310
388- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y2 ;
389- e = e << 30 | ( e >> 2 ) ;
311+ c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y2 ;
312+ e = e << 30 | ( e >> 2 ) ;
390313
391- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y2 ;
392- d = d << 30 | ( d >> 2 ) ;
314+ b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y2 ;
315+ d = d << 30 | ( d >> 2 ) ;
393316
394- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y2 ;
395- c = c << 30 | ( c >> 2 ) ;
317+ a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y2 ;
318+ c = c << 30 | ( c >> 2 ) ;
319+ }
396320
397321 //
398322 // round 3
399- // E = rotateLeft(A, 5) + G(B, C, D) + E + X[idx++] + Y3
400- // B = rotateLeft(B, 30)
401- e += ( a << 5 | ( a >> 27 ) ) + G ( b , c , d ) + _words [ idx ++ ] + Y3 ;
402- b = b << 30 | ( b >> 2 ) ;
403-
404- d += ( e << 5 | ( e >> 27 ) ) + G ( a , b , c ) + _words [ idx ++ ] + Y3 ;
405- a = a << 30 | ( a >> 2 ) ;
406-
407- c += ( d << 5 | ( d >> 27 ) ) + G ( e , a , b ) + _words [ idx ++ ] + Y3 ;
408- e = e << 30 | ( e >> 2 ) ;
409-
410- b += ( c << 5 | ( c >> 27 ) ) + G ( d , e , a ) + _words [ idx ++ ] + Y3 ;
411- d = d << 30 | ( d >> 2 ) ;
412-
413- a += ( b << 5 | ( b >> 27 ) ) + G ( c , d , e ) + _words [ idx ++ ] + Y3 ;
414- c = c << 30 | ( c >> 2 ) ;
415- // E = rotateLeft(A, 5) + G(B, C, D) + E + X[idx++] + Y3
416- // B = rotateLeft(B, 30)
417- e += ( a << 5 | ( a >> 27 ) ) + G ( b , c , d ) + _words [ idx ++ ] + Y3 ;
418- b = b << 30 | ( b >> 2 ) ;
419-
420- d += ( e << 5 | ( e >> 27 ) ) + G ( a , b , c ) + _words [ idx ++ ] + Y3 ;
421- a = a << 30 | ( a >> 2 ) ;
422-
423- c += ( d << 5 | ( d >> 27 ) ) + G ( e , a , b ) + _words [ idx ++ ] + Y3 ;
424- e = e << 30 | ( e >> 2 ) ;
425-
426- b += ( c << 5 | ( c >> 27 ) ) + G ( d , e , a ) + _words [ idx ++ ] + Y3 ;
427- d = d << 30 | ( d >> 2 ) ;
428-
429- a += ( b << 5 | ( b >> 27 ) ) + G ( c , d , e ) + _words [ idx ++ ] + Y3 ;
430- c = c << 30 | ( c >> 2 ) ;
431- // E = rotateLeft(A, 5) + G(B, C, D) + E + X[idx++] + Y3
432- // B = rotateLeft(B, 30)
433- e += ( a << 5 | ( a >> 27 ) ) + G ( b , c , d ) + _words [ idx ++ ] + Y3 ;
434- b = b << 30 | ( b >> 2 ) ;
435-
436- d += ( e << 5 | ( e >> 27 ) ) + G ( a , b , c ) + _words [ idx ++ ] + Y3 ;
437- a = a << 30 | ( a >> 2 ) ;
438-
439- c += ( d << 5 | ( d >> 27 ) ) + G ( e , a , b ) + _words [ idx ++ ] + Y3 ;
440- e = e << 30 | ( e >> 2 ) ;
441-
442- b += ( c << 5 | ( c >> 27 ) ) + G ( d , e , a ) + _words [ idx ++ ] + Y3 ;
443- d = d << 30 | ( d >> 2 ) ;
323+ //
444324
445- a += ( b << 5 | ( b >> 27 ) ) + G ( c , d , e ) + _words [ idx ++ ] + Y3 ;
446- c = c << 30 | ( c >> 2 ) ;
447- // E = rotateLeft(A, 5) + G(B, C, D) + E + X[idx++] + Y3
448- // B = rotateLeft(B, 30)
449- e += ( a << 5 | ( a >> 27 ) ) + G ( b , c , d ) + _words [ idx ++ ] + Y3 ;
450- b = b << 30 | ( b >> 2 ) ;
325+ for ( var i = 0 ; i < 4 ; i ++ )
326+ {
327+ e += ( a << 5 | ( a >> 27 ) ) + G ( b , c , d ) + _words [ idx ++ ] + Y3 ;
328+ b = b << 30 | ( b >> 2 ) ;
451329
452- d += ( e << 5 | ( e >> 27 ) ) + G ( a , b , c ) + _words [ idx ++ ] + Y3 ;
453- a = a << 30 | ( a >> 2 ) ;
330+ d += ( e << 5 | ( e >> 27 ) ) + G ( a , b , c ) + _words [ idx ++ ] + Y3 ;
331+ a = a << 30 | ( a >> 2 ) ;
454332
455- c += ( d << 5 | ( d >> 27 ) ) + G ( e , a , b ) + _words [ idx ++ ] + Y3 ;
456- e = e << 30 | ( e >> 2 ) ;
333+ c += ( d << 5 | ( d >> 27 ) ) + G ( e , a , b ) + _words [ idx ++ ] + Y3 ;
334+ e = e << 30 | ( e >> 2 ) ;
457335
458- b += ( c << 5 | ( c >> 27 ) ) + G ( d , e , a ) + _words [ idx ++ ] + Y3 ;
459- d = d << 30 | ( d >> 2 ) ;
336+ b += ( c << 5 | ( c >> 27 ) ) + G ( d , e , a ) + _words [ idx ++ ] + Y3 ;
337+ d = d << 30 | ( d >> 2 ) ;
460338
461- a += ( b << 5 | ( b >> 27 ) ) + G ( c , d , e ) + _words [ idx ++ ] + Y3 ;
462- c = c << 30 | ( c >> 2 ) ;
339+ a += ( b << 5 | ( b >> 27 ) ) + G ( c , d , e ) + _words [ idx ++ ] + Y3 ;
340+ c = c << 30 | ( c >> 2 ) ;
341+ }
463342
464343 //
465344 // round 4
466345 //
467- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y4
468- // B = rotateLeft(B, 30)
469- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y4 ;
470- b = b << 30 | ( b >> 2 ) ;
471-
472- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y4 ;
473- a = a << 30 | ( a >> 2 ) ;
474-
475- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y4 ;
476- e = e << 30 | ( e >> 2 ) ;
477-
478- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y4 ;
479- d = d << 30 | ( d >> 2 ) ;
480-
481- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y4 ;
482- c = c << 30 | ( c >> 2 ) ;
483- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y4
484- // B = rotateLeft(B, 30)
485- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y4 ;
486- b = b << 30 | ( b >> 2 ) ;
487-
488- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y4 ;
489- a = a << 30 | ( a >> 2 ) ;
490346
491- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y4 ;
492- e = e << 30 | ( e >> 2 ) ;
493-
494- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y4 ;
495- d = d << 30 | ( d >> 2 ) ;
496-
497- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y4 ;
498- c = c << 30 | ( c >> 2 ) ;
499- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y4
500- // B = rotateLeft(B, 30)
501- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y4 ;
502- b = b << 30 | ( b >> 2 ) ;
503-
504- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y4 ;
505- a = a << 30 | ( a >> 2 ) ;
506-
507- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y4 ;
508- e = e << 30 | ( e >> 2 ) ;
509-
510- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y4 ;
511- d = d << 30 | ( d >> 2 ) ;
512-
513- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y4 ;
514- c = c << 30 | ( c >> 2 ) ;
515- // E = rotateLeft(A, 5) + H(B, C, D) + E + X[idx++] + Y4
516- // B = rotateLeft(B, 30)
517- e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y4 ;
518- b = b << 30 | ( b >> 2 ) ;
347+ for ( var i = 0 ; i < 4 ; i ++ )
348+ {
349+ e += ( a << 5 | ( a >> 27 ) ) + H ( b , c , d ) + _words [ idx ++ ] + Y4 ;
350+ b = b << 30 | ( b >> 2 ) ;
519351
520- d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y4 ;
521- a = a << 30 | ( a >> 2 ) ;
352+ d += ( e << 5 | ( e >> 27 ) ) + H ( a , b , c ) + _words [ idx ++ ] + Y4 ;
353+ a = a << 30 | ( a >> 2 ) ;
522354
523- c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y4 ;
524- e = e << 30 | ( e >> 2 ) ;
355+ c += ( d << 5 | ( d >> 27 ) ) + H ( e , a , b ) + _words [ idx ++ ] + Y4 ;
356+ e = e << 30 | ( e >> 2 ) ;
525357
526- b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y4 ;
527- d = d << 30 | ( d >> 2 ) ;
358+ b += ( c << 5 | ( c >> 27 ) ) + H ( d , e , a ) + _words [ idx ++ ] + Y4 ;
359+ d = d << 30 | ( d >> 2 ) ;
528360
529- a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ] + Y4 ;
530- c = c << 30 | ( c >> 2 ) ;
361+ a += ( b << 5 | ( b >> 27 ) ) + H ( c , d , e ) + _words [ idx ++ ] + Y4 ;
362+ c = c << 30 | ( c >> 2 ) ;
363+ }
531364
532365 _h1 += a ;
533366 _h2 += b ;
0 commit comments