Const-ify Nb, Nk, Nr
authorIra W. Snyder <devel@irasnyder.com>
Mon, 22 Oct 2007 17:46:26 +0000 (10:46 -0700)
committerIra W. Snyder <devel@irasnyder.com>
Mon, 22 Oct 2007 17:46:26 +0000 (10:46 -0700)
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>
aes.cpp
aes.hpp

diff --git a/aes.cpp b/aes.cpp
index e4aef0b..883d3b3 100644 (file)
--- a/aes.cpp
+++ b/aes.cpp
@@ -9,8 +9,7 @@ static byte xtimes (const byte bx);
 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)
 {
diff --git a/aes.hpp b/aes.hpp
index 43808d4..5d2acd8 100644 (file)
--- a/aes.hpp
+++ b/aes.hpp
@@ -29,9 +29,21 @@ class AES
                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;