Add README and doc strings.
diff --git a/samplecode/microsoft_azure_attestation/README.md b/samplecode/microsoft_azure_attestation/README.md
new file mode 100644
index 0000000..a659a75
--- /dev/null
+++ b/samplecode/microsoft_azure_attestation/README.md
@@ -0,0 +1,33 @@
+# Microsoft Azure Attestation Sample
+
+This sample demonstrate how to use Microsoft Azure Attestation to do a ECDSA remote attestation of a DCAP quote. To simplify the implementation, both quote generation and report verification are included into a single executable file.
+
+In your real-world applications, the `generate_quote` step shall be in your server backend, which generate a quote of the SGX enclave and contains a piece of custom runtime data (e.g. pubkey for encrypted communications). The sample code inject a static byte array into the enclave but your application shall generate the "runtime data" during the runtime. For example, you can generate a RSA key pair and put the pubkey into the quote and the private key is protected by the enclave.
+
+The `validate_json_web_token` step shall be in your client-side code to verify the JWT from your server as a remote attestation report. If the JWT is valid, you may use the claims to verify the measurements and use the claim of runtime data for your specific application. [JWT](https://jwt.io/libraries) is supported by almost every mainstream programming languages. The JWT-based RA report can be easily integrated into web applications or Web3 smart contracts without relying on Intel SGX SDK or any other dependencies on the client-side.
+
+Since the EPID remote attestation will not be available for the 3rd or newer generations of Xeon Scalable Processors, the other remote attestation [sample code](../remoteattestation) cannot be used for newer Intel Xeon Scalable Processors (Icelake or newer). The ECDSA attestation is the only solution with Intel SGX for scalable confidential cloud computing (supporting up to 1TB EPC; [source](https://www.intel.com/content/www/us/en/newsroom/news/xeon-scalable-platform-built-sensitive-workloads.html#gs.15v18u)).
+
+# Initial Setup for ECDSA Attestation
+
+Before you run this sample code, you need to install the [SGX DCAP driver](https://github.com/intel/SGXDataCenterAttestationPrimitives), which is built-in with latest Linux kernel.
+
+You need to install SGX SDK and all dependent linux packages with this [guide](https://download.01.org/intel-sgx/latest/linux-latest/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf).
+
+You don't need to setup your own cache server since Azure provides this server internally. Your `PCCS_URL` in your `sgx_default_qcnl.conf` should point to Azure internal cache service "https://global.acccache.azure.net/sgx/certification/v4/".
+
+Please use this [link](https://www.intel.com/content/www/us/en/developer/articles/guide/intel-software-guard-extensions-data-center-attestation-primitives-quick-install-guide.html) as a reference for initial configuration.
+
+The Microsoft Azure SGX Attestation only works with Microsoft Azure Confidential Computing VM instances.
+
+# Build and Run
+
+Like other sample codes,
+
+```
+$ make
+$ cd bin
+$ ./maa
+```
+
+If the remote attestation is successful, you should be able to see the print of all validated JWT clams.
diff --git a/samplecode/microsoft_azure_attestation/app/src/main.rs b/samplecode/microsoft_azure_attestation/app/src/main.rs
index 98cdcba..b8dc3de 100644
--- a/samplecode/microsoft_azure_attestation/app/src/main.rs
+++ b/samplecode/microsoft_azure_attestation/app/src/main.rs
@@ -297,9 +297,11 @@
 }
 
 fn main() {
+    // The runtime data shall be generated by the enclave in the runtime and this static byte array is just for demo purpose.
     let runtime_data = b"This is some runtime data";
     // generate a quote using runtime data
     let quote = generate_quote(runtime_data).unwrap();
+    // This part could be a SGX OCALL and request for a JWT from Azure Attestation
     let attest_request = AzureSgxAttestationRequest {
         quote: base64_url::encode(&quote),
         runtime_data: SgxRuntimeData::new_binary(runtime_data),
@@ -315,7 +317,7 @@
         .send()
         .unwrap();
     let jwt = res.json::<JwtResponse>().unwrap().token;
-    // println!("{:?}", jwt);
+    // The below code could be your client-side code to validate the JWT
     // get public key from azure attestation
     let res = client
         .get(format!("{}/certs", ATTESTATION_PROVIDER_URL))