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 d24cc6fcbf51ae0276a7eddf815d5ce30a26c3e7
Author: jeffery.wsj <[email protected]>
AuthorDate: Fri Aug 12 14:44:48 2022 +0800

    [sdk] Add JavaEnclave benchmark and samples
    
    Summary:
    1. Add string and sm2/sm3/sm4 benchmark for JavaEnclave.
    2. Enhance springboot sample for JavaEnclave.
    
    Test Plan: all tests pass
    
    Reviewers: lei.yul, cengfeng.lzy, sanhong.lsh
    
    Issue: https://aone.alibaba-inc.com/task/44037219
    
    CR: 
https://code.aone.alibaba-inc.com/java-tee/JavaEnclave/codereview/9739228
---
 benchmark/guomi/common/pom.xml                     |  59 ++++++
 .../benchmark/guomi/common/SMService.java          |  10 +
 benchmark/guomi/enclave/pom.xml                    | 208 +++++++++++++++++++++
 .../benchmark/guomi/enclave/SM2ServiceImpl.java    |  86 +++++++++
 .../benchmark/guomi/enclave/SM3ServiceImpl.java    |  15 ++
 .../benchmark/guomi/enclave/SM4ServiceImpl.java    |  53 ++++++
 .../benchmark/guomi/enclave/SMServiceImpl.java     |  23 +++
 .../META-INF/native-image/jni-config.json          |   2 +
 .../META-INF/native-image/proxy-config.json        |   2 +
 .../META-INF/native-image/reflect-config.json      |   2 +
 .../META-INF/native-image/resource-config.json     |   5 +
 .../native-image/serialization-config.json         |   2 +
 .../src/main/resources/embedded_libos_enclave.json |  11 ++
 .../enclave/src/main/resources/tee_sdk_svm.conf    |  12 ++
 benchmark/guomi/host/pom.xml                       | 128 +++++++++++++
 .../benchmark/guomi/host/GuoMiBenchMark.java       | 156 ++++++++++++++++
 benchmark/guomi/pom.xml                            | 107 +++++++++++
 benchmark/guomi/run.sh                             |   5 +
 benchmark/string/common/pom.xml                    |  59 ++++++
 .../string/common/StringOperationMetric.java       |  10 +
 benchmark/string/enclave/pom.xml                   | 201 ++++++++++++++++++++
 .../string/enclave/StringOperationMetricImpl.java  |  45 +++++
 .../META-INF/native-image/jni-config.json          |   2 +
 .../META-INF/native-image/proxy-config.json        |   2 +
 .../META-INF/native-image/reflect-config.json      |   2 +
 .../META-INF/native-image/resource-config.json     |   5 +
 .../native-image/serialization-config.json         |   2 +
 .../src/main/resources/embedded_libos_enclave.json |  11 ++
 .../enclave/src/main/resources/tee_sdk_svm.conf    |  12 ++
 benchmark/string/host/pom.xml                      | 128 +++++++++++++
 .../benchmark/string/host/StringBenchMark.java     | 158 ++++++++++++++++
 benchmark/string/pom.xml                           |  97 ++++++++++
 benchmark/string/run.sh                            |   5 +
 samples/springboot/common/pom.xml                  |  59 ++++++
 .../springboot/common/SBEnclaveService.java        |  11 ++
 samples/springboot/enclave/pom.xml                 | 208 +++++++++++++++++++++
 .../springboot/enclave/EnclaveServiceImpl.java     | 102 ++++++++++
 .../META-INF/native-image/jni-config.json          |   2 +
 .../META-INF/native-image/proxy-config.json        |   2 +
 .../META-INF/native-image/reflect-config.json      |   2 +
 .../META-INF/native-image/resource-config.json     |   5 +
 .../native-image/serialization-config.json         |   2 +
 .../src/main/resources/embedded_libos_enclave.json |  11 ++
 .../enclave/src/main/resources/tee_sdk_svm.conf    |  12 ++
 samples/springboot/host/pom.xml                    | 131 +++++++++++++
 .../samples/springboot/host/Application.java       |  25 +++
 .../springboot/host/EnclaveDigestController.java   |  27 +++
 .../springboot/host/EnclaveEncDecController.java   |  27 +++
 samples/springboot/pom.xml                         | 101 ++++++++++
 samples/springboot/run.sh                          |  20 ++
 50 files changed, 2372 insertions(+)

diff --git a/benchmark/guomi/common/pom.xml b/benchmark/guomi/common/pom.xml
new file mode 100644
index 0000000..a528117
--- /dev/null
+++ b/benchmark/guomi/common/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+        <artifactId>guomi</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>common</artifactId>
+    <packaging>jar</packaging>
+    <name>common</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/guomi/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/common/SMService.java
 
b/benchmark/guomi/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/common/SMService.java
new file mode 100644
index 0000000..858123c
--- /dev/null
+++ 
b/benchmark/guomi/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/common/SMService.java
@@ -0,0 +1,10 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface SMService {
+    String sm2Service(String plaintext) throws Exception;
+    byte[] sm3Service(String plainText) throws Exception;
+    String sm4Service(String plaintext) throws Exception;
+}
diff --git a/benchmark/guomi/enclave/pom.xml b/benchmark/guomi/enclave/pom.xml
new file mode 100644
index 0000000..aac6171
--- /dev/null
+++ b/benchmark/guomi/enclave/pom.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+        <artifactId>guomi</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>enclave</artifactId>
+    <packaging>jar</packaging>
+    <name>enclave</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <svm.maven.version>0.9.13</svm.maven.version>
+        
<com.alibaba.enclave.privatePem.path></com.alibaba.enclave.privatePem.path>
+    </properties>
+    <profiles>
+        <profile>
+            <id>native</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.graalvm.buildtools</groupId>
+                        <artifactId>native-maven-plugin</artifactId>
+                        <version>${svm.maven.version}</version>
+                        <extensions>true</extensions>
+                        <executions>
+                            <execution>
+                                <id>test-native</id>
+                                <goals>
+                                    <goal>test</goal>
+                                </goals>
+                                <configuration>
+                                    <buildArgs>
+                                        <buildArg>--no-fallback</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>test</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_mock_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native-tee</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_tee_sdk_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        
<buildArg>-H:-AllowVMInternalThreads</buildArg>
+                                        <buildArg>-H:+RunInEnclave</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <agent>
+                                <enabled>true</enabled>
+                            </agent>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <executions>
+                            <execution>
+                                <id>ApplicationNativeCompile</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <executable>bash</executable>
+                                    <arguments>
+                                        
<argument>/opt/javaenclave/build_app/make.sh</argument>
+                                        <argument>${project.basedir}</argument>
+                                        
<argument>${com.alibaba.enclave.platform}</argument>
+                                        
<argument>${com.alibaba.enclave.privatePem.path}</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>enclave</artifactId>
+        </dependency>
+        <dependency>
+            
<groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>bouncycastle-native</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM2ServiceImpl.java
 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM2ServiceImpl.java
