Beispiel #1
0
    def _hash(self, bytes, aggresive=False):
        idx = 0
        ret = []

        output_size = self.output_size
        ignore_range = self.ignore_range
        bsize = self.bsize
        total_size = len(bytes)
        rappend = ret.append
        chunk_size = idx * bsize
        reduce_errors = self.reduce_errors
        # Calculate the sum of every block
        while 1:
            chunk_size = idx * bsize
            # print "pre"
            buf = bytes[chunk_size : chunk_size + bsize]
            # print "post"
            char = modsum(buf)

            if reduce_errors:
                if char != 255 and char != 0:
                    rappend(chr(char))
            else:
                rappend(chr(char))

            idx += 1

            if chunk_size + bsize > total_size:
                break

        ret = "".join(ret)
        size = len(ret) / output_size
        buf = []

        # Adjust the output to the desired output size
        for c in xrange(0, output_size):
            if aggresive:
                buf.append(ret[c : c + size + 1][ignore_range : ignore_range + 1])
            else:
                buf.append(ret[c : c + size + 1][1:2])

            i = 0
            for x in ret[c : c + size + 1]:
                i += 1
                if i != ignore_range:
                    continue
                i = 0
                buf += x
                break

        ret = "".join(buf)

        return base64.b64encode(ret).strip("=")[:output_size]
Beispiel #2
0
    def _hash(self, bytes, aggresive=False):
        idx = 0
        ret = []

        output_size = self.output_size
        ignore_range = self.ignore_range
        bsize = self.bsize
        total_size = len(bytes)
        rappend = ret.append
        chunk_size = idx * bsize
        reduce_errors = self.reduce_errors
        # Calculate the sum of every block
        while 1:
            chunk_size = idx * bsize
            #print "pre"
            buf = bytes[chunk_size:chunk_size + bsize]
            #print "post"
            char = modsum(buf)

            if reduce_errors:
                if char != 255 and char != 0:
                    rappend(chr(char))
            else:
                rappend(chr(char))

            idx += 1

            if chunk_size + bsize > total_size:
                break

        ret = "".join(ret)
        size = len(ret) / output_size
        buf = []

        # Adjust the output to the desired output size
        for c in xrange(0, output_size):
            if aggresive:
                buf.append(ret[c:c + size + 1][ignore_range:ignore_range + 1])
            else:
                buf.append(ret[c:c + size + 1][1:2])

            i = 0
            for x in ret[c:c + size + 1]:
                i += 1
                if i != ignore_range:
                    continue
                i = 0
                buf += x
                break

        ret = "".join(buf)

        return base64.b64encode(ret).strip("=")[:output_size]