NBitcoin.BouncyCastle.Crypto.Digests.LongDigest.ProcessBlock C# (CSharp) 메소드

ProcessBlock() 공개 메소드

public ProcessBlock ( ) : void
리턴 void
		public void ProcessBlock()
		{
			AdjustByteCounts();

			//
			// expand 16 word block into 80 word blocks.
			//
			for(int ti = 16; ti <= 79; ++ti)
			{
				W[ti] = Sigma1(W[ti - 2]) + W[ti - 7] + Sigma0(W[ti - 15]) + W[ti - 16];
			}

			//
			// set up working variables.
			//
			ulong a = H1;
			ulong b = H2;
			ulong c = H3;
			ulong d = H4;
			ulong e = H5;
			ulong f = H6;
			ulong g = H7;
			ulong h = H8;

			int t = 0;
			for(int i = 0; i < 10; i++)
			{
				// t = 8 * i
				h += Sum1(e) + Ch(e, f, g) + K[t] + W[t++];
				d += h;
				h += Sum0(a) + Maj(a, b, c);

				// t = 8 * i + 1
				g += Sum1(d) + Ch(d, e, f) + K[t] + W[t++];
				c += g;
				g += Sum0(h) + Maj(h, a, b);

				// t = 8 * i + 2
				f += Sum1(c) + Ch(c, d, e) + K[t] + W[t++];
				b += f;
				f += Sum0(g) + Maj(g, h, a);

				// t = 8 * i + 3
				e += Sum1(b) + Ch(b, c, d) + K[t] + W[t++];
				a += e;
				e += Sum0(f) + Maj(f, g, h);

				// t = 8 * i + 4
				d += Sum1(a) + Ch(a, b, c) + K[t] + W[t++];
				h += d;
				d += Sum0(e) + Maj(e, f, g);

				// t = 8 * i + 5
				c += Sum1(h) + Ch(h, a, b) + K[t] + W[t++];
				g += c;
				c += Sum0(d) + Maj(d, e, f);

				// t = 8 * i + 6
				b += Sum1(g) + Ch(g, h, a) + K[t] + W[t++];
				f += b;
				b += Sum0(c) + Maj(c, d, e);

				// t = 8 * i + 7
				a += Sum1(f) + Ch(f, g, h) + K[t] + W[t++];
				e += a;
				a += Sum0(b) + Maj(b, c, d);
			}

			H1 += a;
			H2 += b;
			H3 += c;
			H4 += d;
			H5 += e;
			H6 += f;
			H7 += g;
			H8 += h;

			//
			// reset the offset and clean out the word buffer.
			//
			wOff = 0;
			Array.Clear(W, 0, 16);
		}