// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// SHA1 block step.
// In its own file so that a faster assembly or C version
// can be substituted easily.

package sha1

const (
	_K0	= 0x5A827999;
	_K1	= 0x6ED9EBA1;
	_K2	= 0x8F1BBCDC;
	_K3	= 0xCA62C1D6;
)

func _Block(dig *digest, p []byte) int {
	var w [80]uint32;

	n := 0;
	h0, h1, h2, h3, h4 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4];
	for len(p) >= _Chunk {
		// Can interlace the computation of w with the
		// rounds below if needed for speed.
		for i := 0; i < 16; i++ {
			j := i * 4;
			w[i] = uint32(p[j])<<24 | uint32(p[j+1])<<16 | uint32(p[j+2])<<8 | uint32(p[j+3]);
		}
		for i := 16; i < 80; i++ {
			tmp := w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16];
			w[i] = tmp<<1 | tmp>>(32-1);
		}

		a, b, c, d, e := h0, h1, h2, h3, h4;

		// Each of the four 20-iteration rounds
		// differs only in the computation of f and
		// the choice of K (_K0, _K1, etc).
		for i := 0; i < 20; i++ {
			f := b&c | (^b)&d;
			a5 := a<<5 | a>>(32-5);
			b30 := b<<30 | b>>(32-30);
			t := a5 + f + e + w[i] + _K0;
			a, b, c, d, e = t, a, b30, c, d;
		}
		for i := 20; i < 40; i++ {
			f := b ^ c ^ d;
			a5 := a<<5 | a>>(32-5);
			b30 := b<<30 | b>>(32-30);
			t := a5 + f + e + w[i] + _K1;
			a, b, c, d, e = t, a, b30, c, d;
		}
		for i := 40; i < 60; i++ {
			f := b&c | b&d | c&d;
			a5 := a<<5 | a>>(32-5);
			b30 := b<<30 | b>>(32-30);
			t := a5 + f + e + w[i] + _K2;
			a, b, c, d, e = t, a, b30, c, d;
		}
		for i := 60; i < 80; i++ {
			f := b ^ c ^ d;
			a5 := a<<5 | a>>(32-5);
			b30 := b<<30 | b>>(32-30);
			t := a5 + f + e + w[i] + _K3;
			a, b, c, d, e = t, a, b30, c, d;
		}

		h0 += a;
		h1 += b;
		h2 += c;
		h3 += d;
		h4 += e;

		p = p[_Chunk:len(p)];
		n += _Chunk;
	}

	dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4] = h0, h1, h2, h3, h4;
	return n;
}
