npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@safeheron/sgx-remote-attestation

v0.0.2

Published

A demo to give a verification of TEE report

Downloads

22

Readme

safeheron-sgx-remote-attestation-js

img

safeheron-sgx-remote-attestation-js is a demo to give a verification of TEE report from the result generated by sgx-arweave-cpp after checking if the MRENCLAVE of your deployed service is identical to current MRENCLAVE.

Usage

Install

npm install @safeheron/sgx-remote-attestation
const { RemoteAttestor } = require('@safeheron/sgx-remote-attestation')
const fs = require('fs')

//Load data from input files
const reportDataJson = JSON.stringify(DATA_JSON)
const sgx_root_cert = fs.readFileSync('./cert.pem').toString()

let attestor = new RemoteAttestor();
let success = attestor.verifyReport(reportDataJson, sgx_root_cert);
if(success){
    console.log('Verify success, attestor logs: \n')
    console.log(attestor.exportLog())
}

Input File

  1. data.json is the input file that contains:
  • tee_return_data the callback return data from sgx-arweave-cpp;
  • private_key the private key corresponding to the one of public keys in user_public_key_list. You can fill into this list with your private key according to your generation request.

The example is below:

{
  "tee_return_data" : {
    "key_shard_pkg":    [{
      "encrypt_key_info":"042e82bf21f2e1e658ceb2bebbc2507b33d81f4d2486a2194fc3db225c5b347474a142baa3133f432be97cd3417209bc0c099e394faf4769cdc996383f49b79bee98fcb26887a68f6e722895d0bcce058bd850adaf24f21e1f4872a73677b406424b0a28cb0ac5a28608c11529fc325424aef08252ed210248c888ca9fb0158d0b1806ad7b5b32792c6c97d5c3b4171c77634fe37b63269a2914ffd6b912e77b6924c0be08ff80ead4029217e0d9124344485ad54c80f29cb5b2eefd0c9c76fff64e80f7e89142c6a474becbd1f136920e07af48073f20882654118a9b7d4254becac1bc4fa29994d71dbb5ee79bf39a5fb5a4d5447b4c082883e5f6cb455ba99c5322c6fe29acdb1338917e619d94bb41e145980ce17089ea13d89378dcda8eda04b93b0bd66f8755f6dadf7d5eeb7a611bb90dd03aae75fed08f2664e7b2f4deb93411b872fd06022697049f255947b7f34445d7101dd80645583fbd43dc1fb26d06e3cf876eb8e9953018e297dc2b8d9eefe801f11151a239ae11ade1ffe0bf246e0cdc210536f4f784f8f02d9299790fd099fa3a4ec25ae0e85732ffaa91a7808a694b8bbbd126e860a01fa81f6daa380682123dfd873d4645d21c02bed9169d13b9d0bfac6637b46cb033dc77739f1508e542b7338bad3450bc5af55e608e401c445a12aca825e92eea46a3be31ca8cf068681eadb4ea2db4cc223a73d7c06428bbcd4e885f0c21bb5beb712081d766990876d7eea124e7b4b1aa7a0b5196341136d2f92831d6e052406fd9ffd63bb115564af29937263fedb093e3b6611e95e4b9370a9cb1435cb801a154f91113749d3f5dc859da06ed72c8cd05df7c03b51cd1c5f6d6020ae469040581e00918cfdf592e688e0f0ea215d33d0222f37de77469cdc8615b69674d7389cc30b85a067263de54eb3654eb192ac2d97906a03e20bdfae049465b69cfde9cf9ece84bca150f63fb58cee539ed0065cb6746418584037b601e2952e6fa922d37b82b74f67a0b9cb8d9362e0dcd397e7af094b55a6cccb9f08e4bca460be6e21b1745f3e568542515c14e3adda47ed4a1c2ff6544c8f1a879a123015356cc3ca67a08a79cffb5cb5ebc91d8db1ac2e75964e222fc3210fec661e2067cec01f55f46a5396c6fb3b37b4e617ea901ca2ec7f22fe6468002bc029a2b7269a9af1f89e4dc5c2239375194c8c9ded8aac204ad8f536fc31b12d6bb29cf969dd0a83fa1aa27f5ac43b7216713bdaedfa43f5b04e56683c3892e6b250b479f35f527491ebfc2331e3eaf9845a68a7a0e7d8d2950086edcda25494d8e356f0ddbc902ded38fde171b4daad4e153f78db2af9ef90056e0f9434154d270a47f4ac1bee8dddeaf14dd2213f6397b120f5f28aa97358b088d47782d0a14db482c877fa1d8e3b678a634ba7e5f00b28fbed7850f42b46d0b0db9205e196e37f35ce7abfd2a6086201f9b207869cc26ce170cc448f88f6bbcdc88dd2cb5ff1f1ad7f55c9c14959b233ac77a6cef7e320185b72e65fff7fd4acc088153a4b0e1edcb0eaf81e99843752b76189aa21b954791e6d0e82edb20437c382a02c728a37fccee54a66be282a88c824ce1b188769cae63f69162a38763acb0ab079f06213966af2780ee8d1b207447d6743885756ee83084956c0d92cc0c7e0b63a71faef2a860254226ea04a14816b8db6a0ac338cd2899239a360629d4c950d0924a05fdf5bfb439af31ec985e78e3791970008b7cd4dd98763f297cb2eab340ab9d737362eae7928e24a27738e0ce5e30ae331df0d3fc3db48bb66ea54b6298fd7049ff86598289dddcbeb3142f3c58150019eb65d5cab0414f7c764a961eb9d84620e5c9f92c1dd23688d17a9b0b3d4a2a8f4dd9f47501ca85ff456aa855081f302dc6c7f7213f9c636aff74ad7eb542bfb79c89f9a7b8728d6e397f038bb2d4c36a4de77dc44dae512a711a3acdca27765c469069b21bb8b90f207fc5b080c3e124225ab87afd7a3f57b19b125fc86a56320dac22d5e308cf3071def50028ed8353468fbea50d8cb663c0b49bbe0c8281f4081902e59a9d86eaabea81a525d5746a4b43618ae4dc40d7566cac017133c3f7c0080ad72796fbdae78ef2e5aea99de60eaae8a006659ab6240c9cd44243071122c41747a37f8b60c96c0d15bd1361934b2dbedc1b04a2a552707098a405d08f434be23b1e4d6a1e205f5bd79d277eadb3906aac4e06da2fe9a2e178e91d7185711c851929a47249a41edd11bb7a066c9fc0f0242a4df8b3beaaffafb919995e2500acc4f5004a2ef37b223e22d13ea90e7ed3e09f0ee8fb05a06ef0b19b4f819ac7180e97dc9c727fa6d300d47ce6eb720d55225096156a44594dd8b776a041774545b40698475785bf2eff099bf23cf2e5da022a9226e7332e139560c0f40ec7888f6b39822541a70c7ea382e4431b7c9a027765e63d24d69f7c82e69aa7444f8186acc02606bc3854d386e5253f52cfee15a3cd908cb3dd48b31b9e9910dacea765758b920772518d2f1a73e25d2a276306a32be3ace72f4ec4ef3513dfc5acfa3e826446e8c701eec1d7e6477501c3535093976fd553206fb74c3095b6e4d96ff3f7388ebb6d27e688698f8b97a23d472f5e1a7fa3e241e739624146d378f9f6c40fce319dbb60d23e0d8c8f8523b3b09790239f0a002d75e65377ddc491e1c53e894ae2e8459e78f5780d22e40530359e6e664aa4a7045e20faeb0597803b0d3ca91832ed12d78951a440579f82c89700a798d301b5e4dfa5e79c760bd85cb11d4a82ec3d65fcba3112e5a618fbcb83c099fc9ebeeece106583702ca036e3fac00a835e77b94974607aab70d6d07fbc5b87145db4ef5192c8e34ae15bebc060779a48f71df69967137d346a2c097bf3559863e7582289b7af831ed270be87da3cbf627b68e6e65b3cc0bbc01fc7a5cedf03ea86acf171441faef391cdf2208ae07a510d91936f0b0d96535522dc6cdc81b9d9add663fcb2efbe7aa9846b070278ae9808f46b6cc0d3002d662eab5984e54738e56f1fb3ec7a82adade448b0a2b07f1dff82c8c842f3b844d71256a20d064b3ac1301b33d3d669552dbdb5619617a3893750901812d5bcf1ba4d9da5fd0fa67503c6e72d84d348ee42ddf5ce87ad7c42074eabe3cefa535aaa10097e9234d3e9295826292353e19318121080d83476dc87b83c343d5c414dbb89e06fd5fd1c8d1200316153be5930756f29215250b91e883580aa92c143726a004cbf35867148877eb58dffe9c9711ac92803a024eb2dc6a9d0d6cbfdcc1a326c5cd2e3857fc78a0610d4dec49db84c47a407e9cf934b381c59e88a01523cea0bcec09435403c920769ff3f01718c69020a0b6eb84b66f0dfea0664348d0df10625bbdabc9fade03688569489db0a5275c89a066cd5cf2b88a28bc21649b8ebdfe3dbbaa9aa16a59e4da084d098f32442b4542e5d1a40d15a8b1de2abaeebd349320fa4f7cadd1996b195d7f107a8c9bf6c7c0ff0cf33004b74cf9915907c6cf10913abcad5fecaab79f881e848a515c6c3e01dc6800b96657f5eeae8941613ca22bfd4553e20569a7453364b64b5f0ebc000338d209c500801da870e101894dd638a5c7af4796ebc37680fb1dbdad80ce1cb72fdd67cb60bc41c228c5d12c41b4b7ce5c597001e1945c786f006ba778a4b9e48292ba7e84e59db8637dd58a4adc505b88940d755b5e63385236ff2c21a0a98697e7ed5215fd27a618da46f5a8fda6bf38271db0b720659022d3c9a84aa0b21c3b3998e996f8549cfee88ee5985fe69d8caa003897cba30879149beaf8a0a4f6d74782c2ee93b68c0088c2b61d8e87ed3c5eeaae519455ab36c26edc4c4600b706c4761ac4337cceb22ae9e6c83b79ff903e0be67ae614ec936608a1af02cf412b723e26c2753083d7dbe251ba5cd6d62d7d1c1caa0bb230ddccfb248ea0099636af0da9f0c2853f68bfda27b1261318331e957c8a40c4d8ab17cbb08953b6a424d6cc43c882f891ea1223d54e74820c4262ed77c549fe9ebae8714193efe68e915fbe91708a7d2617494aa61775d4393115e821dc0b583c7e60995227d29d196269ec37f037eb45341f4dad2c67a5c76382bada52a15d8371fc3bec62a9bc67630a47ea3330e20cfe413d76c841ef09366d0fd5609f95a2ddb46f2db5f77e0277648b3205ba0011d7d3762ac4b3460a526ceaea039922f9b4e36e554f3fa6864a1225693e65d24a09f5ab7b22c925596d20ab69427d8235cf4fb8f7ec7a9d6b3aa3a5d872711b57f4c10d529518e28f59aa7a163aa12d9144ae9b336b7e2eedf849ade15dd511944d202da9bc00a92dd3dd22b3cf9c2590acbdb9f038a33a02504721565c5f592b38d7c639aa6cf7514b666533f365e5c4059c41d9d0b04941edf468a5ee200ac72cfb56fbd297e21469f36ee3dccb06426c5b72c71bb53408af1ad37158c8264a745eff5e30a0bc80fc941700dc8d86f3b105bd884a80a2ef6293b8c6bf9ad9287e2a0a626090f6665a5eb6dcc1ae783ba5ee245e8346228ccf79f020274dd797bc4b589598efad65c2e026f46421957e00d2a4dafc623eee0d04160e14814e24bf69ed34be42e637666953f53b1c1a010bc5577fc21fb8d41d2616087244598ee017a1a5fe8e63426bbeb47832a174a15c0f8ac07f34b918aa3b4e355dd1508fff85614e764f4332faa0aad50e6405d1cf536a1e4aa549e6c08bdc3611d7adea90ac5691c0e2e1bce7ca9417f24cbf255936d66e28a7d207a30afd380457437eb6c9d3f84c67faca1ce72ea963d962084a7b3001ee0bb8cb03231fa5a0f280108257866c983dd7681740fff596950c35ce26e5ff64293ead2ac14b67f3a887707b1fcb2d2de451132c88baff0f25f8f896fb28ab4e6d72e06ed5cfb04f808d3e2de604ae4f24a36b671450fdbc4a59d6223bbf6f5837e82262190ba8f7d2d66695ba0daba37f1757291c205c796d34c85ce7cecfc6c2b550f8ec0c25d6efaeafa5df768be43eac3eaf4e745a810c0e9d3ca2ec04189f1d59cb354a2465349f76d3299c94a82c5d889d878aad16a5ae7d1b49fb56e85d35e3564b54c6d40ee3364b8fd7653324d4cb3072225a0a1f29f775de1461e11253240fe73359dedd74e8728e5bad1fb9696fbfad3822d7c45909e6f6abc63e7ca5c64f7400ad37d12e160009712ee33f9000308fff95aa30c90cb746e2aaeb220f8847909867f6334711a1ff810a425c3b1092431019d03685771d9f1bb450159fc37e3533632f26e279bc8efe5a6a539bc44df93d7e5364591c1d9ead18c1ac5d357092f9859dfee457c4b36b6c278676c71ef5dd5062fca85b260c19b86ed1b25fe6de912577bc54749e4c4bc047179f55d47078a6ae3dec0ad1aadcd77b7465cd7571371ffc883d4f32529c090f59df464369c3d037e7bd1fd908695c1e4e01c2b069c107114766b751b6000fb672a52f95fa6a887196eb4517405b08cc5953ef40f0801e625fc21ed959f8b3ade61cbb7a26d45158d3e5d501f581cb7562cc9bec543620dd24b120e7d197f52fd25e916d242667ead4ada8001fad6b6635a08c5bf9daec2606a6b63eda029d95f59b06889f7d961a8fe1b4f3b29a3d79936d9abf2b619fd75fb2aa446b85ffc8147a782ac2914db214c0a618b89914c025462c4046621896dcfcbaee970a0e0fb5f39a4ff4ef490ba6966eb2992ccbfb32ec7c05a580d61f809f3420dd0c3e98700bde5911f8f4de7fff7ced2474bb6b919f6c37fa6112ffde7fdb28317b21f01105fc1a525f2acebc4822ccaa0615e8cf1948d4769a864181a1bb10cd77d96c94f23af2ff4c270cf0be013e5de6e682096267f0d6a1971c2dfbe7f60b916b574bc9d3c723b53b01398dfd2be97b4b45da9b298cdcddfb7e2a8173d4c002ac93f5de147dbad0d8db66dd0cfbc3f18f7fa0c50d7e635e7b56bba1d56dabaf35ebb69977b8743314672b7b1c8fb8e3462391c44f40a0466806e03eaf53249e10f9c565dda453989aa0a2a247b2a56cc6c3042bfe540612728d271d1c8b78f8b22229eeec3bb9480407ccc4a1072059183559c22dd81c07529018b157b487346ae777681beac6291e4e26dbc9e0e6e6cfa32a89c64fd39927e6d2a2b2a49ad2cece5d681d76aff9da5c7a2b5a732caba3cd6f419ac0ab6119fb3e5f2f2274f446540de100a1cc40af8de16ab735f5595e8fa1a538b9f7e5a5119bb1a3e089cea1aee90f1cb681eb9c4f4d2f2c5fc38f314ea061be436170c7caee1f49af05d211f7a1890c0ad1344d8a79aa43e0e4f7b8324f9699c648e8198ec49bd59ef2d1fb504851735e44a6849096e7cbb525753f4b5b349e76806727b6354d989e47e9d06de30e253010d9b4fc7b872e626bcccc430242377fae773714e377dc49da19eeaeb1bd0e3289049761905ae959152fba58e83a1ff305fd00bb0793bb35aa4e46c39e247ed7b6a6b51e3ab7662ff168404a72f3ab5783305f19e53ab65163f4f51cba8959572691803f0b5ee68080ddde6a9ab72127e0cab9cd639a6f7efa7145e64c399f01b48d459c4ff17d138d03b5fcddac61a45963afffed431dc1b0694c634e3ed220c2dc5f98e49c6ee741510f3cf504a40ad43ff8ec80453675436772f01c745a8db7dc3c0b7e537b24355ce2ab7bf6f26c0d1635f926d7e06aa224dec64ceaecf90d8cc9fedfe24c4bdb4b20b6268921fa594ad950b2606afe34adfe30d489366f036532906ced7989340eb08cce3e688aa7ec90151fee95134986bde7bd97252ac52e991c6e87a6c90ee02d196f429e4ffc667e5fc9534ce77dec955b4f574d7bd57286e1411380fde2290b045306ccaa4d0d139524fc5030e1beda9aa7c9b62cf23b36217388f22a56ae702e074699aca1b343a36558c4eb8f7849336f297c783f4931fdd59f6252adf57e83a47d7dfbf50f32fb7d772e88aa1298f4382583d0567c42ed84d4a34dbc1e839c276a58f1f61ae72f2c64d7257d4a5ca7ce0c0e3f6dd0245b0ff41fdb1c17d4896d99d2cecc11619a784ff712091d56eb26c9109152f4eb7e32501514df9af78db76e58428abad325c11d15f403bfbcb1ce3dbf009967fa2adb4ce5516b4a7a824c941aff8e1992ce0774c9887ef36b11657b00d92e278966741ea23007fc2d603bcc3aa0f2e08a79f90a9e1940aa8190ba102463b541470745da2736c1c5dfdb91211161cefc4615eb109f093120f7ffdf69edc33dd3c7f62426162366027be2dbfba8211af0ad5f962f6b45117808766d829a670c3c3099def440816e1708a6cc266d81680d5b49fc0417a8fcd9d071a3e263ad3c49fde0c4e73c0f709eda61e950467c0d0208d6302820b6e926297f6dce34f9ecbe377130ad9c05ffebb4080dd81e1387f469ab2180dd9d8b66bce7e86f41bafcf4888cb04561eb4a9e9a38cc6a400124f7842e85ce07ebad801b4a14a317a7add97a7dc88d418424becb87b91d2860463fe94f5a899802993feea49b1dc567d45b0910f77fd973dad5b0cdec8527331e73b1dbdd164a0add496925ed8c3b07d9a530330cc32928876ccb898193caa030578a089f8e728c3f3ae725f97cc91be5f91d4602ec7bb08a7174bfa5f9e74e2f59529e73c7eadccd88894c61fbb1a22c4b162d27fb79e7c914667f6f3a2b67b68b07d80b77470ae8801360564be4bf62afdad8fa46e5845fd8ab74c34aa5d83bef96d1de7f518975b5efdd813c78d664c4b2112a69f76f9ee52fbe407ec0d162b3115f4fa6715a92e902866de6961fade6c51f84d9e29744a71a49b341e4ffacef550631bb3fa51b378ca6f12fd37100aa5ba6a534772b4b8df8f999b083ac9e3064cc8ed541851abea235e4cb91d486283b1e362385cc8c167a92dcad876c107350a5971aeb37b8a78452e0823a65c2c0957c38f3abef75dd21f40bbb690eb1c8c91676126d1a379708ef1b36bc06f3a5d8a5456c70bb55dad9e2e210f1e4079b74d9b676466093de9ef5865cd57f75df35ef3a9062c5f6846db9226e8253844d3e89794581ab032158f0ab80b79fe85dcd139e3ae3917c9cb13d8e8a76c5f9525894045d407ff042cbcf0b29a04964ba608ced01a5dbb864175cef1029f9dba46a7f467fe7dce154a879f7cacca5b1c857e65d15c968c58761b8dcd7c31ae57ad6ec5bf7dba8d2f9c4b291a1a48b0809f997977e3e157b5258354b1a3e84f4894a78731e0a26f303373eb250ae1bc49004dbe4b7abfad616f7d00fb34a4815d74455e8932c3ca71d7238f007b38c184ece5181f9df8124022d48b4dcc951c1fbf93491010122129bfe11eda32d103f23d6e23853e40c9ffeb555042fa0543864a881f7b5a08df165864a9b62f25f40f5886412c95d54eecd26c706741b4ecf5fb09aa810db29c1d3c046f79825eedbe5bf778739e8471bac2299184c4b2424d7511e7fe101c3a15266500e081ed33ee30178a4e0d75caeba688967aa3495d782ba9d16d1a7c4a6cafbf010664f39cd0d250c280d3b7f23ef3c2379b90f5e87ca644e38be7cc4124f446ed44f8b2cd86178b92b2b191b57d1d4ab71c3348f5b333f5d26505a605c4c26179c61605d106f584f0e4823883a667cfa93ce5d24cbc9fa4bfd878257c4d43e9aeac7cd540695866af5f192130d79603481ae2362b1f1e0c180215ca88d34fc735b739bd4f3e8d046cf63d6d6cee155e2baaa2f4bf1b887b7f19d0a7580d11d1a3560fc60ff906335184e4f86757c14cc5c9aa1b576cc8fa814ad7bb9b16b318f2a260c8d644d3cedf22708527c9126ac4d35f868f8d4b7794ce3f2d34139712035046d47d44be066f71a9940268a8cdd3c5d515bcc9e49e2fb61630be3a3b1cbc3880b7ad2926e05a04eb892491d801645b08a294720bf6c779deb6bb2dfdcc52e7482dcc2c4164bcbe681eb33fd6574c41e61128d4afec208fd224f210810d47277b25a4775b52df0b2bee4e7e886a64f5e99ba60643c11e57952831f2ddef6ae7bcc1814e8de523fbc0f59271396905dae3fb17153efaef59433897",
      "public_key":"040195512a7c5b82adc4d6d09de70d8ac3c6a5c8f07b0ce8acb97537563cc6c7e7c015439637c7d5e34d60a62245e275d1627aa49c6b41c9d7116b62529d62972f"
    },{
      "encrypt_key_info":"048e3afb3c48bcd6afa58dddab8448306a22a9fd9f9ba980621d06caad1adc11df26c39b27cb995a76243fe21423e59cb7b9d635ed350626c907d6bb4a6763fb8a6fc5eaf17b90d66ff675d1c52c8ffb45eaeb435ee160a7608e833f5f8a7fb45193b9dbfac6c764d049e6fa5209b69665eded4883dbfa0a4d6b05b74704ec865c9487c2192c2394db99fbaad90aece4a36c395e695f03dc1ed42709619091c1b8da3aa733d8433b4dbc0974cf6595ad8c883a71794b4d5790fcddbfb720c4d3f4b2d9db73224def100003eb1285a6c3847de4c86d5eba3abac4fb5c52bc6bbacc9b96067fe74054bb50c778d8183d6be760c1f3d800ca155d29e0815296bafc78a00385df4c4ac18ea67fa0279c59c8204286ba1467ec13aa21f1b484c81b59cc554b52abd3b4a56cf18d66d086b044a33dabbb1751c05715b7fae7c10a6b6ac052d28830e2849dffbdd7f718a3760a29f08ca5ca27f9ba19fbce0a1b21ad1987fcd7e60195c51b37272cf09dcf2aba627b0c1546a734c4819cb92ee4d839b409a4984abfc29af8d1da317e7e489e2221e657f7525412e3bd46da9ee695bc41e73d9e0cd6ac780f8e60f544ab9ea9c71c91e96b57ed93866d5c3386f148054cd480ae96cdf2c0a67a3f64e6545ae4b7bf9ebe7934f60546de21287ceaa36b61dccc91d86eb90941de91bb9d9b8a2022d3d556bd74fe8edb10c83002c803c803f1a831f2c32f4984a6111609d9577d719e75cd21907731d0699e0a4459a9f6a37be83c2f52b07bcd973ea4a456d51543ec89a515f01043ec8db9b32ae283260838d748a222e0daa90a180b51cd7a693befbf36892c17c05b8e805b3a87a2bdc3e91d6786213fdfb65b05397777cb6e349282e8540417a260f529faf41fcb853088ae23d928b7400f2d674d7df26fa9d1b0784a6e2904551c20180d61ae72beb44a52d5b19a9692c82dab7745467e40be482c441bd30bb39ded25fb8ce52146c603ee7f69ff0d1d72e33db4512920fbc79dcf3d0085eb1173e5d31783742d0a8e71e07a6c1270a5b3c03a15f53f1b14afc40b7b1bafd571306d8d5921f54b728fc78329454c42f73ed1f964007ef9d28552d70cf12149a7aa9f287b6d0240350ff4b574fc5910233afe89d8e06e177abdc084a227a6140272da9201f32844845750c64647f94da315ca3edf4135928392120558f7c355d04907e55f1bb5066fd2cd13bb0e2598b26cf8f6d6be4b158341abcd0307811681d141d5b8c0f7e645ffa0917334f87503b0b726b6ba3f513aa0447eb845aed4bb89486b3f2201c47c3a3fa85e26f46bfb43295bcf29ae5522b0ac173487ce5c894784d5ce84ada73e1fee7bb90f760df2b96b550f6c29537c286dcbce2bbf89b31feb95de7f71a18b333654f8cc2cf4be4ee82b70780bb6cd4e8f2cab738315f2189f7ae18a788f816cfe182019334b6dfb89e1da8a1b5e8d45cd475c9e6729a342387fe9143730ef22e02d9255c8419f6950d47f41d8c34cfdbb7d3bab59ea2741e94cea1e135ea42324f10cd487b9b4d940f07e6661cfe429f7d18decd3421ebb6124191bc2f411de7530deafda02dc6b39a5c07c2dee969a3561ec45d4ff04e80c36f2158dbcf95f3475fd516336ec39e1dcbfcf820951d59e30c1ae116b511ce0c3e3189d060cb04c4f77426d3646fd4147277ab339f04beefff0c9297cdf67f2c20c0048c7a6be3152e9c5bcb2008314c147902fa11316006742920d04de77e67f02877edb0d06b224674a6a7a49518751900d9b0356f10b0ebe2b1c2451518482509ccebedac4b4cac6829ca1ac41d7193a6bc9e547d65464bb88d7358bcf541ca25c397f3cfc6e38e7d78188cd20def4476a0fda0ec45ae7a70c25b357d6044553549354d1f5232af04dec930f16d24a94004435e09132b1021c24d9c36a2595c271e8ff6e1cabbebb8adb9e2ed168f839448f8a85e9c22be13e444da70c02ff67446d44461f2b4fecf65fa361bf42d54d261b0540be76d88fb9d1eb03af2d5e18854f2105158d0ab06d281675ed31222e2362a3f2d7d08626a96bcf6be7f5a1661103b6fa8d10f1d9dd4308eb8a3ba12a2668ab4aac18e76ba634e2c88944d565e92e19ebd2fb817594f5aecceb5a5011f1d2f5b5612de40947b9c4d75d8c967b7c44f7804e59d223bdbbc764e4967bccff6a262c976d8083a4aa9203d046580dfeb783619d00c0827cce7ed765d9aac554e1ae421b867dd6904c8f38da1aff0cc9b21b62d5b6a8400a904ad3d494f406302c2f35b436da3d23c59ff3cdc632717266e007e02d3a2309e6fdec10c7542835a4b64a32161fdeeb4408575744e8491e3d5199edbe2196194840f2b6ec68c240d7ce6c4a21a87949d5e33630d7248eaa3c75c0bc7f22fbaf33cc17e39b9169a4cfc033877fc32874fd9809cdf5eba497efe4cf699804a62aa58087db293beae3f7d8db67d71bb9c8aa3955cf77e235577b13bf2bb853d93b5a60956aaf79767a95f8506d36c80c03ebe37d14c0750ad4e1b6cc07aae39ebef9190ed4f6e9d31b7dee95a761e2004e7e766fb771741e6d5fc26f9137541c15f5feed3513a3b01979a74dd1ab3585dc57345430dd4db2f720463258f02158eeadd958bd97957423ba5760b6cc6559fafaf9f0c583524c1e5d93944fe2297ef63e6f7df71a8be1d8ef349ff984f66886eb97acbfebd01f0e47632fdcb225ea20859ee5e21c052ce561ac1156e3f94ea681c1db29bc5ffa235a4d591caefaf7e407e1cf13d5712c033b958e17126fc182d0a446a52426796fc54f808c2856556e2634e47e599cf39c7c62736afced9e934f7b1004257f4a10f757b4052f10361dcbe7082bef10593a195923d698ba99be0ca8b8f43bed15b23590288225127537af5b7f18cdb029b108857ded57dd343333369ca6ea5b7b299782e3f0ef8567d737f455a39663d6586ea141ecca9ea867eda4447be84147ad59b9eed546e62601a2796d517a129c78908f7a6ec3e8be53d3805a28177fa1205973685c1948eb193b3556cb6636574bec45a43c37c5ee9d9430df8615c57af0e26549bbdfc42c7c1ea4a85fe695590ecd06e641911b08233e1b25efc93d0c150fd14d7d37c4a18709e3af8a2089c9b92c7bb3a9ed80ae5e4eff4e35f75312d12ac79d7cff2c445407a853cde504e9cef9bba55dfa83db6638f475144030c849a0fa0b212379598f0614db4a2b66dd737ae9f540062657d0fe35b159e26667d28b5a16f0faff7abe2f2da849ff5c464edc6187a3a52a3756e1f0ce4270c45ceffee9f1b983b9f56e5e74015c9dbcb88d85e7fbe6761b7d1d6f08576d24d354e31e3920f72180b9a4b6c3e65c981fc0f286a986c24fec3b019d46e6b28c23b3dc596577c8db3ebc741dfac060eddc5097dafcdff4b151e66aaf43d01771ff8e85854da1a3db475b40c738d42272ad07d707ab67477e00367786292543fd41b8981dd1d845a959f361340cbfd9147cb15bbc38c728f3e82f1a1c8c88d3bc0848c2d12788d5b67fa65ef08f79cb7c68cb5f3ce282e379899e7ecc0a05e3a9b9440fa0a84b0dec53fe9bd7f39f3f0f1c5b9e0d5c68beff4b6c6fbaf2da785f066879aca56c36c078fdef377cee6294544da2e778cc0c05683dc7f47a32ecfed6a33db6acb6ed36c2523049fb45a4d374d808f2aa8438b918d62faee231b62696b5f90f6ab6173e9411c5ec15aa96b7d28679a19f04e002b9baf7e7cfda288212f90c5b664b8fb1df31dafd70d9da4e5885dd214e9c1b7d369393cf0b99046301fad7ee3accbe70493390bb6291cca08d0d134e3fa590dda37c65b9f197d88e94f6c9f033a709a09a613c220078b419b2dbd5626168139788151df5540c8fad89c3dac0329afd87b9b85f9916f90b3e57f35ed0335fb055a3228ca5b5bd82d14d225b0a715b4180367f5f387f0aca652c040d2297155fadcf7843ee1f8f3cbaa154e59e79bdb0f9ebff5ed872a20b6e1b8051704b1192f5d9662a179bf92aa4542878876a71e0981f37d4db51932fadc955730576b6239ad7df700660b6ddb7c840750315bb50be0efc6dc68182474aada021070fd3a7ea32c55cc46e604674f98c9fc2c52205b55aa992cc1602e7bdbb6b33649f348c8776572ad42977aaaa440abf0025f05bb5d3e2f1ea2dc636c26404b4dc31276a402663d60639aca8a22eb557841ac9c9d902a88ed1f0b8ee3b45094755d14431af405fd72c74fe761e0ecab303c1aa075b3ccb1695a4e57b0ead77d94533dba2a5342900c28cfb958d12ba82d0f4ce3a9a3457468b3ddb8a98f8081cf72f67aba77ce5c355974ed137cb818ecbf0c4f648ffe1978fb152bfad23ad677ef4b0e1caf6364c4146f51ef76ad8b3c6ee0e5bf11c39dd562b072c40d7ded5bce43eec244eba8f7ee99ae0e512638064327633fcc0dbc144b974e567ba0ce94d378f039cc3339fa257a02a8b262836c40274fa96567ca0cdb64022b3cdbfd0d13dba116db5d9dcde1cd05020da8633b1b7ceb041750627983c72dea03430c3294d011a819346c0c82ca686d6fd105db26bbaea1aa00a2b2dee7766f139dce4d8dcebee9a3ad76ebe5ebadcc3cb0dc57068778e9fcd6b56eb8f69d421577f146dba2f539186c2e857986cd4124b0c2bcb52bd43339cf617efd72e6e5106edf5a0865b7921bd78f8b548b507d8302bf26f787f3358d8202ec26282e3fba425220c950446e3d35b2cdcfc0fc719ebf43c66d458c3d675e62052f6d545483dd134781f16ccd3c0a3cd6cc9676ea7955970196fc3a044eeaed892b8a3a2361521b807c0ecbc242fde0f17da36ffab883fcc68fe76e7306507e3397297f81bfa1872dc1d0e88092b7d591b8496d98e2dfb2a4896d194de36b33505d928b36213195998edf7ecc6024fa1dce57db5a36cf8f51845f52700a8263e2d05d8338b69869cd9725cac58634cda09160896f0c4c7edb0eea613f2f6e3d160893c557d706c911bc99275b9bfb6aec3df452a62cee7d38215d360d99c2e50bcaf0d6baa241563f135cd0c142568954a7606008828c35d4131177df64be82b87dc0d450c093ef86850c43c8326ee0391b63883c9e4b901f842abb8cb6252a62b23f8970063984b5011bc7ae56c3f46a917c5130b6a0064972178af2f3cf024aab2907523e894cdb81533cb4b4177568b995c0f6124ce923f4f32cdf5f3c702f1ecb4f54db660c9106249d3b1b149df3661bec176472abd77503afd9c09b8ea7dcf33e42efc2e17e6b03c9ee12ad62ef066f1ba3ce4498d274513f3568b6ad9d07202b55b9b281de882da89467e68dcdeec81ef49932a1cf332f1f233bf05aafa8b88845181e54df029277b7e334aa610fc47779691f9d6420a6ee104fd7ca8aa67718012d0a2adf6bd3184670cfdeee195c37770d6e29af50144c3b30c50b68ac9db95c976f5c897880dbd3e80cbb3d19f495f1bea847f4ec92a45403cab1cc3c4d2f86524441911d67fb5d9a2f0e78c637c259b2989a5c38b5a74c645a4b9d24cbc9c953274d071d7d6947768616c13d4180088b9d01b045ba1ae4b1d7368650d44b7a270f9dc281f45c420da629d5b7cf054880fd3880503dc868bc07dd271c3e2410d965395cb8b82cf9fb53076a8b9867c8b83231c9ee0ac6de1f8e82e94299f343aea0e45607e31252bc0ff859f958562c32525534634975e1fe7e6b72426a7d655e4dcd116640cdde7c91a4e6cb757ae49053186f6d3f6962325b7f5792789add7bda007f82043214a7a1cadfcf8dc43fd4831a67a1fb364238f7127686616329b753187c836be232a3ca96065643f835ce22770c940fea1ff43543483b6939ade1a15ea2bc3489c39429fbdf4a0dce85db9b33a71db9806fcc58fd4eba8ff547a62bd81e541e3ae9e19f18bf36a847833cd19541315aa4e0dcc734274d2644202516f77a84457885a8cf9dd728595ed6743681429f465b8467d265c00363636bfc2c161e0cf93606758a1eb5bb3479a84828fae5bf2e7f41e9bfde428aa8aaae0620aa98c9a60ecbcd5cf33cc9b387f36b5b86370cfe22a23e4c30d9e33d543be8567ecee10aa47a3eee1a223467c11ee1e425d045e6577eb094fe58b0a5b3cb9cb8a4dae1463b082e7f24c68212b6ed7cafe614c61e106133e04c2330d4449800785b15118a0514534cccae685800ec0ebc54d26292f6fe0409a6af45beebca59ea47f716349ac8c3949a2fdb1870acf7622cf96a7b64134b57b5d0bf2881c50dacd4f8811127fb46e420505950c0c5e7b7ca1e169c08248eada53b1d0d595076050d702b3ee3bd9f83d638146766bdb162ee61d3c8bb87617e815672e40f038cff3af8678339dc7487b9781ba6f35292624fbfb7421f71ea4526a5c5cc63ed278bd2c4fb0092e4d36bcb23971c61f489f07314639e5fb07c93bb92058976890328395e12aa79c30f37c5dc8bfc7ee233eb3feddd38cd4a564b8d3e9a518b43ba2230f218617b5496db035413e80362e604f9e31081f494ee84aab9d38b15ae659cac1f40fa9abd68403a571026917ace44adb1433de55651b417ded6da86d3c21a5e5dead3d26d7fd28fef1b402d4cc28959b9314ba84e03b78560345564bcfc7a0e4f311bcb3039c6569462c5ab9ae36d98cbca3e9fdf3742c3a327980a82ba3a3312dc9a8e91f5f358c10b10c4480318fa11d2746b8faa607ec3acdcb8df2f059b4059e30bb719eae4714097be08519b0dd3c44473d06d2e7fe9e73281d2fbe6629c4951f4af938e3ffeea8228f8858337e1d5c5a1bb68dc44b4f536610e77c354a2590c0c5164fb315518fb05913cd8c3df2ebb90148f50b8cf53e37d1477001336d2d685ca6a19b0a7c90f9c1a35c45b50b487d45c0a957bf19d8e7a1f8983a58087f469d44e597a9cc7063cab7cd37bd520812e5c55ffd2879634def89c85f96f50cfed4c4524d91b7bec69b28fcc0ef72934f24bad9f12753be62f84f53352f8a2a4d09f87c940714a311f14790748a78df80f23e11ab64d856b477b752479420e1959576760dd396da3611158e3a8fef844e840b07c19949af54decb0366e717a22d46086fe6c761c73784018a895423479546d35f33f4799769b5f41359079867ca2049fc590b32d7a53ef4eea2af19a576738397b84da46b1bec5d6df5d07e717aab65621191c554acf220973f2de1251bb3c365a68ddd030c10dd5a2c58049abc93e29fa429a1c6b02cf3dffea1d76ff062ea4e9ba7a614c6a88ac44e634f122633c161525e84ecc170056a6d414d2f6fd06c2936a949bfaff20afd0023be27891c611dd298d260374178d69578235ebcf2276a3aaa05bcfe9a9d8e4f4978ccdfd02b2abf39c630db0607180f9fb14320df6053a1687fcbce3310ffecce5b24d1b83fd9e3d6b35c01ab5288a93a96d5f500976783eed366652603ccc65fb0b5b427681f55bd55391fd621f044832224efa6ee51fd2bbaafc9acd8e8c84244144629fd5bf0b31398fddf31a035d22754afcfb0ee64e701f94e6c95a4378ee34eb8099233cd2846a4fe606ea66ea4583d25e7dd2aae0c2e9100e4e28e35ce05d6e1907af1adc9f4dd1e516cfac54a10b2ca49660aac0e8e84e73148adc06becb10362330db90fd68b8bbacd7bc4edc1d9f65c0fa2981866f8b7a78bd666ec8e0031995c73d9e0595c713654aa0ecf7deedf1dc15c9d48d244be56bf6032687c2c568f81c75dd002eedf7b2b65b32f88d86891f6b94a7f4efff498badff13f0aa902837d0fbf3cea095f70d598de53d263e2c6427ef9b387167eb5f3bb0a81d88c11215cf3853adca2c60807bda83ff62668955cd874e44e17a9138c6a86387d7d8224e1f1178e0277da0faad2aa22b17bb732d09315e21860b8f7497f21955c33251cb3cc1140af9cd275b53cf4b84d84d7913a908537d8e3e477df3590ddd6e44e21c34395270d2ca3ffd2f3185e684eada2725734e54f93d00f546ab719c4014f49b2458cb885466a7e3d009925e06473556ed39d7795207c0860532a549678fc84e31c6f2e5d9139971abb5da2f3d06a599fb8a091836b1b5f7463b5aeb96d2c08179a2cddaadd062e2d7aca3a85c8fdbf5be28309b453cbb8395b252cb6052b639f7d5f7a90f07e8034720ffcc513c624127381fc6f978d3a7355ff40741ea5bfd0b7ba081856aee6a97ea0e0329235e94f274dbe3afed43a1a372237f3c04e09a4fac9639a6bbc58798e340c555e3df5155d0721b98a5820799cf04da2330aef97c9ebc68e5d5658838ef6e1b347d04b74027676996c483c70ae32d724a084d3201f094e42fd6dfb65492570a1e32a0e84d407cd20684e20ddb592257d03de318e691d7aee759c10349fb8c86ed87753bd1de6a951c96d39e2d7b07dece6a62bb250a7f5c884fce9470e22a5de940c263893d6013b6fd8efcf6ad841626fa7ce5166010cd96bfe1faf0c290a5894706f36a82a0307daba64a7d0cd85e4836244831858f171e75b3e216ec29d01a8f63ee492df992ef3efcc505fe6f8af6d0dac542a1bf955dd6dcffa8b61eb69cdcf1303324b0f4a689d8d5eddf3c7a17fdc96a404ee7abc9c2d6ca0f3dfc008de286b413a00f3df561c3b5458e6e304a425b88c5c2989240ad9ed67c54a973e5e3abcb1315641cb500655d3fdb25979310f5b3340eb8090ecfff75d36ab9478b0401753667255fc6ae0ec74fa611ddd2b9f4461b5e87b7705359013f1a131d2ebd1709c7135025551b96ed53ff43772b5fef7835068c9b4410a4c8787e419ec2839ff96e7ce68296dec7ba4a5410eee4acfd9f1e1533290d74b9c8eb6dd37a69b489f9a97a0b4720412cfc22e0d7e07f482b11b5e7dbfbf16ee588f15c89ac7811b106047ec3fea893d1fed0710a683070dcf5765532120d88116f9c4c80b639daf707a894c9f4571547f7cebc77ac5f9a000d75de87a55c6004372148dffd99f54fe1c09f2d492eb7bcb24f9bcd97b74a462d91418e57d124051ecbbea862b7f5810f37ceac57ebd4faeae82e632a391be84d746cd19af6601816a9f846811fb3e8f9f",
      "public_key":"040d11a3515ff8a6fa3dd203ab3c91b68847e7b6d0458df88d4079a87e7d3061144cfa7b7cfa53d34b205450293aec1c2b78dff3960fa5cb6b15a0dae418ea0266"
    },{
      "encrypt_key_info":"0447c610f65d3abf16dddf9c04a2398abec1ee4bb40551afbdf1d556ed1d3436bb32144c6f8786ca8c0388955f06cbb38d1be59efcec23c029416ed4cd4fa5362691580c9302500a74c63f3f2da02c63e1dc1f279653fbceff03daac356becc12f2cbc3631bc28f7a0f847eb4850006451e62464e079d6486d731bf3c6e636fd52da33c6a4e91e7c457f2fbe74857a286083e3e2d06956cab6c762711f4fdf9e1d02a65caac222ee072441c064d8d231b83cf290ee544d944f9a3a8b12f12e949e73c0a626d05183910b70ec8376415661a6ad99970129096b5db5f02bdafbfd3d0d6e1bb9815c129fc7e21b4357d20da7d745978ff4ec2f0c85a58b8366a355edef93203c4d9a7a9d694a36ff7977305c060bddf886104046f02c0ca32a442383850af79c740974f0206b0f9bec39bf220091cb55df832778f1ba3d1b156fe9deba2e56f5e2f81b7ba5bc6f4f621d51127d584c938da20850c819e71f192b7d388e556b86cc4d4b494c785348f85f998549bd77e65d8cf3e5da65b141d325630bc2681137b92be0a010fa2219ed4b159402a6849a41a1ef01769f30f0693fca18b0012d9e5c7b3595a4190d6eec34c831cd332eab376ff0c6b2aef2457df757e72fa1bbdc613a564e3f7d35f946526c0e0e79a5a574d765d4e90d2b64f1e21a401cae13dafafbdb42ef2ab41a54fbc39fe0a48ece66a9a9c53d46eb1687ed18442e665af74cea370de6d0f2ce66dd04324f895fbb1b6d30a954a06cd938f44a49aa07d76e9e878dcade6d7ff7fe1eff2173a31f4187a22ba42c0ad97d540018b1e0fb10604c6cadc84d089dd50a60f4d3bd67fa19f26fedc10b7e629c7e5860f06e169bb2cbe8c8849ebb956a3be43d21b744c76dffd084185ea93e4204e979e28856a4ab832b52ef41d10711ced6bd1efa81579faf7c5dde3d55e8786a8ea479ce79002bdf46ef73c8cd19b455c514c695739130e8e8b89184399b403f29794fcf9daf71194614273800138912812e70df2752f4000abb56d394704c21e643db17209445cd92b131baa10de00b264fe0c36e22f8454e1ade49ad6e226020ed3b2210af032e0b9e56e870c06809fab19237f0600b47ee6657f73c2017bd7ce380a4561fd72cc96de2bf1f67e07e3bd2b72bb634a8ee0f69cceec8fa6752427d2b09974f33c44b97c077514660242a87e38d0535210d69490ee1de8cbe1cc62a64397badbd188809598007c266986b354d44f9af71053b506a13fcdf7ef13315ae62bd68524b598dbedceff7cd7bd9fde84e31c1b5dec455bc2434a60a3bef4759be750b44be73122708bbd8b980e5af03b2857fd60ede5c3b91c2107009660f512bf6521d8e252a23d72234987489649e23fc2032c74f7278a9b98267a0f08bc49d93069749d69a989aab9f91c734c47d27d64c96680bcb356b1451c84d5523fa3db48fa475fac4c28e30a3914a3d25e19d8efe67c95918494c890045445aa3ffc66486f97da7de4713cc9f55f48dd56666fd12a113492c624cd0a095b895231b0cc45c13aa45fe964e07df1d7b45c430f482193022ca32485b8f9c1c862b32dd0a5d9568e19a5869c97ac042ba537c06a8fa81a3eb6f5b44869f0390e7d0f1b282f709d61c8ab8c5b7c361791d32dcbaed5d52d06cd5092d9f80db0bd9133002d1152e1c69454ab5c5bc970288c79c20ad3c2e120b36cb87c7e536eba5b6ed7ef0db58e0eae0d8c450fb5a3b22af9acc25e0ce67a4e502197a1e5217a6482415f3cc486bdae76ffc49d60d75958664f5f936dbaa2f2344e4c1153e32f562daa61783d65b4fb6292dac3fe862b12d2622e6bf92e54f4b4e84480afd9e883e736d2ca1c19c6b73ca83db1a312f1f4445524a79d01fa897089b2f55d9ecdf850363cab88ecf7e42fcf5e37636d319fbc543c04933d18f094382a0d001ea98b7fff289ebf4ee0fc5c9fa769ef4a105277794fa7a6bfef60ed5fa2efd20f735b804364dcb722ca5202a0f7300bf51cf44ca65bc5d5beaea74eaad9845bfdf1079b0fc82430a04be9f5e9a1043aba72f164e5e5c63a5a2336438be0cae596c92c3dc5ed719de5f703beff59619d5a361e07ce883957a192434267aa7af7e9641c1ddd15963aa380c0b6fd2d0fd5fc1dc984bb8020c06908af017d6715e9c79e01638790392d813de87a873477273e2c2574a44d4fcca2c4effac3e89d7feaebc868f74549122af51c9d1259534830f1c60dd38fe97a1a7b35f1e9945379be12b961aaa0a7daaa8909ba84829f2d4517a794aaf220fd0d7f71662b447b1134fb167eea356a191ee583bbbc69c181e59dfa1a349637f63dc5c67dd0c5a4831d47cd14e86639fcfc38855c476133ef91e4444f9e2bcdea790231199e8c6465b0e79f55a302cd1261462fb0dfc9818930e31b82eecff18f1d3941d2bfc1b3f2c14a6ba47495f21e001e1fe216a2b38a1ab26b14756d4a2dd69fbe1662fb6264ce9da4865cf151290637e61294a839fc8769318f9b2984cda60bc360e541766efb1be5f5b2c4a61298982a6743b40f5910619b10ac5e1635a1a81b8a58c9eacfca55adca134289c3141311f79733da1f909c200c491e05caf3f705fcd344143a0c7f48952136434a0878260e31922d85de4fb13b586c5f161ccfe2583f91b0d545283de0b1948014b3149c02b98b9a7c6321753059719e58ab843424b71f478baff5101c5405fc66d3f01ddb554acde3ed1ca08c6ff2a4863acfa248acf086aa5b34b55b51648d34a64880bf9825529f8b1d1e9e8111921cf9a54c207e787da38b3d6ebbe2dbd1b09d59025c35c8886de35328c39a084796f1a1a84f5995b64fa88f45a9d921e6d42ce478aeb5fd4f0d7e35774ba43a8ebafe696419b455eea0ad73501eaadccdea0ae82e56fcbc6453c426286bcc88cb92b7b2232d337a444f1955da4e06d871d83efb52e6029aaaa2347ef378e2a47b662ddfb4203f80e7f289e2dfab703ed4f47b755a4f6abfc48716e0684fb4095d00875a029652ccdb03c7ab4cf16c758dad06b3695136d00aaabc4886b0b87fd9f104eb1a0c8577b6718b962517a0fa7a48522a004f9d92017cd91140e0aafcf0373394f21b318db34e54d94630e60dde9506bb9737a24c1b2e86aeb74087787c67bff6651a0411acfa2fe5c538b59e7c94f63fd91c4b7400f6b887fe98111b88b3013741a25ccf990613a6df791ebf4f727547c0f58c3713f7cd31444319eed2897809af8010adb9036022d45ff5e8704fa5c07c75b39c7e67673d8f3d86bc76bef354e47e6ed09909f9d290ec26004e2eb7d951aec1b9c10d580fd12ca3a17df4f02fe13e1fa9794ec994fc1476225a2a72b2b2cfcab703e210e3848c57e34c7010033401a0f13afb1037bc3ffe2a6811290daaa54b3f3e1a46f7905d60c8fd5262b71ae223e611cfba0b9cf2fa1991b4da5a424bdb5cf6b923a374a2d98296cd45ef244ed771140ebcdcc00e68feadf5c73594c15cd158557e89f778f24b800b8da6eb7841f21e474f17721972bfc7b8ec7fcf0ecc6b8b5f653be12fcb8d6bc19d487e9dde98e25df4db7059671db151fd15fd8ad18096f4e61e069c2c35a0a05a23c3806d8e94e5dc0d36d3185db4693119fb671b8cfa7a385324c25a99d5cbe493f3720def020be67aa7f1f0489e60a0da6d1544f6b330a1af3f2573e6546170cbc448480b7f7d97ca6a0f75c9ad2193fe91f7520f1d772891e9d290591e456e8ac5b975bb05aaf0378ccfda407f61ae2f16d5f44424dec983be9a2b51ce479b4439a64eba781fc2d91a944bef86336467ec04fb0990874351cac7fe8be5f4e947b04a3b1fe85c2960645176c849b1db47883f25d2a76f3f0995a2d4bc89c7f86d0720c4ad2c62be9ca693de64a2d69dd092cd2ff57639db53e727d4be6bafb206b1b4f34459e4d762d2a07766feebd6cea53d30f7a19567dd01e464596cb20e6c9621cbf9607c47f99615f0e2a115f8dd5457fa5d55e9ae27ef429e3289af2681607f6587fc20819d78272f055e63ec212c3cb4fb2a8f747e6bb71c2d29dbf6781cab372b74d72e780960816093013d495d03af5ec6c1fafcc03d91b82819ea161b3f00d7c1d6c036b51bc6c88dd60b2cb125f0ffe52553b3c65d61e0a0cfd9045c3c1aa19265d8b9476cfb2ea2ecd29b8a5e22a82aafe8c599a4fc658df9c7e37fbdd19982c4b491bef9d900fecd489b9f2be9a3de6e973d838be8f4caeb0216e7f9c7e8b05e831bd69fbd64fa25116d7671b87ae932db1dd02f50bc57fd12f99280d1660429d773e4a12f243ca4de84c880306eb76dbf44e9b0e6bf9bb9628149afe297e3a171fb08f8674be3fbd52ac978d8ed50850261ea7d92947906e24f1bdb3d0563255bc222fe437350eacefc50138b1e03cce48c94ba180588b95ec26befad7bc0e991e08fa6cc6a421a55dddcc9e0415c21e7c2c2802aea00ba0ba0bdbbdbec0122260f0b6ffe6d4537eba54a3696956a0099ed0ebcf03a2c236e59273cdc2ebccf168547719b3a0c2007b4e1b1c9559cc4ff342f14e1c61aaa41a45708f212a2db97773e60a95114e20a53a45a0261814c3f73459007fc654bd91881c69c95a1dc22c02de5a5e880bcbe242242f98e8dd3b6c7c0b1d7b3d3cc0219e004f358fc0b697b893de762aeb655704dbc790f2ef187e1452c828bb94b11bdf91b5b7bfd8e652e26910c3eff7ff4e2a7acdf01cd8a7d6d76e4f2e80fc6476a57fd479c2d9dc878f0945bd7d1a0625974f112d6390b56827d52fdb40aff887fd90b97b2a66a95416bc6f6204f7d63bb231872c51788573fe0028a2402c9d9b4a57be6e782ffb4552348b4f9abfcb4e5d4d76e4f57f361f0c190c668a3a02891fc4996fb7e77d9270956b5597de059f15fef864a3011a497a9ea4290668ce4ee55536c46e43986a502bbbc4db831425b88ad1459871a7fa1b697cec3f6ed0bfc5f5cb83ce70fbe468323624b49e2ae6132a0e73afc0dc036fa81a2c6279a75c17a206702d0457781024f9d047963274cf1e7494bdad18d73d5f635be022c08cbdf2ac02a10b227b4831a769b28bdda7b588af28ba0b30f97fce7b1d2b1a16e6e6036c47c95aebecc76a261e2e141c90c53e4db55e190aae1fbc45b30a928e26743b3c6feb4f36df77bc169f4eb7dc63c13e86e7d6f812a61589ea43ae93b84862a590331e980bed170b0fc08eb3d3c525ff7309c33dce2b7682718988b5fe895f14bed1564d7022764b23d190e6343c67e74a103ce10c90da969f5612c5a6110bd850cd4103fd884739b6dfd299f28a5f3233f349129c99e227baf67baabe194ac2610bd74cc405072b0ee5d9ae6a05007b14676b6c15d8797b0d6d14bc54ce762dcbba8f04be3e205c675e4136ea4880d3c758ff6049cbb2e6fee244fa6653bb4c76d89471e542f6aeb7bf7c1e4bc3081a1282b1fb6614bae3668bab5b9117653debc057be553ef7c6e5a53f914d812fa7bdb74b2bc9c8a0fab741f6aafa84fc77c41cb7839722a3534f236fe4405c94dfa81836e0a0e26b12580d3a9aff44d2843ae694fbb46f433c6cb21651c6f60c71580a712217b9847abed447a931d626f519521c9a6b46d15b9a98e5371bf1ddc965fd686be4f3624f40d771fac46655ecf56a69afd6f9f03d9388caa4c76f435137553e7e5e1bd44fb6b389aa1603500a396ea53e044458736a16714e8c272b1d4638a172cc37793dd4eed9f8348d03c11104211c5d41b9ae72bfdfe68ecf3db4a9454d969c21974d70b77b452f5a3055c015cc6dc34c3aa213f2fbbf96b24027878fe5e837c008935c12a70f5bb115861a952ee664f2a85e0035a9b216008004cd0c8c3af6be293e5bcbece5a4fc4eb7a6fd49c636662c2531f1501f2aa3db25a7a2d85af79a460e902bea3f42b243b871cda4ad3141762641726b67664ad33e570ac263aabb47b080797e8bb3fc89d9c716b52a7b4532d188083e04ed1c0836ba7f5be58766078791a6cf7faf51682e4b87b9dcf586ce93c26bc5b5a6539a82c301033f71c9a377136cc725b30d53df8887d38e56fafabbd7df304d8dfacba22f45703cea9bdc340f6636b0923b514104a69ddae2ca216d9cee8dd816f78c98b05b7822dd06417e2f89547ce685c7f4f89578f60a3a20427fa6c4cdd660672292c9d40170dc402240d17525d5a81bf4999dbd25fd29154305d57a5bef596094d72eddefa6d33cfe165799bec74db540586bf1b007e0b5bac66ebd897e2938b6d648eb50662490361d4ab040092b8d93f927b0b26aff73d2a6312ea71080f0afbd83550f7d5a467d142b30a51608c3ac90a8012dbd0bb9cbd78bea493d8d87922f3db90aafa35eb687656a00f4d0ff92894049d09f5268f250c5bc9328fecd8dd1b0dbe797e1c3d1d141a06881406d4d9829e6ea14da2b91e01faf400378ec0811d91315e1a59017912e84bb041b50d73b7cff028c59f4f5e1fe3d6b53576f7555316ce13bf6d9f7abe9f0d27c54fb434c613e2fe14cf9bd9836f3e2d21550a92d07ae2c22902d0bd48d1dba492acfb23a2e6ed6b71baaf3c102acd74fe7c4e317dbfb6f7c2a2b2f3507eb9532d74a4c5a75f3826670ae49d35bc8b761ea267a273208ab22c9fc64a68b78e8b7fb77b39a4a55dfc9d7caabbb95594bb442068219d96ba4cb6c893ef53027076e505ae9ae7f8df6dd760ae0a6c519ce4d7fc2dc584b5a53812ab6b7f8b3f5e16392baf29f3a55b28cf6c48cd5765912a29781400fccde7eb53bf5513963971a7011210f2307509f039367b50041043db77b7f90e6859b772040559eefecfb73affca66c79e9d3a55994e550b0fce9e5fb1b769e14e11f171bbc26e3f37e1edc907d86b9728483094bf168e976dfb2a75286d19597d4db4ea1d917aa8b616fb6ccd55bfe52fd93e380cadc5b673ecd19ca7ffa55c92792b9de12e586c4891fa2d4f72c245f3e0bd7294a539141f4a96a37858533e3162087e746ca5e9133ad404c64115ecabe8bce3ac65de3b0a8c526522a17046fd16d0c1dcee3f1ab7b5498a4154f94c7ce8216ab89bfdc5c955839571ce813360b84fca92cf24fddc7096d7d19c7dde85a59abb575d4cb47c6402496c541b821605e692e1642c186267f90691fdfe881402ab2cba9f41497ae558d64810246b7d1a6e51fc33e924de558f514b5b5fd703a943211b754074808f3b4d3195369d26fa47137b284268fc5b1eb773f878b06016fd17d6bc0fde82e87f5a87aed1761273aca492fbeb653cfbf3860d79b177974adee55bccfac9cec2026ccadfbbdfe691298d33d62cd46b935d2bf522676a480cc0672020925543c11629dbda671e51a77bfbae1353dd0d8c78edd409e653ec96a54613214db31776a73cb29f20a8058a1258255881c8b6dd225e9aec461be2d88363edbc91a356a5071a10a26edde53f01c0fe53d483d21a75de1d3ed90dbb50a1ba72bc450c778598ef274dad06a57fb73517c309473ddf39f82679198dc2cf1d1ee8943e0c290a4802886e75155f01e69a2ecf278085c7dbc4ba12a142ba530b17cc17c4ecf0748c7e621b6c69d4ea0a55558b271fdb7871468061232f80846acda76d11c949940d6f3bb5532ea061d7aae8e2fccab0f705967e4eb53bb33d949fc008e89e1b2c0fda2867fcfbbddd19683698f463ff1ade72880623ddff664876155e9a0f6dc7280164595a29a567d75822af77d72666f0565c9557fc0e01346990f9849bb57ef9b5fcc549e91251e75a7fa2f54e76c50ee56327164299bbe86dc75de09ebe385ff3a8bc9bc943d45592ca58db65a1ab7648944d71b41eb99f7826416b9990c74f40bbb4a6b82b529b6310c8111bccbc3938415505fb4789585241e742b3df89617f8a4180263b515b2b8e3cd9f989cd571f3736a7eba9942946689b9b1f7689ca71df46c9f134adbee5c0a8b744c4e04440bfbfda9e3f710994a44626a55cc69de6f9e9a4ff464e203579505eee78d5ffc4fe4f3eaf313de9f80bcdde16cf92852b548e1889f721a89568b3ccf3e138cee7a3903e57d1b5f88d8c8f4d5264da0d1c3914e290f5e6f44601b3733116200574b03abd50f6e8399c3fc54fad4c6c45d3769d1a55b0d79ce59b5b9e2767ca691ea2737ec1cdf913344cdd3a8caa7b0c644436830bce1d1e78fa5a5ea161fe1c3dadde623bbb32175c0ccfb99b971e9a51c9935a25a9345af8ca214329b94825829620eadb7dc95567bf8fe97bcaa526d47bb3a9833a25b18db6f8fa1e92270212608e778a2b1d231d09578f3a5c9ae745c6adfbed47fa1773c318c130d3a07097835fa31e8c2e200b0c9b12ffc2d2e8ef6838589229e5833532c3c92bcfea31de657255a5356382ae885be4cc399d5344af3782dcee432ced2343f2c9080c14fbe4d83984788f5a610b182964c7e6fa2bedb7cd890a0a54eb5620ff17bf59b929b79d0a20bd7989d354a31bb15540d53bc257233c6412f59505f271373e7a3362be79b071bd5d08c55f97b5c9276e9e97892ccc1bd787f457b9b288397c3d218ee1be1d9a4c58f974cd016a47209326cb3bc4c2cffdab3a18bf229a0a7e32e484aff9e44f91daf46f9e1ef7aa1c5fb0506ba908c216ea8e3f7af928f3b7b44050432502174db4bad8659e63e1cc5b19a8e2cf32225934328cc49b5084d08875307a740840abb74ab88c81e4f5d167329bde533eb22be82c72c75f39e59170abb4deb80b910518c9492937764400203717eafd4c3110b8653284a920bc4626ec6c4a41d5105e4018b389d05fa735014624f4fcf79247b8637c973ec82c6aee90b0fae2a1bfe6e341e0e0fdd4ba84d1f5e33ae15060e7812b1c4b6f13d65793af5aef5d7275b51c5bf6380c20f1667cbc3aec9161808d35ab76eff8c911cfd9978879c16a59a6198a37667af7fcf4f089a877e348bab18cb81f8fd2b259f950740104c55b55bd986df8a9359fb6a2ad449e6334b39337bc2480450c3be59361209f1c986cc47b225b8b1fb9140f35b16fe8ddf0f37479d737abb77ff8115a2cfd944bc2f9b50d87c9d7dc0939c87ce",
      "public_key":"04c89aea349bda56a20561fcbf5c0a57b1e7d3dfcb9e77dfaabce30494756f151f819e7837440c3ed9814a053a4cbfc4532abbb598007142e0b02639a58ee5010f"
    }],
    "key_shard_pubkey": {
      "e":"010001",
      "n":"6C9811C8F189C4C47FF8E38A0CFF833533FDB383E2661A86FC9588716B93823E86C9812B3B6275C742F8C4B13AE7CCB03B0CA6015406526ACB807324235B65DBC45FE922966D52A119D37C2690B242E184FC7CA82B6D2BD8B551DAF2E157AE73CBCEAB037011454833F23BF527A94765236EC0C804D0C6AF5473F5F1FC2A1C058BA554A491EFD144C6FA5348126AC939B8E5A54E1DC9FE3D717C6FD72CA0A7C5997B7858C882A947B5A5BD0A09C3C067E95F7372BB20D065279A58FF9B7DDB23BAEDB5AD41D33017F74FD6F0F55E9E47ACD96D32864DB7E1B5A00E880742AD0D1645C183CAC0E809F9BA9F8D87A8033A600FA21EA8415DF1D12B013BDF1B5C41F566D4B0DFBD794B6C94BFB3DC0BB6476977368DB0D524D3E230DFDA39E61EBCA6BB827FC2C320EF3B2C1E76DA19753688CB7431E10A9405E02E85822D7AA4F96CFBC55D3B39A56FEC32DE4F9C23C5CAF97B3E15B2AF55AE0E418BECD6481468AF15C611A8BB80D4AB58F2CC78AC8B366BCAAB7AD5C33578152C15E1BA1F71EF6E5635F575AE361DCB6DAF8AC1919185D1FD0A54F6D1573D173805EFEE4B9E1B0DAC6EB736D23EFA4346251CCFA74DD510EDED4A1535F7D2BC120C3A109C1F5AC2690A10F40BC4052C11269759900C98A95D70F5CF154D4AB26FD252E95245001277D70765F72F610393FF10A8C15698DE05E5D97A30804B9D043903AA8E62D9"
    },
    "pubkey_list_hash":"086cbf5bfcf17816cca5abd702ed2c9aa117daf72ec36efcb421355f884a5b6a",
    "tee_report":"AwACAAAAAAAIAA0Ak5pyM/ecTKmUCg2zlX8GBy2X2CVjiLXgeJBLN9tt8MkAAAAABQUICf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAAJ10XzmtNvKq6LsJk1Uxg/fMX9YhuInu++7SIjssx4rpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACD1xnnferKFHD2uvYqTXdDA8iZ22kCD5xw7h38CMfOngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJdRudfJxE62v2B2VlbK4Fs0dwFeubd5mOQg84vG7/hwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyRAAAAGE7vxHWYi8RRzvzPkufwRZZ2r3kRl7caOuhbZIh9ul4WELa/gduvsx2Fz0EltiRd7F798J4pDNC7/kRGbVUtNWCTJNIRm3aaNV/6qNb3UAUROcpUCJAi3X2ThBPgpekDoPjFZLiXT3rw/3e71LRM2plquj0fEDeT9D/Uwa3wNZBQUICf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAAIzlhoW+NuRhh8Izx+me1v5127M/dWetohewd+zYz4L5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAviobr5ifeZ36aGOOvp3ILx2nE22vO0BfITMPO8L5lpQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoyONiw+63coueJ2csVsFb9TCXeE2DUbWSG+w13LtEfQd5ehEKmjtpcvEJZQGKsT5U5B9PZ5517x8PrdosHo9ZSAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAGEOAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRTlEQ0NCSm1nQXdJQkFnSVZBSnoraFR4ZzV3OFNGU0tkY2xRU3djMWg0SnBiTUFvR0NDcUdTTTQ5QkFNQwpNSEF4SWpBZ0JnTlZCQU1NR1VsdWRHVnNJRk5IV0NCUVEwc2dVR3hoZEdadmNtMGdRMEV4R2pBWUJnTlZCQW9NCkVVbHVkR1ZzSUVOdmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUUKQ0F3Q1EwRXhDekFKQmdOVkJBWVRBbFZUTUI0WERUSXlNRGt4TnpFMU5UZ3dPRm9YRFRJNU1Ea3hOekUxTlRndwpPRm93Y0RFaU1DQUdBMVVFQXd3WlNXNTBaV3dnVTBkWUlGQkRTeUJEWlhKMGFXWnBZMkYwWlRFYU1CZ0dBMVVFCkNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVkJBY01DMU5oYm5SaElFTnNZWEpoTVFzd0NRWUQKVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSSgo3U3AvYmllL3IzNndJdXloTkNIYjh5bVl0OHZ5NllIdGJFc3NIOUl0bGZZbE5SS3Qza3QyNk10NnVnZnc3S2lVClBWeDVTTzJXTGw3MEJMVGk3Q0JQbzRJRERqQ0NBd293SHdZRFZSMGpCQmd3Rm9BVWxXOWR6YjBiNGVsQVNjblUKOURQT0FWY0wzbFF3YXdZRFZSMGZCR1F3WWpCZ29GNmdYSVphYUhSMGNITTZMeTloY0drdWRISjFjM1JsWkhObApjblpwWTJWekxtbHVkR1ZzTG1OdmJTOXpaM2d2WTJWeWRHbG1hV05oZEdsdmJpOTJNeTl3WTJ0amNtdy9ZMkU5CmNHeGhkR1p2Y20wbVpXNWpiMlJwYm1jOVpHVnlNQjBHQTFVZERnUVdCQlE2L1N5VFF0QkRVVHV0NjdRc2NMTFQKNmpJRC96QU9CZ05WSFE4QkFmOEVCQU1DQnNBd0RBWURWUjBUQVFIL0JBSXdBRENDQWpzR0NTcUdTSWI0VFFFTgpBUVNDQWl3d2dnSW9NQjRHQ2lxR1NJYjRUUUVOQVFFRUVPZ1paN3dqVmJheW9pcjJqU0VjbzFFd2dnRmxCZ29xCmhraUcrRTBCRFFFQ01JSUJWVEFRQmdzcWhraUcrRTBCRFFFQ0FRSUJCREFRQmdzcWhraUcrRTBCRFFFQ0FnSUIKQkRBUUJnc3Foa2lHK0UwQkRRRUNBd0lCQXpBUUJnc3Foa2lHK0UwQkRRRUNCQUlCQXpBUkJnc3Foa2lHK0UwQgpEUUVDQlFJQ0FQOHdFUVlMS29aSWh2aE5BUTBCQWdZQ0FnRC9NQkFHQ3lxR1NJYjRUUUVOQVFJSEFnRUFNQkFHCkN5cUdTSWI0VFFFTkFRSUlBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSUpBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSUsKQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlMQWdFQU1CQUdDeXFHU0liNFRRRU5BUUlNQWdFQU1CQUdDeXFHU0liNApUUUVOQVFJTkFnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJT0FnRUFNQkFHQ3lxR1NJYjRUUUVOQVFJUEFnRUFNQkFHCkN5cUdTSWI0VFFFTkFRSVFBZ0VBTUJBR0N5cUdTSWI0VFFFTkFRSVJBZ0VMTUI4R0N5cUdTSWI0VFFFTkFRSVMKQkJBRUJBTUQvLzhBQUFBQUFBQUFBQUFBTUJBR0NpcUdTSWI0VFFFTkFRTUVBZ0FBTUJRR0NpcUdTSWI0VFFFTgpBUVFFQmdCZ2FnQUFBREFQQmdvcWhraUcrRTBCRFFFRkNnRUJNQjRHQ2lxR1NJYjRUUUVOQVFZRUVCbTlBSmpiCjNack9VTlVkclZQYWFtVXdSQVlLS29aSWh2aE5BUTBCQnpBMk1CQUdDeXFHU0liNFRRRU5BUWNCQVFIL01CQUcKQ3lxR1NJYjRUUUVOQVFjQ0FRSC9NQkFHQ3lxR1NJYjRUUUVOQVFjREFRSC9NQW9HQ0NxR1NNNDlCQU1DQTBrQQpNRVlDSVFEam44MXFSTVp5YVZVc0JsTnREcDEwOG5Nb3dHZGJXcGdSNWdrUEh4c2taQUloQU1ObnJrTDlDWlZrCklJQmQwamphK0x2TVhDc0RsSG5QczBISUV0SGZVTkdmCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNsakNDQWoyZ0F3SUJBZ0lWQUpWdlhjMjlHK0hwUUVuSjFQUXp6Z0ZYQzk1VU1Bb0dDQ3FHU000OUJBTUMKTUdneEdqQVlCZ05WQkFNTUVVbHVkR1ZzSUZOSFdDQlNiMjkwSUVOQk1Sb3dHQVlEVlFRS0RCRkpiblJsYkNCRApiM0p3YjNKaGRHbHZiakVVTUJJR0ExVUVCd3dMVTJGdWRHRWdRMnhoY21FeEN6QUpCZ05WQkFnTUFrTkJNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4T0RBMU1qRXhNRFV3TVRCYUZ3MHpNekExTWpFeE1EVXdNVEJhTUhBeElqQWcKQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWcwpJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4CkN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOU0IvN3QyMWxYU08KMkN1enB4dzc0ZUpCNzJFeURHZ1c1clhDdHgydFZUTHE2aEtrNnorVWlSWkNucVI3cHNPdmdxRmVTeGxtVGxKbAplVG1pMldZejNxT0J1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTCkJnTlZIUjhFU3pCSk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnkKZG1salpYTXVhVzUwWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVbFc5ZAp6YjBiNGVsQVNjblU5RFBPQVZjTDNsUXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWHNWa2kwdytpNlZZR1czVUYvMjJ1YVhlMFlKRGoxVWUKbkErVGpEMWFpNWNDSUNZYjFTQW1ENXhrZlRWcHZvNFVveWlTWXhyRFdMbVVSNENJOU5LeWZQTisKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
  },
  "private_key" : "888A66B32CA04AF04ACB55E6F64643CB8BEFDC96573F905EBF82D7B6FBA131F8"
}
  1. Intel_SGX_Provisioning_Certification_RootCA.pem is the SGX Root CA Certificate downloaded from intel_sgx_root_ca which is used in the cert chain verification. You can substitute it with your download version.

