class HexaPDF::Encryption::RubyAES
def expand_key(key)
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