In accordance with certain aspects, data is received from a calling
program. Ciphertext that includes the data is generated, using a
symmetric cipher, in a manner that allows only one or more target
programs to be able to obtain the data from the ciphertext. In accordance
with other aspects, a bit string is received from a calling program. An
identifier of the calling program is checked to determine whether the
calling program is allowed to access data encrypted in ciphertext of the
bit string. The integrity of the data is also verified, and the data is
decrypted using a symmetric key. The data is returned to the calling
program only if the calling program is allowed to access the data and if
the integrity of the data is successfully verified.