// 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.

// The block package implements standard block cipher modes
// that can be wrapped around low-level block cipher implementations.
// See http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html
// and NIST Special Publication 800-38A.
package block

// A Cipher represents an implementation of block cipher
// using a given key.  It provides the capability to encrypt
// or decrypt individual blocks.  The mode implementations
// extend that capability to streams of blocks.
type Cipher interface {
	// BlockSize returns the cipher's block size.
	BlockSize() int;

	// Encrypt encrypts the first block in src into dst.
	// Src and dst may point at the same memory.
	Encrypt(src, dst []byte);

	// Decrypt decrypts the first block in src into dst.
	// Src and dst may point at the same memory.
	Decrypt(src, dst []byte);
}

// Utility routines

func shift1(src, dst []byte) byte {
	var b byte;
	for i := len(src)-1; i >= 0; i-- {
		bb := src[i]>>7;
		dst[i] = src[i]<<1 | b;
		b = bb;
	}
	return b;
}

func same(p, q []byte) bool {
	if len(p) != len(q) {
		return false;
	}
	for i := 0; i < len(p); i++ {
		if p[i] != q[i] {
			return false;
		}
	}
	return true;
}

func copy(p []byte) []byte {
	q := make([]byte, len(p));
	for i, b := range p {
		q[i] = b;
	}
	return q;
}