Run Locally

$ npm install 
$ npm run test

Content of Verification

img

As shown in the figure above, the contents needed to be verified are:

  • The report data from App report and QE report;
  • Quote Signature;
  • QE Report Signature;
  • The cert chain in Certification Data, the cert chain is made up by PCK Cert, Processor Cert and SGX Root Cert;

Process of Verification

  1. Verify if the value of public key list hash is valid and calculate the User Data;

  2. Verify if the cert chain from Certification Data is valid:

  • PCK Cert: Verify the issuer of PCK Cert, the signature and whether it has been revoked;
  • Processor Cert: Verify the issuer of Processor Cert, the signature and whether it has been revoked;
  • SGX Root Cert: Verify the issuer of SGX Root Cert, the signature and whether it has been revoked.
  1. Verify Quote Signature:
  • Quote Signature is the ECDSA signature from ECDSA Attestation Private Key signing Report Header and App Report
  1. Verify QE Report Signature:
  • QE Report Signature is the ECDSA signature from PCK(Provisioning Certification Key) signing QE Report.
  1. Verify the report data from App Report:
  • report data from App Report is data customized by user self, that is User Data. In this project, report data is the hash of concatenating public key list hash and key meta hash.
  1. Verify the report data from QE Report:
  • report data from QE Report is the hash of concatenating Attestation Public Key and Auth Data.

