mirror of
https://github.com/corda/corda.git
synced 2025-06-18 15:18:16 +00:00
Initial release of Intel SGX for Linux.
This release is used in conjunction with the linux-sgx-driver Intial release: https://github.com/01org/linux-sgx-driver commit-id: 0e865ce5e6b297a787bcdc12d98bada8174be6d7 Intel-id: 33399 Signed-off-by: Angie Chinchilla <angie.v.chinchilla@intel.com>
This commit is contained in:
219
SampleCode/SampleEnclave/.cproject
Normal file
219
SampleCode/SampleEnclave/.cproject
Normal file
@ -0,0 +1,219 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="com.intel.sgx.configuration.Sim.Debug">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.intel.sgx.configuration.Sim.Debug" moduleId="org.eclipse.cdt.core.settings" name="SGX Debug Sim Mode">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.autotools.core.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.intel.sgx.configuration.Sim.Debug" name="SGX Debug Sim Mode" parent="com.intel.sgx.configuration.Sim.Debug">
|
||||
<folderInfo id="com.intel.sgx.configuration.Sim.Debug.292452237" name="/" resourcePath="">
|
||||
<toolChain id="com.intel.sgx.toolChain.Sim.Debug.1618485184" name="SGX GCC" superClass="com.intel.sgx.toolChain.Sim.Debug">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.intel.sgx.targetEnclave.1039454044" isAbstract="false" superClass="com.intel.sgx.targetEnclave"/>
|
||||
<builder arguments="SGX_DEBUG=1 SGX_MODE=SIM -f Makefile" command="make" id="com.intel.sgx.builder2.1591862020" keepEnvironmentInBuildfile="false" name="Software Guard Extensions Linux Builder" superClass="com.intel.sgx.builder2"/>
|
||||
<tool id="com.intel.sgx.compiler.1853780321" name="SGX GCC Compiler" superClass="com.intel.sgx.compiler">
|
||||
<option id="com.intel.sgx.option.includePath.1427419865" superClass="com.intel.sgx.option.includePath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value="/opt/intel/sgxsdk/include"/>
|
||||
</option>
|
||||
<inputType id="com.intel.sgx.inputType.1817588305" superClass="com.intel.sgx.inputType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="com.intel.sgx.configuration.HW.Debug">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.intel.sgx.configuration.HW.Debug" moduleId="org.eclipse.cdt.core.settings" name="SGX Debug HW Mode">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.autotools.core.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.intel.sgx.configuration.HW.Debug" name="SGX Debug HW Mode" parent="com.intel.sgx.configuration.HW.Debug">
|
||||
<folderInfo id="com.intel.sgx.configuration.HW.Debug.971320034" name="/" resourcePath="">
|
||||
<toolChain id="com.intel.sgx.toolChain.HW.Debug.1761600540" name="SGX GCC" superClass="com.intel.sgx.toolChain.HW.Debug">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.intel.sgx.targetEnclave.131147161" isAbstract="false" superClass="com.intel.sgx.targetEnclave"/>
|
||||
<builder arguments="SGX_DEBUG=1 SGX_MODE=HW -f Makefile" command="make" id="com.intel.sgx.builder1.1502087524" keepEnvironmentInBuildfile="false" name="Software Guard Extensions Linux Builder" superClass="com.intel.sgx.builder1"/>
|
||||
<tool id="com.intel.sgx.compiler.1085280084" name="SGX GCC Compiler" superClass="com.intel.sgx.compiler">
|
||||
<option id="com.intel.sgx.option.includePath.57165741" superClass="com.intel.sgx.option.includePath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value="/opt/intel/sgxsdk/include"/>
|
||||
</option>
|
||||
<inputType id="com.intel.sgx.inputType.79844751" superClass="com.intel.sgx.inputType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="com.intel.sgx.configuration.Sim.Release">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.intel.sgx.configuration.Sim.Release" moduleId="org.eclipse.cdt.core.settings" name="SGX Release Sim Mode">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.autotools.core.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.intel.sgx.configuration.Sim.Release" name="SGX Release Sim Mode" parent="com.intel.sgx.configuration.Sim.Release">
|
||||
<folderInfo id="com.intel.sgx.configuration.Sim.Release.151408355" name="/" resourcePath="">
|
||||
<toolChain id="com.intel.sgx.toolChain.Sim.Release.1055083183" name="SGX GCC" superClass="com.intel.sgx.toolChain.Sim.Release">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.intel.sgx.targetEnclave.471419902" isAbstract="false" superClass="com.intel.sgx.targetEnclave"/>
|
||||
<builder arguments="SGX_DEBUG=0 SGX_MODE=SIM -f Makefile" command="make" id="com.intel.sgx.builder3.1151273037" keepEnvironmentInBuildfile="false" name="Software Guard Extensions Linux Builder" superClass="com.intel.sgx.builder3"/>
|
||||
<tool id="com.intel.sgx.compiler.1302347316" name="SGX GCC Compiler" superClass="com.intel.sgx.compiler">
|
||||
<option id="com.intel.sgx.option.includePath.1645761127" superClass="com.intel.sgx.option.includePath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value="/opt/intel/sgxsdk/include"/>
|
||||
</option>
|
||||
<inputType id="com.intel.sgx.inputType.640775034" superClass="com.intel.sgx.inputType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="com.intel.sgx.configuration.HW.Prerelease">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.intel.sgx.configuration.HW.Prerelease" moduleId="org.eclipse.cdt.core.settings" name="SGX Pre-release Release HW Mode">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.autotools.core.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.intel.sgx.configuration.HW.Prerelease" name="SGX Pre-release Release HW Mode" parent="com.intel.sgx.configuration.HW.Prerelease">
|
||||
<folderInfo id="com.intel.sgx.configuration.HW.Prerelease.1418650208" name="/" resourcePath="">
|
||||
<toolChain id="com.intel.sgx.toolChain.HW.Prerelease.1668578385" name="SGX GCC" superClass="com.intel.sgx.toolChain.HW.Prerelease">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.intel.sgx.targetEnclave.977258758" isAbstract="false" superClass="com.intel.sgx.targetEnclave"/>
|
||||
<builder arguments="SGX_PRERELEASE=1 SGX_MODE=HW -f Makefile" command="make" id="com.intel.sgx.builder5.1888300852" keepEnvironmentInBuildfile="false" name="Software Guard Extensions Linux Builder" superClass="com.intel.sgx.builder5"/>
|
||||
<tool id="com.intel.sgx.compiler.2113538546" name="SGX GCC Compiler" superClass="com.intel.sgx.compiler">
|
||||
<option id="com.intel.sgx.option.includePath.904888562" superClass="com.intel.sgx.option.includePath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value="/opt/intel/sgxsdk/include"/>
|
||||
</option>
|
||||
<inputType id="com.intel.sgx.inputType.283498732" superClass="com.intel.sgx.inputType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="com.intel.sgx.configuration.HW.Release">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.intel.sgx.configuration.HW.Release" moduleId="org.eclipse.cdt.core.settings" name="SGX Release HW Mode">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.autotools.core.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.intel.sgx.configuration.HW.Release" name="SGX Release HW Mode" parent="com.intel.sgx.configuration.HW.Release">
|
||||
<folderInfo id="com.intel.sgx.configuration.HW.Release.1657582763" name="/" resourcePath="">
|
||||
<toolChain id="com.intel.sgx.toolChain.HW.Release.465410401" name="SGX GCC" superClass="com.intel.sgx.toolChain.HW.Release">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="com.intel.sgx.targetEnclave.828352216" isAbstract="false" superClass="com.intel.sgx.targetEnclave"/>
|
||||
<builder arguments="SGX_DEBUG=0 SGX_MODE=HW -f Makefile" command="make" id="com.intel.sgx.builder6.714105790" keepEnvironmentInBuildfile="false" name="Software Guard Extensions Linux Builder" superClass="com.intel.sgx.builder6"/>
|
||||
<tool id="com.intel.sgx.compiler.595797282" name="SGX GCC Compiler" superClass="com.intel.sgx.compiler">
|
||||
<option id="com.intel.sgx.option.includePath.1385078253" superClass="com.intel.sgx.option.includePath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value="/opt/intel/sgxsdk/include"/>
|
||||
</option>
|
||||
<inputType id="com.intel.sgx.inputType.463677873" superClass="com.intel.sgx.inputType"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="SimpleEnclave.null.1312290154" name="SimpleEnclave"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||
<configuration configurationName="SGX Debug HW Mode">
|
||||
<resource resourceType="PROJECT" workspacePath="/SimpleEnclave"/>
|
||||
</configuration>
|
||||
<configuration configurationName="SGX Debug Sim Mode">
|
||||
<resource resourceType="PROJECT" workspacePath="/SimpleEnclave"/>
|
||||
</configuration>
|
||||
<configuration configurationName="Debug">
|
||||
<resource resourceType="PROJECT" workspacePath="/SimpleEnclave"/>
|
||||
</configuration>
|
||||
<configuration configurationName="Release">
|
||||
<resource resourceType="PROJECT" workspacePath="/SimpleEnclave"/>
|
||||
</configuration>
|
||||
<configuration configurationName="SGX Release HW Mode">
|
||||
<resource resourceType="PROJECT" workspacePath="/SimpleEnclave"/>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.680828348;cdt.managedbuild.config.gnu.exe.release.680828348.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.2137539087;cdt.managedbuild.tool.gnu.c.compiler.input.762444756">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.SGXtoolChain.977521771;com.intel.sgx.SGXtoolChain.977521771.100429378;com.intel.sgx.compiler.787445976;com.intel.sgx.inputType.1814458059">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.configuration.Sim.Release;com.intel.sgx.configuration.Sim.Release.151408355;com.intel.sgx.compiler.1302347316;com.intel.sgx.inputType.640775034">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1377487595;cdt.managedbuild.config.gnu.exe.debug.1377487595.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1972419354;cdt.managedbuild.tool.gnu.c.compiler.input.1480710981">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.configuration.HW.Release;com.intel.sgx.configuration.HW.Release.1657582763;com.intel.sgx.compiler.595797282;com.intel.sgx.inputType.463677873">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.configuration.Sim.Debug;com.intel.sgx.configuration.Sim.Debug.292452237;com.intel.sgx.compiler.1853780321;com.intel.sgx.inputType.1817588305">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.configuration.HW.Debug;com.intel.sgx.configuration.HW.Debug.971320034;com.intel.sgx.compiler.1085280084;com.intel.sgx.inputType.79844751">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="com.intel.sgx.configuration.HW.Prerelease;com.intel.sgx.configuration.HW.Prerelease.1418650208;com.intel.sgx.compiler.2113538546;com.intel.sgx.inputType.283498732">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.intel.sgx.SGXPerProjectProfile"/>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||
</cproject>
|
28
SampleCode/SampleEnclave/.project
Normal file
28
SampleCode/SampleEnclave/.project
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>SimpleEnclave</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||
<triggers>clean,full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||
<triggers>full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>com.intel.sgx.sgxnature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
265
SampleCode/SampleEnclave/App/App.cpp
Normal file
265
SampleCode/SampleEnclave/App/App.cpp
Normal file
@ -0,0 +1,265 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
# include <unistd.h>
|
||||
# include <pwd.h>
|
||||
# define MAX_PATH FILENAME_MAX
|
||||
|
||||
#include "sgx_urts.h"
|
||||
#include "App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* Global EID shared by multiple threads */
|
||||
sgx_enclave_id_t global_eid = 0;
|
||||
|
||||
typedef struct _sgx_errlist_t {
|
||||
sgx_status_t err;
|
||||
const char *msg;
|
||||
const char *sug; /* Suggestion */
|
||||
} sgx_errlist_t;
|
||||
|
||||
/* Error code returned by sgx_create_enclave */
|
||||
static sgx_errlist_t sgx_errlist[] = {
|
||||
{
|
||||
SGX_ERROR_UNEXPECTED,
|
||||
"Unexpected error occurred.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_PARAMETER,
|
||||
"Invalid parameter.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_OUT_OF_MEMORY,
|
||||
"Out of memory.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_ENCLAVE_LOST,
|
||||
"Power transition occurred.",
|
||||
"Please refer to the sample \"PowerTransition\" for details."
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_ENCLAVE,
|
||||
"Invalid enclave image.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_ENCLAVE_ID,
|
||||
"Invalid enclave identification.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_SIGNATURE,
|
||||
"Invalid enclave signature.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_OUT_OF_EPC,
|
||||
"Out of EPC memory.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_NO_DEVICE,
|
||||
"Invalid SGX device.",
|
||||
"Please make sure SGX module is enabled in the BIOS, and install SGX driver afterwards."
|
||||
},
|
||||
{
|
||||
SGX_ERROR_MEMORY_MAP_CONFLICT,
|
||||
"Memory map conflicted.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_METADATA,
|
||||
"Invalid enclave metadata.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_DEVICE_BUSY,
|
||||
"SGX device was busy.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_VERSION,
|
||||
"Enclave version was invalid.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_INVALID_ATTRIBUTE,
|
||||
"Enclave was not authorized.",
|
||||
NULL
|
||||
},
|
||||
{
|
||||
SGX_ERROR_ENCLAVE_FILE_ACCESS,
|
||||
"Can't open enclave file.",
|
||||
NULL
|
||||
},
|
||||
};
|
||||
|
||||
/* Check error conditions for loading enclave */
|
||||
void print_error_message(sgx_status_t ret)
|
||||
{
|
||||
size_t idx = 0;
|
||||
size_t ttl = sizeof sgx_errlist/sizeof sgx_errlist[0];
|
||||
|
||||
for (idx = 0; idx < ttl; idx++) {
|
||||
if(ret == sgx_errlist[idx].err) {
|
||||
if(NULL != sgx_errlist[idx].sug)
|
||||
printf("Info: %s\n", sgx_errlist[idx].sug);
|
||||
printf("Error: %s\n", sgx_errlist[idx].msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (idx == ttl)
|
||||
printf("Error: Unexpected error occurred.\n");
|
||||
}
|
||||
|
||||
/* Initialize the enclave:
|
||||
* Step 1: try to retrieve the launch token saved by last transaction
|
||||
* Step 2: call sgx_create_enclave to initialize an enclave instance
|
||||
* Step 3: save the launch token if it is updated
|
||||
*/
|
||||
int initialize_enclave(void)
|
||||
{
|
||||
char token_path[MAX_PATH] = {'\0'};
|
||||
sgx_launch_token_t token = {0};
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
int updated = 0;
|
||||
|
||||
/* Step 1: try to retrieve the launch token saved by last transaction
|
||||
* if there is no token, then create a new one.
|
||||
*/
|
||||
/* try to get the token saved in $HOME */
|
||||
const char *home_dir = getpwuid(getuid())->pw_dir;
|
||||
|
||||
if (home_dir != NULL &&
|
||||
(strlen(home_dir)+strlen("/")+sizeof(TOKEN_FILENAME)+1) <= MAX_PATH) {
|
||||
/* compose the token path */
|
||||
strncpy(token_path, home_dir, strlen(home_dir));
|
||||
strncat(token_path, "/", strlen("/"));
|
||||
strncat(token_path, TOKEN_FILENAME, sizeof(TOKEN_FILENAME)+1);
|
||||
} else {
|
||||
/* if token path is too long or $HOME is NULL */
|
||||
strncpy(token_path, TOKEN_FILENAME, sizeof(TOKEN_FILENAME));
|
||||
}
|
||||
|
||||
FILE *fp = fopen(token_path, "rb");
|
||||
if (fp == NULL && (fp = fopen(token_path, "wb")) == NULL) {
|
||||
printf("Warning: Failed to create/open the launch token file \"%s\".\n", token_path);
|
||||
}
|
||||
|
||||
if (fp != NULL) {
|
||||
/* read the token from saved file */
|
||||
size_t read_num = fread(token, 1, sizeof(sgx_launch_token_t), fp);
|
||||
if (read_num != 0 && read_num != sizeof(sgx_launch_token_t)) {
|
||||
/* if token is invalid, clear the buffer */
|
||||
memset(&token, 0x0, sizeof(sgx_launch_token_t));
|
||||
printf("Warning: Invalid launch token read from \"%s\".\n", token_path);
|
||||
}
|
||||
}
|
||||
/* Step 2: call sgx_create_enclave to initialize an enclave instance */
|
||||
/* Debug Support: set 2nd parameter to 1 */
|
||||
ret = sgx_create_enclave(ENCLAVE_FILENAME, SGX_DEBUG_FLAG, &token, &updated, &global_eid, NULL);
|
||||
if (ret != SGX_SUCCESS) {
|
||||
print_error_message(ret);
|
||||
if (fp != NULL) fclose(fp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Step 3: save the launch token if it is updated */
|
||||
if (updated == FALSE || fp == NULL) {
|
||||
/* if the token is not updated, or file handler is invalid, do not perform saving */
|
||||
if (fp != NULL) fclose(fp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* reopen the file with write capablity */
|
||||
fp = freopen(token_path, "wb", fp);
|
||||
if (fp == NULL) return 0;
|
||||
size_t write_num = fwrite(token, 1, sizeof(sgx_launch_token_t), fp);
|
||||
if (write_num != sizeof(sgx_launch_token_t))
|
||||
printf("Warning: Failed to save launch token to \"%s\".\n", token_path);
|
||||
fclose(fp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* OCall functions */
|
||||
void ocall_print_string(const char *str)
|
||||
{
|
||||
/* Proxy/Bridge will check the length and null-terminate
|
||||
* the input string to prevent buffer overflow.
|
||||
*/
|
||||
printf("%s", str);
|
||||
}
|
||||
|
||||
|
||||
/* Application entry */
|
||||
int SGX_CDECL main(int argc, char *argv[])
|
||||
{
|
||||
(void)(argc);
|
||||
(void)(argv);
|
||||
|
||||
|
||||
/* Initialize the enclave */
|
||||
if(initialize_enclave() < 0){
|
||||
printf("Enter a character before exit ...\n");
|
||||
getchar();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Utilize edger8r attributes */
|
||||
edger8r_array_attributes();
|
||||
edger8r_pointer_attributes();
|
||||
edger8r_type_attributes();
|
||||
edger8r_function_attributes();
|
||||
|
||||
/* Utilize trusted libraries */
|
||||
ecall_libc_functions();
|
||||
ecall_libcxx_functions();
|
||||
ecall_thread_functions();
|
||||
|
||||
/* Destroy the enclave */
|
||||
sgx_destroy_enclave(global_eid);
|
||||
|
||||
printf("Info: SampleEnclave successfully returned.\n");
|
||||
|
||||
printf("Enter a character before exit ...\n");
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
|
74
SampleCode/SampleEnclave/App/App.h
Normal file
74
SampleCode/SampleEnclave/App/App.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _APP_H_
|
||||
#define _APP_H_
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "sgx_error.h" /* sgx_status_t */
|
||||
#include "sgx_eid.h" /* sgx_enclave_id_t */
|
||||
|
||||
#ifndef TRUE
|
||||
# define TRUE 1
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
# define FALSE 0
|
||||
#endif
|
||||
|
||||
# define TOKEN_FILENAME "enclave.token"
|
||||
# define ENCLAVE_FILENAME "enclave.signed.so"
|
||||
|
||||
extern sgx_enclave_id_t global_eid; /* global enclave id */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void edger8r_array_attributes(void);
|
||||
void edger8r_type_attributes(void);
|
||||
void edger8r_pointer_attributes(void);
|
||||
void edger8r_function_attributes(void);
|
||||
|
||||
void ecall_libc_functions(void);
|
||||
void ecall_libcxx_functions(void);
|
||||
void ecall_thread_functions(void);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_APP_H_ */
|
92
SampleCode/SampleEnclave/App/Edger8rSyntax/Arrays.cpp
Normal file
92
SampleCode/SampleEnclave/App/Edger8rSyntax/Arrays.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* edger8r_array_attributes:
|
||||
* Invokes ECALLs declared with array attributes.
|
||||
*/
|
||||
void edger8r_array_attributes(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
/* user_check */
|
||||
int arr1[4] = {0, 1, 2, 3};
|
||||
ret = ecall_array_user_check(global_eid, arr1);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* make sure arr1 is changed */
|
||||
for (int i = 0; i < 4; i++)
|
||||
assert(arr1[i] == (3 - i));
|
||||
|
||||
/* in */
|
||||
int arr2[4] = {0, 1, 2, 3};
|
||||
ret = ecall_array_in(global_eid, arr2);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* arr2 is not changed */
|
||||
for (int i = 0; i < 4; i++)
|
||||
assert(arr2[i] == i);
|
||||
|
||||
/* out */
|
||||
int arr3[4] = {0, 1, 2, 3};
|
||||
ret = ecall_array_out(global_eid, arr3);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* arr3 is changed */
|
||||
for (int i = 0; i < 4; i++)
|
||||
assert(arr3[i] == (3 - i));
|
||||
|
||||
/* in, out */
|
||||
int arr4[4] = {0, 1, 2, 3};
|
||||
ret = ecall_array_in_out(global_eid, arr4);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* arr4 is changed */
|
||||
for (int i = 0; i < 4; i++)
|
||||
assert(arr4[i] == (3 - i));
|
||||
|
||||
/* isary */
|
||||
array_t arr5 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
||||
ret = ecall_array_isary(global_eid, arr5);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* arr5 is changed */
|
||||
for (int i = 0; i < 10; i++)
|
||||
assert(arr5[i] == (9 - i));
|
||||
}
|
72
SampleCode/SampleEnclave/App/Edger8rSyntax/Functions.cpp
Normal file
72
SampleCode/SampleEnclave/App/Edger8rSyntax/Functions.cpp
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* No need to implement memccpy here! */
|
||||
|
||||
/* edger8r_function_attributes:
|
||||
* Invokes ECALL declared with calling convention attributes.
|
||||
* Invokes ECALL declared with [public].
|
||||
*/
|
||||
void edger8r_function_attributes(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ecall_function_calling_convs(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_function_public(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
/* user shall not invoke private function here */
|
||||
int runned = 0;
|
||||
ret = ecall_function_private(global_eid, &runned);
|
||||
if (ret != SGX_ERROR_ECALL_NOT_ALLOWED || runned != 0)
|
||||
abort();
|
||||
}
|
||||
|
||||
/* ocall_function_allow:
|
||||
* The OCALL invokes the [allow]ed ECALL 'edger8r_private'.
|
||||
*/
|
||||
void ocall_function_allow(void)
|
||||
{
|
||||
int runned = 0;
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ecall_function_private(global_eid, &runned);
|
||||
if (ret != SGX_SUCCESS || runned != 1)
|
||||
abort();
|
||||
}
|
149
SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp
Normal file
149
SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* edger8r_pointer_attributes:
|
||||
* Invokes the ECALLs declared with pointer attributes.
|
||||
*/
|
||||
void edger8r_pointer_attributes(void)
|
||||
{
|
||||
int val = 0;
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
char c[128] = {0};
|
||||
size_t len = 0;
|
||||
memset(c, 0xe, 128);
|
||||
ret = ecall_pointer_user_check(global_eid, &len, &c, 128);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(strcmp(c, "SGX_SUCCESS") == 0);
|
||||
|
||||
|
||||
val = 0;
|
||||
ret = ecall_pointer_in(global_eid, &val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 0);
|
||||
|
||||
val = 0;
|
||||
ret = ecall_pointer_out(global_eid, &val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 1234);
|
||||
|
||||
val = 0;
|
||||
ret = ecall_pointer_in_out(global_eid, &val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 1234);
|
||||
|
||||
ret = ocall_pointer_attr(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
char str1[] = "1234567890";
|
||||
ret = ecall_pointer_string(global_eid, str1);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(memcmp(str1, "0987654321", strlen(str1)) == 0);
|
||||
|
||||
const char str2[] = "1234567890";
|
||||
ret = ecall_pointer_string_const(global_eid, str2);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(memcmp(str2, "1234567890", strlen(str2)) == 0);
|
||||
|
||||
char str3[] = "1234567890";
|
||||
ret = ecall_pointer_size(global_eid, (void*)str3, strlen(str3));
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(memcmp(str3, "0987654321", strlen(str3)) == 0);
|
||||
|
||||
char str4[] = "1234567890";
|
||||
ret = ecall_pointer_isptr_readonly(global_eid, (buffer_t)str4, strlen(str4));
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(memcmp(str4, "1234567890", strlen(str4)) == 0);
|
||||
|
||||
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
||||
ret = ecall_pointer_count(global_eid, arr, 10);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
assert(arr[i] == (9 - i));
|
||||
|
||||
memset(arr, 0x0, sizeof(arr));
|
||||
ret = ecall_pointer_sizefunc(global_eid, (char *)arr);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
assert(arr[i] == i);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* ocall_pointer_user_check:
|
||||
* The OCALL declared with [user_check].
|
||||
*/
|
||||
void ocall_pointer_user_check(int* val)
|
||||
{
|
||||
(void)val;
|
||||
assert(val != NULL);
|
||||
}
|
||||
|
||||
/* ocall_pointer_in:
|
||||
* The OCALL declared with [in].
|
||||
*/
|
||||
void ocall_pointer_in(int* val)
|
||||
{
|
||||
*val = 1234;
|
||||
}
|
||||
|
||||
/* ocall_pointer_out:
|
||||
* The OCALL declared with [out].
|
||||
*/
|
||||
void ocall_pointer_out(int* val)
|
||||
{
|
||||
*val = 1234;
|
||||
}
|
||||
|
||||
/* ocall_pointer_in_out:
|
||||
* The OCALL declared with [in, out].
|
||||
*/
|
||||
void ocall_pointer_in_out(int* val)
|
||||
{
|
||||
*val = 1234;
|
||||
}
|
77
SampleCode/SampleEnclave/App/Edger8rSyntax/Types.cpp
Normal file
77
SampleCode/SampleEnclave/App/Edger8rSyntax/Types.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* edger8r_type_attributes:
|
||||
* Invokes ECALLs declared with basic types.
|
||||
*/
|
||||
void edger8r_type_attributes(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ecall_type_char(global_eid, (char)0x12);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_type_int(global_eid, (int)1234);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_type_float(global_eid, (float)1234.0);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_type_double(global_eid, (double)1234.5678);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_type_size_t(global_eid, (size_t)12345678);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_type_wchar_t(global_eid, (wchar_t)0x1234);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
struct struct_foo_t g = {1234, 5678};
|
||||
ret = ecall_type_struct(global_eid, g);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
union union_foo_t val = {0};
|
||||
ret = ecall_type_enum_union(global_eid, ENUM_FOO_0, &val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val.union_foo_0 == 2);
|
||||
}
|
51
SampleCode/SampleEnclave/App/TrustedLibrary/Libc.cpp
Normal file
51
SampleCode/SampleEnclave/App/TrustedLibrary/Libc.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* ecall_libc_functions:
|
||||
* Invokes standard C functions.
|
||||
*/
|
||||
void ecall_libc_functions(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ecall_malloc_free(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
int cpuid[4] = {0x1, 0x0, 0x0, 0x0};
|
||||
ret = ecall_sgx_cpuid(global_eid, cpuid, 0x0);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
51
SampleCode/SampleEnclave/App/TrustedLibrary/Libcxx.cpp
Normal file
51
SampleCode/SampleEnclave/App/TrustedLibrary/Libcxx.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
/* ecall_libcxx_functions:
|
||||
* Invokes standard C++ functions.
|
||||
*/
|
||||
void ecall_libcxx_functions(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ecall_exception(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
ret = ecall_map(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
98
SampleCode/SampleEnclave/App/TrustedLibrary/Thread.cpp
Normal file
98
SampleCode/SampleEnclave/App/TrustedLibrary/Thread.cpp
Normal file
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <thread>
|
||||
#include <stdio.h>
|
||||
using namespace std;
|
||||
|
||||
#include "../App.h"
|
||||
#include "Enclave_u.h"
|
||||
|
||||
static size_t counter = 0;
|
||||
|
||||
void increase_counter(void)
|
||||
{
|
||||
size_t cnr = 0;
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
ret = ecall_increase_counter(global_eid, &cnr);
|
||||
if (cnr != 0) counter = cnr;
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
||||
|
||||
void data_producer(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
ret = ecall_producer(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
||||
|
||||
void data_consumer(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
ret = ecall_consumer(global_eid);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
||||
|
||||
/* ecall_thread_functions:
|
||||
* Invokes thread functions including mutex, condition variable, etc.
|
||||
*/
|
||||
void ecall_thread_functions(void)
|
||||
{
|
||||
thread adder1(increase_counter);
|
||||
thread adder2(increase_counter);
|
||||
thread adder3(increase_counter);
|
||||
thread adder4(increase_counter);
|
||||
|
||||
adder1.join();
|
||||
adder2.join();
|
||||
adder3.join();
|
||||
adder4.join();
|
||||
|
||||
assert(counter == 4*LOOPS_PER_THREAD);
|
||||
|
||||
printf("Info: executing thread synchronization, please wait... \n");
|
||||
/* condition variable */
|
||||
thread consumer1(data_consumer);
|
||||
thread producer0(data_producer);
|
||||
thread consumer2(data_consumer);
|
||||
thread consumer3(data_consumer);
|
||||
thread consumer4(data_consumer);
|
||||
|
||||
consumer1.join();
|
||||
consumer2.join();
|
||||
consumer3.join();
|
||||
consumer4.join();
|
||||
producer0.join();
|
||||
}
|
102
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Arrays.cpp
Normal file
102
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Arrays.cpp
Normal file
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Test Array Attributes */
|
||||
|
||||
#include "sgx_trts.h"
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
/* ecall_array_user_check:
|
||||
* [user_check] parameter does not perfrom copy operations.
|
||||
*/
|
||||
void ecall_array_user_check(int arr[4])
|
||||
{
|
||||
if (sgx_is_outside_enclave(arr, 4 * sizeof(int)) != 1)
|
||||
abort();
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
assert(arr[i] == i);
|
||||
arr[i] = 3 - i;
|
||||
}
|
||||
}
|
||||
|
||||
/* ecall_array_in:
|
||||
* arr[] is copied to trusted domain, but modified
|
||||
* results will not be reflected to the untrusted side.
|
||||
*/
|
||||
void ecall_array_in(int arr[4])
|
||||
{
|
||||
for (int i = 0; i < 4; i++) {
|
||||
assert(arr[i] == i);
|
||||
arr[i] = (3 - i);
|
||||
}
|
||||
}
|
||||
|
||||
/* ecall_array_out:
|
||||
* arr[] is allocated inside the enclave, and it will be copied
|
||||
* to the untrusted side
|
||||
*/
|
||||
void ecall_array_out(int arr[4])
|
||||
{
|
||||
for (int i = 0; i < 4; i++) {
|
||||
/* arr is not copied from App */
|
||||
assert(arr[i] == 0);
|
||||
arr[i] = (3 - i);
|
||||
}
|
||||
}
|
||||
|
||||
/* ecall_array_in_out:
|
||||
* arr[] will be allocated inside the enclave, content of arr[] will be copied either.
|
||||
* After ECALL returns, the results will be copied to the outside.
|
||||
*/
|
||||
void ecall_array_in_out(int arr[4])
|
||||
{
|
||||
for (int i = 0; i < 4; i++) {
|
||||
assert(arr[i] == i);
|
||||
arr[i] = (3 - i);
|
||||
}
|
||||
}
|
||||
|
||||
/* ecall_array_isary:
|
||||
* [isary] tells Edger8r that user defined 'array_t' is an array type.
|
||||
*/
|
||||
void ecall_array_isary(array_t arr)
|
||||
{
|
||||
if (sgx_is_outside_enclave(arr, sizeof(array_t)) != 1)
|
||||
abort();
|
||||
|
||||
int n = sizeof(array_t)/sizeof(arr[0]);
|
||||
for (int i = 0; i < n; i++) {
|
||||
assert(arr[i] == i);
|
||||
arr[i] = (n - 1 - i);
|
||||
}
|
||||
}
|
98
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Arrays.edl
Normal file
98
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Arrays.edl
Normal file
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Arrays.edl - Samples for array attributes. */
|
||||
|
||||
enclave {
|
||||
|
||||
/*
|
||||
* Only for fixed-size array (size is explicitly specified).
|
||||
*/
|
||||
|
||||
trusted {
|
||||
|
||||
/*
|
||||
* []: can be used to declare an array.
|
||||
* [user_check]:
|
||||
* pointer of the array won't be valified, and the buffer pointed by 'arr'
|
||||
* is not copied into the enclave either. But enclave can modify the memory outside.
|
||||
*/
|
||||
|
||||
public void ecall_array_user_check([user_check] int arr[4]);
|
||||
|
||||
/*
|
||||
* [in]:
|
||||
* buffer for the array will be allocated inside the enclave,
|
||||
* content of the array will be copied into the new allocated memory inside.
|
||||
* Any changes performed inside the enclave will not affect the array outside.
|
||||
*/
|
||||
|
||||
public void ecall_array_in([in] int arr[4]);
|
||||
|
||||
/*
|
||||
* [out]:
|
||||
* buffer for the array will be allocated inside the enclave,
|
||||
* but the content of the array won't be copied. After ECALL returns,
|
||||
* the buffer inside the enclave will copied into outside array.
|
||||
*/
|
||||
|
||||
public void ecall_array_out([out] int arr[4]);
|
||||
|
||||
/*
|
||||
* [in, out]:
|
||||
* buffer for the array will be allocated inside the enclave,
|
||||
* the content of the array will be copied either. After ECALL returns,
|
||||
* the buffer inside the enclave will by copied into outside array again.
|
||||
*/
|
||||
|
||||
public void ecall_array_in_out([in, out] int arr[4]);
|
||||
|
||||
/*
|
||||
* [isary]:
|
||||
* tells Edger8r the user defined 'array_t' is an array type, 'arr' will be
|
||||
* treated as a pointer, no memory copied either due to [user_check].
|
||||
* For OCALLs, 'arr' shall point to the memory outside the enclave.
|
||||
*/
|
||||
|
||||
public void ecall_array_isary([user_check, isary] array_t arr);
|
||||
|
||||
};
|
||||
|
||||
untrusted {
|
||||
|
||||
/*
|
||||
* [user_check|in|out|in,out|isary] can also be used in OCALLs, refer to the "User Guide" for details.
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
};
|
84
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Functions.cpp
Normal file
84
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Functions.cpp
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Test Calling Conventions */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
/* ecall_function_calling_convs:
|
||||
* memccpy is defined in system C library.
|
||||
*/
|
||||
void ecall_function_calling_convs(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
char s1[] = "1234567890";
|
||||
char s2[] = "0987654321";
|
||||
|
||||
char buf[BUFSIZ] = {'\0'};
|
||||
memcpy(buf, s1, strlen(s1));
|
||||
|
||||
ret = memccpy(NULL, s1, s2, '\0', strlen(s1));
|
||||
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(memcmp(s1, s2, strlen(s1)) == 0);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* ecall_function_public:
|
||||
* The public ECALL that invokes the OCALL 'ocall_function_allow'.
|
||||
*/
|
||||
void ecall_function_public(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
ret = ocall_function_allow();
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* ecall_function_private:
|
||||
* The private ECALL that only can be invoked in the OCALL 'ocall_function_allow'.
|
||||
*/
|
||||
int ecall_function_private(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
88
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Functions.edl
Normal file
88
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Functions.edl
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Functions.edl - Samples for function attributes. */
|
||||
|
||||
enclave {
|
||||
|
||||
/*
|
||||
* Following keywords/attributes are supported for untrusted functions:
|
||||
* cdecl, stdcall, fastcall, dllimport (only for Windows).
|
||||
* [public] is only supported for the trusted functions.
|
||||
* Trusted function will be treated as [private] w/o the [public].
|
||||
*/
|
||||
|
||||
trusted {
|
||||
|
||||
public void ecall_function_calling_convs(void);
|
||||
|
||||
/*
|
||||
* [public]:
|
||||
* public ECALL can be called directly in App.
|
||||
*/
|
||||
|
||||
public void ecall_function_public(void);
|
||||
|
||||
/*
|
||||
* [private]:
|
||||
* private ECALL cannot be called directly in App.
|
||||
*/
|
||||
|
||||
int ecall_function_private(void);
|
||||
|
||||
};
|
||||
|
||||
untrusted {
|
||||
|
||||
/*
|
||||
* [cdecl]:
|
||||
* tells edger8r the calling convention of the OCALLs is 'cdecl'.
|
||||
* [dllimport]:
|
||||
* indicats the OCALL is provided in DLLs.
|
||||
*
|
||||
* Note: memccpy() is provided by MS system DLL, we don't need to implement it in App side.
|
||||
*/
|
||||
|
||||
[cdecl, dllimport] void *memccpy([in, out, size=len] void *dest, [in, size=len] const void *src, int val, size_t len);
|
||||
|
||||
/*
|
||||
* [allow]:
|
||||
* OCALL 'ocall_function_allow' can invoke ECALL 'ecall_function_private' in App side.
|
||||
*
|
||||
* Note: No ECALL can be called in OCALL w/o [allow].
|
||||
*/
|
||||
|
||||
void ocall_function_allow(void) allow(ecall_function_private);
|
||||
|
||||
};
|
||||
|
||||
};
|
217
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Pointers.cpp
Normal file
217
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Pointers.cpp
Normal file
@ -0,0 +1,217 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Test Pointer Auttributes */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "sgx_trts.h"
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
/* checksum_internal:
|
||||
* get simple checksum of input buffer and length
|
||||
*/
|
||||
int32_t checksum_internal(char *buf, size_t count)
|
||||
{
|
||||
register int32_t sum = 0;
|
||||
int16_t *ptr = (int16_t *)buf;
|
||||
|
||||
/* Main summing loop */
|
||||
while(count > 1) {
|
||||
sum = sum + *ptr++;
|
||||
count = count - 2;
|
||||
}
|
||||
|
||||
/* Add left-over byte, if any */
|
||||
if (count > 0)
|
||||
sum = sum + *((char *)ptr);
|
||||
|
||||
return ~sum;
|
||||
}
|
||||
|
||||
/* ecall_pointer_user_check, ecall_pointer_in, ecall_pointer_out, ecall_pointer_in_out:
|
||||
* The root ECALLs to test [in], [out], [user_check] attributes.
|
||||
*/
|
||||
size_t ecall_pointer_user_check(void *val, size_t sz)
|
||||
{
|
||||
/* check if the buffer is allocated outside */
|
||||
if (sgx_is_outside_enclave(val, sz) != 1)
|
||||
abort();
|
||||
|
||||
char tmp[100] = {0};
|
||||
size_t len = sz>100?100:sz;
|
||||
|
||||
/* copy the memory into the enclave to make sure 'val'
|
||||
* is not being changed in checksum_internal() */
|
||||
memcpy(tmp, val, len);
|
||||
|
||||
int32_t sum = checksum_internal((char *)tmp, len);
|
||||
printf("Checksum(0x%p, %zu) = 0x%x\n",
|
||||
val, len, sum);
|
||||
|
||||
/* modify outside memory directly */
|
||||
memcpy(val, "SGX_SUCCESS", len>12?12:len);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
/* ecall_pointer_in:
|
||||
* the buffer of val is copied to the enclave.
|
||||
*/
|
||||
|
||||
void ecall_pointer_in(int *val)
|
||||
{
|
||||
if (sgx_is_within_enclave(val, sizeof(int)) != 1)
|
||||
abort();
|
||||
*val = 1234;
|
||||
}
|
||||
|
||||
/* ecall_pointer_out:
|
||||
* the buffer of val is copied to the untrusted side.
|
||||
*/
|
||||
void ecall_pointer_out(int *val)
|
||||
{
|
||||
if (sgx_is_within_enclave(val, sizeof(int)) != 1)
|
||||
abort();
|
||||
assert(*val == 0);
|
||||
*val = 1234;
|
||||
}
|
||||
|
||||
/* ecall_pointer_in_out:
|
||||
* the buffer of val is double-copied.
|
||||
*/
|
||||
void ecall_pointer_in_out(int *val)
|
||||
{
|
||||
if (sgx_is_within_enclave(val, sizeof(int)) != 1)
|
||||
abort();
|
||||
*val = 1234;
|
||||
}
|
||||
|
||||
/* ocall_pointer_attr:
|
||||
* The root ECALL that test OCALL [in], [out], [user_check].
|
||||
*/
|
||||
void ocall_pointer_attr(void)
|
||||
{
|
||||
sgx_status_t ret = SGX_ERROR_UNEXPECTED;
|
||||
|
||||
int val = 0;
|
||||
ret = ocall_pointer_user_check(&val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
|
||||
val = 0;
|
||||
ret = ocall_pointer_in(&val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 0);
|
||||
|
||||
val = 0;
|
||||
ret = ocall_pointer_out(&val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 1234);
|
||||
|
||||
val = 0;
|
||||
ret = ocall_pointer_in_out(&val);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
assert(val == 1234);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* ecall_pointer_string:
|
||||
* [string] defines a string.
|
||||
*/
|
||||
void ecall_pointer_string(char *str)
|
||||
{
|
||||
strncpy(str, "0987654321", strlen(str));
|
||||
}
|
||||
|
||||
/* ecall_pointer_string_const:
|
||||
* const [string] defines a string that cannot be modified.
|
||||
*/
|
||||
void ecall_pointer_string_const(const char *str)
|
||||
{
|
||||
char* temp = new char[strlen(str)];
|
||||
strncpy(temp, str, strlen(str));
|
||||
delete []temp;
|
||||
}
|
||||
|
||||
/* ecall_pointer_size:
|
||||
* 'len' needs to be specified to tell Edger8r the length of 'str'.
|
||||
*/
|
||||
void ecall_pointer_size(void *ptr, size_t len)
|
||||
{
|
||||
strncpy((char*)ptr, "0987654321", len);
|
||||
}
|
||||
|
||||
/* ecall_pointer_count:
|
||||
* 'cnt' needs to be specified to tell Edger8r the number of elements in 'arr'.
|
||||
*/
|
||||
void ecall_pointer_count(int *arr, int cnt)
|
||||
{
|
||||
for (int i = (cnt - 1); i >= 0; i--)
|
||||
arr[i] = (cnt - 1 - i);
|
||||
}
|
||||
|
||||
/* ecall_pointer_isptr_readonly:
|
||||
* 'buf' is user defined type, shall be tagged with [isptr].
|
||||
* if it's not writable, [readonly] shall be specified.
|
||||
*/
|
||||
void ecall_pointer_isptr_readonly(buffer_t buf, size_t len)
|
||||
{
|
||||
strncpy((char*)buf, "0987654321", len);
|
||||
}
|
||||
|
||||
/* get_buffer_len:
|
||||
* get the length of input buffer 'buf'.
|
||||
*/
|
||||
size_t get_buffer_len(const char* buf)
|
||||
{
|
||||
(void)buf;
|
||||
return 10*sizeof(int);
|
||||
}
|
||||
|
||||
/* ecall_pointer_sizefunc:
|
||||
* call get_buffer_len to determin the length of 'buf'.
|
||||
*/
|
||||
void ecall_pointer_sizefunc(char *buf)
|
||||
{
|
||||
int *tmp = (int*)buf;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
assert(tmp[i] == 0);
|
||||
tmp[i] = i;
|
||||
}
|
||||
}
|
190
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Pointers.edl
Normal file
190
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Pointers.edl
Normal file
@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Pointers.edl - Samples for pointer attributes. */
|
||||
|
||||
enclave {
|
||||
|
||||
/*
|
||||
* Following keywords/attributes are supported for pointers in Edger8r:
|
||||
* in, out, user_check,
|
||||
* string, wstring,
|
||||
* const, size, count, sizefunc, isptr, readonly
|
||||
*/
|
||||
|
||||
trusted {
|
||||
|
||||
/*
|
||||
* [user_check]:
|
||||
* the pointer won't be validated, and the buffer pointed by
|
||||
* 'val' is not copied into the enclave either. But Enclave
|
||||
* can modify the memory pointed by 'val'.
|
||||
*/
|
||||
|
||||
public size_t ecall_pointer_user_check([user_check] void *val, size_t sz);
|
||||
|
||||
/*
|
||||
* [in]:
|
||||
* buffer with the same size will be allocated inside the enclave,
|
||||
* content pointed by 'val' will be copied into the new allocated
|
||||
* memory inside. Any changes performed inside the enclave will not
|
||||
* affect the buffer outside.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_in([in] int *val);
|
||||
|
||||
/*
|
||||
* [out]:
|
||||
* buffer with the same size will be allocated inside the enclave,
|
||||
* but the content pointed by 'val' won't be copied. But after return,
|
||||
* the buffer inside the enclave will copied into outside 'val'.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_out([out] int *val);
|
||||
|
||||
/*
|
||||
* [in, out]:
|
||||
* buffer with the same size will be allocated inside the enclave,
|
||||
* the content pointed by 'val' will be copied either. After return,
|
||||
* the buffer inside the enclave will by copied into outside 'val' again.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_in_out([in, out] int *val);
|
||||
|
||||
/*
|
||||
* [string]:
|
||||
* the attribute tells Edger8r 'str' is NULL terminated string, so strlen
|
||||
* will be used to count the length of buffer pointed by 'str'.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_string([in, out, string] char *str);
|
||||
|
||||
/*
|
||||
* [const]:
|
||||
* the attribute tells Edger8r the buffer pointed by 'str' cannot be modified,
|
||||
* so users cannot decorate 'str' with [out] attribute anymore.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_string_const([in, string] const char *str);
|
||||
|
||||
/*
|
||||
* [size]:
|
||||
* the attribute tells Edger8r the length of buffer in byte pointed by 'ptr'
|
||||
* (shall be copied or not).
|
||||
* Note: Users shall not specify [size] on [string] parameters.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_size([in, out, size=len] void *ptr, size_t len);
|
||||
|
||||
/*
|
||||
* [count]:
|
||||
* the attribute tells Edger8r the number of integers to be copied from 'arr'.
|
||||
*/
|
||||
|
||||
public void ecall_pointer_count([in, out, count=cnt] int *arr, int cnt);
|
||||
|
||||
/*
|
||||
* [isptr]:
|
||||
* tells Edger8r the user defined type is a pointer;
|
||||
* [readonly]:
|
||||
* forbids the buffer allocated inside the enclave to be copied back to App
|
||||
* (cannot use with [out]).
|
||||
*/
|
||||
|
||||
public void ecall_pointer_isptr_readonly([in, isptr, readonly, size=len] buffer_t buf, size_t len);
|
||||
|
||||
/*
|
||||
* [sizefunc]:
|
||||
* call a function to decide the size/length of the parameter;
|
||||
* Note:
|
||||
* User need to define and implement `get_buf_len' as:
|
||||
* size_t get_buf_len(const char* buf);
|
||||
*/
|
||||
|
||||
public void ecall_pointer_sizefunc([sizefunc = get_buffer_len, in, out] char *buf);
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Users can define multiple trusted/untrusted blocks,
|
||||
* edger8r will merged them into one trusted/untrusted block.
|
||||
*/
|
||||
trusted {
|
||||
/*
|
||||
* Test pointer attributes in OCALLs
|
||||
*/
|
||||
|
||||
public void ocall_pointer_attr(void);
|
||||
|
||||
};
|
||||
|
||||
untrusted {
|
||||
|
||||
/*
|
||||
* [user_check]:
|
||||
* the pointer won't be valified, and the buffer pointed by 'val' is not
|
||||
* copied to outside buffer either. Besides 'App' cannot modify the memory
|
||||
* pointer by 'val'.
|
||||
*/
|
||||
|
||||
void ocall_pointer_user_check([user_check] int *val);
|
||||
|
||||
/*
|
||||
* [in]:
|
||||
* buffer with the same size will be allocated in 'App' side, the content
|
||||
* pointed by 'val' will be copied into the new allocated memory outside.
|
||||
* Any changes performed by 'App' will not affect the buffer pointed by 'val'.
|
||||
*/
|
||||
|
||||
void ocall_pointer_in([in] int *val);
|
||||
|
||||
/*
|
||||
* [out]:
|
||||
* buffer with the same size will be allocated in 'App' side, the content
|
||||
* pointed by 'val' won't be copied. But after return, the buffer outside
|
||||
* will be copied into the enclave.
|
||||
*/
|
||||
|
||||
void ocall_pointer_out([out] int *val);
|
||||
|
||||
/*
|
||||
* [in, out]:
|
||||
* buffer with the same size will be allocated in 'App' side, the content
|
||||
* pointed by 'val' will be copied either. After return, the buffer outside
|
||||
* will copied into the enclave.
|
||||
*/
|
||||
|
||||
void ocall_pointer_in_out([in, out] int *val);
|
||||
|
||||
};
|
||||
|
||||
};
|
155
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Types.cpp
Normal file
155
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Types.cpp
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Test Basic Types */
|
||||
|
||||
#include "sgx_trts.h"
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
#include <limits>
|
||||
#include <cmath>
|
||||
|
||||
/* used to eliminate `unused variable' warning */
|
||||
#define UNUSED(val) (void)(val)
|
||||
|
||||
#define ULP 2
|
||||
|
||||
/* used to compare double variables in order to avoid compile warnings */
|
||||
bool almost_equal(double x, double y)
|
||||
{
|
||||
/* the machine epsilon has to be scaled to the magnitude of the larger value
|
||||
and multiplied by the desired precision in ULPs (units in the last place) */
|
||||
return std::abs(x-y) <= std::numeric_limits<double>::epsilon() * std::abs(x+y) * ULP;
|
||||
}
|
||||
|
||||
/* used to compare double variables in order to avoid compile warnings */
|
||||
bool almost_equal(float x, float y)
|
||||
{
|
||||
/* the machine epsilon has to be scaled to the magnitude of the larger value
|
||||
and multiplied by the desired precision in ULPs (units in the last place) */
|
||||
return std::abs(x-y) <= std::numeric_limits<float>::epsilon() * std::abs(x+y) * ULP;
|
||||
}
|
||||
|
||||
/* ecall_type_char:
|
||||
* [char] value passed by App.
|
||||
*/
|
||||
void ecall_type_char(char val)
|
||||
{
|
||||
assert(val == 0x12);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_int:
|
||||
* [int] value passed by App.
|
||||
*/
|
||||
void ecall_type_int(int val)
|
||||
{
|
||||
assert(val == 1234);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_float:
|
||||
* [float] value passed by App.
|
||||
*/
|
||||
void ecall_type_float(float val)
|
||||
{
|
||||
assert(almost_equal(val, (float)1234.0));
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_double:
|
||||
* [double] value passed by App.
|
||||
*/
|
||||
void ecall_type_double(double val)
|
||||
{
|
||||
assert(almost_equal(val, (double)1234.5678));
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_size_t:
|
||||
* [size_t] value passed by App.
|
||||
*/
|
||||
void ecall_type_size_t(size_t val)
|
||||
{
|
||||
assert(val == (size_t)12345678);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_wchar_t:
|
||||
* [wchar_t] value passed by App.
|
||||
*/
|
||||
void ecall_type_wchar_t(wchar_t val)
|
||||
{
|
||||
assert(val == (wchar_t)0x1234);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ecall_type_struct:
|
||||
* struct_foo_t is defined in EDL and can be used in ECALL.
|
||||
*/
|
||||
void ecall_type_struct(struct struct_foo_t val)
|
||||
{
|
||||
assert(val.struct_foo_0 == 1234);
|
||||
assert(val.struct_foo_1 == 5678);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* ecall_type_enum_union:
|
||||
* enum_foo_t/union_foo_t is defined in EDL
|
||||
* and can be used in ECALL.
|
||||
*/
|
||||
void ecall_type_enum_union(enum enum_foo_t val1, union union_foo_t *val2)
|
||||
{
|
||||
if (sgx_is_outside_enclave(val2, sizeof(union union_foo_t)) != 1)
|
||||
abort();
|
||||
val2->union_foo_0 = 1;
|
||||
val2->union_foo_1 = 2; /* overwrite union_foo_0 */
|
||||
assert(val1 == ENUM_FOO_0);
|
||||
#ifndef DEBUG
|
||||
UNUSED(val1);
|
||||
#endif
|
||||
}
|
87
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Types.edl
Normal file
87
SampleCode/SampleEnclave/Enclave/Edger8rSyntax/Types.edl
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Types.edl - Samples for basic types. */
|
||||
|
||||
enclave {
|
||||
|
||||
/*
|
||||
* Following types can be supported in Edger8r:
|
||||
* char, short, int, float, double, void,
|
||||
* int8_t, int16_t, int32_t, int64_t,
|
||||
* size_t, wchar_t,
|
||||
* uint8_t, uint16_t, uint32_t, uint64_t,
|
||||
* unsigned, struct, enum, union.
|
||||
*/
|
||||
|
||||
/*
|
||||
* We will demo few types in ECALL functions, data
|
||||
* types in OCALL functions can be handled either.
|
||||
*/
|
||||
|
||||
/* structure definition */
|
||||
struct struct_foo_t {
|
||||
/* Basic types can be used in structure. */
|
||||
uint32_t struct_foo_0;
|
||||
uint64_t struct_foo_1;
|
||||
};
|
||||
|
||||
/* enum definition */
|
||||
enum enum_foo_t {
|
||||
ENUM_FOO_0 = 0,
|
||||
ENUM_FOO_1 = 1
|
||||
};
|
||||
|
||||
/* union definition */
|
||||
union union_foo_t {
|
||||
uint32_t union_foo_0;
|
||||
uint32_t union_foo_1;
|
||||
uint64_t union_foo_3;
|
||||
};
|
||||
|
||||
trusted {
|
||||
|
||||
public void ecall_type_char(char val);
|
||||
public void ecall_type_int(int val);
|
||||
|
||||
public void ecall_type_float(float val);
|
||||
public void ecall_type_double(double val);
|
||||
|
||||
public void ecall_type_size_t(size_t val);
|
||||
public void ecall_type_wchar_t(wchar_t val);
|
||||
|
||||
public void ecall_type_struct(struct struct_foo_t val);
|
||||
public void ecall_type_enum_union(enum enum_foo_t val1, [user_check] union union_foo_t *val2);
|
||||
|
||||
/* for using user defined types, please refer to Pointers.edl, Arrays.edl. */
|
||||
};
|
||||
|
||||
};
|
12
SampleCode/SampleEnclave/Enclave/Enclave.config.xml
Normal file
12
SampleCode/SampleEnclave/Enclave/Enclave.config.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<!-- Please refer to User's Guide for the explanation of each field -->
|
||||
<EnclaveConfiguration>
|
||||
<ProdID>0</ProdID>
|
||||
<ISVSVN>0</ISVSVN>
|
||||
<StackMaxSize>0x40000</StackMaxSize>
|
||||
<HeapMaxSize>0x100000</HeapMaxSize>
|
||||
<TCSNum>10</TCSNum>
|
||||
<TCSPolicy>1</TCSPolicy>
|
||||
<DisableDebug>0</DisableDebug>
|
||||
<MiscSelect>0</MiscSelect>
|
||||
<MiscMask>0xFFFFFFFF</MiscMask>
|
||||
</EnclaveConfiguration>
|
51
SampleCode/SampleEnclave/Enclave/Enclave.cpp
Normal file
51
SampleCode/SampleEnclave/Enclave/Enclave.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h> /* vsnprintf */
|
||||
|
||||
#include "Enclave.h"
|
||||
#include "Enclave_t.h" /* print_string */
|
||||
|
||||
/*
|
||||
* printf:
|
||||
* Invokes OCALL to display the enclave buffer to the terminal.
|
||||
*/
|
||||
void printf(const char *fmt, ...)
|
||||
{
|
||||
char buf[BUFSIZ] = {'\0'};
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(buf, BUFSIZ, fmt, ap);
|
||||
va_end(ap);
|
||||
ocall_print_string(buf);
|
||||
}
|
62
SampleCode/SampleEnclave/Enclave/Enclave.edl
Normal file
62
SampleCode/SampleEnclave/Enclave/Enclave.edl
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.edl - Top EDL file. */
|
||||
|
||||
enclave {
|
||||
|
||||
include "user_types.h" /* buffer_t */
|
||||
|
||||
/* Import ECALL/OCALL from sub-directory EDLs.
|
||||
* [from]: specifies the location of EDL file.
|
||||
* [import]: specifies the functions to import,
|
||||
* [*]: implies to import all functions.
|
||||
*/
|
||||
|
||||
from "Edger8rSyntax/Types.edl" import *;
|
||||
from "Edger8rSyntax/Pointers.edl" import *;
|
||||
from "Edger8rSyntax/Arrays.edl" import *;
|
||||
from "Edger8rSyntax/Functions.edl" import *;
|
||||
|
||||
from "TrustedLibrary/Libc.edl" import *;
|
||||
from "TrustedLibrary/Libcxx.edl" import ecall_exception, ecall_map;
|
||||
from "TrustedLibrary/Thread.edl" import *;
|
||||
|
||||
/*
|
||||
* ocall_print_string - invokes OCALL to display string buffer inside the enclave.
|
||||
* [in]: copy the string buffer to App outside.
|
||||
* [string]: specifies 'str' is a NULL terminated buffer.
|
||||
*/
|
||||
untrusted {
|
||||
void ocall_print_string([in, string] const char *str);
|
||||
};
|
||||
|
||||
};
|
49
SampleCode/SampleEnclave/Enclave/Enclave.h
Normal file
49
SampleCode/SampleEnclave/Enclave/Enclave.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _ENCLAVE_H_
|
||||
#define _ENCLAVE_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void printf(const char *fmt, ...);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_ENCLAVE_H_ */
|
9
SampleCode/SampleEnclave/Enclave/Enclave.lds
Normal file
9
SampleCode/SampleEnclave/Enclave/Enclave.lds
Normal file
@ -0,0 +1,9 @@
|
||||
enclave.so
|
||||
{
|
||||
global:
|
||||
g_global_data_sim;
|
||||
g_global_data;
|
||||
enclave_entry;
|
||||
local:
|
||||
*;
|
||||
};
|
39
SampleCode/SampleEnclave/Enclave/Enclave_private.pem
Normal file
39
SampleCode/SampleEnclave/Enclave/Enclave_private.pem
Normal file
@ -0,0 +1,39 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIG4gIBAAKCAYEAroOogvsj/fZDZY8XFdkl6dJmky0lRvnWMmpeH41Bla6U1qLZ
|
||||
AmZuyIF+mQC/cgojIsrBMzBxb1kKqzATF4+XwPwgKz7fmiddmHyYz2WDJfAjIveJ
|
||||
ZjdMjM4+EytGlkkJ52T8V8ds0/L2qKexJ+NBLxkeQLfV8n1mIk7zX7jguwbCG1Pr
|
||||
nEMdJ3Sew20vnje+RsngAzdPChoJpVsWi/K7cettX/tbnre1DL02GXc5qJoQYk7b
|
||||
3zkmhz31TgFrd9VVtmUGyFXAysuSAb3EN+5VnHGr0xKkeg8utErea2FNtNIgua8H
|
||||
ONfm9Eiyaav1SVKzPHlyqLtcdxH3I8Wg7yqMsaprZ1n5A1v/levxnL8+It02KseD
|
||||
5HqV4rf/cImSlCt3lpRg8U5E1pyFQ2IVEC/XTDMiI3c+AR+w2jSRB3Bwn9zJtFlW
|
||||
KHG3m1xGI4ck+Lci1JvWWLXQagQSPtZTsubxTQNx1gsgZhgv1JHVZMdbVlAbbRMC
|
||||
1nSuJNl7KPAS/VfzAgEDAoIBgHRXxaynbVP5gkO0ug6Qw/E27wzIw4SmjsxG6Wpe
|
||||
K7kfDeRskKxESdsA/xCrKkwGwhcx1iIgS5+Qscd1Yg+1D9X9asd/P7waPmWoZd+Z
|
||||
AhlKwhdPsO7PiF3e1AzHhGQwsUTt/Y/aSI1MpHBvy2/s1h9mFCslOUxTmWw0oj/Q
|
||||
ldIEgWeNR72CE2+jFIJIyml6ftnb6qzPiga8Bm48ubKh0kvySOqnkmnPzgh+JBD6
|
||||
JnBmtZbfPT97bwTT+N6rnPqOOApvfHPf15kWI8yDbprG1l4OCUaIUH1AszxLd826
|
||||
5IPM+8gINLRDP1MA6azECPjTyHXhtnSIBZCyWSVkc05vYmNXYUNiXWMajcxW9M02
|
||||
wKzFELO8NCEAkaTPxwo4SCyIjUxiK1LbQ9h8PSy4c1+gGP4LAMR8xqP4QKg6zdu9
|
||||
osUGG/xRe/uufgTBFkcjqBHtK5L5VI0jeNIUAgW/6iNbYXjBMJ0GfauLs+g1VsOm
|
||||
WfdgXzsb9DYdMa0OXXHypmV4GwKBwQDUwQj8RKJ6c8cT4vcWCoJvJF00+RFL+P3i
|
||||
Gx2DLERxRrDa8AVGfqaCjsR+3vLgG8V/py+z+dxZYSqeB80Qeo6PDITcRKoeAYh9
|
||||
xlT3LJOS+k1cJcEmlbbO2IjLkTmzSwa80fWexKu8/Xv6vv15gpqYl1ngYoqJM3pd
|
||||
vzmTIOi7MKSZ0WmEQavrZj8zK4endE3v0eAEeQ55j1GImbypSf7Idh7wOXtjZ7WD
|
||||
Dg6yWDrri+AP/L3gClMj8wsAxMV4ZR8CgcEA0fzDHkFa6raVOxWnObmRoDhAtE0a
|
||||
cjUj976NM5yyfdf2MrKy4/RhdTiPZ6b08/lBC/+xRfV3xKVGzacm6QjqjZrUpgHC
|
||||
0LKiZaMtccCJjLtPwQd0jGQEnKfMFaPsnhOc5y8qVkCzVOSthY5qhz0XNotHHFmJ
|
||||
gffVgB0iqrMTvSL7IA2yqqpOqNRlhaYhNl8TiFP3gIeMtVa9rZy31JPgT2uJ+kfo
|
||||
gV7sdTPEjPWZd7OshGxWpT6QfVDj/T9T7L6tAoHBAI3WBf2DFvxNL2KXT2QHAZ9t
|
||||
k3imC4f7U+wSE6zILaDZyzygA4RUbwG0gv8/TJVn2P/Eynf76DuWHGlaiLWnCbSz
|
||||
Az2DHBQBBaku409zDQym3j1ugMRjzzSQWzJg0SIyBH3hTmnYcn3+Uqcp/lEBvGW6
|
||||
O+rsXFt3pukqJmIV8HzLGGaLm62BHUeZf3dyWm+i3p/hQAL7Xvu04QW70xuGqdr5
|
||||
afV7p5eaeQIJXyGQJ0eylV/90+qxjMKiB1XYg6WYvwKBwQCL/ddpgOdHJGN8uRom
|
||||
e7Zq0Csi3hGheMKlKbN3vcxT5U7MdyHtTZZOJbTvxKNNUNYH/8uD+PqDGNneb29G
|
||||
BfGzvI3EASyLIcGZF3OhKwZd0jUrWk2y7Vhob91jwp2+t73vdMbkKyI4mHOuXvGv
|
||||
fg95si9oO7EBT+Oqvhccd2J+F1IVXncccYnF4u5ZGWt5lLewN/pVr7MjjykeaHqN
|
||||
t+rfnQam2psA6fL4zS2zTmZPzR2tnY8Y1GBTi0Ko1OKd1HMCgcAb5cB/7/AQlhP9
|
||||
yQa04PLH9ygQkKKptZp7dy5WcWRx0K/hAHRoi2aw1wZqfm7VBNu2SLcs90kCCCxp
|
||||
6C5sfJi6b8NpNbIPC+sc9wsFr7pGo9SFzQ78UlcWYK2Gu2FxlMjonhka5hvo4zvg
|
||||
WxlpXKEkaFt3gLd92m/dMqBrHfafH7VwOJY2zT3WIpjwuk0ZzmRg5p0pG/svVQEH
|
||||
NZmwRwlopysbR69B/n1nefJ84UO50fLh5s5Zr3gBRwbWNZyzhXk=
|
||||
-----END RSA PRIVATE KEY-----
|
59
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp
Normal file
59
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
#include <sgx_cpuid.h>
|
||||
|
||||
#include "sgx_trts.h"
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
/* ecall_malloc_free:
|
||||
* Uses malloc/free to allocate/free trusted memory.
|
||||
*/
|
||||
void ecall_malloc_free(void)
|
||||
{
|
||||
void *ptr = malloc(100);
|
||||
assert(ptr != NULL);
|
||||
memset(ptr, 0x0, 100);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
/* ecall_sgx_cpuid:
|
||||
* Uses sgx_cpuid to get CPU features and types.
|
||||
*/
|
||||
void ecall_sgx_cpuid(int cpuinfo[4], int leaf)
|
||||
{
|
||||
sgx_status_t ret = sgx_cpuid(cpuinfo, leaf);
|
||||
if (ret != SGX_SUCCESS)
|
||||
abort();
|
||||
}
|
55
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.edl
Normal file
55
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.edl
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Libc.edl - EDL sample for trusted C library. */
|
||||
|
||||
enclave {
|
||||
|
||||
from "sgx_tstdc.edl" import sgx_oc_cpuidex;
|
||||
|
||||
/*
|
||||
* A subset of the C99 standard is supported as well as SGX customized functions:
|
||||
* sgx_cpuid, etc.
|
||||
*/
|
||||
|
||||
trusted {
|
||||
/*
|
||||
* Utilize malloc/free in enclave.
|
||||
*/
|
||||
public void ecall_malloc_free(void);
|
||||
|
||||
/*
|
||||
* Utilize SGX version __cpuid() in enclave.
|
||||
*/
|
||||
public void ecall_sgx_cpuid([in, out] int cpuinfo[4], int leaf);
|
||||
};
|
||||
};
|
89
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libcxx.cpp
Normal file
89
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libcxx.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
/*
|
||||
* ecall_exception:
|
||||
* throw/catch C++ exception inside the enclave.
|
||||
*/
|
||||
|
||||
void ecall_exception(void)
|
||||
{
|
||||
std::string foo = "foo";
|
||||
try {
|
||||
throw std::runtime_error(foo);
|
||||
}
|
||||
catch (std::runtime_error const& e) {
|
||||
assert( foo == e.what() );
|
||||
std::runtime_error clone("");
|
||||
clone = e;
|
||||
assert(foo == clone.what() );
|
||||
}
|
||||
catch (...) {
|
||||
assert( false );
|
||||
}
|
||||
}
|
||||
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
* ecall_map:
|
||||
* Utilize STL <map> in the enclave.
|
||||
*/
|
||||
void ecall_map(void)
|
||||
{
|
||||
typedef map<char, int, less<char> > map_t;
|
||||
typedef map_t::value_type map_value;
|
||||
map_t m;
|
||||
|
||||
m.insert(map_value('a', 1));
|
||||
m.insert(map_value('b', 2));
|
||||
m.insert(map_value('c', 3));
|
||||
m.insert(map_value('d', 4));
|
||||
|
||||
assert(m['a'] == 1);
|
||||
assert(m['b'] == 2);
|
||||
assert(m['c'] == 3);
|
||||
assert(m['d'] == 4);
|
||||
|
||||
assert(m.find('e') == m.end());
|
||||
|
||||
return;
|
||||
}
|
52
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libcxx.edl
Normal file
52
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libcxx.edl
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Libcxx.edl - EDL sample for trusted C++ library. */
|
||||
|
||||
enclave {
|
||||
|
||||
/*
|
||||
* A subset of the C++03 standard is supported.
|
||||
*/
|
||||
|
||||
trusted {
|
||||
/*
|
||||
* Throw/catch exception inside the enclave.
|
||||
*/
|
||||
public void ecall_exception(void);
|
||||
|
||||
/*
|
||||
* Utilize <map> inside the enclave.
|
||||
*/
|
||||
public void ecall_map(void);
|
||||
};
|
||||
};
|
104
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp
Normal file
104
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "../Enclave.h"
|
||||
#include "Enclave_t.h"
|
||||
|
||||
#include <sgx_thread.h>
|
||||
|
||||
static size_t global_counter = 0;
|
||||
static sgx_thread_mutex_t global_mutex = SGX_THREAD_MUTEX_INITIALIZER;
|
||||
|
||||
#define BUFFER_SIZE 50
|
||||
|
||||
typedef struct {
|
||||
int buf[BUFFER_SIZE];
|
||||
int occupied;
|
||||
int nextin;
|
||||
int nextout;
|
||||
sgx_thread_mutex_t mutex;
|
||||
sgx_thread_cond_t more;
|
||||
sgx_thread_cond_t less;
|
||||
} cond_buffer_t;
|
||||
|
||||
static cond_buffer_t buffer = {{0, 0, 0, 0, 0, 0}, 0, 0, 0,
|
||||
SGX_THREAD_MUTEX_INITIALIZER, SGX_THREAD_COND_INITIALIZER, SGX_THREAD_COND_INITIALIZER};
|
||||
|
||||
/*
|
||||
* ecall_increase_counter:
|
||||
* Utilize thread APIs inside the enclave.
|
||||
*/
|
||||
size_t ecall_increase_counter(void)
|
||||
{
|
||||
size_t ret = 0;
|
||||
for (int i = 0; i < LOOPS_PER_THREAD; i++) {
|
||||
sgx_thread_mutex_lock(&global_mutex);
|
||||
/* mutually exclusive adding */
|
||||
size_t tmp = global_counter;
|
||||
global_counter = ++tmp;
|
||||
if (4*LOOPS_PER_THREAD == global_counter)
|
||||
ret = global_counter;
|
||||
sgx_thread_mutex_unlock(&global_mutex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ecall_producer(void)
|
||||
{
|
||||
for (int i = 0; i < 4*LOOPS_PER_THREAD; i++) {
|
||||
cond_buffer_t *b = &buffer;
|
||||
sgx_thread_mutex_lock(&b->mutex);
|
||||
while (b->occupied >= BUFFER_SIZE)
|
||||
sgx_thread_cond_wait(&b->less, &b->mutex);
|
||||
b->buf[b->nextin] = b->nextin;
|
||||
b->nextin++;
|
||||
b->nextin %= BUFFER_SIZE;
|
||||
b->occupied++;
|
||||
sgx_thread_cond_signal(&b->more);
|
||||
sgx_thread_mutex_unlock(&b->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
void ecall_consumer(void)
|
||||
{
|
||||
for (int i = 0; i < LOOPS_PER_THREAD; i++) {
|
||||
cond_buffer_t *b = &buffer;
|
||||
sgx_thread_mutex_lock(&b->mutex);
|
||||
while(b->occupied <= 0)
|
||||
sgx_thread_cond_wait(&b->more, &b->mutex);
|
||||
b->buf[b->nextout++] = 0;
|
||||
b->nextout %= BUFFER_SIZE;
|
||||
b->occupied--;
|
||||
sgx_thread_cond_signal(&b->less);
|
||||
sgx_thread_mutex_unlock(&b->mutex);
|
||||
}
|
||||
}
|
51
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.edl
Normal file
51
SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.edl
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Thread.edl - EDL sample for trusted thread library. */
|
||||
|
||||
enclave {
|
||||
|
||||
from "sgx_tstdc.edl" import sgx_thread_wait_untrusted_event_ocall, sgx_thread_set_untrusted_event_ocall, sgx_thread_setwait_untrusted_events_ocall, sgx_thread_set_multiple_untrusted_events_ocall;
|
||||
|
||||
trusted {
|
||||
/*
|
||||
* Use SGX mutex.
|
||||
*/
|
||||
public size_t ecall_increase_counter();
|
||||
|
||||
/*
|
||||
* Use SGX condition variables.
|
||||
*/
|
||||
public void ecall_producer();
|
||||
public void ecall_consumer();
|
||||
|
||||
};
|
||||
};
|
40
SampleCode/SampleEnclave/Include/user_types.h
Normal file
40
SampleCode/SampleEnclave/Include/user_types.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2016 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* User defined types */
|
||||
|
||||
|
||||
#define LOOPS_PER_THREAD 500
|
||||
|
||||
typedef void *buffer_t;
|
||||
typedef int array_t[10];
|
||||
|
209
SampleCode/SampleEnclave/Makefile
Normal file
209
SampleCode/SampleEnclave/Makefile
Normal file
@ -0,0 +1,209 @@
|
||||
#
|
||||
# Copyright (C) 2011-2016 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.
|
||||
#
|
||||
#
|
||||
|
||||
######## SGX SDK Settings ########
|
||||
|
||||
SGX_SDK ?= /opt/intel/sgxsdk
|
||||
SGX_MODE ?= SIM
|
||||
SGX_ARCH ?= x64
|
||||
|
||||
ifeq ($(shell getconf LONG_BIT), 32)
|
||||
SGX_ARCH := x86
|
||||
else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32)
|
||||
SGX_ARCH := x86
|
||||
endif
|
||||
|
||||
ifeq ($(SGX_ARCH), x86)
|
||||
SGX_COMMON_CFLAGS := -m32
|
||||
SGX_LIBRARY_PATH := $(SGX_SDK)/lib
|
||||
SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x86/sgx_sign
|
||||
SGX_EDGER8R := $(SGX_SDK)/bin/x86/sgx_edger8r
|
||||
else
|
||||
SGX_COMMON_CFLAGS := -m64
|
||||
SGX_LIBRARY_PATH := $(SGX_SDK)/lib64
|
||||
SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x64/sgx_sign
|
||||
SGX_EDGER8R := $(SGX_SDK)/bin/x64/sgx_edger8r
|
||||
endif
|
||||
|
||||
ifeq ($(SGX_DEBUG), 1)
|
||||
ifeq ($(SGX_PRERELEASE), 1)
|
||||
$(error Cannot set SGX_DEBUG and SGX_PRERELEASE at the same time!!)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(SGX_DEBUG), 1)
|
||||
SGX_COMMON_CFLAGS += -O0 -g
|
||||
else
|
||||
SGX_COMMON_CFLAGS += -O2
|
||||
endif
|
||||
|
||||
######## App Settings ########
|
||||
|
||||
ifneq ($(SGX_MODE), HW)
|
||||
Urts_Library_Name := sgx_urts_sim
|
||||
else
|
||||
Urts_Library_Name := sgx_urts
|
||||
endif
|
||||
|
||||
App_Cpp_Files := App/App.cpp $(wildcard App/Edger8rSyntax/*.cpp) $(wildcard App/TrustedLibrary/*.cpp)
|
||||
App_Include_Paths := -IInclude -IApp -I$(SGX_SDK)/include
|
||||
|
||||
App_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths)
|
||||
|
||||
# Three configuration modes - Debug, prerelease, release
|
||||
# Debug - Macro DEBUG enabled.
|
||||
# Prerelease - Macro NDEBUG and EDEBUG enabled.
|
||||
# Release - Macro NDEBUG enabled.
|
||||
ifeq ($(SGX_DEBUG), 1)
|
||||
App_C_Flags += -DDEBUG -UNDEBUG -UEDEBUG
|
||||
else ifeq ($(SGX_PRERELEASE), 1)
|
||||
App_C_Flags += -DNDEBUG -DEDEBUG -UDEBUG
|
||||
else
|
||||
App_C_Flags += -DNDEBUG -UEDEBUG -UDEBUG
|
||||
endif
|
||||
|
||||
App_Cpp_Flags := $(App_C_Flags) -std=c++11
|
||||
App_Link_Flags := $(SGX_COMMON_CFLAGS) -L$(SGX_LIBRARY_PATH) -l$(Urts_Library_Name) -lpthread
|
||||
|
||||
ifneq ($(SGX_MODE), HW)
|
||||
App_Link_Flags += -lsgx_uae_service_sim
|
||||
else
|
||||
App_Link_Flags += -lsgx_uae_service
|
||||
endif
|
||||
|
||||
App_Cpp_Objects := $(App_Cpp_Files:.cpp=.o)
|
||||
|
||||
App_Name := app
|
||||
|
||||
######## Enclave Settings ########
|
||||
|
||||
ifneq ($(SGX_MODE), HW)
|
||||
Trts_Library_Name := sgx_trts_sim
|
||||
Service_Library_Name := sgx_tservice_sim
|
||||
else
|
||||
Trts_Library_Name := sgx_trts
|
||||
Service_Library_Name := sgx_tservice
|
||||
endif
|
||||
Crypto_Library_Name := sgx_tcrypto
|
||||
|
||||
Enclave_Cpp_Files := Enclave/Enclave.cpp $(wildcard Enclave/Edger8rSyntax/*.cpp) $(wildcard Enclave/TrustedLibrary/*.cpp)
|
||||
Enclave_Include_Paths := -IInclude -IEnclave -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport
|
||||
|
||||
Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths)
|
||||
Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++
|
||||
Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \
|
||||
-Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \
|
||||
-Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \
|
||||
-Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \
|
||||
-Wl,-pie,-eenclave_entry -Wl,--export-dynamic \
|
||||
-Wl,--defsym,__ImageBase=0 \
|
||||
-Wl,--version-script=Enclave/Enclave.lds
|
||||
|
||||
Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o)
|
||||
|
||||
Enclave_Name := enclave.so
|
||||
Signed_Enclave_Name := enclave.signed.so
|
||||
Enclave_Config_File := Enclave/Enclave.config.xml
|
||||
|
||||
ifeq ($(SGX_MODE), HW)
|
||||
ifneq ($(SGX_DEBUG), 1)
|
||||
ifneq ($(SGX_PRERELEASE), 1)
|
||||
Build_Mode = HW_RELEASE
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
.PHONY: all run
|
||||
|
||||
ifeq ($(Build_Mode), HW_RELEASE)
|
||||
all: $(App_Name) $(Enclave_Name)
|
||||
@echo "The project has been built in release hardware mode."
|
||||
@echo "Please sign the $(Enclave_Name) first with your signing key before you run the $(App_Name) to launch and access the enclave."
|
||||
@echo "To sign the enclave use the command:"
|
||||
@echo " $(SGX_ENCLAVE_SIGNER) sign -key <your key> -enclave $(Enclave_Name) -out <$(Signed_Enclave_Name)> -config $(Enclave_Config_File)"
|
||||
@echo "You can also sign the enclave using an external signing tool. See User's Guide for more details."
|
||||
@echo "To build the project in simulation mode set SGX_MODE=SIM. To build the project in prerelease mode set SGX_PRERELEASE=1 and SGX_MODE=HW."
|
||||
else
|
||||
all: $(App_Name) $(Signed_Enclave_Name)
|
||||
endif
|
||||
|
||||
run: all
|
||||
ifneq ($(Build_Mode), HW_RELEASE)
|
||||
@$(CURDIR)/$(App_Name)
|
||||
@echo "RUN => $(App_Name) [$(SGX_MODE)|$(SGX_ARCH), OK]"
|
||||
endif
|
||||
|
||||
######## App Objects ########
|
||||
|
||||
App/Enclave_u.c: $(SGX_EDGER8R) Enclave/Enclave.edl
|
||||
@cd App && $(SGX_EDGER8R) --untrusted ../Enclave/Enclave.edl --search-path ../Enclave --search-path $(SGX_SDK)/include
|
||||
@echo "GEN => $@"
|
||||
|
||||
App/Enclave_u.o: App/Enclave_u.c
|
||||
@$(CC) $(App_C_Flags) -c $< -o $@
|
||||
@echo "CC <= $<"
|
||||
|
||||
App/%.o: App/%.cpp
|
||||
@$(CXX) $(App_Cpp_Flags) -c $< -o $@
|
||||
@echo "CXX <= $<"
|
||||
|
||||
$(App_Name): App/Enclave_u.o $(App_Cpp_Objects)
|
||||
@$(CXX) $^ -o $@ $(App_Link_Flags)
|
||||
@echo "LINK => $@"
|
||||
|
||||
|
||||
######## Enclave Objects ########
|
||||
|
||||
Enclave/Enclave_t.c: $(SGX_EDGER8R) Enclave/Enclave.edl
|
||||
@cd Enclave && $(SGX_EDGER8R) --trusted ../Enclave/Enclave.edl --search-path ../Enclave --search-path $(SGX_SDK)/include
|
||||
@echo "GEN => $@"
|
||||
|
||||
Enclave/Enclave_t.o: Enclave/Enclave_t.c
|
||||
@$(CC) $(Enclave_C_Flags) -c $< -o $@
|
||||
@echo "CC <= $<"
|
||||
|
||||
Enclave/%.o: Enclave/%.cpp
|
||||
@$(CXX) $(Enclave_Cpp_Flags) -c $< -o $@
|
||||
@echo "CXX <= $<"
|
||||
|
||||
$(Enclave_Name): Enclave/Enclave_t.o $(Enclave_Cpp_Objects)
|
||||
@$(CXX) $^ -o $@ $(Enclave_Link_Flags)
|
||||
@echo "LINK => $@"
|
||||
|
||||
$(Signed_Enclave_Name): $(Enclave_Name)
|
||||
@$(SGX_ENCLAVE_SIGNER) sign -key Enclave/Enclave_private.pem -enclave $(Enclave_Name) -out $@ -config $(Enclave_Config_File)
|
||||
@echo "SIGN => $@"
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
clean:
|
||||
@rm -f $(App_Name) $(Enclave_Name) $(Signed_Enclave_Name) $(App_Cpp_Objects) App/Enclave_u.* $(Enclave_Cpp_Objects) Enclave/Enclave_t.*
|
29
SampleCode/SampleEnclave/README.txt
Normal file
29
SampleCode/SampleEnclave/README.txt
Normal file
@ -0,0 +1,29 @@
|
||||
------------------------
|
||||
Purpose of SampleEnclave
|
||||
------------------------
|
||||
The project demonstrates several fundamental usages of Intel(R) Software Guard
|
||||
Extensions (SGX) SDK:
|
||||
- Initializing and destroying an enclave
|
||||
- Creating ECALLs or OCALLs
|
||||
- Calling trusted libraries inside the enclave
|
||||
|
||||
------------------------------------
|
||||
How to Build/Execute the Sample Code
|
||||
------------------------------------
|
||||
1. Install Intel(R) SGX SDK for Linux* OS
|
||||
2. Build the project with the prepared Makefile:
|
||||
a. Hardware Mode, Debug build:
|
||||
$ make SGX_MODE=HW SGX_DEBUG=1
|
||||
b. Hardware Mode, Pre-release build:
|
||||
$ make SGX_MODE=HW SGX_PRERELEASE=1
|
||||
c. Hardware Mode, Release build:
|
||||
$ make SGX_MODE=HW
|
||||
d. Simulation Mode, Debug build:
|
||||
$ make SGX_DEBUG=1
|
||||
e. Simulation Mode, Pre-release build:
|
||||
$ make SGX_PRERELEASE=1
|
||||
f. Simulation Mode, Release build:
|
||||
$ make
|
||||
3. Execute the binary directly:
|
||||
$ ./app
|
||||
|
Reference in New Issue
Block a user