@Override
		public void step()
		{
			for(int y = 0; y < 256; y++)
			{
				for(int z = 0; z < 256; z++)
				{
					byte[] byteInput = new byte[]
					{(byte)x, (byte)y, (byte)z};
					byte[] output = Base64.getInstance().encrypt(byteInput);
					byte[] decrypted = Base64.getInstance().decrypt(output);

					assertEquals("output length should be 4", 4, output.length);
					assertEquals("decoded length should be 3", 3, decrypted.length);

					String inputString = String.format("%08d%08d%08d", Integer.parseInt(Integer.toString(x, 2)),
						Integer.parseInt(Integer.toString(y, 2)), Integer.parseInt(Integer.toString(z, 2)));
					String outputString = String.format("%06d%06d%06d%06d", Integer.parseInt(Integer.toString(output[0], 2)),
						Integer.parseInt(Integer.toString(output[1], 2)), Integer.parseInt(Integer.toString(output[2], 2)),
						Integer.parseInt(Integer.toString(output[3], 2)));
					String decryptedString = String.format("%08d%08d%08d",
						Integer.parseInt(Integer.toString(decrypted[0] & 0xFF, 2)),
						Integer.parseInt(Integer.toString(decrypted[1] & 0xFF, 2)),
						Integer.parseInt(Integer.toString(decrypted[2] & 0xFF, 2)));

					assertEquals(x + ":" + y + ":" + z + " input and output string must match", inputString, outputString);
					assertEquals(x + ":" + y + ":" + z + " input and decoded string must match", inputString, decryptedString);
					assertArrayEquals(x + ":" + y + ":" + z + " input and decrypted arrays must match", byteInput, decrypted);
				}

				byte[] byteInput = new byte[]
				{(byte)x, (byte)y};
				byte[] output = Base64.getInstance().encrypt(byteInput);
				byte[] decrypted = Base64.getInstance().decrypt(output);

				assertEquals("output length should be 3", 3, output.length);
				assertEquals("decoded length should be 2", 2, decrypted.length);

				String inputString = String.format("%08d%08d%08d", Integer.parseInt(Integer.toString(x, 2)),
					Integer.parseInt(Integer.toString(y, 2)), 0);
				String outputString = String.format("%06d%06d%06d%06d", Integer.parseInt(Integer.toString(output[0], 2)),
					Integer.parseInt(Integer.toString(output[1], 2)), Integer.parseInt(Integer.toString(output[2], 2)), 0);
				String decryptedString = String.format("%08d%08d%08d",
					Integer.parseInt(Integer.toString(decrypted[0] & 0xFF, 2)),
					Integer.parseInt(Integer.toString(decrypted[1] & 0xFF, 2)), Integer.parseInt(Integer.toString(0, 2)));

				assertEquals(x + ":" + y + ":0 input and output string must match", inputString, outputString);
				assertEquals(x + ":" + y + ":0 input and decoded string must match", inputString, decryptedString);
				assertArrayEquals(x + ":" + y + ":0 input and decrypted arrays must match", byteInput, decrypted);
			}
			byte[] byteInput = new byte[]
			{(byte)x};
			byte[] output = Base64.getInstance().encrypt(byteInput);
			byte[] decrypted = Base64.getInstance().decrypt(output);

			assertEquals("output length should be 2", 2, output.length);
			assertEquals("decoded length should be 1", 1, decrypted.length);

			String inputString = String.format("%08d%08d%08d", Integer.parseInt(Integer.toString(x, 2)), 0, 0);
			String outputString = String.format("%06d%06d%06d%06d", Integer.parseInt(Integer.toString(output[0], 2)),
				Integer.parseInt(Integer.toString(output[1], 2)), 0, 0);
			String decryptedString = String.format("%08d%08d%08d", Integer.parseInt(Integer.toString(decrypted[0] & 0xFF, 2)),
				Integer.parseInt(Integer.toString(0, 2)), Integer.parseInt(Integer.toString(0, 2)));

			assertEquals(x + ":0:0 input and output string must match", inputString, outputString);
			assertEquals(x + ":0:0 input and decoded string must match", inputString, decryptedString);
			assertArrayEquals(x + ":0:0 input and decrypted arrays must match", byteInput, decrypted);

			finish();
		}