Example of successful verification

*************************************************************************************************************
The public key list hash from data.json: f6fca699eae08f95900e06744487f421a9e516c896efb72af4a7aad375c30636
The calculated public key list hash: f6fca699eae08f95900e06744487f421a9e516c896efb72af4a7aad375c30636
*************************************************************************************************************
1. The public key list hash has been verified successfully!

2. The cert chain has been verified successfully!

3. The App report signature has been verified successfully!

4. The QE report signature has been verified successfully!

*************************************************************************************************************
The calculated user data: a61d3b9772e4391d3459d704bbb44cb02a6a7efa7e50069b2e2deac0956cdce6
The user data from tee_report: a61d3b9772e4391d3459d704bbb44cb02a6a7efa7e50069b2e2deac0956cdce6
*************************************************************************************************************
The calculated QE report data: 2f8a86ebe627de677e9a18e3afa7720bc769c4db6bced017c84cc3cef0be65a5
The QE report data from tee_report: 2f8a86ebe627de677e9a18e3afa7720bc769c4db6bced017c84cc3cef0be65a5
*************************************************************************************************************
5. User Data has been verified successfully!

6. QE Report Data has been verified successfully!

Verify TEE Report successfully!

Development Process & Contact

This library is maintained by Safeheron. Contributions are welcomed! Besides, for GitHub issues and PRs, feel free to reach out by email.