/*
 * Copyright (C) 2011-2018 Intel Corporation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *   * Neither the name of Intel Corporation nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */


enclave
{
    include "aeerror.h"
    include "Epid11_rl.h"
    include "sgx_report.h"
    include "pairing_blob.h"
    include "pse_pr_sigma_1_1_defs.h"

    trusted 
    {
        //certificate provisioning section
        public ae_error_t ecall_tPrepareForCertificateProvisioning
        (
                                                uint64_t    nonce64,
            [in, count=1]                       const sgx_target_info_t*      pTargetInfo,
                                                uint16_t    nMaxLen_CSR_pse,
            [out, size=nMaxLen_CSR_pse]         uint8_t*    pCSR_pse,
            [out, count=1]                      uint16_t*   pnTotalLen_CSR_pse,
            [out, count=1]                      sgx_report_t*           pREPORT,
            [in, out, count=1]                  pairing_blob_t*  pPairingBlob
        );

        //long-term pairing section
        public ae_error_t ecall_tGenM7
        (
            [in, count=1]                       const SIGMA_S1_MESSAGE*      pS1,
            [in, size=nTotalLen_SigRL]          const EPID11_SIG_RL*           pSigRL,
                                                uint32_t    nTotalLen_SigRL,
            [in, size=nTotalLen_OcspResp]       const uint8_t*               pOcspResp, 
                                                uint32_t    nTotalLen_OcspResp,
            [in, size=nTotalLen_VerifierCert]   const uint8_t*               pVerifierCert,
                                                uint32_t    nTotalLen_VerifierCert,
            [in, count=1]                       const pairing_blob_t* pPairingBlob,
                                                uint32_t    nMaxLen_S2, 
            [out, size=nMaxLen_S2]              SIGMA_S2_MESSAGE*      pS2,
            [out, count=1]                      uint32_t*   pnTotalLen_S2
        );

        public ae_error_t ecall_tVerifyM8
        (
            [in, size=nTotalLen_S3]             const SIGMA_S3_MESSAGE*       pS3, 
                                                uint32_t    nTotalLen_S3,
            [in, size=nTotalLen_PrivRL]         const EPID11_PRIV_RL*           pPrivRL,
                                                uint32_t    nTotalLen_PrivRL,
            [in, out, count=1]                  pairing_blob_t*  pPairingBlob,
            [out, count=1]                      uint8_t*    bNewPairing
        );

    };

};
