Skip to content

Commit 36540e1

Browse files
committed
Compress code, and add a little more doc.
1 parent 5adb5a9 commit 36540e1

File tree

1 file changed

+71
-238
lines changed

1 file changed

+71
-238
lines changed

src/SshNet.Security.Cryptography.Shared/SHA1HashProvider.cs

Lines changed: 71 additions & 238 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)