def basic_decrypt()

in decrypt_oracle/src/aws_encryption_sdk_decrypt_oracle/app.py [0:0]


def basic_decrypt() -> Response:
    """Basic decrypt handler for decrypt oracle v0.

    **Request**

    * **Method**: POST
    * **Body**: Raw ciphertext bytes
    * **Headers**:

      * **Content-Type**: ``application/octet-stream``
      * **Accept**: ``application/octet-stream``

    **Response**

    * 200 response code with the raw plaintext bytes as the body
    * 400 response code with whatever error code was encountered as the body
    """
    APP.log.debug("Request:")
    APP.log.debug(json.dumps(APP.current_request.to_dict()))
    APP.log.debug("Ciphertext:")
    APP.log.debug(APP.current_request.raw_body)

    try:
        # The decrypt oracle needs to be able to decrypt any message
        # it does not encrypt messages for anyone.
        client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)
        ciphertext = APP.current_request.raw_body
        plaintext, _header = client.decrypt(source=ciphertext, key_provider=_master_key_provider())
        APP.log.debug("Plaintext:")
        APP.log.debug(plaintext)
        response = Response(body=plaintext, headers={"Content-Type": "application/octet-stream"}, status_code=200)
    except Exception as error:  # pylint: disable=broad-except
        response = Response(body=str(error), status_code=400)

    APP.log.debug("Response:")
    APP.log.debug(json.dumps(response.to_dict(binary_types=["application/octet-stream"])))
    return response