'Decrypt a piece of data.
:Parameter ciphertext: The piece of data to decrypt.
:Type ciphertext: byte string, long or a 2-item tuple as returned by `encrypt`
:Return: A byte string if ciphertext was a byte string or a tuple
of byte strings. A long otherwise.'

def decrypt(self, ciphertext):

    wasString = 0
    if (not isinstance(ciphertext, types.TupleType)):
        ciphertext = (ciphertext,)
    if isinstance(ciphertext[0], types.StringType):
        ciphertext = tuple(map(bytes_to_long, ciphertext))
        wasString = 1
    plaintext = self._decrypt(ciphertext)
    if wasString:
        return long_to_bytes(plaintext)
    else:
        return plaintext
