After weeks of slaving over FIPS-197, I finally have my own working C/C# implementation of AES-128 which I'm quite happy about. 

The next thing I'm looking to do is implement a `nonce` counter block of configurable length (either 8 or 16 bytes) to convert this block cipher into a stream cipher (CTR mode), according to [NIST 800-38a][1] recommendation.

So to do this, the idea I had was to create from scratch a sort of *BigNumber* implementation that basically reflects how we increment the bits in a byte, starting with the least significant bit:

    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    ...

The concept is come up with the same counting system, incrementing each element in the array (starting with the last element), resetting the LSE ("least significant element") when it's at max and incrementing the previous element.

Here's what I came up with:

    // Re-invent the byte using arbitrary length array (i.e. BigNumber)
    // to increment 16-byte nonce
    void incByte(byte *state, int i)
    {
      // 0000 -> 0001
      if (state[i] < 0xff)
      {
        state[i]++;
        return;
      }
    
      // 0001 -> 0010
      state[i] = 0x00;
      i--;
      incByte(state, i);
    }
    
    void printBytes(byte *state, int len)
    {
      int i;
      for (i = 0; i < len; i++)
      {
        printf("%02X ", state[i]);
      }
    
      printf("\n");
    }
    
    void testInc()
    {
      byte state[] = { 0x00, 0x00, 0x01, 0xee };
    
      int i;
      for (i = 1; i <= 100; i++)
      {
        incByte(state, sizeof(state) - 1);
        printBytes(state, sizeof(state));
      }
    }

And [here is a link][2] to it in action at Ideone.

So I'd just like to get some feedback, not so much on the purpose of all of this or other alternatives out there, but if there are ways to improve it or if this is pretty much it :)

It will then provide me with a way to ensure that the Nonce block for AES-128 in CTR mode gets incremented properly (hence unique) using any arbitrary length byte array.

Thanks!

  [1]: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
  [2]: https://ideone.com/twL8Vx