def decryption(self, ciphertext, key):
        """
        Builds a single cycle AES Decryption circuit

        :param WireVector ciphertext: data to decrypt
        :param WireVector key: AES key to use to encrypt (AES is symmetric)
        :return: a WireVector containing the plaintext
        """
        if len(ciphertext) != self._key_len:
            raise pyrtl.PyrtlError("Ciphertext length is invalid")
        if len(key) != self._key_len:
            raise pyrtl.PyrtlError("key length is invalid")
        key_list = self._key_gen(key)
        t = self._add_round_key(ciphertext, key_list[10])

        for round in range(1, 11):
            t = self._inv_shift_rows(t)
            t = self._sub_bytes(t, True)
            t = self._add_round_key(t, key_list[10 - round])
            if round != 10:
                t = self._mix_columns(t, True)

        return t
def decryption ( self , ciphertext , key ) : if len ( ciphertext ) != self . _key_len : raise pyrtl . PyrtlError ( "Ciphertext length is invalid" ) if len ( key ) != self . _key_len : raise pyrtl . PyrtlError ( "key length is invalid" ) key_list = self . _key_gen ( key ) t = self . _add_round_key ( ciphertext , key_list [ 10 ] ) for round in range ( 1 , 11 ) : t = self . _inv_shift_rows ( t ) t = self . _sub_bytes ( t , True ) t = self . _add_round_key ( t , key_list [ 10 - round ] ) if round != 10 : t = self . _mix_columns ( t , True ) return t
Builds a single cycle AES Decryption circuit

        :param WireVector ciphertext: data to decrypt
        :param WireVector key: AES key to use to encrypt (AES is symmetric)
        :return: a WireVector containing the plaintext