#!/usr/bin/python3
from z3 import *
def same8(v):
return Or(v == 0, v == 0xff)
magic = BitVec('magic', 64)
x = BitVec('x', 64)
y = x * magic
s = Solver()
solve_using(s, ForAll([x],
Or(
Not(And([same8((x >> (i * 8)) & 0xff) for i in range(8)])), # x has bytes that aren't equal to 0xff or 0x00
And([(x >> (i * 8 + 7)) & 1 == (y >> (56 + i)) & 1 for i in range(8)]) # every byte of x has bits that are equal to a corresponding top bit of y
)))
print("magic =", hex(s.model().eval(magic).as_long()))