'Decrypts ciphertext. Ciphertext is plaintext that has been
previously encrypted by using the Encrypt function.
:type ciphertext_blob: blob
:param ciphertext_blob: Ciphertext including metadata.
:type encryption_context: map
:param encryption_context: The encryption context. If this was
specified in the Encrypt function, it must be specified here or the
decryption operation will fail. For more information, see
`Encryption Context`_.
:type grant_tokens: list
:param grant_tokens: A list of grant tokens that represent grants which
can be used to provide long term permissions to perform decryption.'

def decrypt(self, ciphertext_blob, encryption_context=None, grant_tokens=None):

    if (not isinstance(ciphertext_blob, six.binary_type)):
        raise TypeError(('Value    of    argument    ``ciphertext_blob``    must    be    of    type    %s.' % six.binary_type))
    ciphertext_blob = base64.b64encode(ciphertext_blob)
    params = {'CiphertextBlob': ciphertext_blob.decode('utf-8')}
    if (encryption_context is not None):
        params['EncryptionContext'] = encryption_context
    if (grant_tokens is not None):
        params['GrantTokens'] = grant_tokens
    response = self.make_request(action='Decrypt', body=json.dumps(params))
    if (response.get('Plaintext') is not None):
        response['Plaintext'] = base64.b64decode(response['Plaintext'].encode('utf-8'))
    return response
