Program Obfuscation is the problem of transforming a program into one which is functionally equivalent, yet whose inner workings are completely unintelligible to an adversary. Despite its immense cryptographic utility, program obfuscation has proved to be a hard and elusive goal, as evidenced by the wide-ranging impossibility results, starting with the work of Barak et al. (CRYPTO 2001). There is a limited, although steadily increasing, set of positive results in this area, including obfuscation of point functions, proximity testing, testing of hyperplane membership, and obfuscating re-encryption programs. The presence of auxiliary inputs about secrets is a practical and omnipresent concern in cryptography, and the case of program obfuscation is no different. Achieving program obfuscation was hard to begin with; achieving secure obfuscation in the presence of auxiliary information about the program is downright daunting. In particular, virtually no positive results are known in this ...