+ /* This is a more-optimized way of doing ShiftRows than using
+ * bytes2word() and word2bytes() to pack and unpack the state matrix
+ * into words in order to use the shift-or method of doing the
+ * circular shift. It works because the memory used by a std::vector
+ * is guaranteed to be contiguous.
+ *
+ * Since bytes are stored in the byteArray vector, and they are in
+ * the proper order, we can access it like a word, and then shift that,
+ * instead of packing and then unpacking later.
+ *
+ * This should improve performance a little bit, because we are doing
+ * less assignments now. We do have to do more work in encrypt() and
+ * decrypt(), but that is 16 assignments, vs. 32 assignments per call
+ * to ShiftRows(). */
+