2017-12-13 17:45:33 +00:00
|
|
|
enclave {
|
|
|
|
from "sgx_tkey_exchange.edl" import *;
|
|
|
|
include "sgx_key_exchange.h"
|
|
|
|
include "sgx_tseal.h"
|
|
|
|
|
|
|
|
trusted {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialize the remote attestation process.
|
|
|
|
*
|
|
|
|
* @param usePlatformServices If true, the enclave establishes a
|
|
|
|
* session with the PSE before initializing the attestation context.
|
|
|
|
* This provides additional nonce replay protection and a reliable
|
|
|
|
* monotonic counter.
|
|
|
|
* @param challengerKey ECDSA public key of the challenger with the 8
|
|
|
|
* magic bytes removed, and X and Y components changed to little
|
|
|
|
* endian.
|
|
|
|
* @param context The variable receiving the context constructed during
|
|
|
|
* initialization.
|
|
|
|
*
|
|
|
|
* @return Status code indicative of the outcome of the operation.
|
|
|
|
*/
|
|
|
|
public sgx_status_t initializeRemoteAttestation(
|
|
|
|
bool usePlatformServices,
|
2017-12-22 14:42:42 +00:00
|
|
|
[in] const sgx_ec256_public_t *challengerKey,
|
2017-12-13 17:45:33 +00:00
|
|
|
[out] sgx_ra_context_t *context
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clean up and finalize the remote attestation process.
|
|
|
|
*
|
|
|
|
* @param context The context constructed during initialization.
|
|
|
|
*
|
|
|
|
* @return SGX_SUCCESS if successful, or SGX_ERROR_INVALID_PARAMETER if
|
|
|
|
* an invalid context is provided.
|
|
|
|
*/
|
|
|
|
public sgx_status_t finalizeRemoteAttestation(
|
|
|
|
sgx_ra_context_t context
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Verify CMAC of attestation result from challenger using the MK key.
|
|
|
|
*
|
|
|
|
* @param context The context constructed during initialization.
|
|
|
|
* @param message The status obtained from the challenger as part of
|
|
|
|
* the attestation result.
|
|
|
|
* @param messageSize The size of the attestation status payload.
|
|
|
|
* @param cmac The CMAC received from the challenger.
|
|
|
|
* @param cmacSize The size of the CMAC received.
|
|
|
|
*
|
|
|
|
* @return Status code indicative of the outcome of the operation.
|
|
|
|
*/
|
|
|
|
public sgx_status_t verifyCMAC(
|
|
|
|
sgx_ra_context_t context,
|
2017-12-22 14:42:42 +00:00
|
|
|
[in,size=messageSize] const uint8_t *message,
|
2017-12-13 17:45:33 +00:00
|
|
|
size_t messageSize,
|
2017-12-22 14:42:42 +00:00
|
|
|
[in,size=cmacSize] const uint8_t *cmac,
|
2017-12-13 17:45:33 +00:00
|
|
|
size_t cmacSize
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Verify an attestation response from the service provider.
|
|
|
|
*
|
|
|
|
* @param context The context constructed during initialization.
|
|
|
|
* @param secret Message containing the secret.
|
|
|
|
* @param secretSize Size of the secret message, in bytes.
|
|
|
|
* @param gcmIV The initialization vector used in the decryption.
|
|
|
|
* @param gcmMac Pointer to the AES-GCM MAC for the secret message.
|
|
|
|
* @param gcmMacSize Size of the AES-GCM MAC.
|
|
|
|
* @param sealedSecret Pre-allocated buffer receiving the sealed
|
|
|
|
* secret. If NULL, the sealed secret will not be returned.
|
|
|
|
* @param maxSealedSecretSize The maximum size of the sealed secret.
|
|
|
|
* This must be less than or equal to the size of the pre-allocated
|
|
|
|
* buffer above, and no larger than the upper limit of 128 bytes.
|
|
|
|
*
|
|
|
|
* @return Status code indicative of the outcome of the operation.
|
|
|
|
*/
|
|
|
|
public sgx_status_t verifyAttestationResponse(
|
|
|
|
sgx_ra_context_t context,
|
2017-12-22 14:42:42 +00:00
|
|
|
[in,size=secretSize] const uint8_t *secret,
|
2017-12-13 17:45:33 +00:00
|
|
|
size_t secretSize,
|
2017-12-22 14:42:42 +00:00
|
|
|
[in,count=12] const uint8_t *gcmIV,
|
|
|
|
[in,size=gcmMacSize] const uint8_t *gcmMac,
|
2017-12-13 17:45:33 +00:00
|
|
|
size_t gcmMacSize,
|
|
|
|
[out,size=maxSealedSecretSize] uint8_t *sealedSecret,
|
|
|
|
size_t maxSealedSecretSize
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check whether the application enclave is able to unseal a secret.
|
|
|
|
*
|
|
|
|
* @param sealedSecret The previously sealed secret.
|
|
|
|
* @param sealedSecretSize The size of the sealed secret.
|
|
|
|
*
|
|
|
|
* @return Status code indicative of the outcome of the operation.
|
|
|
|
*/
|
|
|
|
public sgx_status_t unsealSecret(
|
|
|
|
[in,size=sealedSecretSize] uint8_t *sealedSecret,
|
|
|
|
size_t sealedSecretSize
|
|
|
|
);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|