1. A method comprising: receiving data from a calling program; generating a digital signature, using public key encryption, over both the data and one or more conditions that are to be satisfied in order for the data to be revealed; and returning the digital signature to the calling program.