This is an automated email from the ASF dual-hosted git repository.

hsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git

commit 1e28ab03ad8c67a74c1a8b80684773c3c7edb0dd
Author: GeminiCarrie <[email protected]>
AuthorDate: Thu Jul 6 06:47:24 2023 +0000

    Bump tonic to 0.9.2
---
 attestation/Cargo.toml                             |   7 +-
 attestation/src/report.rs                          |  15 +-
 attestation/src/service.rs                         |  39 ++--
 attestation/src/verifier.rs                        |  51 ++---
 cli/Cargo.toml                                     |  25 +-
 cli/src/main.rs                                    |  41 ++--
 cmake/tomls/Cargo.sgx_trusted_lib.lock             | 255 ++++++++++++---------
 cmake/tomls/Cargo.sgx_trusted_lib.toml             |   1 +
 cmake/tomls/Cargo.sgx_untrusted_app.lock           | 224 ++++++++++++------
 cmake/tomls/Cargo.sgx_untrusted_app.toml           |   3 +-
 cmake/tomls/Cargo.unix_app.lock                    | 241 +++++++++++--------
 cmake/tomls/Cargo.unix_app.toml                    |   1 +
 examples/rust/builtin_echo/Cargo.lock              | 229 +++++++++++-------
 examples/rust/builtin_echo/Cargo.toml              |   2 +
 .../rust/builtin_ordered_set_intersect/Cargo.lock  | 229 +++++++++++-------
 .../rust/builtin_ordered_set_intersect/Cargo.toml  |   2 +
 examples/rust/sequential_functions/Cargo.lock      | 229 +++++++++++-------
 examples/rust/sequential_functions/Cargo.toml      |   2 +
 rpc/Cargo.toml                                     |  10 +-
 rpc/src/config.rs                                  | 105 ++++++---
 sdk/rust/Cargo.lock                                | 229 +++++++++++-------
 sdk/rust/Cargo.toml                                |   2 +
 services/proto/Cargo.toml                          |   6 +-
 tests/utils/proc_macro/Cargo.toml                  |   2 +-
 types/Cargo.toml                                   |   2 +-
 25 files changed, 1224 insertions(+), 728 deletions(-)

diff --git a/attestation/Cargo.toml b/attestation/Cargo.toml
index 7e303951..69c5720f 100644
--- a/attestation/Cargo.toml
+++ b/attestation/Cargo.toml
@@ -58,14 +58,15 @@ libc             = { version = "0.2.66", optional = true }
 log              = { version = "0.4.17", features = ["release_max_level_info"] 
}
 num-bigint       = { version = "0.2.2" }
 percent-encoding = { version = "2.1.0" }
-rustls           = { version = "0.19.0", features = 
["dangerous_configuration"] }
+rustls           = { version = "0.21.1", features = 
["dangerous_configuration"] }
+rustls-pemfile   = { version = "1" }
+rustls-webpki    = { version = "0.100.0" }
 serde            = { version = "1.0.92", features = ["derive"] }
 serde_json       = { version = "1.0.39" }
 thiserror        = { version = "1.0.9" }
 url              = { version = "2.1.1" }
 uuid             = { version = "0.8.1", features = ["v4"] }
-webpki           = { version = "0.21.0" }
-webpki-roots     = { version = "0.21.0" }
+webpki-roots     = { version = "0.23.0" }
 yasna            = { version = "0.3.0", features = ["bit-vec", "num-bigint", 
"chrono"] }
 
 teaclave_types  = { path = "../types" }
