This nets a little bit (~1.5%) of performance and makes all of the routines
a little more safe by making sure that class constants cannot be changed
except in the constructor.
Signed-off-by: Ira W. Snyder <devel@irasnyder.com>
static void printState (byteArray &bytes, std::string name);
AES::AES (const byteArray& key)
- : Nb(4) // This is constant in AES
- , Nk(key.size() / 4) // This can be either 4, 6, or 8 (128, 192, or 256 bit)
+ : Nk(key.size() / 4) // This can be either 4, 6, or 8 (128, 192, or 256 bit)
, Nr(Nk + Nb + 2)
, keySchedule(Nb * (Nr+1), 0x00000000)
{
byteArray decrypt (const byteArray& ciphertext) const;
private:
- unsigned int Nb;
- unsigned int Nk;
- unsigned int Nr;
+ /* Block size in words -- Always constant in AES.
+ *
+ * We also might as well make this static and share it between
+ * all instances of AES. */
+ static const unsigned int Nb = 4;
+
+ /* Key size in words -- can be 4, 6, or 8.
+ *
+ * Once it is set by the constructor, it will never change */
+ const unsigned int Nk;
+
+ /* Number of rounds -- depends on key size.
+ *
+ * Once it is set by the constructor, it will never change */
+ const unsigned int Nr;
wordArray keySchedule;