--- /dev/null
+def randomart(dgst, header="DIGEST"):
+ """Drunked-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