You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by sh...@apache.org on 2022/11/11 05:18:10 UTC
[incubator-teaclave-java-tee-sdk] 30/48: [sdk] Enhance JavaEnclave unit test cases
This is an automated email from the ASF dual-hosted git repository.
shaojunwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-java-tee-sdk.git
commit dcd6bfcb59e9165915c02f442a8070f311a785e6
Author: jeffery.wsj <je...@alibaba-inc.com>
AuthorDate: Tue Jul 26 23:14:56 2022 +0800
[sdk] Enhance JavaEnclave unit test cases
Summary:
1. Fix enclave's random value native call bug
2. Add concurrency/SHA/RSA/AES test cases for JavaEnclave
Test Plan: all tests pass
Reviewers: lei.yul, cengfeng.lzy, sanhong.lsh
Issue: https://aone.alibaba-inc.com/task/43584783
CR: https://code.aone.alibaba-inc.com/java-tee/JavaEnclave/codereview/9528563
---
.../substitutes/NativePRNGSubstitutions.java | 2 +-
.../test/common/AESSealedTest.java | 25 ++++
.../test/common/AESService.java | 10 ++
.../test/common/ConcurrencyCalculate.java | 9 ++
.../test/common/RSAService.java | 8 ++
.../test/common/SHAService.java | 8 ++
.../test/enclave/AESServiceImpl.java | 41 +++++++
.../test/enclave/AESUtil.java | 106 +++++++++++++++++
.../test/enclave/ConcurrencyCalculateImpl.java | 21 ++++
.../test/enclave/RSAServiceImpl.java | 34 ++++++
.../test/enclave/SHAServiceImpl.java | 22 ++++
.../src/main/resources/embedded_libos_enclave.json | 4 +-
test/enclave/src/main/resources/tee_sdk_svm.conf | 2 +-
.../test/enclave/TestAESServiceImpl.java | 22 ++++
.../test/host/TestEnclaveAES.java | 40 +++++++
.../test/host/TestEnclaveConcurrency.java | 58 ++++++++++
.../test/host/TestEnclaveException.java | 37 ++++++
.../test/host/TestEnclaveRSA.java | 36 ++++++
.../test/host/TestEnclaveReflection.java | 38 ++++++
.../test/host/TestEnclaveSHA.java | 51 +++++++++
.../test/host/TestEnclaveServiceGC.java | 38 ++++++
.../test/host/TestHelloWorld.java | 41 +++++++
.../test/host/TestJavaEnclaveService.java | 127 ---------------------
.../test/host/TestRemoteAttestation.java | 37 ++++++
24 files changed, 686 insertions(+), 131 deletions(-)
diff --git a/sdk/enclave/src/main/java/com/alibaba/confidentialcomputing/enclave/substitutes/NativePRNGSubstitutions.java b/sdk/enclave/src/main/java/com/alibaba/confidentialcomputing/enclave/substitutes/NativePRNGSubstitutions.java
index 90a5feb..0fb9588 100644
--- a/sdk/enclave/src/main/java/com/alibaba/confidentialcomputing/enclave/substitutes/NativePRNGSubstitutions.java
+++ b/sdk/enclave/src/main/java/com/alibaba/confidentialcomputing/enclave/substitutes/NativePRNGSubstitutions.java
@@ -28,7 +28,7 @@ public final class NativePRNGSubstitutions {
@Override
public boolean getAsBoolean() {
- return EnclaveOptions.UseNativeGetRandom.getValue();
+ return EnclaveOptions.RunInEnclave.getValue();
}
}
diff --git a/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESSealedTest.java b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESSealedTest.java
new file mode 100644
index 0000000..5c62678
--- /dev/null
+++ b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESSealedTest.java
@@ -0,0 +1,25 @@
+package com.alibaba.confidentialcomputing.test.common;
+
+import java.io.Serializable;
+
+public class AESSealedTest implements Serializable, Comparable<AESSealedTest> {
+ private String name;
+ private int age;
+ private int level;
+
+ public AESSealedTest(String name, int age, int level) {
+ this.name = name;
+ this.age = age;
+ this.level = level;
+ }
+
+ @Override
+ public int compareTo(AESSealedTest aesSealedTest) {
+ if (this.name.equals(aesSealedTest.name)
+ && this.age == aesSealedTest.age
+ && this.level == aesSealedTest.level) {
+ return 0;
+ }
+ return -1;
+ }
+}
diff --git a/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESService.java b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESService.java
new file mode 100644
index 0000000..65446c7
--- /dev/null
+++ b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/AESService.java
@@ -0,0 +1,10 @@
+package com.alibaba.confidentialcomputing.test.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface AESService {
+ String aesEncryptAndDecryptPlaintext(String plaintext) throws Exception;
+ String aesEncryptAndDecryptPlaintextWithPassword(String plaintext, String password, String salt) throws Exception;
+ Object aesEncryptAndDecryptObject(AESSealedTest obj) throws Exception;
+}
diff --git a/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/ConcurrencyCalculate.java b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/ConcurrencyCalculate.java
new file mode 100644
index 0000000..2b227d0
--- /dev/null
+++ b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/ConcurrencyCalculate.java
@@ -0,0 +1,9 @@
+package com.alibaba.confidentialcomputing.test.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface ConcurrencyCalculate {
+ void add(int delta);
+ long sum();
+}
diff --git a/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/RSAService.java b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/RSAService.java
new file mode 100644
index 0000000..db24ce6
--- /dev/null
+++ b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/RSAService.java
@@ -0,0 +1,8 @@
+package com.alibaba.confidentialcomputing.test.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface RSAService {
+ String encryptAndDecryptWithPlaintext(String plaintext) throws Exception;
+}
diff --git a/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/SHAService.java b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/SHAService.java
new file mode 100644
index 0000000..4fa802c
--- /dev/null
+++ b/test/common/src/main/java/com/alibaba/confidentialcomputing/test/common/SHAService.java
@@ -0,0 +1,8 @@
+package com.alibaba.confidentialcomputing.test.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface SHAService {
+ String encryptPlaintext(String plaintext, String SHAType) throws Exception;
+}
diff --git a/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESServiceImpl.java b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESServiceImpl.java
new file mode 100644
index 0000000..87b02b0
--- /dev/null
+++ b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESServiceImpl.java
@@ -0,0 +1,41 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import com.alibaba.confidentialcomputing.test.common.AESSealedTest;
+import com.alibaba.confidentialcomputing.test.common.AESService;
+import com.google.auto.service.AutoService;
+
+import javax.crypto.SealedObject;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+
+@AutoService(AESService.class)
+public class AESServiceImpl implements AESService {
+ @Override
+ public String aesEncryptAndDecryptPlaintext(String plaintext) throws Exception {
+ SecretKey key = AESUtil.generateKey(128);
+ IvParameterSpec ivParameterSpec = AESUtil.generateIv();
+ String algorithm = "AES/CBC/PKCS5Padding";
+
+ String cipherText = AESUtil.encrypt(algorithm, plaintext, key, ivParameterSpec);
+ return AESUtil.decrypt(algorithm, cipherText, key, ivParameterSpec);
+ }
+
+ @Override
+ public String aesEncryptAndDecryptPlaintextWithPassword(String plaintext, String password, String salt) throws Exception {
+ IvParameterSpec ivParameterSpec = AESUtil.generateIv();
+ SecretKey key = AESUtil.getKeyFromPassword(password, salt);
+
+ String cipherText = AESUtil.encryptPasswordBased(plaintext, key, ivParameterSpec);
+ return AESUtil.decryptPasswordBased(cipherText, key, ivParameterSpec);
+ }
+
+ @Override
+ public Object aesEncryptAndDecryptObject(AESSealedTest obj) throws Exception {
+ SecretKey key = AESUtil.generateKey(128);
+ IvParameterSpec ivParameterSpec = AESUtil.generateIv();
+ String algorithm = "AES/CBC/PKCS5Padding";
+
+ SealedObject sealedObject = AESUtil.encryptObject(algorithm, obj, key, ivParameterSpec);
+ return AESUtil.decryptObject(algorithm, sealedObject, key, ivParameterSpec);
+ }
+}
diff --git a/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESUtil.java b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESUtil.java
new file mode 100644
index 0000000..8ac60fe
--- /dev/null
+++ b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/AESUtil.java
@@ -0,0 +1,106 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+import javax.crypto.BadPaddingException;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.SealedObject;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.io.Serializable;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
+import java.util.Base64;
+
+class AESUtil {
+
+ public static String encrypt(String algorithm, String input, SecretKey key, IvParameterSpec iv)
+ throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
+ InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+ Cipher cipher = Cipher.getInstance(algorithm);
+ cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+ byte[] cipherText = cipher.doFinal(input.getBytes());
+ return Base64.getEncoder()
+ .encodeToString(cipherText);
+ }
+
+ public static String decrypt(String algorithm, String cipherText, SecretKey key, IvParameterSpec iv)
+ throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
+ InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+ Cipher cipher = Cipher.getInstance(algorithm);
+ cipher.init(Cipher.DECRYPT_MODE, key, iv);
+ byte[] plainText = cipher.doFinal(Base64.getDecoder()
+ .decode(cipherText));
+ return new String(plainText);
+ }
+
+ public static SecretKey generateKey(int n) throws NoSuchAlgorithmException {
+ KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
+ keyGenerator.init(n);
+ SecretKey key = keyGenerator.generateKey();
+ return key;
+ }
+
+ public static SecretKey getKeyFromPassword(String password, String salt)
+ throws NoSuchAlgorithmException, InvalidKeySpecException {
+ SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
+ KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256);
+ SecretKey secret = new SecretKeySpec(factory.generateSecret(spec)
+ .getEncoded(), "AES");
+ return secret;
+ }
+
+ public static IvParameterSpec generateIv() {
+ byte[] iv = new byte[16];
+ new SecureRandom().nextBytes(iv);
+ return new IvParameterSpec(iv);
+ }
+
+
+ public static SealedObject encryptObject(String algorithm, Serializable object, SecretKey key,
+ IvParameterSpec iv) throws NoSuchPaddingException, NoSuchAlgorithmException,
+ InvalidAlgorithmParameterException, InvalidKeyException, IOException, IllegalBlockSizeException {
+ Cipher cipher = Cipher.getInstance(algorithm);
+ cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+ SealedObject sealedObject = new SealedObject(object, cipher);
+ return sealedObject;
+ }
+
+ public static Serializable decryptObject(String algorithm, SealedObject sealedObject, SecretKey key,
+ IvParameterSpec iv) throws NoSuchPaddingException, NoSuchAlgorithmException,
+ InvalidAlgorithmParameterException, InvalidKeyException, ClassNotFoundException,
+ BadPaddingException, IllegalBlockSizeException, IOException {
+ Cipher cipher = Cipher.getInstance(algorithm);
+ cipher.init(Cipher.DECRYPT_MODE, key, iv);
+ Serializable unsealObject = (Serializable) sealedObject.getObject(cipher);
+ return unsealObject;
+ }
+
+ public static String encryptPasswordBased(String plainText, SecretKey key, IvParameterSpec iv)
+ throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
+ InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+ return Base64.getEncoder()
+ .encodeToString(cipher.doFinal(plainText.getBytes()));
+ }
+
+ public static String decryptPasswordBased(String cipherText, SecretKey key, IvParameterSpec iv)
+ throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException,
+ InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
+ Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
+ cipher.init(Cipher.DECRYPT_MODE, key, iv);
+ return new String(cipher.doFinal(Base64.getDecoder()
+ .decode(cipherText)));
+ }
+
+}
diff --git a/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/ConcurrencyCalculateImpl.java b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/ConcurrencyCalculateImpl.java
new file mode 100644
index 0000000..617737a
--- /dev/null
+++ b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/ConcurrencyCalculateImpl.java
@@ -0,0 +1,21 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import com.alibaba.confidentialcomputing.test.common.ConcurrencyCalculate;
+import com.google.auto.service.AutoService;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+@AutoService(ConcurrencyCalculate.class)
+public class ConcurrencyCalculateImpl implements ConcurrencyCalculate {
+ private AtomicLong sum = new AtomicLong();
+
+ @Override
+ public void add(int delta) {
+ sum.addAndGet(delta);
+ }
+
+ @Override
+ public long sum() {
+ return sum.get();
+ }
+}
diff --git a/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/RSAServiceImpl.java b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/RSAServiceImpl.java
new file mode 100644
index 0000000..860d28c
--- /dev/null
+++ b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/RSAServiceImpl.java
@@ -0,0 +1,34 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import com.alibaba.confidentialcomputing.test.common.RSAService;
+import com.google.auto.service.AutoService;
+
+import javax.crypto.Cipher;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+
+@AutoService(RSAService.class)
+public class RSAServiceImpl implements RSAService {
+
+ @Override
+ public String encryptAndDecryptWithPlaintext(String plaintext) throws Exception {
+ KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
+ generator.initialize(2048);
+ KeyPair pair = generator.generateKeyPair();
+ PrivateKey privateKey = pair.getPrivate();
+ PublicKey publicKey = pair.getPublic();
+
+ Cipher encryptCipher = Cipher.getInstance("RSA");
+ encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);
+ byte[] secretMessageBytes = plaintext.getBytes(StandardCharsets.UTF_8);
+ byte[] encryptedMessageBytes = encryptCipher.doFinal(secretMessageBytes);
+
+ Cipher decryptCipher = Cipher.getInstance("RSA");
+ decryptCipher.init(Cipher.DECRYPT_MODE, privateKey);
+ byte[] decryptedMessageBytes = decryptCipher.doFinal(encryptedMessageBytes);
+ return new String(decryptedMessageBytes, StandardCharsets.UTF_8);
+ }
+}
diff --git a/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/SHAServiceImpl.java b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/SHAServiceImpl.java
new file mode 100644
index 0000000..95caa11
--- /dev/null
+++ b/test/enclave/src/main/java/com/alibaba/confidentialcomputing/test/enclave/SHAServiceImpl.java
@@ -0,0 +1,22 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import com.alibaba.confidentialcomputing.test.common.SHAService;
+import com.google.auto.service.AutoService;
+
+import java.math.BigInteger;
+import java.security.MessageDigest;
+
+@AutoService(SHAService.class)
+public class SHAServiceImpl implements SHAService {
+ @Override
+ public String encryptPlaintext(String plaintext, String SHAType) throws Exception {
+ MessageDigest md = MessageDigest.getInstance(SHAType);
+ byte[] messageDigest = md.digest(plaintext.getBytes());
+ BigInteger no = new BigInteger(1, messageDigest);
+ String hashtext = no.toString(16);
+ while (hashtext.length() < 32) {
+ hashtext = "0" + hashtext;
+ }
+ return hashtext;
+ }
+}
diff --git a/test/enclave/src/main/resources/embedded_libos_enclave.json b/test/enclave/src/main/resources/embedded_libos_enclave.json
index 655b56a..5ea4c10 100644
--- a/test/enclave/src/main/resources/embedded_libos_enclave.json
+++ b/test/enclave/src/main/resources/embedded_libos_enclave.json
@@ -1,11 +1,11 @@
{
"debuggable": false,
- "agent_http_handler_thread_pool_size": 6,
+ "agent_http_handler_thread_pool_size": 15,
"enclave_startup_duration_ms": 60000,
"kernel_space_heap_size": "32MB",
"user_space_size": "1200MB",
"default_mmap_size": "800MB",
- "max_num_of_threads": 48,
+ "max_num_of_threads": 60,
"log_level": "off",
"enclave_jvm_args": ["-XX:-UseCompressedOops", "-Xmx512m", "-Dos.name=Linux"]
}
\ No newline at end of file
diff --git a/test/enclave/src/main/resources/tee_sdk_svm.conf b/test/enclave/src/main/resources/tee_sdk_svm.conf
index 3f18b9f..95d4685 100644
--- a/test/enclave/src/main/resources/tee_sdk_svm.conf
+++ b/test/enclave/src/main/resources/tee_sdk_svm.conf
@@ -4,7 +4,7 @@
<ISVSVN>0</ISVSVN>
<StackMaxSize>0x101000</StackMaxSize>
<HeapMaxSize>0x20000000</HeapMaxSize>
- <TCSNum>10</TCSNum>
+ <TCSNum>15</TCSNum>
<TCSPolicy>1</TCSPolicy>
<DisableDebug>0</DisableDebug>
<MiscSelect>0</MiscSelect>
diff --git a/test/enclave/src/test/java/com/alibaba/confidentialcomputing/test/enclave/TestAESServiceImpl.java b/test/enclave/src/test/java/com/alibaba/confidentialcomputing/test/enclave/TestAESServiceImpl.java
new file mode 100644
index 0000000..2e70075
--- /dev/null
+++ b/test/enclave/src/test/java/com/alibaba/confidentialcomputing/test/enclave/TestAESServiceImpl.java
@@ -0,0 +1,22 @@
+package com.alibaba.confidentialcomputing.test.enclave;
+
+import com.alibaba.confidentialcomputing.test.common.AESSealedTest;
+import com.alibaba.confidentialcomputing.test.common.AESService;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestAESServiceImpl {
+ String plaintext = "Hello World!!!";
+
+ @Test
+ public void testAESServiceImpl() throws Exception {
+ AESService service = new AESServiceImpl();
+ String result = service.aesEncryptAndDecryptPlaintext(plaintext);
+ assertEquals(plaintext, result);
+ result = service.aesEncryptAndDecryptPlaintextWithPassword(plaintext, "javaenclave", "12345678");
+ assertEquals(plaintext, result);
+ AESSealedTest obj = new AESSealedTest("javaenclave", 25, 5);
+ assertEquals(0, obj.compareTo((AESSealedTest) service.aesEncryptAndDecryptObject(obj)));
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveAES.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveAES.java
new file mode 100644
index 0000000..6ad65dc
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveAES.java
@@ -0,0 +1,40 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.test.common.AESSealedTest;
+import com.alibaba.confidentialcomputing.test.common.AESService;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestEnclaveAES {
+ @Test
+ public void testAESService() throws Exception {
+ String plaintext = "Hello World!!!";
+ EnclaveType[] types = new EnclaveType[]{
+ EnclaveType.MOCK_IN_JVM,
+ EnclaveType.MOCK_IN_SVM,
+ EnclaveType.TEE_SDK,
+ EnclaveType.EMBEDDED_LIB_OS};
+
+ for (EnclaveType type : types) {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<AESService> userServices = enclave.load(AESService.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ AESService service = userServices.next();
+ String result = service.aesEncryptAndDecryptPlaintext(plaintext);
+ assertEquals(plaintext, result);
+ result = service.aesEncryptAndDecryptPlaintextWithPassword(plaintext, "javaenclave", "12345678");
+ assertEquals(plaintext, result);
+ AESSealedTest obj = new AESSealedTest("javaenclave", 25, 5);
+ assertEquals(0, obj.compareTo((AESSealedTest) service.aesEncryptAndDecryptObject(obj)));
+ enclave.destroy();
+ }
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveConcurrency.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveConcurrency.java
new file mode 100644
index 0000000..4740f53
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveConcurrency.java
@@ -0,0 +1,58 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.test.common.ConcurrencyCalculate;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+import java.util.concurrent.CountDownLatch;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestEnclaveConcurrency {
+ private void enclaveConcurrency(EnclaveType type) throws Exception {
+ int concurrency = 10;
+ int workload = 10_000;
+ CountDownLatch latch0 = new CountDownLatch(1);
+ CountDownLatch latch1 = new CountDownLatch(concurrency);
+
+ Enclave enclave = EnclaveFactory.create(type);
+ Iterator<ConcurrencyCalculate> services = enclave.load(ConcurrencyCalculate.class);
+ assertTrue(services.hasNext());
+ ConcurrencyCalculate service = services.next();
+ for (int i = 0; i < concurrency; i++) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ latch0.await();
+ for (int i = 0; i < workload; i++) {
+ service.add(1);
+ }
+ latch1.countDown();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+ latch0.countDown();
+ latch1.await();
+ assertEquals(concurrency * workload, service.sum());
+
+ // waiting for enclave service recycle.
+ System.gc();
+ Thread.sleep(2000);
+ enclave.destroy();
+ }
+
+ @Test
+ public void testEnclaveConcurrency() throws Exception {
+ enclaveConcurrency(EnclaveType.MOCK_IN_JVM);
+ enclaveConcurrency(EnclaveType.MOCK_IN_SVM);
+ enclaveConcurrency(EnclaveType.TEE_SDK);
+ enclaveConcurrency(EnclaveType.EMBEDDED_LIB_OS);
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveException.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveException.java
new file mode 100644
index 0000000..73f0d89
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveException.java
@@ -0,0 +1,37 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveCreatingException;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveDestroyingException;
+import com.alibaba.confidentialcomputing.host.exception.ServicesLoadingException;
+import com.alibaba.confidentialcomputing.test.common.EnclaveException;
+import com.alibaba.confidentialcomputing.test.common.JavaEnclaveException;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestEnclaveException {
+
+ private void javaEnclaveException(EnclaveType type) throws EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<EnclaveException> userServices = enclave.load(EnclaveException.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ EnclaveException service = userServices.next();
+ assertThrows(JavaEnclaveException.class, () -> service.enclaveException("JavaEnclave Exception"));
+ enclave.destroy();
+ }
+
+ @Test
+ public void testJavaEnclaveException() throws Exception {
+ javaEnclaveException(EnclaveType.MOCK_IN_JVM);
+ javaEnclaveException(EnclaveType.MOCK_IN_SVM);
+ javaEnclaveException(EnclaveType.TEE_SDK);
+ javaEnclaveException(EnclaveType.EMBEDDED_LIB_OS);
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveRSA.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveRSA.java
new file mode 100644
index 0000000..62618da
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveRSA.java
@@ -0,0 +1,36 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.test.common.RSAService;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestEnclaveRSA {
+ @Test
+ public void testRSAService() throws Exception {
+ String plaintext = "Hello World!!!";
+ EnclaveType[] types = new EnclaveType[]{
+ EnclaveType.MOCK_IN_JVM,
+ EnclaveType.MOCK_IN_SVM,
+ EnclaveType.TEE_SDK,
+ EnclaveType.EMBEDDED_LIB_OS};
+
+ for (EnclaveType type : types) {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<RSAService> userServices = enclave.load(RSAService.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ RSAService service = userServices.next();
+ String result = service.encryptAndDecryptWithPlaintext(plaintext);
+ assertEquals(plaintext, result);
+ enclave.destroy();
+ }
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveReflection.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveReflection.java
new file mode 100644
index 0000000..6fd03ad
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveReflection.java
@@ -0,0 +1,38 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveCreatingException;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveDestroyingException;
+import com.alibaba.confidentialcomputing.host.exception.ServicesLoadingException;
+import com.alibaba.confidentialcomputing.test.common.ReflectionCallService;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestEnclaveReflection {
+
+ private void reflectionCallService(EnclaveType type) throws EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<ReflectionCallService> userServices = enclave.load(ReflectionCallService.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ ReflectionCallService service = userServices.next();
+ assertEquals(20, service.add(2, 18));
+ assertEquals(-20, service.sub(2, 22));
+ enclave.destroy();
+ }
+
+ @Test
+ public void testReflectionCallService() throws Exception {
+ reflectionCallService(EnclaveType.MOCK_IN_JVM);
+ reflectionCallService(EnclaveType.MOCK_IN_SVM);
+ reflectionCallService(EnclaveType.TEE_SDK);
+ reflectionCallService(EnclaveType.EMBEDDED_LIB_OS);
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveSHA.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveSHA.java
new file mode 100644
index 0000000..9faa20a
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveSHA.java
@@ -0,0 +1,51 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.test.common.SHAService;
+import org.junit.jupiter.api.Test;
+
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestEnclaveSHA {
+ private String encryptSHA(String plaintext, String SHAType) throws NoSuchAlgorithmException {
+ MessageDigest md = MessageDigest.getInstance(SHAType);
+ byte[] messageDigest = md.digest(plaintext.getBytes());
+ BigInteger no = new BigInteger(1, messageDigest);
+ String hashtext = no.toString(16);
+ while (hashtext.length() < 32) {
+ hashtext = "0" + hashtext;
+ }
+ return hashtext;
+ }
+
+ @Test
+ public void testEnclaveSHA() throws Exception {
+ String plaintext = "Hello World!!!";
+ EnclaveType[] types = new EnclaveType[]{
+ EnclaveType.MOCK_IN_JVM,
+ EnclaveType.MOCK_IN_SVM,
+ EnclaveType.TEE_SDK,
+ EnclaveType.EMBEDDED_LIB_OS};
+
+ for (EnclaveType type : types) {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<SHAService> userServices = enclave.load(SHAService.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ SHAService service = userServices.next();
+ String result = service.encryptPlaintext(plaintext, "SHA-384");
+ assertEquals(encryptSHA(plaintext, "SHA-384"), result);
+ result = service.encryptPlaintext(plaintext, "SHA-512");
+ assertEquals(encryptSHA(plaintext, "SHA-512"), result);
+ enclave.destroy();
+ }
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveServiceGC.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveServiceGC.java
new file mode 100644
index 0000000..419168c
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestEnclaveServiceGC.java
@@ -0,0 +1,38 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.test.common.EnclaveServiceStatistic;
+import org.junit.jupiter.api.Test;
+
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestEnclaveServiceGC {
+ private void enclaveServiceGC(EnclaveType type) throws Exception {
+ int count = 1001;
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ for (int i = 0x0; i < count; i++) {
+ Iterator<EnclaveServiceStatistic> userServices = enclave.load(EnclaveServiceStatistic.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ }
+ System.gc();
+ Thread.sleep(1000);
+ System.gc();
+ Thread.sleep(1000);
+ Iterator<EnclaveServiceStatistic> userServices = enclave.load(EnclaveServiceStatistic.class);
+ assertEquals(1, userServices.next().getEnclaveServiceCount());
+ enclave.destroy();
+ }
+
+ @Test
+ public void testEnclaveServiceGC() throws Exception {
+ enclaveServiceGC(EnclaveType.MOCK_IN_SVM);
+ enclaveServiceGC(EnclaveType.TEE_SDK);
+ enclaveServiceGC(EnclaveType.EMBEDDED_LIB_OS);
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestHelloWorld.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestHelloWorld.java
new file mode 100644
index 0000000..e819685
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestHelloWorld.java
@@ -0,0 +1,41 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveCreatingException;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveDestroyingException;
+import com.alibaba.confidentialcomputing.host.exception.RemoteAttestationException;
+import com.alibaba.confidentialcomputing.host.exception.ServicesLoadingException;
+import com.alibaba.confidentialcomputing.test.common.SayHelloService;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestHelloWorld {
+
+ private String sayHelloService(EnclaveType type, String plain) throws
+ EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException, RemoteAttestationException, IOException {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ Iterator<SayHelloService> userServices = enclave.load(SayHelloService.class);
+ assertNotNull(userServices);
+ assertTrue(userServices.hasNext());
+ SayHelloService service = userServices.next();
+ String result = service.sayHelloService(plain);
+ assertEquals("Hello World", service.sayHelloWorld());
+ enclave.destroy();
+ return result;
+ }
+
+ @Test
+ public void testSayHelloService() throws Exception {
+ assertEquals("Hello World", sayHelloService(EnclaveType.MOCK_IN_JVM, "Hello World"));
+ assertEquals("Hello World", sayHelloService(EnclaveType.MOCK_IN_SVM, "Hello World"));
+ assertEquals("Hello World", sayHelloService(EnclaveType.TEE_SDK, "Hello World"));
+ assertEquals("Hello World", sayHelloService(EnclaveType.EMBEDDED_LIB_OS, "Hello World"));
+ }
+}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestJavaEnclaveService.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestJavaEnclaveService.java
deleted file mode 100644
index e01cbfc..0000000
--- a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestJavaEnclaveService.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.alibaba.confidentialcomputing.test.host;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Random;
-
-import com.alibaba.confidentialcomputing.host.*;
-import com.alibaba.confidentialcomputing.host.exception.EnclaveCreatingException;
-import com.alibaba.confidentialcomputing.host.exception.EnclaveDestroyingException;
-import com.alibaba.confidentialcomputing.host.exception.RemoteAttestationException;
-import com.alibaba.confidentialcomputing.host.exception.ServicesLoadingException;
-import com.alibaba.confidentialcomputing.test.common.*;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-public class TestJavaEnclaveService {
- private String sayHelloService(EnclaveType type, String plain) throws
- EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException, RemoteAttestationException, IOException {
- Enclave enclave = EnclaveFactory.create(type);
- assertNotNull(enclave);
- Iterator<SayHelloService> userServices = enclave.load(SayHelloService.class);
- assertNotNull(userServices);
- assertTrue(userServices.hasNext());
- SayHelloService service = userServices.next();
- String result = service.sayHelloService(plain);
- assertEquals("Hello World", service.sayHelloWorld());
- enclave.destroy();
- return result;
- }
-
- private void reflectionCallService(EnclaveType type) throws EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException {
- Enclave enclave = EnclaveFactory.create(type);
- assertNotNull(enclave);
- Iterator<ReflectionCallService> userServices = enclave.load(ReflectionCallService.class);
- assertNotNull(userServices);
- assertTrue(userServices.hasNext());
- ReflectionCallService service = userServices.next();
- assertEquals(20, service.add(2, 18));
- assertEquals(-20, service.sub(2, 22));
- enclave.destroy();
- }
-
- private void javaEnclaveException(EnclaveType type) throws EnclaveCreatingException, ServicesLoadingException, EnclaveDestroyingException {
- Enclave enclave = EnclaveFactory.create(type);
- assertNotNull(enclave);
- Iterator<EnclaveException> userServices = enclave.load(EnclaveException.class);
- assertNotNull(userServices);
- assertTrue(userServices.hasNext());
- EnclaveException service = userServices.next();
- assertThrows(JavaEnclaveException.class, () -> service.enclaveException("JavaEnclave Exception"));
- enclave.destroy();
- }
-
- private void remoteAttestation(EnclaveType type) throws EnclaveCreatingException, RemoteAttestationException, EnclaveDestroyingException {
- Enclave enclave = EnclaveFactory.create(type);
- assertNotNull(enclave);
- byte[] userData = new byte[64];
- new Random().nextBytes(userData);
-
- SGXAttestationReport report = (SGXAttestationReport) RemoteAttestation.generateAttestationReport(enclave, userData);
- assertEquals(report.getEnclaveType(), type);
- assertNotNull(report.getQuote());
- assertEquals(0, RemoteAttestation.verifyAttestationReport(report));
- assertNotNull(report.getMeasurementEnclave());
- assertNotNull(report.getMeasurementSigner());
- assertNotNull(report.getUserData());
- assertArrayEquals(userData, report.getUserData());
- enclave.destroy();
- }
-
- private void enclaveServiceGC(EnclaveType type) throws Exception {
- int count = 10001;
- Enclave enclave = EnclaveFactory.create(type);
- assertNotNull(enclave);
- for (int i = 0x0; i < count; i++) {
- Iterator<EnclaveServiceStatistic> userServices = enclave.load(EnclaveServiceStatistic.class);
- assertNotNull(userServices);
- assertTrue(userServices.hasNext());
- }
- System.gc();
- Thread.sleep(2000);
- System.gc();
- Thread.sleep(2000);
- Iterator<EnclaveServiceStatistic> userServices = enclave.load(EnclaveServiceStatistic.class);
- assertEquals(1, userServices.next().getEnclaveServiceCount());
- enclave.destroy();
- }
-
- @Test
- public void testSayHelloService() throws Exception {
- assertEquals("Hello World", sayHelloService(EnclaveType.MOCK_IN_JVM, "Hello World"));
- assertEquals("Hello World", sayHelloService(EnclaveType.MOCK_IN_SVM, "Hello World"));
- assertEquals("Hello World", sayHelloService(EnclaveType.TEE_SDK, "Hello World"));
- assertEquals("Hello World", sayHelloService(EnclaveType.EMBEDDED_LIB_OS, "Hello World"));
- }
-
- @Test
- public void testReflectionCallService() throws Exception {
- reflectionCallService(EnclaveType.MOCK_IN_JVM);
- reflectionCallService(EnclaveType.MOCK_IN_SVM);
- reflectionCallService(EnclaveType.TEE_SDK);
- reflectionCallService(EnclaveType.EMBEDDED_LIB_OS);
- }
-
- @Test
- public void testJavaEnclaveException() throws Exception {
- javaEnclaveException(EnclaveType.MOCK_IN_JVM);
- javaEnclaveException(EnclaveType.MOCK_IN_SVM);
- javaEnclaveException(EnclaveType.TEE_SDK);
- javaEnclaveException(EnclaveType.EMBEDDED_LIB_OS);
- }
-
- @Test
- public void testRemoteAttestation() throws Exception {
- remoteAttestation(EnclaveType.TEE_SDK);
- remoteAttestation(EnclaveType.EMBEDDED_LIB_OS);
- }
-
- @Test
- public void testEnclaveServiceGC() throws Exception {
- enclaveServiceGC(EnclaveType.MOCK_IN_SVM);
- enclaveServiceGC(EnclaveType.TEE_SDK);
- enclaveServiceGC(EnclaveType.EMBEDDED_LIB_OS);
- }
-}
diff --git a/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestRemoteAttestation.java b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestRemoteAttestation.java
new file mode 100644
index 0000000..3c625db
--- /dev/null
+++ b/test/host/src/test/java/com/alibaba/confidentialcomputing/test/host/TestRemoteAttestation.java
@@ -0,0 +1,37 @@
+package com.alibaba.confidentialcomputing.test.host;
+
+import com.alibaba.confidentialcomputing.host.*;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveCreatingException;
+import com.alibaba.confidentialcomputing.host.exception.EnclaveDestroyingException;
+import com.alibaba.confidentialcomputing.host.exception.RemoteAttestationException;
+import org.junit.jupiter.api.Test;
+
+import java.util.Random;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestRemoteAttestation {
+
+ private void remoteAttestation(EnclaveType type) throws EnclaveCreatingException, RemoteAttestationException, EnclaveDestroyingException {
+ Enclave enclave = EnclaveFactory.create(type);
+ assertNotNull(enclave);
+ byte[] userData = new byte[64];
+ new Random().nextBytes(userData);
+
+ SGXAttestationReport report = (SGXAttestationReport) RemoteAttestation.generateAttestationReport(enclave, userData);
+ assertEquals(report.getEnclaveType(), type);
+ assertNotNull(report.getQuote());
+ assertEquals(0, RemoteAttestation.verifyAttestationReport(report));
+ assertNotNull(report.getMeasurementEnclave());
+ assertNotNull(report.getMeasurementSigner());
+ assertNotNull(report.getUserData());
+ assertArrayEquals(userData, report.getUserData());
+ enclave.destroy();
+ }
+
+ @Test
+ public void testRemoteAttestation() throws Exception {
+ remoteAttestation(EnclaveType.TEE_SDK);
+ remoteAttestation(EnclaveType.EMBEDDED_LIB_OS);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org