def randomart(dgst, header="DIGEST"): """Drunken-bishop algorithm for visualizing random art of the digest """ augmentation = " .o+=*BOX@%&#/^SE" max_len = len(augmentation) - 1 field_y = 8 + 1 field_x = 8 * 2 + 1 field = [[0 for _ in range(field_y)] for _ in range(field_x)] dgst = bytearray(dgst) x = field_x // 2 y = field_y // 2 for byte in dgst: for _ in range(4): x += 1 if (byte & 0x1) else -1 y += 1 if (byte & 0x2) else -1 x = min(max(x, 0), field_x - 1) y = min(max(y, 0), field_y - 1) if field[x][y] < max_len - 2: field[x][y] += 1 byte >>= 2 field[field_x // 2][field_y // 2] = augmentation.index("S") field[x][y] = augmentation.index("E") result = ["+--[%s]%s+" % (header, "-" * (field_x - 2 - 2 - len(header)))] for y in range(field_y): result.append("|%s|" % "".join( [augmentation[min(field[x][y], max_len)] for x in range(field_x)] )) result.append("+%s+" % ("-" * field_x)) return result