def decrypt_block(self, block):

        # For efficiency reasons, the state between steps is transmitted via a
        # mutable array, not returned.
        self.add_round_key(block, self.rounds)

        # count rounds down from 15 ... 1
        for round in xrange(self.rounds-1, 0, -1):
            self.shift_rows_inv(block)
            self.sub_bytes(block, aes_inv_sbox)
            self.add_round_key(block, round)
            self.mix_columns_inv(block)

        self.shift_rows_inv(block)
        self.sub_bytes(block, aes_inv_sbox)
        self.add_round_key(block, 0)
        # no mix_columns step in the last round


#### ECB mode implementation
http://www.elasticsearch.org/guide/reference/query-dsl/geo-polygon-filter.html
dataset/ETHPy150Open mrknow/filmkodi/plugin.video.mrknow/lib/utils/pyaes.py/AES.decrypt_block--crossover with--dataset/ETHPy150Open ooici/elasticpy/elasticpy/filter.py/ElasticFilter.geo_polygon