class HexaPDF::Encryption::RubyAES

def expand_key(key)

algorithm.
Generates NUMBER_OF_ROUNDS + 1 round keys of 128 bit using Rijndael's key scheduling

KeyExpansion step
def expand_key(key)
  key_size = key.size
  nr_bytes = 16 * (NUMBER_OF_ROUNDS[key_size] + 1)
  result = key.bytes
  temp = result[-4, 4]
  while result.size < nr_bytes
    if result.size % key_size == 0
      temp[0] = SBOX[temp[1]] ^ RCON[result.size / key_size]
      temp[1] = SBOX[temp[2]]
      temp[2] = SBOX[temp[3]]
      temp[3] = SBOX[result[-4]] # result[-4] is equal to temp[0]
    elsif key_size == 32 && result.size % key_size == 16
      temp[0] = SBOX[temp[0]]
      temp[1] = SBOX[temp[1]]
      temp[2] = SBOX[temp[2]]
      temp[3] = SBOX[temp[3]]
    end
    result << (temp[0] ^= result[-key_size])
    result << (temp[1] ^= result[-key_size])
    result << (temp[2] ^= result[-key_size])
    result << (temp[3] ^= result[-key_size])
  end
  result.each_slice(16).to_a
end