new file mode 100644
index 0000000..1bfb4dc
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM2ServiceImpl.java
@@ -0,0 +1,86 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.enclave;
+
+import org.bouncycastle.asn1.gm.GMNamedCurves;
+import org.bouncycastle.asn1.x9.X9ECParameters;
+import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
+import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.jce.spec.ECPrivateKeySpec;
+import org.bouncycastle.jce.spec.ECPublicKeySpec;
+import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.util.encoders.Hex;
+
+import javax.crypto.Cipher;
+import java.math.BigInteger;
+import java.security.*;
+import java.security.spec.ECGenParameterSpec;
+import java.util.Base64;
+
+class SM2ServiceImpl {
+    private static BouncyCastleProvider provider;
+    private static ECParameterSpec ecParameterSpec;
+    private static KeyFactory keyFactory;
+    private static String publicKey;
+    private static String privateKey;
+
+    static {
+        try {
+            provider = (BouncyCastleProvider) Security.getProvider("BC");
+            if (provider == null) {
+                provider = new BouncyCastleProvider();
+            }
+            X9ECParameters parameters = GMNamedCurves.getByName("sm2p256v1");
+            ecParameterSpec = new ECParameterSpec(parameters.getCurve(), 
parameters.getG(), parameters.getN(), parameters.getH());
+            keyFactory = KeyFactory.getInstance("EC", provider);
+            generateSm2KeyPair();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void generateSm2KeyPair() throws Exception {
+        final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
+        final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", 
provider);
+        SecureRandom random = new SecureRandom();
+        kpg.initialize(sm2Spec, random);
+        KeyPair keyPair = kpg.generateKeyPair();
+        BCECPrivateKey priKey = (BCECPrivateKey) keyPair.getPrivate();
+        BCECPublicKey pubKey = (BCECPublicKey) keyPair.getPublic();
+        publicKey = new String(Hex.encode(pubKey.getQ().getEncoded(true)));
+        privateKey = priKey.getD().toString(16);
+    }
+
+    private String encode(String input, String pubKey) {
+        try {
+            X9ECParameters parameters = GMNamedCurves.getByName("sm2p256v1");
+            ECParameterSpec ecParameterSpec = new 
ECParameterSpec(parameters.getCurve(), parameters.getG(), parameters.getN(), 
parameters.getH());
+            ECPoint ecPoint = 
parameters.getCurve().decodePoint(Hex.decode(pubKey));
+            KeyFactory keyFactory = KeyFactory.getInstance("EC", provider);
+            BCECPublicKey key = (BCECPublicKey) keyFactory.generatePublic(new 
ECPublicKeySpec(ecPoint, ecParameterSpec));
+            Cipher cipher = Cipher.getInstance("SM2", provider);
+            cipher.init(Cipher.ENCRYPT_MODE, key);
+            return 
Base64.getEncoder().encodeToString(cipher.doFinal(input.getBytes()));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private byte[] decoder(String input, String prvKey) {
+        try {
+            Cipher cipher = Cipher.getInstance("SM2", provider);
+            BigInteger bigInteger = new BigInteger(prvKey, 16);
+            BCECPrivateKey privateKey = (BCECPrivateKey) 
keyFactory.generatePrivate(new ECPrivateKeySpec(bigInteger, ecParameterSpec));
+            cipher.init(Cipher.DECRYPT_MODE, privateKey);
+            return cipher.doFinal(Base64.getDecoder().decode(input));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    String sm2Service(String plaintext) throws Exception {
+        return new String(decoder(encode(plaintext, publicKey), privateKey));
+    }
+}
diff --git 
a/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM3ServiceImpl.java
 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM3ServiceImpl.java
new file mode 100644
index 0000000..e4e64a5
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM3ServiceImpl.java
@@ -0,0 +1,15 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.enclave;
+
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.crypto.digests.SM3Digest;
+
+class SM3ServiceImpl {
+    static byte[] sm3Service(String plainText) throws Exception {
+        byte[] messages = plainText.getBytes();
+        Digest md = new SM3Digest();
+        md.update(messages, 0, messages.length);
+        byte[] digest = new byte[md.getDigestSize()];
+        md.doFinal(digest, 0);
+        return digest;
+    }
+}
diff --git 
a/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM4ServiceImpl.java
 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM4ServiceImpl.java
new file mode 100644
index 0000000..0d13810
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SM4ServiceImpl.java
@@ -0,0 +1,53 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.enclave;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.Security;
+
+public class SM4ServiceImpl {
+    private static final String ALGORITHM_NAME = "SM4";
+    private static final String ALGORITHM_ECB_PKCS5PADDING = 
"SM4/ECB/PKCS5Padding";
+    private static final int DEFAULT_KEY_SIZE = 128;
+
+    static {
+        Provider provider = Security.getProvider("BC");
+        if (provider == null) {
+            provider = new BouncyCastleProvider();
+        }
+        Security.addProvider(provider);
+    }
+
+    private byte[] generateKey() throws Exception {
+        KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, 
BouncyCastleProvider.PROVIDER_NAME);
+        kg.init(DEFAULT_KEY_SIZE, new SecureRandom());
+        return kg.generateKey().getEncoded();
+    }
+
+    private byte[] sm4EncryptAndDecrypt(byte[] data, byte[] key, String 
sm4mode, byte[] iv, int mode) throws Exception {
+        IvParameterSpec ivParameterSpec = null;
+        if (null != iv) {
+            ivParameterSpec = new IvParameterSpec(iv);
+        }
+        SecretKeySpec sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
+        Cipher cipher = Cipher.getInstance(sm4mode, 
BouncyCastleProvider.PROVIDER_NAME);
+        if (null == ivParameterSpec) {
+            cipher.init(mode, sm4Key);
+        } else {
+            cipher.init(mode, sm4Key, ivParameterSpec);
+        }
+        return cipher.doFinal(data);
+    }
+
+    String sm4Service(String plaintext) throws Exception {
+        byte[] key = generateKey();
+        byte[] encryptResult = 
sm4EncryptAndDecrypt(plaintext.getBytes(StandardCharsets.UTF_8), key, 
ALGORITHM_ECB_PKCS5PADDING, null, Cipher.ENCRYPT_MODE);
+        return new String(sm4EncryptAndDecrypt(encryptResult, key, 
ALGORITHM_ECB_PKCS5PADDING, null, Cipher.DECRYPT_MODE), StandardCharsets.UTF_8);
+    }
+}
diff --git 
a/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SMServiceImpl.java
 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SMServiceImpl.java
new file mode 100644
index 0000000..4f46345
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/enclave/SMServiceImpl.java
@@ -0,0 +1,23 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.enclave;
+
+import com.alibaba.confidentialcomputing.benchmark.guomi.common.SMService;
+import com.google.auto.service.AutoService;
+
+@AutoService(SMService.class)
+public class SMServiceImpl implements SMService {
+
+    @Override
+    public String sm2Service(String plaintext) throws Exception {
+        return new SM2ServiceImpl().sm2Service(plaintext);
+    }
+
+    @Override
+    public byte[] sm3Service(String plainText) throws Exception {
+        return SM3ServiceImpl.sm3Service(plainText);
+    }
+
+    @Override
+    public String sm4Service(String plaintext) throws Exception {
+        return new SM4ServiceImpl().sm4Service(plaintext);
+    }
+}
diff --git 
a/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/jni-config.json
 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/proxy-config.json
 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/reflect-config.json
 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..32960f8
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,2 @@
+[
+]
\ No newline at end of file
diff --git 
a/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/resource-config.json
 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..791ea0f
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,5 @@
+{
+  "resources":{
+  "includes":[]},
+  "bundles":[]
+}
diff --git 
a/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/serialization-config.json
 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/guomi/enclave/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/guomi/enclave/src/main/resources/embedded_libos_enclave.json 
b/benchmark/guomi/enclave/src/main/resources/embedded_libos_enclave.json
new file mode 100644
index 0000000..add95b2
--- /dev/null
+++ b/benchmark/guomi/enclave/src/main/resources/embedded_libos_enclave.json
@@ -0,0 +1,11 @@
+{
+  "debuggable": true,
+  "agent_http_handler_thread_pool_size": 6,
+  "enclave_startup_duration_ms": 60000,
+  "kernel_space_heap_size": "32MB",
+  "user_space_size": "1200MB",
+  "default_mmap_size": "800MB",
+  "max_num_of_threads": 48,
+  "log_level": "off",
+  "enclave_jvm_args": ["-XX:-UseCompressedOops", "-Xmx512m", "-Dos.name=Linux"]
+}
\ No newline at end of file
diff --git a/benchmark/guomi/enclave/src/main/resources/tee_sdk_svm.conf 
b/benchmark/guomi/enclave/src/main/resources/tee_sdk_svm.conf
new file mode 100644
index 0000000..ffa1b22
--- /dev/null
+++ b/benchmark/guomi/enclave/src/main/resources/tee_sdk_svm.conf
@@ -0,0 +1,12 @@
+<!-- Please refer to User's Guide for the explanation of each field -->
+<EnclaveConfiguration>
+  <ProdID>0</ProdID>
+  <ISVSVN>0</ISVSVN>
+  <StackMaxSize>0x101000</StackMaxSize>
+  <HeapMaxSize>0x30000000</HeapMaxSize>
+  <TCSNum>15</TCSNum>
+  <TCSPolicy>1</TCSPolicy>
+  <DisableDebug>0</DisableDebug>
+  <MiscSelect>0</MiscSelect>
+  <MiscMask>0xFFFFFFFF</MiscMask>
+</EnclaveConfiguration>
\ No newline at end of file
diff --git a/benchmark/guomi/host/pom.xml b/benchmark/guomi/host/pom.xml
new file mode 100644
index 0000000..3289f64
--- /dev/null
+++ b/benchmark/guomi/host/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+        <artifactId>guomi</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>host</artifactId>
+    <packaging>jar</packaging>
+    <name>host</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <resources>
+            <resource>
+                
<directory>${project.basedir}/../enclave/target/svm-output</directory>
+                <includes>
+                    <include>**/*.so</include>
+                    <include>**/*.signed</include>
+                    <include>**/*.tgz</include>
+                </includes>
+            </resource>
+            <resource>
+                
<directory>${project.basedir}/../enclave/src/main/resources</directory>
+                <includes>
+                    <include>**/embedded_libos_enclave.json</include>
+                    <include>**/tee_sdk_svm.conf</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>host</artifactId>
+        </dependency>
+        <dependency>
+            
<groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-generator-annprocess</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/guomi/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/host/GuoMiBenchMark.java
 
b/benchmark/guomi/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/host/GuoMiBenchMark.java
new file mode 100644
index 0000000..a5ecc29
--- /dev/null
+++ 
b/benchmark/guomi/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/guomi/host/GuoMiBenchMark.java
@@ -0,0 +1,156 @@
+package com.alibaba.confidentialcomputing.benchmark.guomi.host;
+
+import com.alibaba.confidentialcomputing.benchmark.guomi.common.SMService;
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.results.format.ResultFormatType;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@Warmup(iterations = 3, time = 1)
+@Measurement(iterations = 5, time = 2)
+@Threads(8)
+@Fork(1)
+@State(value = Scope.Benchmark)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+public class GuoMiBenchMark {
+
+    @State(Scope.Benchmark)
+    public static class MockJVMEnclave {
+        private Enclave enclave = null;
+        private SMService service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.MOCK_IN_JVM);
+            service = enclave.load(SMService.class).next();
+        }
+
+        public SMService getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class MockSVMEnclave {
+        private Enclave enclave = null;
+        private SMService service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.MOCK_IN_SVM);
+            service = enclave.load(SMService.class).next();
+        }
+
+        public SMService getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class TeeSDKEnclave {
+        private Enclave enclave = null;
+        private SMService service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.TEE_SDK);
+            service = enclave.load(SMService.class).next();
+        }
+
+        public SMService getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class EmbeddedLibOSEnclave {
+        private Enclave enclave = null;
+        private SMService service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.EMBEDDED_LIB_OS);
+            service = enclave.load(SMService.class).next();
+        }
+
+        public SMService getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @Benchmark
+    public void sm2TeeSDKBenchMark(TeeSDKEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm2Service("[email protected]");
+    }
+
+    @Benchmark
+    public void sm2MockJVMBenchMark(MockJVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm2Service("[email protected]");
+    }
+
+    @Benchmark
+    public void sm2MockSVMBenchMark(MockSVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm2Service("[email protected]");
+    }
+
+    @Benchmark
+    public void sm2EmbeddedLibOSBenchMark(EmbeddedLibOSEnclave enclave) throws 
Exception {
+        enclave.getServiceInstance().sm2Service("[email protected]");
+    }
+
+    @Benchmark
+    public void sm3MockJVMBenchMark(MockJVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm3Service("Hello World!");
+    }
+
+    @Benchmark
+    public void sm3MockSVMBenchMark(MockSVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm3Service("Hello World!");
+    }
+
+    @Benchmark
+    public void sm3TeeSDKBenchMark(TeeSDKEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm3Service("Hello World!");
+    }
+
+    @Benchmark
+    public void sm3EmbeddedLibOSBenchMark(EmbeddedLibOSEnclave enclave) throws 
Exception {
+        enclave.getServiceInstance().sm3Service("Hello World!");
+    }
+
+    @Benchmark
+    public void sm4MockJVMBenchMark(MockJVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm4Service("word1, word2 
word3@word4?word5.word6");
+    }
+
+    @Benchmark
+    public void sm4MockSVMBenchMark(MockSVMEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm4Service("word1, word2 
word3@word4?word5.word6");
+    }
+
+    @Benchmark
+    public void sm4TeeSDKBenchMark(TeeSDKEnclave enclave) throws Exception {
+        enclave.getServiceInstance().sm4Service("word1, word2 
word3@word4?word5.word6");
+    }
+
+    @Benchmark
+    public void sm4EmbeddedLibOSBenchMark(EmbeddedLibOSEnclave enclave) throws 
Exception {
+        enclave.getServiceInstance().sm4Service("word1, word2 
word3@word4?word5.word6");
+    }
+
+    public static void main(String[] args) throws RunnerException {
+        Options opt = new OptionsBuilder()
+                .include(GuoMiBenchMark.class.getSimpleName())
+                .result("guomi_benchmark.json")
+                .resultFormat(ResultFormatType.JSON).build();
+        new Runner(opt).run();
+    }
+}
diff --git a/benchmark/guomi/pom.xml b/benchmark/guomi/pom.xml
new file mode 100644
index 0000000..08f51eb
--- /dev/null
+++ b/benchmark/guomi/pom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+    <artifactId>guomi</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>guomi</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <jmh.version>1.35</jmh.version>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<com.alibaba.enclave.platform>MOCK_IN_SVM:TEE_SDK:EMBEDDED_LIB_OS</com.alibaba.enclave.platform>
+    </properties>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>common</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>enclave</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>host</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                
<groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+                <artifactId>common</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                
<groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+                <artifactId>enclave</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                
<groupId>com.alibaba.confidentialcomputing.benchmark.guomi</groupId>
+                <artifactId>host</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>bouncycastle-native</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcprov-jdk15on</artifactId>
+                <version>1.66</version>
+            </dependency>
+            <dependency>
+                <groupId>org.openjdk.jmh</groupId>
+                <artifactId>jmh-core</artifactId>
+                <version>${jmh.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.openjdk.jmh</groupId>
+                <artifactId>jmh-generator-annprocess</artifactId>
+                <version>${jmh.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-api</artifactId>
+                <version>5.7.1</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-engine</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-launcher</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-engine</artifactId>
+                <version>5.6.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit-pioneer</groupId>
+                <artifactId>junit-pioneer</artifactId>
+                <version>1.5.0</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <modules>
+        <module>common</module>
+        <module>enclave</module>
+        <module>host</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/benchmark/guomi/run.sh b/benchmark/guomi/run.sh
new file mode 100755
index 0000000..7f5894e
--- /dev/null
+++ b/benchmark/guomi/run.sh
@@ -0,0 +1,5 @@
+#/bin/bash
+
+mvn --settings /root/tools/settings.xml -Pnative clean package
+
+java -cp 
host/target/host-1.0-SNAPSHOT-jar-with-dependencies.jar:enclave/target/enclave-1.0-SNAPSHOT-jar-with-dependencies.jar
 com.alibaba.confidentialcomputing.benchmark.guomi.host.GuoMiBenchMark
diff --git a/benchmark/string/common/pom.xml b/benchmark/string/common/pom.xml
new file mode 100644
index 0000000..0340e10
--- /dev/null
+++ b/benchmark/string/common/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+        <artifactId>string</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>common</artifactId>
+    <packaging>jar</packaging>
+    <name>common</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/string/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/common/StringOperationMetric.java
 
b/benchmark/string/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/common/StringOperationMetric.java
new file mode 100644
index 0000000..c0edbb0
--- /dev/null
+++ 
b/benchmark/string/common/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/common/StringOperationMetric.java
@@ -0,0 +1,10 @@
+package com.alibaba.confidentialcomputing.benchmark.string.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface StringOperationMetric {
+    boolean stringRegex(String source, String pattern, int iterator);
+    String stringConcat(String source, String split, int iterator);
+    String[] stringSplit(String source, String concat, int iterator);
+}
diff --git a/benchmark/string/enclave/pom.xml b/benchmark/string/enclave/pom.xml
new file mode 100644
index 0000000..01a79e0
--- /dev/null
+++ b/benchmark/string/enclave/pom.xml
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+        <artifactId>string</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>enclave</artifactId>
+    <packaging>jar</packaging>
+    <name>enclave</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <svm.maven.version>0.9.13</svm.maven.version>
+        
<com.alibaba.enclave.privatePem.path></com.alibaba.enclave.privatePem.path>
+    </properties>
+    <profiles>
+        <profile>
+            <id>native</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.graalvm.buildtools</groupId>
+                        <artifactId>native-maven-plugin</artifactId>
+                        <version>${svm.maven.version}</version>
+                        <extensions>true</extensions>
+                        <executions>
+                            <execution>
+                                <id>test-native</id>
+                                <goals>
+                                    <goal>test</goal>
+                                </goals>
+                                <configuration>
+                                    <buildArgs>
+                                        <buildArg>--no-fallback</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>test</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_mock_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native-tee</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_tee_sdk_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>-R:-PrintGC</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        
<buildArg>-H:-AllowVMInternalThreads</buildArg>
+                                        <buildArg>-H:+RunInEnclave</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <agent>
+                                <enabled>true</enabled>
+                            </agent>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <executions>
+                            <execution>
+                                <id>ApplicationNativeCompile</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <executable>bash</executable>
+                                    <arguments>
+                                        
<argument>/opt/javaenclave/build_app/make.sh</argument>
+                                        <argument>${project.basedir}</argument>
+                                        
<argument>${com.alibaba.enclave.platform}</argument>
+                                        
<argument>${com.alibaba.enclave.privatePem.path}</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>enclave</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/string/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/enclave/StringOperationMetricImpl.java
 
b/benchmark/string/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/enclave/StringOperationMetricImpl.java
new file mode 100644
index 0000000..c17df7a
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/enclave/StringOperationMetricImpl.java
@@ -0,0 +1,45 @@
+package com.alibaba.confidentialcomputing.benchmark.string.enclave;
+
+import 
com.alibaba.confidentialcomputing.benchmark.string.common.StringOperationMetric;
+import com.google.auto.service.AutoService;
+
+import java.util.regex.Pattern;
+
+@AutoService(StringOperationMetric.class)
+public class StringOperationMetricImpl implements StringOperationMetric {
+    private final long INNER_MAX_ITERATOR = 50;
+
+    @Override
+    public String stringConcat(String source, String concat, int iterator) {
+        String result = null;
+        for (int i = 0x0; i < iterator; i++) {
+            for (int j = 0x0; j < INNER_MAX_ITERATOR; j++) {
+                result = 
source.concat(concat).toLowerCase().trim().replace('a', 'b');
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public boolean stringRegex(String source, String pattern, int iterator) {
+        boolean matched = false;
+        for (int i = 0x0; i < iterator; i++) {
+            for (int j = 0x0; j < INNER_MAX_ITERATOR; j++) {
+                Pattern p = Pattern.compile(pattern);
+                matched = p.matcher(source).matches();
+            }
+        }
+        return matched;
+    }
+
+    @Override
+    public String[] stringSplit(String source, String split, int iterator) {
+        String[] result = null;
+        for (int i = 0x0; i < iterator; i++) {
+            for (int j = 0x0; j < INNER_MAX_ITERATOR; j++) {
+                result = source.split(split);
+            }
+        }
+        return result;
+    }
+}
diff --git 
a/benchmark/string/enclave/src/main/resources/META-INF/native-image/jni-config.json
 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/string/enclave/src/main/resources/META-INF/native-image/proxy-config.json
 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/string/enclave/src/main/resources/META-INF/native-image/reflect-config.json
 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..32960f8
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,2 @@
+[
+]
\ No newline at end of file
diff --git 
a/benchmark/string/enclave/src/main/resources/META-INF/native-image/resource-config.json
 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..791ea0f
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,5 @@
+{
+  "resources":{
+  "includes":[]},
+  "bundles":[]
+}
diff --git 
a/benchmark/string/enclave/src/main/resources/META-INF/native-image/serialization-config.json
 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/benchmark/string/enclave/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/benchmark/string/enclave/src/main/resources/embedded_libos_enclave.json 
b/benchmark/string/enclave/src/main/resources/embedded_libos_enclave.json
new file mode 100644
index 0000000..add95b2
--- /dev/null
+++ b/benchmark/string/enclave/src/main/resources/embedded_libos_enclave.json
@@ -0,0 +1,11 @@
+{
+  "debuggable": true,
+  "agent_http_handler_thread_pool_size": 6,
+  "enclave_startup_duration_ms": 60000,
+  "kernel_space_heap_size": "32MB",
+  "user_space_size": "1200MB",
+  "default_mmap_size": "800MB",
+  "max_num_of_threads": 48,
+  "log_level": "off",
+  "enclave_jvm_args": ["-XX:-UseCompressedOops", "-Xmx512m", "-Dos.name=Linux"]
+}
\ No newline at end of file
diff --git a/benchmark/string/enclave/src/main/resources/tee_sdk_svm.conf 
b/benchmark/string/enclave/src/main/resources/tee_sdk_svm.conf
new file mode 100644
index 0000000..6e39049
--- /dev/null
+++ b/benchmark/string/enclave/src/main/resources/tee_sdk_svm.conf
@@ -0,0 +1,12 @@
+<!-- Please refer to User's Guide for the explanation of each field -->
+<EnclaveConfiguration>
+  <ProdID>0</ProdID>
+  <ISVSVN>0</ISVSVN>
+  <StackMaxSize>0x101000</StackMaxSize>
+  <HeapMaxSize>0x30000000</HeapMaxSize>
+  <TCSNum>10</TCSNum>
+  <TCSPolicy>1</TCSPolicy>
+  <DisableDebug>0</DisableDebug>
+  <MiscSelect>0</MiscSelect>
+  <MiscMask>0xFFFFFFFF</MiscMask>
+</EnclaveConfiguration>
\ No newline at end of file
diff --git a/benchmark/string/host/pom.xml b/benchmark/string/host/pom.xml
new file mode 100644
index 0000000..124618b
--- /dev/null
+++ b/benchmark/string/host/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+        <artifactId>string</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>host</artifactId>
+    <packaging>jar</packaging>
+    <name>host</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <resources>
+            <resource>
+                
<directory>${project.basedir}/../enclave/target/svm-output</directory>
+                <includes>
+                    <include>**/*.so</include>
+                    <include>**/*.signed</include>
+                    <include>**/*.tgz</include>
+                </includes>
+            </resource>
+            <resource>
+                
<directory>${project.basedir}/../enclave/src/main/resources</directory>
+                <includes>
+                    <include>**/embedded_libos_enclave.json</include>
+                    <include>**/tee_sdk_svm.conf</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>host</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-generator-annprocess</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/benchmark/string/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/host/StringBenchMark.java
 
b/benchmark/string/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/host/StringBenchMark.java
new file mode 100644
index 0000000..8455724
--- /dev/null
+++ 
b/benchmark/string/host/src/main/java/com/alibaba/confidentialcomputing/benchmark/string/host/StringBenchMark.java
@@ -0,0 +1,158 @@
+package com.alibaba.confidentialcomputing.benchmark.string.host;
+
+import 
com.alibaba.confidentialcomputing.benchmark.string.common.StringOperationMetric;
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.results.format.ResultFormatType;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+@BenchmarkMode(Mode.AverageTime)
+@Warmup(iterations = 3, time = 1)
+@Measurement(iterations = 4, time = 2)
+@Threads(8)
+@Fork(1)
+@State(value = Scope.Benchmark)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+public class StringBenchMark {
+    @Param(value = {"5"})
+    private int iterator;
+
+    @State(Scope.Benchmark)
+    public static class MockJVMEnclave {
+        private Enclave enclave = null;
+        private StringOperationMetric service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.MOCK_IN_JVM);
+            service = enclave.load(StringOperationMetric.class).next();
+        }
+
+        public StringOperationMetric getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class MockSVMEnclave {
+        private Enclave enclave = null;
+        private StringOperationMetric service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.MOCK_IN_SVM);
+            service = enclave.load(StringOperationMetric.class).next();
+        }
+
+        public StringOperationMetric getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class TeeSDKEnclave {
+        private Enclave enclave = null;
+        private StringOperationMetric service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.TEE_SDK);
+            service = enclave.load(StringOperationMetric.class).next();
+        }
+
+        public StringOperationMetric getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @State(Scope.Benchmark)
+    public static class EmbeddedLibOSEnclave {
+        private Enclave enclave = null;
+        private StringOperationMetric service = null;
+
+        @Setup(Level.Trial)
+        public void createEnclave() throws Exception {
+            enclave = EnclaveFactory.create(EnclaveType.EMBEDDED_LIB_OS);
+            service = enclave.load(StringOperationMetric.class).next();
+        }
+
+        public StringOperationMetric getServiceInstance() {
+            return this.service;
+        }
+    }
+
+    @Benchmark
+    public void stringRegexMockJVMBenchMark(MockJVMEnclave enclave) {
+        enclave.getServiceInstance().stringRegex("[email protected]", 
"^[\\w._]+@\\w+\\.[a-zA-Z]+$", iterator);
+    }
+
+    @Benchmark
+    public void stringRegexMockSVMBenchMark(MockSVMEnclave enclave) {
+        enclave.getServiceInstance().stringRegex("[email protected]", 
"^[\\w._]+@\\w+\\.[a-zA-Z]+$", iterator);
+    }
+
+    @Benchmark
+    public void stringRegexTeeSDKBenchMark(TeeSDKEnclave enclave) {
+        enclave.getServiceInstance().stringRegex("[email protected]", 
"^[\\w._]+@\\w+\\.[a-zA-Z]+$", iterator);
+    }
+
+    @Benchmark
+    public void stringRegexEmbeddedLibOSBenchMark(EmbeddedLibOSEnclave 
enclave) {
+        enclave.getServiceInstance().stringRegex("[email protected]", 
"^[\\w._]+@\\w+\\.[a-zA-Z]+$", iterator);
+    }
+
+    @Benchmark
+    public void stringConcatMockJVMBenchMark(MockJVMEnclave enclave) {
+        enclave.getServiceInstance().stringConcat("Hello World!", "abc", 
iterator);
+    }
+
+    @Benchmark
+    public void stringConcatMockSVMBenchMark(MockSVMEnclave enclave) {
+        enclave.getServiceInstance().stringConcat("Hello World!", "abc", 
iterator);
+    }
+
+    @Benchmark
+    public void stringConcatTeeSDKBenchMark(TeeSDKEnclave enclave) {
+        enclave.getServiceInstance().stringConcat("Hello World!", "abc", 
iterator);
+    }
+
+    @Benchmark
+    public void stringConcatEmbeddedLibOSBenchMark(EmbeddedLibOSEnclave 
enclave) {
+        enclave.getServiceInstance().stringConcat("Hello World!", "abc", 
iterator);
+    }
+
+    @Benchmark
+    public void stringSplitMockJVMBenchMark(MockJVMEnclave enclave) {
+        enclave.getServiceInstance().stringSplit("word1, word2 
word3@word4?word5.word6", "[, ?.@]+", iterator);
+    }
+
+    @Benchmark
+    public void stringSplitMockSVMBenchMark(MockSVMEnclave enclave) {
+        enclave.getServiceInstance().stringSplit("word1, word2 
word3@word4?word5.word6", "[, ?.@]+", iterator);
+    }
+
+    @Benchmark
+    public void stringSplitTeeSDKBenchMark(TeeSDKEnclave enclave) {
+        enclave.getServiceInstance().stringSplit("word1, word2 
word3@word4?word5.word6", "[, ?.@]+", iterator);
+    }
+
+    @Benchmark
+    public void stringSplitEmbeddedLibOSBenchMark(EmbeddedLibOSEnclave 
enclave) {
+        enclave.getServiceInstance().stringSplit("word1, word2 
word3@word4?word5.word6", "[, ?.@]+", iterator);
+    }
+
+    public static void main(String[] args) throws RunnerException {
+        Options opt = new OptionsBuilder()
+                .include(StringBenchMark.class.getSimpleName())
+                .result("string_benchmark.json")
+                .resultFormat(ResultFormatType.JSON).build();
+        new Runner(opt).run();
+    }
+}
diff --git a/benchmark/string/pom.xml b/benchmark/string/pom.xml
new file mode 100644
index 0000000..4c96a84
--- /dev/null
+++ b/benchmark/string/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+    <artifactId>string</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>string</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <jmh.version>1.35</jmh.version>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<com.alibaba.enclave.platform>MOCK_IN_SVM:TEE_SDK:EMBEDDED_LIB_OS</com.alibaba.enclave.platform>
+    </properties>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>common</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>enclave</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>host</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+                <artifactId>common</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+                <artifactId>enclave</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.benchmark</groupId>
+                <artifactId>host</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.openjdk.jmh</groupId>
+                <artifactId>jmh-core</artifactId>
+                <version>${jmh.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.openjdk.jmh</groupId>
+                <artifactId>jmh-generator-annprocess</artifactId>
+                <version>${jmh.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-api</artifactId>
+                <version>5.7.1</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-engine</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-launcher</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-engine</artifactId>
+                <version>5.6.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit-pioneer</groupId>
+                <artifactId>junit-pioneer</artifactId>
+                <version>1.5.0</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <modules>
+        <module>common</module>
+        <module>enclave</module>
+        <module>host</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/benchmark/string/run.sh b/benchmark/string/run.sh
new file mode 100755
index 0000000..346419d
--- /dev/null
+++ b/benchmark/string/run.sh
@@ -0,0 +1,5 @@
+#/bin/bash
+
+mvn --settings /root/tools/settings.xml -Pnative clean package
+
+java -cp 
host/target/host-1.0-SNAPSHOT-jar-with-dependencies.jar:enclave/target/enclave-1.0-SNAPSHOT-jar-with-dependencies.jar
 com.alibaba.confidentialcomputing.benchmark.string.host.StringBenchMark
diff --git a/samples/springboot/common/pom.xml 
b/samples/springboot/common/pom.xml
new file mode 100644
index 0000000..dbe2562
--- /dev/null
+++ b/samples/springboot/common/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+        <artifactId>springboot</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>common</artifactId>
+    <packaging>jar</packaging>
+    <name>common</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/samples/springboot/common/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/common/SBEnclaveService.java
 
b/samples/springboot/common/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/common/SBEnclaveService.java
new file mode 100644
index 0000000..86d5749
--- /dev/null
+++ 
b/samples/springboot/common/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/common/SBEnclaveService.java
@@ -0,0 +1,11 @@
+package com.alibaba.confidentialcomputing.samples.springboot.common;
+
+import com.alibaba.confidentialcomputing.common.annotations.EnclaveService;
+
+@EnclaveService
+public interface SBEnclaveService {
+    // calculate giving data's digest.
+    String digestData(String data);
+    // encrypt and decrypt giving string.
+    String encryptAndDecryptData(String data);
+}
diff --git a/samples/springboot/enclave/pom.xml 
b/samples/springboot/enclave/pom.xml
new file mode 100644
index 0000000..6a8ea86
--- /dev/null
+++ b/samples/springboot/enclave/pom.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+        <artifactId>springboot</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>enclave</artifactId>
+    <packaging>jar</packaging>
+    <name>enclave</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <svm.maven.version>0.9.13</svm.maven.version>
+        
<com.alibaba.enclave.privatePem.path></com.alibaba.enclave.privatePem.path>
+    </properties>
+    <profiles>
+        <profile>
+            <id>native</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.graalvm.buildtools</groupId>
+                        <artifactId>native-maven-plugin</artifactId>
+                        <version>${svm.maven.version}</version>
+                        <extensions>true</extensions>
+                        <executions>
+                            <execution>
+                                <id>test-native</id>
+                                <goals>
+                                    <goal>test</goal>
+                                </goals>
+                                <configuration>
+                                    <buildArgs>
+                                        <buildArg>--no-fallback</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>test</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_mock_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                            <execution>
+                                <id>build-native-tee</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>lib_tee_sdk_svm_load</imageName>
+                                    <buildArgs>
+                                        <buildArg>--shared</buildArg>
+                                        <buildArg>--no-fallback</buildArg>
+                                        
<buildArg>-H:-AllowVMInternalThreads</buildArg>
+                                        <buildArg>-H:+RunInEnclave</buildArg>
+                                        <buildArg>-H:Path=svm-output</buildArg>
+                                    </buildArgs>
+                                </configuration>
+                                <phase>package</phase>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <agent>
+                                <enabled>true</enabled>
+                            </agent>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <executions>
+                            <execution>
+                                <id>ApplicationNativeCompile</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <executable>bash</executable>
+                                    <arguments>
+                                        
<argument>/opt/javaenclave/build_app/make.sh</argument>
+                                        <argument>${project.basedir}</argument>
+                                        
<argument>${com.alibaba.enclave.platform}</argument>
+                                        
<argument>${com.alibaba.enclave.privatePem.path}</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>enclave</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>bouncycastle-native</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/samples/springboot/enclave/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/enclave/EnclaveServiceImpl.java
 
b/samples/springboot/enclave/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/enclave/EnclaveServiceImpl.java
new file mode 100644
index 0000000..95ae4e7
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/enclave/EnclaveServiceImpl.java
@@ -0,0 +1,102 @@
+package com.alibaba.confidentialcomputing.samples.springboot.enclave;
+
+import 
com.alibaba.confidentialcomputing.samples.springboot.common.SBEnclaveService;
+import com.google.auto.service.AutoService;
+import org.bouncycastle.asn1.gm.GMNamedCurves;
+import org.bouncycastle.asn1.x9.X9ECParameters;
+import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.crypto.digests.SM3Digest;
+import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
+import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.jce.spec.ECPrivateKeySpec;
+import org.bouncycastle.jce.spec.ECPublicKeySpec;
+import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.util.encoders.Hex;
+
+import javax.crypto.Cipher;
+import java.math.BigInteger;
+import java.security.*;
+import java.security.spec.ECGenParameterSpec;
+import java.util.Base64;
+
+@AutoService(SBEnclaveService.class)
+public class EnclaveServiceImpl implements SBEnclaveService {
+    private BouncyCastleProvider provider;
+    private ECParameterSpec ecParameterSpec;
+    private KeyFactory keyFactory;
+    private String publicKey;
+    private String privateKey;
+
+    public EnclaveServiceImpl() {
+        try {
+            provider = (BouncyCastleProvider) Security.getProvider("BC");
+            if (provider == null) {
+                provider = new BouncyCastleProvider();
+            }
+            X9ECParameters parameters = GMNamedCurves.getByName("sm2p256v1");
+            ecParameterSpec = new ECParameterSpec(parameters.getCurve(), 
parameters.getG(), parameters.getN(), parameters.getH());
+            keyFactory = KeyFactory.getInstance("EC", provider);
+            generateSm2KeyPair();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void generateSm2KeyPair() throws Exception {
+        final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
+        final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", 
provider);
+        SecureRandom random = new SecureRandom();
+        kpg.initialize(sm2Spec, random);
+        KeyPair keyPair = kpg.generateKeyPair();
+        BCECPrivateKey privateKey = (BCECPrivateKey) keyPair.getPrivate();
+        BCECPublicKey publicKey = (BCECPublicKey) keyPair.getPublic();
+        this.publicKey = new 
String(Hex.encode(publicKey.getQ().getEncoded(true)));
+        this.privateKey = privateKey.getD().toString(16);
+    }
+
+    private String encode(String input, String pubKey) {
+        try {
+            X9ECParameters parameters = GMNamedCurves.getByName("sm2p256v1");
+            ECParameterSpec ecParameterSpec = new 
ECParameterSpec(parameters.getCurve(), parameters.getG(), parameters.getN(), 
parameters.getH());
+            ECPoint ecPoint = 
parameters.getCurve().decodePoint(Hex.decode(pubKey));
+            KeyFactory keyFactory = KeyFactory.getInstance("EC", provider);
+            BCECPublicKey key = (BCECPublicKey) keyFactory.generatePublic(new 
ECPublicKeySpec(ecPoint, ecParameterSpec));
+            Cipher cipher = Cipher.getInstance("SM2", provider);
+            cipher.init(Cipher.ENCRYPT_MODE, key);
+            return 
Base64.getEncoder().encodeToString(cipher.doFinal(input.getBytes()));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private byte[] decoder(String input, String prvKey) {
+        try {
+            Cipher cipher = Cipher.getInstance("SM2", provider);
+            BigInteger bigInteger = new BigInteger(prvKey, 16);
+            BCECPrivateKey privateKey = (BCECPrivateKey) 
keyFactory.generatePrivate(new ECPrivateKeySpec(bigInteger, ecParameterSpec));
+            cipher.init(Cipher.DECRYPT_MODE, privateKey);
+            return cipher.doFinal(Base64.getDecoder().decode(input));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public String digestData(String data) {
+        byte[] messages = data.getBytes();
+        Digest md = new SM3Digest();
+        md.update(messages, 0, messages.length);
+        byte[] digest = new byte[md.getDigestSize()];
+        md.doFinal(digest, 0);
+        return new String(digest);
+    }
+
+    @Override
+    public String encryptAndDecryptData(String data) {
+        return new String(decoder(encode(data, publicKey), privateKey));
+    }
+}
diff --git 
a/samples/springboot/enclave/src/main/resources/META-INF/native-image/jni-config.json
 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/samples/springboot/enclave/src/main/resources/META-INF/native-image/proxy-config.json
 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/samples/springboot/enclave/src/main/resources/META-INF/native-image/reflect-config.json
 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 0000000..32960f8
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,2 @@
+[
+]
\ No newline at end of file
diff --git 
a/samples/springboot/enclave/src/main/resources/META-INF/native-image/resource-config.json
 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 0000000..791ea0f
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,5 @@
+{
+  "resources":{
+  "includes":[]},
+  "bundles":[]
+}
diff --git 
a/samples/springboot/enclave/src/main/resources/META-INF/native-image/serialization-config.json
 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/serialization-config.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ 
b/samples/springboot/enclave/src/main/resources/META-INF/native-image/serialization-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git 
a/samples/springboot/enclave/src/main/resources/embedded_libos_enclave.json 
b/samples/springboot/enclave/src/main/resources/embedded_libos_enclave.json
new file mode 100644
index 0000000..add95b2
--- /dev/null
+++ b/samples/springboot/enclave/src/main/resources/embedded_libos_enclave.json
@@ -0,0 +1,11 @@
+{
+  "debuggable": true,
+  "agent_http_handler_thread_pool_size": 6,
+  "enclave_startup_duration_ms": 60000,
+  "kernel_space_heap_size": "32MB",
+  "user_space_size": "1200MB",
+  "default_mmap_size": "800MB",
+  "max_num_of_threads": 48,
+  "log_level": "off",
+  "enclave_jvm_args": ["-XX:-UseCompressedOops", "-Xmx512m", "-Dos.name=Linux"]
+}
\ No newline at end of file
diff --git a/samples/springboot/enclave/src/main/resources/tee_sdk_svm.conf 
b/samples/springboot/enclave/src/main/resources/tee_sdk_svm.conf
new file mode 100644
index 0000000..5ff1791
--- /dev/null
+++ b/samples/springboot/enclave/src/main/resources/tee_sdk_svm.conf
@@ -0,0 +1,12 @@
+<!-- Please refer to User's Guide for the explanation of each field -->
+<EnclaveConfiguration>
+  <ProdID>0</ProdID>
+  <ISVSVN>0</ISVSVN>
+  <StackMaxSize>0x101000</StackMaxSize>
+  <HeapMaxSize>0x60000000</HeapMaxSize>
+  <TCSNum>10</TCSNum>
+  <TCSPolicy>1</TCSPolicy>
+  <DisableDebug>0</DisableDebug>
+  <MiscSelect>0</MiscSelect>
+  <MiscMask>0xFFFFFFFF</MiscMask>
+</EnclaveConfiguration>
\ No newline at end of file
diff --git a/samples/springboot/host/pom.xml b/samples/springboot/host/pom.xml
new file mode 100644
index 0000000..0f2507e
--- /dev/null
+++ b/samples/springboot/host/pom.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+    <parent>
+        <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+        <artifactId>springboot</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>host</artifactId>
+    <packaging>jar</packaging>
+    <name>host</name>
+    <url>http://maven.apache.org</url>
+    <build>
+        <resources>
+            <resource>
+                
<directory>${project.basedir}/../enclave/target/svm-output</directory>
+                <includes>
+                    <include>**/*.so</include>
+                    <include>**/*.signed</include>
+                    <include>**/*.tgz</include>
+                </includes>
+            </resource>
+            <resource>
+                
<directory>${project.basedir}/../enclave/src/main/resources</directory>
+                <includes>
+                    <include>**/embedded_libos_enclave.json</include>
+                    <include>**/tee_sdk_svm.conf</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.0.0</version>
+                <configuration>
+                    <attach>true</attach>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing</groupId>
+            <artifactId>host</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service-annotations</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <version>1.0-rc6</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit-pioneer</groupId>
+            <artifactId>junit-pioneer</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git 
a/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/Application.java
 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/Application.java
new file mode 100644
index 0000000..d817c6f
--- /dev/null
+++ 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/Application.java
@@ -0,0 +1,25 @@
+package com.alibaba.confidentialcomputing.samples.springboot.host;
+
+import java.util.Arrays;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+public class Application {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
+
+    @Bean
+    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
+        return args -> {
+            String[] beanNames = ctx.getBeanDefinitionNames();
+            Arrays.sort(beanNames);
+        };
+    }
+}
diff --git 
a/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveDigestController.java
 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveDigestController.java
new file mode 100644
index 0000000..0fd1aff
--- /dev/null
+++ 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveDigestController.java
@@ -0,0 +1,27 @@
+package com.alibaba.confidentialcomputing.samples.springboot.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import 
com.alibaba.confidentialcomputing.samples.springboot.common.SBEnclaveService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Iterator;
+
+@RestController
+public class EnclaveDigestController {
+    @RequestMapping("/enclaveDigestService")
+    public String enclaveDigestService(String data) {
+        try {
+            Enclave enclave = EnclaveFactory.create(EnclaveType.TEE_SDK);
+            Iterator<SBEnclaveService> services = 
enclave.load(SBEnclaveService.class);
+            String result = services.next().digestData(data);
+            enclave.destroy();
+            return result;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git 
a/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveEncDecController.java
 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveEncDecController.java
new file mode 100644
index 0000000..4690595
--- /dev/null
+++ 
b/samples/springboot/host/src/main/java/com/alibaba/confidentialcomputing/samples/springboot/host/EnclaveEncDecController.java
@@ -0,0 +1,27 @@
+package com.alibaba.confidentialcomputing.samples.springboot.host;
+
+import com.alibaba.confidentialcomputing.host.Enclave;
+import com.alibaba.confidentialcomputing.host.EnclaveFactory;
+import com.alibaba.confidentialcomputing.host.EnclaveType;
+import 
com.alibaba.confidentialcomputing.samples.springboot.common.SBEnclaveService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Iterator;
+
+@RestController
+public class EnclaveEncDecController {
+    @RequestMapping("/enclaveEncDecService")
+    public String enclaveEncDecService(String data) {
+        try {
+            Enclave enclave = EnclaveFactory.create(EnclaveType.TEE_SDK);
+            Iterator<SBEnclaveService> services = 
enclave.load(SBEnclaveService.class);
+            String result = services.next().encryptAndDecryptData(data);
+            enclave.destroy();
+            return result;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/samples/springboot/pom.xml b/samples/springboot/pom.xml
new file mode 100644
index 0000000..7ed2109
--- /dev/null
+++ b/samples/springboot/pom.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.0</version>
+        <relativePath/>
+    </parent>
+    <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+    <artifactId>springboot</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0-SNAPSHOT</version>
+    <name>springboot</name>
+    <url>http://maven.apache.org</url>
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<com.alibaba.enclave.platform>MOCK_IN_SVM:TEE_SDK:EMBEDDED_LIB_OS</com.alibaba.enclave.platform>
+    </properties>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>common</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>enclave</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>host</artifactId>
+                <version>0.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+                <artifactId>common</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+                <artifactId>enclave</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing.samples</groupId>
+                <artifactId>host</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>com.alibaba.confidentialcomputing</groupId>
+                <artifactId>bouncycastle-native</artifactId>
+                <version>1.0-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcprov-jdk15on</artifactId>
+                <version>1.66</version>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-api</artifactId>
+                <version>5.7.1</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-engine</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.platform</groupId>
+                <artifactId>junit-platform-launcher</artifactId>
+                <version>1.8.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-engine</artifactId>
+                <version>5.6.2</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.junit-pioneer</groupId>
+                <artifactId>junit-pioneer</artifactId>
+                <version>1.5.0</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <modules>
+        <module>common</module>
+        <module>enclave</module>
+        <module>host</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/samples/springboot/run.sh b/samples/springboot/run.sh
new file mode 100755
index 0000000..b8034ae
--- /dev/null
+++ b/samples/springboot/run.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# step1: build springboot application service.
+mvn --settings /root/tools/settings.xml -Pnative clean package
+
+# step2: startup springboot application service.
+java -cp 
host/target/host-1.0-SNAPSHOT-jar-with-dependencies.jar:enclave/target/enclave-1.0-SNAPSHOT-jar-with-dependencies.jar
 com.alibaba.confidentialcomputing.samples.springboot.host.Application &
+sleep 5
+# shellcheck disable=SC2006
+# shellcheck disable=SC2009
+PID=`ps -ef | grep "Application" | grep -v grep | awk '{print $2}'`
+
+# step3: encrypt and decrypt service.
+wget 
http://localhost:8080/enclaveEncDecService?data=SELECT+TOP+50+PERCENT+*+FROM+Websites;
+
+# step4: digest service.
+wget 
http://localhost:8080/enclaveDigestService?data=SELECT+TOP+50+PERCENT+*+FROM+Websites;
+
+# step5: kill springboot service.
+kill -9 "$PID"
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to