diff --git a/attestation/src/report.rs b/attestation/src/report.rs
index d44c86c1..47ad5455 100644
--- a/attestation/src/report.rs
+++ b/attestation/src/report.rs
@@ -523,18 +523,9 @@ impl AttestationReport {
         log::debug!("endorsed attestation report: {:?}", &report);
 
         // Verify report's signature
-        let signing_cert = webpki::EndEntityCert::from(&report.certs[0])?;
-        let root_store = {
-            let mut root_store = rustls::RootCertStore::empty();
-            root_store.add(&rustls::Certificate(report_ca_cert.to_vec()))?;
-            root_store
-        };
-        let trust_anchors: Vec<webpki::TrustAnchor> = root_store
-            .roots
-            .iter()
-            .map(|cert| cert.to_trust_anchor())
-            .collect();
+        let signing_cert = 
webpki::EndEntityCert::try_from(report.certs[0].as_ref())?;
 
+        let trust_anchors = 
vec![webpki::TrustAnchor::try_from_cert_der(report_ca_cert)?];
         let chain: Vec<&[u8]> = if report.certs.len() > 1 {
             let mut c = report.certs[1..]
                 .iter()
@@ -549,7 +540,7 @@ impl AttestationReport {
             .map_err(|_| anyhow!("Cannot convert time."))?;
         signing_cert.verify_is_valid_tls_server_cert(
             SUPPORTED_SIG_ALGS,
-            &webpki::TLSServerTrustAnchors(&trust_anchors),
+            &webpki::TlsServerTrustAnchors(&trust_anchors),
             &chain,
             time,
         )?;
diff --git a/attestation/src/service.rs b/attestation/src/service.rs
index e65fb409..3c524bc1 100644
--- a/attestation/src/service.rs
+++ b/attestation/src/service.rs
@@ -117,21 +117,34 @@ impl EndorsedAttestationReport {
     }
 }
 
-fn new_tls_stream(url: &url::Url) -> 
Result<rustls::StreamOwned<rustls::ClientSession, TcpStream>> {
+fn new_tls_stream(
+    url: &url::Url,
+) -> Result<rustls::StreamOwned<rustls::client::ClientConnection, TcpStream>> {
     let host_str = url
         .host_str()
         .ok_or(AttestationServiceError::InvalidAddress)?;
-    let dns_name = webpki::DNSNameRef::try_from_ascii_str(host_str)?;
-    let mut config = rustls::ClientConfig::new();
+    let mut root_certs = rustls::RootCertStore::empty();
     #[cfg(dcap)]
-    config
-        .root_store
-        .add_pem_file(&mut DCAP_ROOT_CA_CERT.to_string().as_bytes())
-        .map_err(|_| AttestationServiceError::TlsError)?;
-    config
-        .root_store
-        .add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);
-    let client = rustls::ClientSession::new(&Arc::new(config), dns_name);
+    {
+        let certs = rustls_pemfile::certs(&mut 
DCAP_ROOT_CA_CERT.to_string().as_bytes())
+            .map_err(|_| AttestationServiceError::TlsError)?;
+        let (valid_count, _) = root_certs.add_parsable_certificates(&certs);
+        anyhow::ensure!(valid_count >= 1, "DCAP_ROOT_CA_CERT error");
+    }
+    
root_certs.add_server_trust_anchors(webpki_roots::TLS_SERVER_ROOTS.0.iter().map(
+        |trust_anchor| {
+            rustls::OwnedTrustAnchor::from_subject_spki_name_constraints(
+                trust_anchor.subject,
+                trust_anchor.spki,
+                trust_anchor.name_constraints,
+            )
+        },
+    ));
+    let config = rustls::ClientConfig::builder()
+        .with_safe_defaults()
+        .with_root_certificates(root_certs)
+        .with_no_client_auth();
+    let client = rustls::client::ClientConnection::new(Arc::new(config), 
host_str.try_into()?)?;
     let addrs = url.socket_addrs(|| match url.scheme() {
         "https" => Some(443),
         _ => None,
@@ -268,9 +281,9 @@ pub(crate) fn get_report(
             
AttestationServiceError::MissingHeader(signing_cert_header.to_string())
         })?;
         let decoded_cert = 
percent_encoding::percent_decode_str(cert_str).decode_utf8()?;
-        let certs = rustls::internal::pemfile::certs(&mut 
decoded_cert.as_bytes())
+        let certs = rustls_pemfile::certs(&mut decoded_cert.as_bytes())
             .map_err(|_| anyhow!("pemfile error"))?;
-        certs.iter().map(|c| c.0.clone()).collect()
+        certs
     };
 
     debug!("return_report");
diff --git a/attestation/src/verifier.rs b/attestation/src/verifier.rs
index 7e12b4b5..984bef4b 100644
--- a/attestation/src/verifier.rs
+++ b/attestation/src/verifier.rs
@@ -102,57 +102,52 @@ impl AttestationReportVerifier {
     }
 }
 
-impl rustls::ServerCertVerifier for AttestationReportVerifier {
+impl rustls::client::ServerCertVerifier for AttestationReportVerifier {
     fn verify_server_cert(
         &self,
-        _roots: &rustls::RootCertStore,
-        certs: &[rustls::Certificate],
-        _hostname: webpki::DNSNameRef,
+        end_entity: &rustls::Certificate,
+        _intermediates: &[rustls::Certificate],
+        _server_name: &rustls::ServerName,
+        _scts: &mut dyn Iterator<Item = &[u8]>,
         _ocsp: &[u8],
-    ) -> std::result::Result<rustls::ServerCertVerified, rustls::TLSError> {
+        _now: std::time::SystemTime,
+    ) -> std::result::Result<rustls::client::ServerCertVerified, 
rustls::Error> {
         // This call automatically verifies certificate signature
         debug!("verify server cert");
-        if certs.len() != 1 {
-            return Err(rustls::TLSError::NoCertificatesPresented);
-        }
-        if self.verify_cert(certs) {
-            Ok(rustls::ServerCertVerified::assertion())
+        if self.verify_cert(&[end_entity.to_owned()]) {
+            Ok(rustls::client::ServerCertVerified::assertion())
         } else {
-            Err(rustls::TLSError::WebPKIError(
-                webpki::Error::ExtensionValueInvalid,
+            Err(rustls::Error::InvalidCertificate(
+                rustls::CertificateError::UnhandledCriticalExtension,
             ))
         }
     }
 }
 
-impl rustls::ClientCertVerifier for AttestationReportVerifier {
+impl rustls::server::ClientCertVerifier for AttestationReportVerifier {
     fn offer_client_auth(&self) -> bool {
         // If test_mode is on, then disable TLS client authentication.
         !cfg!(test_mode)
     }
 
-    fn client_auth_root_subjects(
-        &self,
-        _sni: Option<&webpki::DNSName>,
-    ) -> Option<rustls::DistinguishedNames> {
-        Some(rustls::DistinguishedNames::new())
+    fn client_auth_root_subjects(&self) -> &[rustls::DistinguishedName] {
+        &[]
     }
 
     fn verify_client_cert(
         &self,
-        certs: &[rustls::Certificate],
-        _sni: Option<&webpki::DNSName>,
-    ) -> std::result::Result<rustls::ClientCertVerified, rustls::TLSError> {
+        end_entity: &rustls::Certificate,
+        _intermediates: &[rustls::Certificate],
+        _now: std::time::SystemTime,
+    ) -> std::result::Result<rustls::server::ClientCertVerified, 
rustls::Error> {
         // This call automatically verifies certificate signature
         debug!("verify client cert");
-        if certs.len() != 1 {
-            return Err(rustls::TLSError::NoCertificatesPresented);
-        }
-        if self.verify_cert(certs) {
-            Ok(rustls::ClientCertVerified::assertion())
+
+        if self.verify_cert(&[end_entity.to_owned()]) {
+            Ok(rustls::server::ClientCertVerified::assertion())
         } else {
-            Err(rustls::TLSError::WebPKIError(
-                webpki::Error::ExtensionValueInvalid,
+            Err(rustls::Error::InvalidCertificate(
+                rustls::CertificateError::UnhandledCriticalExtension,
             ))
         }
     }
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index 646b70f1..f173735b 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -24,15 +24,18 @@ license = "Apache-2.0"
 edition = "2021"
 
 [dependencies]
-anyhow = { version = "1.0.26" }
-structopt = "0.3"
-teaclave_crypto = { path = "../crypto" }
-hex = { version = "0.4.0" }
-teaclave_types = { path = "../types", features = ["app"] }
+anyhow               = { version = "1.0.26" }
+env_logger           = { version = "0.7.1" }
+hex                  = { version = "0.4.0" }
+http                 = { version = "0.2" }
+pem                  = { version = "0.7.0" }
+rustls               = { version = "0.21.0", features = 
["dangerous_configuration"] }
+rustls-webpki        = { version = "0.100.0" }
+structopt            = { version = "0.3" }
+webpki-roots         = { version = "0.23.0" }
+
 teaclave_attestation = { path = "../attestation" }
-env_logger = { version = "0.7.1" }
-webpki-roots     = { version = "0.21.0" }
-webpki     = { version = "0.21.0" }
-rustls     = { version = "0.19.0", features = ["dangerous_configuration"] }
-http       = { version = "0.2" }
-pem = "0.7.0"
+teaclave_crypto      = { path = "../crypto" }
+teaclave_types       = { path = "../types", features = ["app"] }
+
+
diff --git a/cli/src/main.rs b/cli/src/main.rs
index 6b1af5ed..bba72b7c 100644
--- a/cli/src/main.rs
+++ b/cli/src/main.rs
@@ -221,23 +221,22 @@ impl TeaclaveServerCertVerifier {
     }
 }
 
-impl rustls::ServerCertVerifier for TeaclaveServerCertVerifier {
+impl rustls::client::ServerCertVerifier for TeaclaveServerCertVerifier {
     fn verify_server_cert(
         &self,
-        _roots: &rustls::RootCertStore,
-        certs: &[rustls::Certificate],
-        _hostname: webpki::DNSNameRef,
+        end_entity: &rustls::Certificate,
+        _intermediates: &[rustls::Certificate],
+        _server_name: &rustls::ServerName,
+        _scts: &mut dyn Iterator<Item = &[u8]>,
         _ocsp: &[u8],
-    ) -> std::result::Result<rustls::ServerCertVerified, rustls::TLSError> {
+        _now: std::time::SystemTime,
+    ) -> std::result::Result<rustls::client::ServerCertVerified, 
rustls::Error> {
         // This call automatically verifies certificate signature
-        if certs.len() != 1 {
-            return Err(rustls::TLSError::NoCertificatesPresented);
-        }
-        if self.display_attestation_report(certs) {
-            Ok(rustls::ServerCertVerified::assertion())
+        if self.display_attestation_report(&[end_entity.to_owned()]) {
+            Ok(rustls::client::ServerCertVerified::assertion())
         } else {
-            Err(rustls::TLSError::WebPKIError(
-                webpki::Error::ExtensionValueInvalid,
+            Err(rustls::Error::InvalidCertificate(
+                rustls::CertificateError::UnhandledCriticalExtension,
             ))
         }
     }
@@ -247,18 +246,18 @@ fn attest(opt: AttestOpt) -> Result<()> {
     let uri = opt.address.parse::<Uri>()?;
     let hostname = uri.host().ok_or_else(|| anyhow!("Invalid hostname."))?;
     let mut stream = std::net::TcpStream::connect(opt.address)?;
-    let hostname = webpki::DNSNameRef::try_from_ascii_str(hostname)?;
     let content = fs::read(opt.as_ca_cert)?;
     let pem = pem::parse(content)?;
     let verifier = Arc::new(TeaclaveServerCertVerifier::new(&pem.contents));
-    let mut config = rustls::ClientConfig::new();
-    config.dangerous().set_certificate_verifier(verifier);
-    config.versions.clear();
-    config.enable_sni = false;
-    config.versions.push(rustls::ProtocolVersion::TLSv1_2);
-    let rc_config = Arc::new(config);
-
-    let mut session = rustls::ClientSession::new(&rc_config, hostname);
+    let config = rustls::ClientConfig::builder()
+        .with_safe_default_cipher_suites()
+        .with_safe_default_kx_groups()
+        .with_protocol_versions(&[&rustls::version::TLS12])
+        .unwrap()
+        .with_custom_certificate_verifier(verifier)
+        .with_no_client_auth();
+    let mut session =
+        rustls::client::ClientConnection::new(Arc::new(config), 
hostname.try_into()?)?;
     let mut tls_stream = rustls::Stream::new(&mut session, &mut stream);
     tls_stream.write_all(&[0]).unwrap();
 
diff --git a/cmake/tomls/Cargo.sgx_trusted_lib.lock 
b/cmake/tomls/Cargo.sgx_trusted_lib.lock
index 00677f72..e128ec1b 100644
--- a/cmake/tomls/Cargo.sgx_trusted_lib.lock
+++ b/cmake/tomls/Cargo.sgx_trusted_lib.lock
@@ -107,6 +107,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "base64"
 version = "0.12.3"
@@ -173,7 +218,7 @@ checksum = 
"89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
 [[package]]
 name = "casbin"
 version = "2.0.9"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-trait",
  "fixedbitset",
@@ -342,7 +387,7 @@ checksum = 
"7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
 [[package]]
 name = "csv"
 version = "1.2.2"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "csv-core",
  "itoa",
@@ -353,7 +398,7 @@ dependencies = [
 [[package]]
 name = "csv-core"
 version = "0.1.10"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "memchr",
 ]
@@ -448,7 +493,7 @@ checksum = 
"25c7df09945d65ea8d70b3321547ed414bbc540aad5bac6883d021b970f35b04"
 [[package]]
 name = "fastfield_codecs"
 version = "0.3.1"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "fastdivide",
  "itertools 0.10.5",
@@ -605,7 +650,7 @@ dependencies = [
 [[package]]
 name = "gbdt"
 version = "0.1.1"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "cfg-if 0.1.10",
  "rand",
@@ -631,7 +676,7 @@ dependencies = [
 [[package]]
 name = "getrandom"
 version = "0.2.10"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -667,7 +712,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -695,12 +740,9 @@ version = "0.12.0"
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -825,7 +867,7 @@ dependencies = [
 [[package]]
 name = "image"
 version = "0.23.14"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "bytemuck",
  "byteorder",
@@ -1037,6 +1079,12 @@ dependencies = [
  "regex-automata",
 ]
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "matrixmultiply"
 version = "0.1.15"
@@ -1089,7 +1137,7 @@ dependencies = [
 [[package]]
 name = "mio"
 version = "0.8.6"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "libc",
  "log",
@@ -1242,7 +1290,7 @@ dependencies = [
 [[package]]
 name = "num_cpus"
 version = "1.14.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "hermit-abi 0.1.19",
  "libc",
@@ -1316,7 +1364,7 @@ checksum = 
"b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
 [[package]]
 name = "ownedbytes"
 version = "0.4.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "stable_deref_trait",
 ]
@@ -1415,6 +1463,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro-hack"
 version = "0.5.20+deprecated"
@@ -1441,9 +1499,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -1451,9 +1509,9 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
@@ -1462,18 +1520,20 @@ dependencies = [
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools 0.10.5",
@@ -1484,11 +1544,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -1513,7 +1572,7 @@ dependencies = [
 [[package]]
 name = "rand"
 version = "0.8.5"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "libc",
  "rand_chacha",
@@ -1523,7 +1582,7 @@ dependencies = [
 [[package]]
 name = "rand_chacha"
 version = "0.3.1"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "ppv-lite86",
  "rand_core 0.6.4 (git+https://github.com/apache/incubator-teaclave-crates)",
@@ -1541,7 +1600,7 @@ dependencies = [
 [[package]]
 name = "rand_core"
 version = "0.6.4"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "getrandom",
 ]
@@ -1565,7 +1624,7 @@ checksum = 
"ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
 [[package]]
 name = "rayon"
 version = "1.7.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "either",
  "rayon-core",
@@ -1574,7 +1633,7 @@ dependencies = [
 [[package]]
 name = "rayon-core"
 version = "1.11.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "crossbeam-channel",
  "crossbeam-deque",
@@ -1661,7 +1720,7 @@ dependencies = [
  "serde_urlencoded",
  "tokio",
  "tokio-native-tls",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-service",
  "url",
  "wasm-bindgen",
@@ -1674,7 +1733,7 @@ dependencies = [
 [[package]]
 name = "rhai"
 version = "1.15.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "ahash 0.8.3",
  "bitflags",
@@ -1689,7 +1748,7 @@ dependencies = [
 [[package]]
 name = "rhai_codegen"
 version = "1.5.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "proc-macro2 1.0.63",
  "quote 1.0.29",
@@ -1699,7 +1758,7 @@ dependencies = [
 [[package]]
 name = "ring"
 version = "0.16.20"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "cc",
  "libc",
@@ -1748,7 +1807,7 @@ checksum = 
"08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 [[package]]
 name = "rustface"
 version = "0.1.7"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "byteorder",
  "image",
@@ -1773,14 +1832,32 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+version = "0.21.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki",
  "sct",
- "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
 ]
 
 [[package]]
@@ -1805,7 +1882,7 @@ dependencies = [
 [[package]]
 name = "rusty-machine"
 version = "0.5.4"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "num 0.1.42",
  "rand",
@@ -1844,9 +1921,9 @@ checksum = 
"d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -2322,10 +2399,16 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "tantivy"
 version = "0.19.2"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "aho-corasick 0.7.20",
  "arc-swap",
@@ -2372,12 +2455,12 @@ dependencies = [
 [[package]]
 name = "tantivy-bitpacker"
 version = "0.3.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 
 [[package]]
 name = "tantivy-common"
 version = "0.4.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "byteorder",
  "ownedbytes",
@@ -2397,7 +2480,7 @@ dependencies = [
 [[package]]
 name = "tantivy-query-grammar"
 version = "0.19.0"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "combine",
  "once_cell",
@@ -2446,6 +2529,8 @@ dependencies = [
  "num-bigint 0.2.6",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki",
  "serde",
  "serde_json",
  "sgx_crypto",
@@ -2458,7 +2543,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid 0.8.2",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -2629,7 +2713,7 @@ dependencies = [
  "teaclave_types",
  "thiserror",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "url",
 ]
 
@@ -2795,10 +2879,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -2910,7 +2994,7 @@ version = "0.0.1"
 dependencies = [
  "proc-macro2 1.0.63",
  "quote 1.0.29",
- "syn 1.0.109",
+ "syn 2.0.23",
 ]
 
 [[package]]
@@ -3129,13 +3213,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -3149,20 +3232,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -3188,13 +3257,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -3207,24 +3276,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2 1.0.63",
  "prost-build",
  "quote 1.0.29",
@@ -3245,7 +3313,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -3270,7 +3338,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -3297,16 +3364,6 @@ dependencies = [
  "valuable",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "tracing-log"
 version = "0.1.3"
@@ -3363,12 +3420,6 @@ dependencies = [
  "tinyvec",
 ]
 
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
 [[package]]
 name = "unicode-xid"
 version = "0.1.0"
@@ -3578,23 +3629,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki",
 ]
 
 [[package]]
diff --git a/cmake/tomls/Cargo.sgx_trusted_lib.toml 
b/cmake/tomls/Cargo.sgx_trusted_lib.toml
index 09d72579..495d2dd3 100644
--- a/cmake/tomls/Cargo.sgx_trusted_lib.toml
+++ b/cmake/tomls/Cargo.sgx_trusted_lib.toml
@@ -71,4 +71,5 @@ rustls            = { git = 
"https://github.com/apache/incubator-teaclave-crates
 rusty-machine     = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
 tantivy           = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
 tokio             = { git = "https://github.com/tokio-rs/tokio.git";, tag = 
"tokio-1.24.0"}
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
 yasna             = { git = "https://github.com/sccommunity/yasna.rs";, branch 
= "teaclave-sgx" }
diff --git a/cmake/tomls/Cargo.sgx_untrusted_app.lock 
b/cmake/tomls/Cargo.sgx_untrusted_app.lock
index 552bb6af..78d216f9 100644
--- a/cmake/tomls/Cargo.sgx_untrusted_app.lock
+++ b/cmake/tomls/Cargo.sgx_untrusted_app.lock
@@ -106,6 +106,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "backtrace"
 version = "0.3.68"
@@ -567,7 +612,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -590,6 +635,12 @@ dependencies = [
  "unicode-segmentation",
 ]
 
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
 [[package]]
 name = "hermit-abi"
 version = "0.1.19"
@@ -858,6 +909,12 @@ dependencies = [
  "value-bag",
 ]
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "matrixmultiply"
 version = "0.1.15"
@@ -1163,6 +1220,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro-error"
 version = "1.0.4"
@@ -1207,9 +1274,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -1217,29 +1284,31 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
- "heck",
+ "heck 0.4.1",
  "itertools 0.10.5",
  "lazy_static",
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools 0.10.5",
@@ -1250,11 +1319,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -1516,7 +1584,7 @@ dependencies = [
  "serde_urlencoded",
  "tokio",
  "tokio-native-tls",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-service",
  "url",
  "wasm-bindgen",
@@ -1559,7 +1627,7 @@ checksum = 
"d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 [[package]]
 name = "rustface"
 version = "0.1.7"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "byteorder",
  "image",
@@ -1584,21 +1652,55 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki 0.101.1",
  "sct",
- "webpki",
 ]
 
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
 [[package]]
 name = "rusty-machine"
 version = "0.5.4"
-source = 
"git+https://github.com/apache/incubator-teaclave-crates#2b87d3972d43fa0fee2496dfc703e4f772ffbe9f";
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "num 0.1.42",
  "rand 0.8.5",
@@ -1625,9 +1727,9 @@ dependencies = [
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -1976,7 +2078,7 @@ version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
 dependencies = [
- "heck",
+ "heck 0.3.3",
  "proc-macro-error",
  "proc-macro2 1.0.63",
  "quote 1.0.29",
@@ -2084,6 +2186,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_access_control_service"
 version = "0.6.0"
@@ -2111,6 +2219,8 @@ dependencies = [
  "num-bigint 0.2.6",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_crypto",
@@ -2123,7 +2233,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -2295,7 +2404,7 @@ dependencies = [
  "teaclave_types",
  "thiserror",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "url",
 ]
 
@@ -2412,10 +2521,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -2517,7 +2626,7 @@ version = "0.0.1"
 dependencies = [
  "proc-macro2 1.0.63",
  "quote 1.0.29",
- "syn 1.0.109",
+ "syn 2.0.23",
 ]
 
 [[package]]
@@ -2691,13 +2800,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -2711,20 +2819,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -2750,13 +2844,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -2769,24 +2863,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2 1.0.63",
  "prost-build",
  "quote 1.0.29",
@@ -2807,7 +2900,7 @@ dependencies = [
  "rand 0.8.5",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -2832,7 +2925,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -2858,16 +2950,6 @@ dependencies = [
  "once_cell",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "try-lock"
 version = "0.2.4"
@@ -3100,23 +3182,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/cmake/tomls/Cargo.sgx_untrusted_app.toml 
b/cmake/tomls/Cargo.sgx_untrusted_app.toml
index c83473d6..e27db6c0 100644
--- a/cmake/tomls/Cargo.sgx_untrusted_app.toml
+++ b/cmake/tomls/Cargo.sgx_untrusted_app.toml
@@ -47,4 +47,5 @@ sgx_types         = { path = 
"../../../third_party/rust-sgx-sdk/sgx_types" }
 sgx_urts          = { path = "../../../third_party/rust-sgx-sdk/sgx_urts" }
 
 rustface          = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
-rusty-machine     = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
\ No newline at end of file
+rusty-machine     = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
\ No newline at end of file
diff --git a/cmake/tomls/Cargo.unix_app.lock b/cmake/tomls/Cargo.unix_app.lock
index 6e657f92..c5f79ff3 100644
--- a/cmake/tomls/Cargo.unix_app.lock
+++ b/cmake/tomls/Cargo.unix_app.lock
@@ -147,6 +147,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "backtrace"
 version = "0.3.68"
@@ -679,7 +724,7 @@ dependencies = [
  "indexmap 1.9.3",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -708,6 +753,12 @@ dependencies = [
  "unicode-segmentation",
 ]
 
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
 [[package]]
 name = "hermit-abi"
 version = "0.1.19"
@@ -1019,6 +1070,12 @@ dependencies = [
  "regex-automata",
 ]
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "memchr"
 version = "2.5.0"
@@ -1067,7 +1124,7 @@ dependencies = [
  "mime",
  "spin 0.9.8",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "version_check",
 ]
 
@@ -1277,6 +1334,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro-error"
 version = "1.0.4"
@@ -1338,9 +1405,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -1348,29 +1415,31 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
- "heck",
+ "heck 0.4.1",
  "itertools",
  "lazy_static",
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools",
@@ -1381,11 +1450,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -1550,7 +1618,7 @@ dependencies = [
  "time 0.3.22",
  "tokio",
  "tokio-stream",
- "tokio-util 0.7.8",
+ "tokio-util",
  "ubyte",
  "version_check",
  "yansi",
@@ -1622,27 +1690,26 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.20.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
- "sct 0.6.1",
- "webpki 0.21.4",
+ "sct",
+ "webpki",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.20.8"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
  "log",
  "ring",
- "sct 0.7.0",
- "webpki 0.22.0",
+ "rustls-webpki 0.101.1",
+ "sct",
 ]
 
 [[package]]
@@ -1654,6 +1721,26 @@ dependencies = [
  "base64 0.21.2",
 ]
 
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
 [[package]]
 name = "rustversion"
 version = "1.0.13"
@@ -1678,16 +1765,6 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
-[[package]]
-name = "sct"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "sct"
 version = "0.7.0"
@@ -2022,7 +2099,7 @@ version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
 dependencies = [
- "heck",
+ "heck 0.3.3",
  "proc-macro-error",
  "proc-macro2",
  "quote",
@@ -2057,6 +2134,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_attestation"
 version = "0.6.0"
@@ -2072,7 +2155,9 @@ dependencies = [
  "log",
  "num-bigint",
  "percent-encoding",
- "rustls 0.19.1",
+ "rustls 0.21.3",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_crypto",
@@ -2085,7 +2170,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki 0.21.4",
  "webpki-roots",
  "yasna",
 ]
@@ -2099,12 +2183,12 @@ dependencies = [
  "hex",
  "http",
  "pem",
- "rustls 0.19.1",
+ "rustls 0.21.3",
+ "rustls-webpki 0.100.1",
  "structopt",
  "teaclave_attestation",
  "teaclave_crypto",
  "teaclave_types",
- "webpki 0.21.4",
  "webpki-roots",
 ]
 
@@ -2197,11 +2281,11 @@ version = "0.6.0"
 dependencies = [
  "anyhow",
  "log",
- "rustls 0.19.1",
+ "rustls 0.21.3",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki 0.21.4",
 ]
 
 [[package]]
@@ -2220,7 +2304,7 @@ version = "0.0.1"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.23",
 ]
 
 [[package]]
@@ -2403,24 +2487,23 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.23.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
 dependencies = [
- "rustls 0.19.1",
+ "rustls 0.20.8",
  "tokio",
- "webpki 0.21.4",
+ "webpki",
 ]
 
 [[package]]
 name = "tokio-rustls"
-version = "0.23.4"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
- "rustls 0.20.8",
+ "rustls 0.21.3",
  "tokio",
- "webpki 0.22.0",
 ]
 
 [[package]]
@@ -2434,20 +2517,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -2507,13 +2576,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -2526,24 +2595,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
- "tokio-rustls 0.22.0",
+ "tokio-rustls 0.24.1",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2",
  "prost-build",
  "quote",
@@ -2564,7 +2632,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -2589,7 +2657,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -2616,16 +2683,6 @@ dependencies = [
  "valuable",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "tracing-log"
 version = "0.1.3"
@@ -2867,16 +2924,6 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki"
 version = "0.22.0"
@@ -2889,11 +2936,11 @@ dependencies = [
 
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki 0.21.4",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/cmake/tomls/Cargo.unix_app.toml b/cmake/tomls/Cargo.unix_app.toml
index c9cc713b..2efa9e7a 100644
--- a/cmake/tomls/Cargo.unix_app.toml
+++ b/cmake/tomls/Cargo.unix_app.toml
@@ -30,6 +30,7 @@ exclude = [
 ]
 
 [patch.crates-io]
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
 
 sgx_cov           = { path = "../../../third_party/rust-sgx-sdk/sgx_tests/cov" 
}
 sgx_crypto        = { path = "../../../third_party/rust-sgx-sdk/sgx_crypto" }
diff --git a/examples/rust/builtin_echo/Cargo.lock 
b/examples/rust/builtin_echo/Cargo.lock
index c8a3aeb4..752b81d4 100644
--- a/examples/rust/builtin_echo/Cargo.lock
+++ b/examples/rust/builtin_echo/Cargo.lock
@@ -68,6 +68,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "base64"
 version = "0.11.0"
@@ -80,6 +125,12 @@ version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
 [[package]]
 name = "bit-vec"
 version = "0.6.3"
@@ -281,7 +332,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -293,12 +344,9 @@ checksum = 
"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -479,12 +527,24 @@ version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "memchr"
 version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.1"
@@ -622,6 +682,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.59"
@@ -633,9 +703,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -643,9 +713,9 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
@@ -654,18 +724,20 @@ dependencies = [
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools",
@@ -676,11 +748,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -789,17 +860,51 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki 0.101.1",
  "sct",
- "webpki",
 ]
 
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+
 [[package]]
 name = "ryu"
 version = "1.0.13"
@@ -808,9 +913,9 @@ checksum = 
"f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -968,6 +1073,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_attestation"
 version = "0.6.0"
@@ -983,6 +1094,8 @@ dependencies = [
  "num-bigint",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_types",
@@ -991,7 +1104,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -1062,10 +1174,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -1178,13 +1290,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -1198,20 +1309,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -1237,13 +1334,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -1256,24 +1353,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2",
  "prost-build",
  "quote",
@@ -1294,7 +1390,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -1319,7 +1415,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -1345,16 +1440,6 @@ dependencies = [
  "once_cell",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "try-lock"
 version = "0.2.4"
@@ -1382,12 +1467,6 @@ dependencies = [
  "tinyvec",
 ]
 
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
 [[package]]
 name = "untrusted"
 version = "0.7.1"
@@ -1497,23 +1576,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/examples/rust/builtin_echo/Cargo.toml 
b/examples/rust/builtin_echo/Cargo.toml
index 28632f0b..053f74a8 100644
--- a/examples/rust/builtin_echo/Cargo.toml
+++ b/examples/rust/builtin_echo/Cargo.toml
@@ -30,5 +30,7 @@ pem = "0.7.0"
 
 [patch.crates-io]
 h2                = { git = "https://github.com/hyperium/h2";, tag = "v0.3.19" }
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
+
 sgx_tprotected_fs = { path = 
"../../../third_party/rust-sgx-sdk/sgx_protected_fs/tfs" }
 sgx_types         = { path = "../../../third_party/rust-sgx-sdk/sgx_types" }
diff --git a/examples/rust/builtin_ordered_set_intersect/Cargo.lock 
b/examples/rust/builtin_ordered_set_intersect/Cargo.lock
index 20f9743f..aaf29227 100644
--- a/examples/rust/builtin_ordered_set_intersect/Cargo.lock
+++ b/examples/rust/builtin_ordered_set_intersect/Cargo.lock
@@ -68,6 +68,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "base64"
 version = "0.11.0"
@@ -80,6 +125,12 @@ version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
 [[package]]
 name = "bit-vec"
 version = "0.6.3"
@@ -281,7 +332,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -293,12 +344,9 @@ checksum = 
"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -479,12 +527,24 @@ version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "memchr"
 version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.1"
@@ -622,6 +682,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.59"
@@ -633,9 +703,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -643,9 +713,9 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
@@ -654,18 +724,20 @@ dependencies = [
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools",
@@ -676,11 +748,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -789,17 +860,51 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki 0.101.1",
  "sct",
- "webpki",
 ]
 
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+
 [[package]]
 name = "ryu"
 version = "1.0.13"
@@ -808,9 +913,9 @@ checksum = 
"f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -968,6 +1073,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_attestation"
 version = "0.6.0"
@@ -983,6 +1094,8 @@ dependencies = [
  "num-bigint",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_types",
@@ -991,7 +1104,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -1062,10 +1174,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -1178,13 +1290,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -1198,20 +1309,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -1237,13 +1334,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -1256,24 +1353,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2",
  "prost-build",
  "quote",
@@ -1294,7 +1390,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -1319,7 +1415,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -1345,16 +1440,6 @@ dependencies = [
  "once_cell",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "try-lock"
 version = "0.2.4"
@@ -1382,12 +1467,6 @@ dependencies = [
  "tinyvec",
 ]
 
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
 [[package]]
 name = "untrusted"
 version = "0.7.1"
@@ -1497,23 +1576,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/examples/rust/builtin_ordered_set_intersect/Cargo.toml 
b/examples/rust/builtin_ordered_set_intersect/Cargo.toml
index e8a7b46c..6bb02d13 100644
--- a/examples/rust/builtin_ordered_set_intersect/Cargo.toml
+++ b/examples/rust/builtin_ordered_set_intersect/Cargo.toml
@@ -30,5 +30,7 @@ pem = "0.7.0"
 
 [patch.crates-io]
 h2                = { git = "https://github.com/hyperium/h2";, tag = "v0.3.19" }
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
+
 sgx_tprotected_fs = { path = 
"../../../third_party/rust-sgx-sdk/sgx_protected_fs/tfs" }
 sgx_types         = { path = "../../../third_party/rust-sgx-sdk/sgx_types" }
diff --git a/examples/rust/sequential_functions/Cargo.lock 
b/examples/rust/sequential_functions/Cargo.lock
index 8fc8fa73..db3ce3d5 100644
--- a/examples/rust/sequential_functions/Cargo.lock
+++ b/examples/rust/sequential_functions/Cargo.lock
@@ -68,6 +68,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "base64"
 version = "0.11.0"
@@ -80,6 +125,12 @@ version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
 [[package]]
 name = "bit-vec"
 version = "0.6.3"
@@ -272,7 +323,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -284,12 +335,9 @@ checksum = 
"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -470,12 +518,24 @@ version = "0.4.19"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "memchr"
 version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.1"
@@ -613,6 +673,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.63"
@@ -624,9 +694,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -634,9 +704,9 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
@@ -645,18 +715,20 @@ dependencies = [
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools",
@@ -667,11 +739,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -780,17 +851,51 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki 0.101.1",
  "sct",
- "webpki",
 ]
 
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+
 [[package]]
 name = "ryu"
 version = "1.0.13"
@@ -799,9 +904,9 @@ checksum = 
"f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -969,6 +1074,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_attestation"
 version = "0.6.0"
@@ -984,6 +1095,8 @@ dependencies = [
  "num-bigint",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_types",
@@ -992,7 +1105,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -1063,10 +1175,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -1180,13 +1292,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -1200,20 +1311,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -1239,13 +1336,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -1258,24 +1355,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2",
  "prost-build",
  "quote",
@@ -1296,7 +1392,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -1321,7 +1417,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -1347,16 +1442,6 @@ dependencies = [
  "once_cell",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "try-lock"
 version = "0.2.4"
@@ -1384,12 +1469,6 @@ dependencies = [
  "tinyvec",
 ]
 
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
 [[package]]
 name = "untrusted"
 version = "0.7.1"
@@ -1498,23 +1577,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/examples/rust/sequential_functions/Cargo.toml 
b/examples/rust/sequential_functions/Cargo.toml
index bb6106dd..7c37f0c8 100644
--- a/examples/rust/sequential_functions/Cargo.toml
+++ b/examples/rust/sequential_functions/Cargo.toml
@@ -31,5 +31,7 @@ teaclave_client_sdk   = { path = "../../../sdk/rust/" }
 
 [patch.crates-io]
 h2                = { git = "https://github.com/hyperium/h2";, tag = "v0.3.19" }
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
+
 sgx_tprotected_fs = { path = 
"../../../third_party/rust-sgx-sdk/sgx_protected_fs/tfs" }
 sgx_types         = { path = "../../../third_party/rust-sgx-sdk/sgx_types" }
diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml
index 02866888..f25b2304 100644
--- a/rpc/Cargo.toml
+++ b/rpc/Cargo.toml
@@ -39,11 +39,11 @@ libos = [
 ]
 
 [dependencies]
-anyhow     = { version = "1.0.26" }
-log        = { version = "0.4.17", features = ["release_max_level_info"] }
-rustls     = { version = "0.19.0", features = ["dangerous_configuration"] }
-tonic      = { version = "0.6.1", features = ["tls", "compression"] }
-webpki     = { version = "0.21.0" }
+anyhow            = { version = "1.0.26" }
+log               = { version = "0.4.17", features = 
["release_max_level_info"] }
+rustls            = { version = "0.21.1", features = 
["dangerous_configuration"] }
+rustls-webpki     = { version = "0.100.0" }
+tonic             = { version = "0.9.2", features = ["tls", "gzip"] }
 
 teaclave_types       = { path = "../types" }
 teaclave_attestation = { path = "../attestation" }
diff --git a/rpc/src/config.rs b/rpc/src/config.rs
index 10a56559..14e9478e 100644
--- a/rpc/src/config.rs
+++ b/rpc/src/config.rs
@@ -41,10 +41,51 @@ pub struct SgxTrustedTlsServerConfig {
     validity: std::time::Duration,
 }
 
+// Refer to `rustls/src/server/handy.rs` in rustls 0.21.2
+// Something which always resolves to the same cert chain.
+struct AlwaysResolvesChain(Arc<rustls::sign::CertifiedKey>);
+
+impl AlwaysResolvesChain {
+    pub(super) fn new(
+        chain: Vec<rustls::Certificate>,
+        priv_key: &rustls::PrivateKey,
+    ) -> Result<Self, rustls::Error> {
+        let key = rustls::sign::any_supported_type(priv_key)
+            .map_err(|_| rustls::Error::General("invalid private 
key".into()))?;
+        Ok(Self(Arc::new(rustls::sign::CertifiedKey::new(chain, key))))
+    }
+}
+
+impl rustls::server::ResolvesServerCert for AlwaysResolvesChain {
+    fn resolve(
+        &self,
+        _client_hello: rustls::server::ClientHello,
+    ) -> Option<Arc<rustls::sign::CertifiedKey>> {
+        Some(Arc::clone(&self.0))
+    }
+}
+
+// Refer to `rustls/src/client/handy.rs` in rustls 0.21.2
+impl rustls::client::ResolvesClientCert for AlwaysResolvesChain {
+    fn resolve(
+        &self,
+        _acceptable_issuers: &[&[u8]],
+        _sigschemes: &[rustls::SignatureScheme],
+    ) -> Option<Arc<rustls::sign::CertifiedKey>> {
+        Some(Arc::clone(&self.0))
+    }
+
+    fn has_certs(&self) -> bool {
+        true
+    }
+}
+
 impl Default for SgxTrustedTlsServerConfig {
     fn default() -> Self {
-        let client_cert_verifier = rustls::NoClientAuth::new();
-        let server_config = rustls::ServerConfig::new(client_cert_verifier);
+        let server_config = rustls::ServerConfig::builder()
+            .with_safe_defaults()
+            .with_no_client_auth()
+            
.with_cert_resolver(Arc::new(rustls::server::ResolvesServerCertUsingSni::new()));
         let time = SystemTime::now();
         let validity = std::time::Duration::from_secs(u64::max_value());
 
@@ -65,7 +106,8 @@ impl SgxTrustedTlsServerConfig {
     pub fn server_cert(mut self, cert: &[u8], key_der: &[u8]) -> Result<Self> {
         let cert_chain = vec![rustls::Certificate(cert.to_vec())];
         let key_der = rustls::PrivateKey(key_der.to_vec());
-        self.server_config.set_single_cert(cert_chain, key_der)?;
+        let resolver = AlwaysResolvesChain::new(cert_chain, &key_der)?;
+        self.server_config.cert_resolver = Arc::new(resolver);
 
         Ok(Self { ..self })
     }
@@ -85,7 +127,7 @@ impl SgxTrustedTlsServerConfig {
     // Disable this function for non-SGX targets.
     #[cfg(any(feature = "mesalock_sgx", feature = "libos"))]
     pub fn attestation_report_verifier(
-        mut self,
+        self,
         accepted_enclave_attrs: Vec<EnclaveAttr>,
         root_ca: &[u8],
         verifier: fn(&AttestationReport) -> bool,
@@ -95,9 +137,15 @@ impl SgxTrustedTlsServerConfig {
             root_ca,
             verifier,
         ));
+        let server_config = rustls::ServerConfig::builder()
+            .with_safe_defaults()
+            .with_client_cert_verifier(verifier)
+            .with_cert_resolver(self.server_config.cert_resolver);
 
-        self.server_config.set_client_certificate_verifier(verifier);
-        Ok(Self { ..self })
+        Ok(Self {
+            server_config,
+            ..self
+        })
     }
 
     pub fn server_config(&self) -> Arc<rustls::ServerConfig> {
@@ -126,10 +174,9 @@ impl SgxTrustedTlsServerConfig {
         let cert_chain = 
vec![rustls::Certificate(attested_tls_config.cert.to_vec())];
         let key_der = 
rustls::PrivateKey(attested_tls_config.private_key.to_vec());
 
-        let mut new_server_config = self.server_config.clone();
-        new_server_config.set_single_cert(cert_chain, key_der)?;
+        let resolver = AlwaysResolvesChain::new(cert_chain, &key_der)?;
+        self.server_config.cert_resolver = Arc::new(resolver);
 
-        self.server_config = new_server_config;
         self.time = attested_tls_config.time;
         self.validity = attested_tls_config.validity;
 
@@ -140,7 +187,7 @@ impl SgxTrustedTlsServerConfig {
 impl From<SgxTrustedTlsServerConfig> for ServerTlsConfig {
     fn from(config: SgxTrustedTlsServerConfig) -> Self {
         let mut config_service = config.server_config;
-        config_service.set_protocols(&[ALPN_H2.as_bytes().to_vec()]);
+        config_service.alpn_protocols = vec![ALPN_H2.as_bytes().to_vec()];
         let mut tls_config = ServerTlsConfig::new();
         let tls_config = tls_config.rustls_server_config(config_service);
         tls_config.to_owned()
@@ -159,34 +206,34 @@ impl NoServerAuth {
     // Allow new_ret_no_self, make it consistent with rustls definition of
     // `NoClientAuth::new()`.
     #[allow(clippy::new_ret_no_self)]
-    pub fn new() -> Arc<dyn rustls::ServerCertVerifier> {
+    pub fn new() -> Arc<dyn rustls::client::ServerCertVerifier> {
         Arc::new(NoServerAuth)
     }
 }
 
-impl rustls::ServerCertVerifier for NoServerAuth {
+impl rustls::client::ServerCertVerifier for NoServerAuth {
     fn verify_server_cert(
         &self,
-        _roots: &rustls::RootCertStore,
-        _certs: &[rustls::Certificate],
-        _hostname: webpki::DNSNameRef<'_>,
+        _end_entity: &rustls::Certificate,
+        _intermediates: &[rustls::Certificate],
+        _server_name: &rustls::ServerName,
+        _scts: &mut dyn Iterator<Item = &[u8]>,
         _ocsp: &[u8],
-    ) -> Result<rustls::ServerCertVerified, rustls::TLSError> {
-        Ok(rustls::ServerCertVerified::assertion())
+        _now: SystemTime,
+    ) -> Result<rustls::client::ServerCertVerified, rustls::Error> {
+        Ok(rustls::client::ServerCertVerified::assertion())
     }
 }
 
 impl Default for SgxTrustedTlsClientConfig {
     fn default() -> Self {
-        let mut client_config = rustls::ClientConfig::new();
-
-        client_config
-            .dangerous()
-            .set_certificate_verifier(NoServerAuth::new());
-        client_config.versions.clear();
-        client_config
-            .versions
-            .push(rustls::ProtocolVersion::TLSv1_2);
+        let client_config = rustls::ClientConfig::builder()
+            .with_safe_default_cipher_suites()
+            .with_safe_default_kx_groups()
+            .with_protocol_versions(&[&rustls::version::TLS12])
+            .unwrap()
+            .with_custom_certificate_verifier(NoServerAuth::new())
+            .with_no_client_auth();
 
         Self {
             client_config,
@@ -222,8 +269,8 @@ impl SgxTrustedTlsClientConfig {
     pub fn client_cert(mut self, cert: &[u8], key_der: &[u8]) -> Result<Self> {
         let cert_chain = vec![rustls::Certificate(cert.to_vec())];
         let key_der = rustls::PrivateKey(key_der.to_vec());
-        self.client_config
-            .set_single_client_cert(cert_chain, key_der)?;
+        let resolver = AlwaysResolvesChain::new(cert_chain, &key_der)?;
+        self.client_config.client_auth_cert_resolver = Arc::new(resolver);
 
         Ok(Self { ..self })
     }
@@ -243,7 +290,7 @@ impl From<SgxTrustedTlsClientConfig> for ClientTlsConfig {
     fn from(config: SgxTrustedTlsClientConfig) -> Self {
         let mut client_config = config.client_config;
         // Yout must set the 'h2' negotiation flag.
-        client_config.set_protocols(&[ALPN_H2.as_bytes().to_vec()]);
+        client_config.alpn_protocols = vec![ALPN_H2.as_bytes().to_vec()];
         ClientTlsConfig::new().rustls_client_config(client_config)
     }
 }
diff --git a/sdk/rust/Cargo.lock b/sdk/rust/Cargo.lock
index a4cbef4c..e093ff5f 100644
--- a/sdk/rust/Cargo.lock
+++ b/sdk/rust/Cargo.lock
@@ -68,6 +68,51 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
 [[package]]
 name = "base64"
 version = "0.11.0"
@@ -80,6 +125,12 @@ version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
 [[package]]
 name = "bit-vec"
 version = "0.6.3"
@@ -272,7 +323,7 @@ dependencies = [
  "indexmap",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tracing",
 ]
 
@@ -284,12 +335,9 @@ checksum = 
"8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
 
 [[package]]
 name = "heck"
-version = "0.3.3"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-dependencies = [
- "unicode-segmentation",
-]
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -470,12 +518,24 @@ version = "0.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
 
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
 [[package]]
 name = "memchr"
 version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.1"
@@ -613,6 +673,16 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.59"
@@ -624,9 +694,9 @@ dependencies = [
 
 [[package]]
 name = "prost"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -634,9 +704,9 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
@@ -645,18 +715,20 @@ dependencies = [
  "log",
  "multimap",
  "petgraph",
+ "prettyplease",
  "prost",
  "prost-types",
  "regex",
+ "syn 1.0.109",
  "tempfile",
  "which",
 ]
 
 [[package]]
 name = "prost-derive"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
  "itertools",
@@ -667,11 +739,10 @@ dependencies = [
 
 [[package]]
 name = "prost-types"
-version = "0.9.0"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
- "bytes",
  "prost",
 ]
 
@@ -780,17 +851,51 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring",
+ "rustls-webpki 0.101.1",
  "sct",
- "webpki",
 ]
 
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+
 [[package]]
 name = "ryu"
 version = "1.0.13"
@@ -799,9 +904,9 @@ checksum = 
"f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
 
 [[package]]
 name = "sct"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
 dependencies = [
  "ring",
  "untrusted",
@@ -959,6 +1064,12 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
 [[package]]
 name = "teaclave_attestation"
 version = "0.6.0"
@@ -974,6 +1085,8 @@ dependencies = [
  "num-bigint",
  "percent-encoding",
  "rustls",
+ "rustls-pemfile",
+ "rustls-webpki 0.100.1",
  "serde",
  "serde_json",
  "sgx_types",
@@ -982,7 +1095,6 @@ dependencies = [
  "thiserror",
  "url",
  "uuid",
- "webpki",
  "webpki-roots",
  "yasna",
 ]
@@ -1053,10 +1165,10 @@ dependencies = [
  "anyhow",
  "log",
  "rustls",
+ "rustls-webpki 0.100.1",
  "teaclave_attestation",
  "teaclave_types",
  "tonic",
- "webpki",
 ]
 
 [[package]]
@@ -1169,13 +1281,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.22.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -1189,20 +1300,6 @@ dependencies = [
  "tokio",
 ]
 
-[[package]]
-name = "tokio-util"
-version = "0.6.10"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
-dependencies = [
- "bytes",
- "futures-core",
- "futures-sink",
- "log",
- "pin-project-lite",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.8"
@@ -1228,13 +1325,13 @@ dependencies = [
 
 [[package]]
 name = "tonic"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+version = "0.9.2"
+source = 
"git+https://github.com/apache/incubator-teaclave-crates#9ca099caa1508c3b7ab1a54899f390f9232f10ff";
 dependencies = [
  "async-stream",
  "async-trait",
- "base64 0.13.1",
+ "axum",
+ "base64 0.21.2",
  "bytes",
  "flate2",
  "futures-core",
@@ -1247,24 +1344,23 @@ dependencies = [
  "percent-encoding",
  "pin-project",
  "prost",
- "prost-derive",
+ "rustls-pemfile",
  "tokio",
  "tokio-rustls",
  "tokio-stream",
- "tokio-util 0.6.10",
  "tower",
  "tower-layer",
  "tower-service",
  "tracing",
- "tracing-futures",
 ]
 
 [[package]]
 name = "tonic-build"
-version = "0.6.2"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
 dependencies = [
+ "prettyplease",
  "proc-macro2",
  "prost-build",
  "quote",
@@ -1285,7 +1381,7 @@ dependencies = [
  "rand",
  "slab",
  "tokio",
- "tokio-util 0.7.8",
+ "tokio-util",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -1310,7 +1406,6 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
- "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -1336,16 +1431,6 @@ dependencies = [
  "once_cell",
 ]
 
-[[package]]
-name = "tracing-futures"
-version = "0.2.5"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
-dependencies = [
- "pin-project",
- "tracing",
-]
-
 [[package]]
 name = "try-lock"
 version = "0.2.4"
@@ -1373,12 +1458,6 @@ dependencies = [
  "tinyvec",
 ]
 
-[[package]]
-name = "unicode-segmentation"
-version = "1.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-
 [[package]]
 name = "untrusted"
 version = "0.7.1"
@@ -1488,23 +1567,13 @@ dependencies = [
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring",
- "untrusted",
-]
-
 [[package]]
 name = "webpki-roots"
-version = "0.21.1"
+version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "webpki",
+ "rustls-webpki 0.100.1",
 ]
 
 [[package]]
diff --git a/sdk/rust/Cargo.toml b/sdk/rust/Cargo.toml
index 16d07c8a..31fc8d4a 100644
--- a/sdk/rust/Cargo.toml
+++ b/sdk/rust/Cargo.toml
@@ -41,5 +41,7 @@ tokio                 = { version = "1.0", features = 
["rt-multi-thread", "time"
 
 [patch.crates-io]
 h2                = { git = "https://github.com/hyperium/h2";, tag = "v0.3.19" }
+tonic             = { git = 
"https://github.com/apache/incubator-teaclave-crates"; }
+
 sgx_tprotected_fs = { path = 
"../../third_party/rust-sgx-sdk/sgx_protected_fs/tfs" }
 sgx_types         = { path = "../../third_party/rust-sgx-sdk/sgx_types" }
diff --git a/services/proto/Cargo.toml b/services/proto/Cargo.toml
index 3e610d8d..e8661dfb 100644
--- a/services/proto/Cargo.toml
+++ b/services/proto/Cargo.toml
@@ -38,10 +38,10 @@ cov = ["sgx_cov"]
 [dependencies]
 anyhow          = { version = "1.0.26" }
 chrono          = { version = "0.4", default-features = false }
-prost           = { version = "0.9" }
+prost           = { version = "0.11" }
 serde           = { version = "1.0.39", features = ["derive"] }
 serde_json      = { version = "1.0.39" }
-tonic           = { version = "0.6.1", features = ["tls", "compression"]}
+tonic           = { version = "0.9.2", features = ["tls", "gzip"]}
 url             = { version = "2.1.1" }
 uuid            = { version = "0.8.1", features = ["v4"] }
 teaclave_types  = { path = "../../types" }
@@ -53,4 +53,4 @@ sgx_cov         = { version = "2.0.0", optional = true }
 sgx_types       = { version = "2.0.0" }
 
 [build-dependencies]
-tonic-build     = { version = "0.6.0", features = ["prost","compression"] }
+tonic-build     = { version = "0.9.2", features = ["prost"] }
diff --git a/tests/utils/proc_macro/Cargo.toml 
b/tests/utils/proc_macro/Cargo.toml
index 505f1215..310d858a 100644
--- a/tests/utils/proc_macro/Cargo.toml
+++ b/tests/utils/proc_macro/Cargo.toml
@@ -27,4 +27,4 @@ proc-macro = true
 [dependencies]
 proc-macro2 = "1.0"
 quote       = "1.0"
-syn         = { version = "1.0", features = ["full"] }
+syn         = { version = "2.0", features = ["full"] }
diff --git a/types/Cargo.toml b/types/Cargo.toml
index 6fc0c305..0c76839e 100644
--- a/types/Cargo.toml
+++ b/types/Cargo.toml
@@ -46,7 +46,7 @@ serde        = { version = "1.0.92", features = ["derive"] }
 serde_json   = { version = "1.0.39" }
 thiserror    = { version = "1.0.9" }
 toml         = { version = "0.5.3" }
-tonic        = { version = "0.6.1", features = ["tls", "compression"] }
+tonic        = { version = "0.9.2", features = ["tls", "gzip"] }
 url          = { version = "2.1.1", features = ["serde"]}
 uuid         = { version = "0.8.1", features = ["v4", "v5", "serde"] }
 


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

Reply via email to