#!/usr/bin/env python3 from z3 import * C1=0x5D7E0D1F2E0F1F84 C2=0x388D76AEE8CB1500 C3=0xD2E9EE7E83C4285B inp, i1, i2, i3, i4, i5, i6, outp = BitVecs('inp i1 i2 i3 i4 i5 i6 outp', 64) s = Solver() s.add(i1==inp*C1) s.add(i2==RotateRight (i1, i1 & 0xF)) s.add(i3==i2 ^ C2) s.add(i4==RotateLeft(i3, i3 & 0xF)) s.add(i5==i4 + C3) s.add(outp==RotateLeft (i5, URem(i5, 60))) s.add(outp==10816636949158156260) s.add(inp!=0x12EE577B63E80B73) print (s.check()) m=s.model() print (m) print (" inp=0x%X" % m[inp].as_long()) print ("outp=0x%X" % m[outp].as_long())