def padKey(self, key_bytes):
        '''Pads the used key with zeroes on the right until it meets the expected
           hash input length. Doesn't return the padded key, just changes it
           in-place.'''
        paddedKey = MyBitArray()
        paddedKey.FromBytes(key_bytes)
        if len(paddedKey) < BrownThomasHMAC.expectedBlockLength:
            padding = [0] * (len(paddedKey) - BrownThomasHMAC.expectedBlockLength)
            padding.extend(paddedKey.bits)
            paddedKey.FromBits(padding)
        elif len(paddedKey) > BrownThomasHMAC.expectedBlockLength:
            paddedKey.bits = paddedKey.bits[:BrownThomasHMAC.expectedBlockLength]

        return paddedKey
    def ProcessPermutation(self, bit_array, permutation_box, is_reversed = False):
        # Make resulting bit array                                   
        result = MyBitArray()

        # Process the permutation
        if is_reversed == False:
            for x in permutation_box:
                result.append(bit_array[x - 1])
        else:
            # Reverse the permutation
            result.bits = [0] * len(bit_array)
            for i in range(len(permutation_box)):
                result[permutation_box[i] - 1] = bit_array[i]
            
        return result
    def CreateInitializationVector(self):
        bitLength = 0
        initializationVector = bytearray()

        while bitLength < self.expectedBlockLength:
            appendage = randint(0, 255)
            initializationVector.append(appendage)
            bitLength += appendage.bit_length()
            if bitLength >= self.expectedBlockLength:
                break

        resultBitArray = MyBitArray()
        resultBitArray.FromBytes(initializationVector)
        # Truncate result to expectedBlockLength # of bits
        resultBitArray.bits = resultBitArray.bits[:self.expectedBlockLength]

        return resultBitArray