google/K2 — pull request #9 by jmaheswaran (2014-06-19 23:45:07+00:00)
Title: Added Key, KeyVersion, SymmetricKey, AESKeyVersion, AESKeyVersionTest, AESKeyVersionBuilder, KeyVersionBuilder

Added the following Java classes:

**Key** - represents a single Key in K2, contains a list of KeyVersions
**KeyVersion** - abstract class extended by concrete implementations of KeyVersion (such as AESKeyVersion)
**SymmetricKey** - abstract class to represent symmetric key versions
**AESKeyVersion** - class that extends SymmetricKey and represents an AES key version in K2. Supports encryption and decryption of byte arrays and Strings. Supports creation of new AESKeyVersion as well as loading an AESKeyVersion from byte array representations of the key matter and initialization vector. Supports five different encryption modes (CBC, OFB, CTR, ECB, CFB).
**KeyVersionBuilder** - abstract class representing how you build a KeyVersion
**AESKeyVersionBuilder** - this is a static inner class in AESKeyVersion, it is a concrete implementation of KeyVersionBuilder. Follows the builder object oriented design pattern to allow you to make a new AESKeyVersion
**AESKeyVersionTest** - JUnit tests for testing encrypting and decrypting using AESKeyVersion. Also tests AESKeyVesion creation using AESKeyVersionBuilder