nameishua / sgx-arweave-cpp

Safeheron’s TEE based RSA key sharding service.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Safeheron’s TEE Based RSA Key Sharding Service

img

This project is an HTTP server of the TEE (Intel® SGX) based RSA key sharding service to eliminate the security risks of generating RSA private key shards in a non-trusted centralized environment.

Contents

Service Workflow

img

This service provides two main functions: Private Key Shard Generation and Generation Status Query.

  • Private Key Shard Generation: Generate the private key shards and generate a remote attestation report. The request is processed asynchronously and will be returned immediately. When the request processing is finished, the service will send the generated key shards data and the certification report to the specified service address as an HTTP POST request by using a webhook.

  • Generation status query: Query whether there is a matching task currently being generated based on the request ID and return the query result.

Prerequisites

Build & Run

It only supports Linux now.

$ git clone https://github.com/Safeheron/sgx-arweave-cpp.git
$ cd sgx-arweave-cpp
$ mkdir build && cd build
$ cmake ..
$ make
$ make install
$ cd tee-arweave-server-0.0.1
$ ./tee-arweave-server enclave.signed.so

Usage

Configuration File

Before you start, please modify the configuration file first. The fields in the configuration file:

  • host_address The host address of your server. example: http://127.0.0.1:8008;
  • key_shard_generation_path The path of key shard generation request to your server, for example /arweave/generate_key_shard;
  • key_shard_query_path The path of key shard query request to your server, for example /arweave/query_key_shard;
  • log_path The absolute path to store logs, for example: /root/glog-arweave;
  • max_thread_task_count The maximum number of task threads that can be allocated by the thread pool;

Generation Request Details

Interface URL Example

http://YOUR_HOST/arweave/generate_key_shard

Request Method

POST

Content-Type

JSON

Request Body

Parameter Type Required Description
user_public_key_list String YES This field represents the user public key list, which collects the ECDSA public key of each user. Users can decrypt the encrypted key shard information by using their private keys corresponding to the public keys.
k Integer YES Threshold numerator.
l Integer YES Threshold denominator.
key_length Integer YES The length of the private key to be generated. Only in 1024, 2048, 3072 and 4096.
webhook_url String YES Webhook address. The generated results will be called back to this address via a webhook service.
{
	"user_public_key_list": [
		"049f992995affb335b576a7186316fc0ecfcca3d88f78dfb00e0e76e1f9a9766135230831442e4b1975f2caf81756a250032ea5e165ba1631606795be04a00d42c",
		"04e30cd9f1283b95251e2721ee6f1fcbbc6ea56f32c924c0000f6f4e6a91d474dd1ff40d39fb8601b4b4066027952ede10e2d144f1b3aa5b2b1bf4210f4cc93e3d",
		"0424c0853bdcb04fb8d50eaaa779f2c0d5f01c79b30b58f6a2fe739070e236cd142e32b8114f06b60b46b00f39745c874e8297ec9da01366927ac199072a103356"
	],
	"k": 2,
	"l": 3,
	"key_length": 1024,
	"webhook_url": "http://127.0.0.1:8008/webhook"
}

Example of the success response

{
	"request_id": "A1A37ADE5CA49998",
	"success": true, 
	"code": 0,
	"message": "Request has been accepted."
}

Example of failure response

{
	"request_id": "A1A37ADE5CA49998",
	"success": false,
	"code": 536870913,
	"message": "Error Message"
}

NOTE: The duplicate generation requests in the same period will be rejected. This service confirms whether it is a duplicate request based on the public key list hash of each request.

The public key list hash is the hash of the concatenation of the public keys in public key list. The elements (public keys) in public key list are sorted by ascending order.

Example of public key list hash calculation

Before sorting:

{
  "public_key_list" : [    
      "049f992995affb335b576a7186316fc0ecfcca3d88f78dfb00e0e76e1f9a9766135230831442e4b1975f2caf81756a250032ea5e165ba1631606795be04a00d42c",
      "04e30cd9f1283b95251e2721ee6f1fcbbc6ea56f32c924c0000f6f4e6a91d474dd1ff40d39fb8601b4b4066027952ede10e2d144f1b3aa5b2b1bf4210f4cc93e3d",
      "0424c0853bdcb04fb8d50eaaa779f2c0d5f01c79b30b58f6a2fe739070e236cd142e32b8114f06b60b46b00f39745c874e8297ec9da01366927ac199072a103356"
      ]  
}	    

After sorting:

{
  "public_key_list_sorted" : [
    "0424c0853bdcb04fb8d50eaaa779f2c0d5f01c79b30b58f6a2fe739070e236cd142e32b8114f06b60b46b00f39745c874e8297ec9da01366927ac199072a103356",
    "049f992995affb335b576a7186316fc0ecfcca3d88f78dfb00e0e76e1f9a9766135230831442e4b1975f2caf81756a250032ea5e165ba1631606795be04a00d42c",
    "04e30cd9f1283b95251e2721ee6f1fcbbc6ea56f32c924c0000f6f4e6a91d474dd1ff40d39fb8601b4b4066027952ede10e2d144f1b3aa5b2b1bf4210f4cc93e3d"
    ]
}

The content needed to be hashed:

{
    "plain_text" : "0424c0853bdcb04fb8d50eaaa779f2c0d5f01c79b30b58f6a2fe739070e236cd142e32b8114f06b60b46b00f39745c874e8297ec9da01366927ac199072a103356049f992995affb335b576a7186316fc0ecfcca3d88f78dfb00e0e76e1f9a9766135230831442e4b1975f2caf81756a250032ea5e165ba1631606795be04a00d42c04e30cd9f1283b95251e2721ee6f1fcbbc6ea56f32c924c0000f6f4e6a91d474dd1ff40d39fb8601b4b4066027952ede10e2d144f1b3aa5b2b1bf4210f4cc93e3d"
}

Hash:

{
    "public_key_list_hash" : "f6fca699eae08f95900e06744487f421a9e516c896efb72af4a7aad375c30636"
}

Parameter Rules

There are several parameter rules you should concern about:

  • The number of the elements in user_public_key_list must equal the value of l;
  • The value of k must be less than or equal the value of l;
  • The value of k must be greater than the half of value of l;
  • The value of l must be greater than or equal 2, less than or equal 20;

Webhook Return Data

The generated key shard data and the certification report will be sent to the specified address defined in the generation request body webhook_url.

Example of Webhook Return Data

Parameter Type Description
key_shard_pkg JSON List A JSON list to store the generated key shard data of each user.
pubkey_list_hash String The hash of the concatenation of the public keys from user_public_key_list generated by SHA-256 in hexadecimal.
rsa_public_key JSON Object RSA public key.
tee_report String The remote attestation report to prove that the service is currently running on Intel® SGX enabled platform. The report is encoded to Base64 format.

The JSON structure of the element in key_shard_pkg is as follows:

Parameter Type Description
encrypt_key_info String A string encrypted by the public key of the user from user_public_key_list. The plaintext is a serialized JSON object which contains each user's private key shard data, composed of key_meta and key_shard information.
public_key String The ECDSA public key of the user from user_public_key_list in hexadecimal.
{
  "key_shard_pkg":    [
    {
      "encrypt_key_info":"042e82bf21f2e1e658ceb2bebbc2507b33d81f4d2486a2194fc3db225c5b347474a142baa3133f432be97cd3417209bc0c099e394faf4769cdc996383f49b79bee98fcb26887a68f6e722895d0bcce058bd850adaf24f21e1f4872a73677b406424b0a28cb0ac5a28608c11529fc325424aef08252ed210248c888ca9fb0158d0b1806ad7b5b32792c6c97d5c3b4171c77634fe37b63269a2914ffd6b912e77b6924c0be08ff80ead4029217e0d9124344485ad54c80f29cb5b2eefd0c9c76fff64e80f7e89142c6a474becbd1f136920e07af48073f20882654118a9b7d4254becac1bc4fa29994d71dbb5ee79bf39a5fb5a4d5447b4c082883e5f6cb455ba99c5322c6fe29acdb1338917e619d94bb41e145980ce17089ea13d89378dcda8eda04b93b0bd66f8755f6dadf7d5eeb7a611bb90dd03aae75fed08f2664e7b2f4deb93411b872fd06022697049f255947b7f34445d7101dd80645583fbd43dc1fb26d06e3cf876eb8e9953018e297dc2b8d9eefe801f11151a239ae11ade1ffe0bf246e0cdc210536f4f784f8f02d9299790fd099fa3a4ec25ae0e85732ffaa91a7808a694b8bbbd126e860a01fa81f6daa380682123dfd873d4645d21c02bed9169d13b9d0bfac6637b46cb033dc77739f1508e542b7338bad3450bc5af55e608e401c445a12aca825e92eea46a3be31ca8cf068681eadb4ea2db4cc223a73d7c06428bbcd4e885f0c21bb5beb712081d766990876d7eea124e7b4b1aa7a0b5196341136d2f92831d6e052406fd9ffd63bb115564af29937263fedb093e3b6611e95e4b9370a9cb1435cb801a154f91113749d3f5dc859da06ed72c8cd05df7c03b51cd1c5f6d6020ae469040581e00918cfdf592e688e0f0ea215d33d0222f37de77469cdc8615b69674d7389cc30b85a067263de54eb3654eb192ac2d97906a03e20bdfae049465b69cfde9cf9ece84bca150f63fb58cee539ed0065cb6746418584037b601e2952e6fa922d37b82b74f67a0b9cb8d9362e0dcd397e7af094b55a6cccb9f08e4bca460be6e21b1745f3e568542515c14e3adda47ed4a1c2ff6544c8f1a879a123015356cc3ca67a08a79cffb5cb5ebc91d8db1ac2e75964e222fc3210fec661e2067cec01f55f46a5396c6fb3b37b4e617ea901ca2ec7f22fe6468002bc029a2b7269a9af1f89e4dc5c2239375194c8c9ded8aac204ad8f536fc31b12d6bb29cf969dd0a83fa1aa27f5ac43b7216713bdaedfa43f5b04e56683c3892e6b250b479f35f527491ebfc2331e3eaf9845a68a7a0e7d8d2950086edcda25494d8e356f0ddbc902ded38fde171b4daad4e153f78db2af9ef90056e0f9434154d270a47f4ac1bee8dddeaf14dd2213f6397b120f5f28aa97358b088d47782d0a14db482c877fa1d8e3b678a634ba7e5f00b28fbed7850f42b46d0b0db9205e196e37f35ce7abfd2a6086201f9b207869cc26ce170cc448f88f6bbcdc88dd2cb5ff1f1ad7f55c9c14959b233ac77a6cef7e320185b72e65fff7fd4acc088153a4b0e1edcb0eaf81e99843752b76189aa21b954791e6d0e82edb20437c382a02c728a37fccee54a66be282a88c824ce1b188769cae63f69162a38763acb0ab079f06213966af2780ee8d1b207447d6743885756ee83084956c0d92cc0c7e0b63a71faef2a860254226ea04a14816b8db6a0ac338cd2899239a360629d4c950d0924a05fdf5bfb439af31ec985e78e3791970008b7cd4dd98763f297cb2eab340ab9d737362eae7928e24a27738e0ce5e30ae331df0d3fc3db48bb66ea54b6298fd7049ff86598289dddcbeb3142f3c58150019eb65d5cab0414f7c764a961eb9d84620e5c9f92c1dd23688d17a9b0b3d4a2a8f4dd9f47501ca85ff456aa855081f302dc6c7f7213f9c636aff74ad7eb542bfb79c89f9a7b8728d6e397f038bb2d4c36a4de77dc44dae512a711a3acdca27765c469069b21bb8b90f207fc5b080c3e124225ab87afd7a3f57b19b125fc86a56320dac22d5e308cf3071def50028ed8353468fbea50d8cb663c0b49bbe0c8281f4081902e59a9d86eaabea81a525d5746a4b43618ae4dc40d7566cac017133c3f7c0080ad72796fbdae78ef2e5aea99de60eaae8a006659ab6240c9cd44243071122c41747a37f8b60c96c0d15bd1361934b2dbedc1b04a2a552707098a405d08f434be23b1e4d6a1e205f5bd79d277eadb3906aac4e06da2fe9a2e178e91d7185711c851929a47249a41edd11bb7a066c9fc0f0242a4df8b3beaaffafb919995e2500acc4f5004a2ef37b223e22d13ea90e7ed3e09f0ee8fb05a06ef0b19b4f819ac7180e97dc9c727fa6d300d47ce6eb720d55225096156a44594dd8b776a041774545b40698475785bf2eff099bf23cf2e5da022a9226e7332e139560c0f40ec7888f6b39822541a70c7ea382e4431b7c9a027765e63d24d69f7c82e69aa7444f8186acc02606bc3854d386e5253f52cfee15a3cd908cb3dd48b31b9e9910dacea765758b920772518d2f1a73e25d2a276306a32be3ace72f4ec4ef3513dfc5acfa3e826446e8c701eec1d7e6477501c3535093976fd553206fb74c3095b6e4d96ff3f7388ebb6d27e688698f8b97a23d472f5e1a7fa3e241e739624146d378f9f6c40fce319dbb60d23e0d8c8f8523b3b09790239f0a002d75e65377ddc491e1c53e894ae2e8459e78f5780d22e40530359e6e664aa4a7045e20faeb0597803b0d3ca91832ed12d78951a440579f82c89700a798d301b5e4dfa5e79c760bd85cb11d4a82ec3d65fcba3112e5a618fbcb83c099fc9ebeeece106583702ca036e3fac00a835e77b94974607aab70d6d07fbc5b87145db4ef5192c8e34ae15bebc060779a48f71df69967137d346a2c097bf3559863e7582289b7af831ed270be87da3cbf627b68e6e65b3cc0bbc01fc7a5cedf03ea86acf171441faef391cdf2208ae07a510d91936f0b0d96535522dc6cdc81b9d9add663fcb2efbe7aa9846b070278ae9808f46b6cc0d3002d662eab5984e54738e56f1fb3ec7a82adade448b0a2b07f1dff82c8c842f3b844d71256a20d064b3ac1301b33d3d669552dbdb5619617a3893750901812d5bcf1ba4d9da5fd0fa67503c6e72d84d348ee42ddf5ce87ad7c42074eabe3cefa535aaa10097e9234d3e9295826292353e19318121080d83476dc87b83c343d5c414dbb89e06fd5fd1c8d1200316153be5930756f29215250b91e883580aa92c143726a004cbf35867148877eb58dffe9c9711ac92803a024eb2dc6a9d0d6cbfdcc1a326c5cd2e3857fc78a0610d4dec49db84c47a407e9cf934b381c59e88a01523cea0bcec09435403c920769ff3f01718c69020a0b6eb84b66f0dfea0664348d0df10625bbdabc9fade03688569489db0a5275c89a066cd5cf2b88a28bc21649b8ebdfe3dbbaa9aa16a59e4da084d098f32442b4542e5d1a40d15a8b1de2abaeebd349320fa4f7cadd1996b195d7f107a8c9bf6c7c0ff0cf33004b74cf9915907c6cf10913abcad5fecaab79f881e848a515c6c3e01dc6800b96657f5eeae8941613ca22bfd4553e20569a7453364b64b5f0ebc000338d209c500801da870e101894dd638a5c7af4796ebc37680fb1dbdad80ce1cb72fdd67cb60bc41c228c5d12c41b4b7ce5c597001e1945c786f006ba778a4b9e48292ba7e84e59db8637dd58a4adc505b88940d755b5e63385236ff2c21a0a98697e7ed5215fd27a618da46f5a8fda6bf38271db0b720659022d3c9a84aa0b21c3b3998e996f8549cfee88ee5985fe69d8caa003897cba30879149beaf8a0a4f6d74782c2ee93b68c0088c2b61d8e87ed3c5eeaae519455ab36c26edc4c4600b706c4761ac4337cceb22ae9e6c83b79ff903e0be67ae614ec936608a1af02cf412b723e26c2753083d7dbe251ba5cd6d62d7d1c1caa0bb230ddccfb248ea0099636af0da9f0c2853f68bfda27b1261318331e957c8a40c4d8ab17cbb08953b6a424d6cc43c882f891ea1223d54e74820c4262ed77c549fe9ebae8714193efe68e915fbe91708a7d2617494aa61775d4393115e821dc0b583c7e60995227d29d196269ec37f037eb45341f4dad2c67a5c76382bada52a15d8371fc3bec62a9bc67630a47ea3330e20cfe413d76c841ef09366d0fd5609f95a2ddb46f2db5f77e0277648b3205ba0011d7d3762ac4b3460a526ceaea039922f9b4e36e554f3fa6864a1225693e65d24a09f5ab7b22c925596d20ab69427d8235cf4fb8f7ec7a9d6b3aa3a5d872711b57f4c10d529518e28f59aa7a163aa12d9144ae9b336b7e2eedf849ade15dd511944d202da9bc00a92dd3dd22b3cf9c2590acbdb9f038a33a02504721565c5f592b38d7c639aa6cf7514b666533f365e5c4059c41d9d0b04941edf468a5ee200ac72cfb56fbd297e21469f36ee3dccb06426c5b72c71bb53408af1ad37158c8264a745eff5e30a0bc80fc941700dc8d86f3b105bd884a80a2ef6293b8c6bf9ad9287e2a0a626090f6665a5eb6dcc1ae783ba5ee245e8346228ccf79f020274dd797bc4b589598efad65c2e026f46421957e00d2a4dafc623eee0d04160e14814e24bf69ed34be42e637666953f53b1c1a010bc5577fc21fb8d41d2616087244598ee017a1a5fe8e63426bbeb47832a174a15c0f8ac07f34b918aa3b4e355dd1508fff85614e764f4332faa0aad50e6405d1cf536a1e4aa549e6c08bdc3611d7adea90ac5691c0e2e1bce7ca9417f24cbf255936d66e28a7d207a30afd380457437eb6c9d3f84c67faca1ce72ea963d962084a7b3001ee0bb8cb03231fa5a0f280108257866c983dd7681740fff596950c35ce26e5ff64293ead2ac14b67f3a887707b1fcb2d2de451132c88baff0f25f8f896fb28ab4e6d72e06ed5cfb04f808d3e2de604ae4f24a36b671450fdbc4a59d6223bbf6f5837e82262190ba8f7d2d66695ba0daba37f1757291c205c796d34c85ce7cecfc6c2b550f8ec0c25d6efaeafa5df768be43eac3eaf4e745a810c0e9d3ca2ec04189f1d59cb354a2465349f76d3299c94a82c5d889d878aad16a5ae7d1b49fb56e85d35e3564b54c6d40ee3364b8fd7653324d4cb3072225a0a1f29f775de1461e11253240fe73359dedd74e8728e5bad1fb9696fbfad3822d7c45909e6f6abc63e7ca5c64f7400ad37d12e160009712ee33f9000308fff95aa30c90cb746e2aaeb220f8847909867f6334711a1ff810a425c3b1092431019d03685771d9f1bb450159fc37e3533632f26e279bc8efe5a6a539bc44df93d7e5364591c1d9ead18c1ac5d357092f9859dfee457c4b36b6c278676c71ef5dd5062fca85b260c19b86ed1b25fe6de912577bc54749e4c4bc047179f55d47078a6ae3dec0ad1aadcd77b7465cd7571371ffc883d4f32529c090f59df464369c3d037e7bd1fd908695c1e4e01c2b069c107114766b751b6000fb672a52f95fa6a887196eb4517405b08cc5953ef40f0801e625fc21ed959f8b3ade61cbb7a26d45158d3e5d501f581cb7562cc9bec543620dd24b120e7d197f52fd25e916d242667ead4ada8001fad6b6635a08c5bf9daec2606a6b63eda029d95f59b06889f7d961a8fe1b4f3b29a3d79936d9abf2b619fd75fb2aa446b85ffc8147a782ac2914db214c0a618b89914c025462c4046621896dcfcbaee970a0e0fb5f39a4ff4ef490ba6966eb2992ccbfb32ec7c05a580d61f809f3420dd0c3e98700bde5911f8f4de7fff7ced2474bb6b919f6c37fa6112ffde7fdb28317b21f01105fc1a525f2acebc4822ccaa0615e8cf1948d4769a864181a1bb10cd77d96c94f23af2ff4c270cf0be013e5de6e682096267f0d6a1971c2dfbe7f60b916b574bc9d3c723b53b01398dfd2be97b4b45da9b298cdcddfb7e2a8173d4c002ac93f5de147dbad0d8db66dd0cfbc3f18f7fa0c50d7e635e7b56bba1d56dabaf35ebb69977b8743314672b7b1c8fb8e3462391c44f40a0466806e03eaf53249e10f9c565dda453989aa0a2a247b2a56cc6c3042bfe540612728d271d1c8b78f8b22229eeec3bb9480407ccc4a1072059183559c22dd81c07529018b157b487346ae777681beac6291e4e26dbc9e0e6e6cfa32a89c64fd39927e6d2a2b2a49ad2cece5d681d76aff9da5c7a2b5a732caba3cd6f419ac0ab6119fb3e5f2f2274f446540de100a1cc40af8de16ab735f5595e8fa1a538b9f7e5a5119bb1a3e089cea1aee90f1cb681eb9c4f4d2f2c5fc38f314ea061be436170c7caee1f49af05d211f7a1890c0ad1344d8a79aa43e0e4f7b8324f9699c648e8198ec49bd59ef2d1fb504851735e44a6849096e7cbb525753f4b5b349e76806727b6354d989e47e9d06de30e253010d9b4fc7b872e626bcccc430242377fae773714e377dc49da19eeaeb1bd0e3289049761905ae959152fba58e83a1ff305fd00bb0793bb35aa4e46c39e247ed7b6a6b51e3ab7662ff168404a72f3ab5783305f19e53ab65163f4f51cba8959572691803f0b5ee68080ddde6a9ab72127e0cab9cd639a6f7efa7145e64c399f01b48d459c4ff17d138d03b5fcddac61a45963afffed431dc1b0694c634e3ed220c2dc5f98e49c6ee741510f3cf504a40ad43ff8ec80453675436772f01c745a8db7dc3c0b7e537b24355ce2ab7bf6f26c0d1635f926d7e06aa224dec64ceaecf90d8cc9fedfe24c4bdb4b20b6268921fa594ad950b2606afe34adfe30d489366f036532906ced7989340eb08cce3e688aa7ec90151fee95134986bde7bd97252ac52e991c6e87a6c90ee02d196f429e4ffc667e5fc9534ce77dec955b4f574d7bd57286e1411380fde2290b045306ccaa4d0d139524fc5030e1beda9aa7c9b62cf23b36217388f22a56ae702e074699aca1b343a36558c4eb8f7849336f297c783f4931fdd59f6252adf57e83a47d7dfbf50f32fb7d772e88aa1298f4382583d0567c42ed84d4a34dbc1e839c276a58f1f61ae72f2c64d7257d4a5ca7ce0c0e3f6dd0245b0ff41fdb1c17d4896d99d2cecc11619a784ff712091d56eb26c9109152f4eb7e32501514df9af78db76e58428abad325c11d15f403bfbcb1ce3dbf009967fa2adb4ce5516b4a7a824c941aff8e1992ce0774c9887ef36b11657b00d92e278966741ea23007fc2d603bcc3aa0f2e08a79f90a9e1940aa8190ba102463b541470745da2736c1c5dfdb91211161cefc4615eb109f093120f7ffdf69edc33dd3c7f62426162366027be2dbfba8211af0ad5f962f6b45117808766d829a670c3c3099def440816e1708a6cc266d81680d5b49fc0417a8fcd9d071a3e263ad3c49fde0c4e73c0f709eda61e950467c0d0208d6302820b6e926297f6dce34f9ecbe377130ad9c05ffebb4080dd81e1387f469ab2180dd9d8b66bce7e86f41bafcf4888cb04561eb4a9e9a38cc6a400124f7842e85ce07ebad801b4a14a317a7add97a7dc88d418424becb87b91d2860463fe94f5a899802993feea49b1dc567d45b0910f77fd973dad5b0cdec8527331e73b1dbdd164a0add496925ed8c3b07d9a530330cc32928876ccb898193caa030578a089f8e728c3f3ae725f97cc91be5f91d4602ec7bb08a7174bfa5f9e74e2f59529e73c7eadccd88894c61fbb1a22c4b162d27fb79e7c914667f6f3a2b67b68b07d80b77470ae8801360564be4bf62afdad8fa46e5845fd8ab74c34aa5d83bef96d1de7f518975b5efdd813c78d664c4b2112a69f76f9ee52fbe407ec0d162b3115f4fa6715a92e902866de6961fade6c51f84d9e29744a71a49b341e4ffacef550631bb3fa51b378ca6f12fd37100aa5ba6a534772b4b8df8f999b083ac9e3064cc8ed541851abea235e4cb91d486283b1e362385cc8c167a92dcad876c107350a5971aeb37b8a78452e0823a65c2c0957c38f3abef75dd21f40bbb690eb1c8c91676126d1a379708ef1b36bc06f3a5d8a5456c70bb55dad9e2e210f1e4079b74d9b676466093de9ef5865cd57f75df35ef3a9062c5f6846db9226e8253844d3e89794581ab032158f0ab80b79fe85dcd139e3ae3917c9cb13d8e8a76c5f9525894045d407ff042cbcf0b29a04964ba608ced01a5dbb864175cef1029f9dba46a7f467fe7dce154a879f7cacca5b1c857e65d15c968c58761b8dcd7c31ae57ad6ec5bf7dba8d2f9c4b291a1a48b0809f997977e3e157b5258354b1a3e84f4894a78731e0a26f303373eb250ae1bc49004dbe4b7abfad616f7d00fb34a4815d74455e8932c3ca71d7238f007b38c184ece5181f9df8124022d48b4dcc951c1fbf93491010122129bfe11eda32d103f23d6e23853e40c9ffeb555042fa0543864a881f7b5a08df165864a9b62f25f40f5886412c95d54eecd26c706741b4ecf5fb09aa810db29c1d3c046f79825eedbe5bf778739e8471bac2299184c4b2424d7511e7fe101c3a15266500e081ed33ee30178a4e0d75caeba688967aa3495d782ba9d16d1a7c4a6cafbf010664f39cd0d250c280d3b7f23ef3c2379b90f5e87ca644e38be7cc4124f446ed44f8b2cd86178b92b2b191b57d1d4ab71c3348f5b333f5d26505a605c4c26179c61605d106f584f0e4823883a667cfa93ce5d24cbc9fa4bfd878257c4d43e9aeac7cd540695866af5f192130d79603481ae2362b1f1e0c180215ca88d34fc735b739bd4f3e8d046cf63d6d6cee155e2baaa2f4bf1b887b7f19d0a7580d11d1a3560fc60ff906335184e4f86757c14cc5c9aa1b576cc8fa814ad7bb9b16b318f2a260c8d644d3cedf22708527c9126ac4d35f868f8d4b7794ce3f2d34139712035046d47d44be066f71a9940268a8cdd3c5d515bcc9e49e2fb61630be3a3b1cbc3880b7ad2926e05a04eb892491d801645b08a294720bf6c779deb6bb2dfdcc52e7482dcc2c4164bcbe681eb33fd6574c41e61128d4afec208fd224f210810d47277b25a4775b52df0b2bee4e7e886a64f5e99ba60643c11e57952831f2ddef6ae7bcc1814e8de523fbc0f59271396905dae3fb17153efaef59433897",
      "public_key":"040195512a7c5b82adc4d6d09de70d8ac3c6a5c8f07b0ce8acb97537563cc6c7e7c015439637c7d5e34d60a62245e275d1627aa49c6b41c9d7116b62529d62972f"
    },{
      "encrypt_key_info":"048e3afb3c48bcd6afa58dddab8448306a22a9fd9f9ba980621d06caad1adc11df26c39b27cb995a76243fe21423e59cb7b9d635ed350626c907d6bb4a6763fb8a6fc5eaf17b90d66ff675d1c52c8ffb45eaeb435ee160a7608e833f5f8a7fb45193b9dbfac6c764d049e6fa5209b69665eded4883dbfa0a4d6b05b74704ec865c9487c2192c2394db99fbaad90aece4a36c395e695f03dc1ed42709619091c1b8da3aa733d8433b4dbc0974cf6595ad8c883a71794b4d5790fcddbfb720c4d3f4b2d9db73224def100003eb1285a6c3847de4c86d5eba3abac4fb5c52bc6bbacc9b96067fe74054bb50c778d8183d6be760c1f3d800ca155d29e0815296bafc78a00385df4c4ac18ea67fa0279c59c8204286ba1467ec13aa21f1b484c81b59cc554b52abd3b4a56cf18d66d086b044a33dabbb1751c05715b7fae7c10a6b6ac052d28830e2849dffbdd7f718a3760a29f08ca5ca27f9ba19fbce0a1b21ad1987fcd7e60195c51b37272cf09dcf2aba627b0c1546a734c4819cb92ee4d839b409a4984abfc29af8d1da317e7e489e2221e657f7525412e3bd46da9ee695bc41e73d9e0cd6ac780f8e60f544ab9ea9c71c91e96b57ed93866d5c3386f148054cd480ae96cdf2c0a67a3f64e6545ae4b7bf9ebe7934f60546de21287ceaa36b61dccc91d86eb90941de91bb9d9b8a2022d3d556bd74fe8edb10c83002c803c803f1a831f2c32f4984a6111609d9577d719e75cd21907731d0699e0a4459a9f6a37be83c2f52b07bcd973ea4a456d51543ec89a515f01043ec8db9b32ae283260838d748a222e0daa90a180b51cd7a693befbf36892c17c05b8e805b3a87a2bdc3e91d6786213fdfb65b05397777cb6e349282e8540417a260f529faf41fcb853088ae23d928b7400f2d674d7df26fa9d1b0784a6e2904551c20180d61ae72beb44a52d5b19a9692c82dab7745467e40be482c441bd30bb39ded25fb8ce52146c603ee7f69ff0d1d72e33db4512920fbc79dcf3d0085eb1173e5d31783742d0a8e71e07a6c1270a5b3c03a15f53f1b14afc40b7b1bafd571306d8d5921f54b728fc78329454c42f73ed1f964007ef9d28552d70cf12149a7aa9f287b6d0240350ff4b574fc5910233afe89d8e06e177abdc084a227a6140272da9201f32844845750c64647f94da315ca3edf4135928392120558f7c355d04907e55f1bb5066fd2cd13bb0e2598b26cf8f6d6be4b158341abcd0307811681d141d5b8c0f7e645ffa0917334f87503b0b726b6ba3f513aa0447eb845aed4bb89486b3f2201c47c3a3fa85e26f46bfb43295bcf29ae5522b0ac173487ce5c894784d5ce84ada73e1fee7bb90f760df2b96b550f6c29537c286dcbce2bbf89b31feb95de7f71a18b333654f8cc2cf4be4ee82b70780bb6cd4e8f2cab738315f2189f7ae18a788f816cfe182019334b6dfb89e1da8a1b5e8d45cd475c9e6729a342387fe9143730ef22e02d9255c8419f6950d47f41d8c34cfdbb7d3bab59ea2741e94cea1e135ea42324f10cd487b9b4d940f07e6661cfe429f7d18decd3421ebb6124191bc2f411de7530deafda02dc6b39a5c07c2dee969a3561ec45d4ff04e80c36f2158dbcf95f3475fd516336ec39e1dcbfcf820951d59e30c1ae116b511ce0c3e3189d060cb04c4f77426d3646fd4147277ab339f04beefff0c9297cdf67f2c20c0048c7a6be3152e9c5bcb2008314c147902fa11316006742920d04de77e67f02877edb0d06b224674a6a7a49518751900d9b0356f10b0ebe2b1c2451518482509ccebedac4b4cac6829ca1ac41d7193a6bc9e547d65464bb88d7358bcf541ca25c397f3cfc6e38e7d78188cd20def4476a0fda0ec45ae7a70c25b357d6044553549354d1f5232af04dec930f16d24a94004435e09132b1021c24d9c36a2595c271e8ff6e1cabbebb8adb9e2ed168f839448f8a85e9c22be13e444da70c02ff67446d44461f2b4fecf65fa361bf42d54d261b0540be76d88fb9d1eb03af2d5e18854f2105158d0ab06d281675ed31222e2362a3f2d7d08626a96bcf6be7f5a1661103b6fa8d10f1d9dd4308eb8a3ba12a2668ab4aac18e76ba634e2c88944d565e92e19ebd2fb817594f5aecceb5a5011f1d2f5b5612de40947b9c4d75d8c967b7c44f7804e59d223bdbbc764e4967bccff6a262c976d8083a4aa9203d046580dfeb783619d00c0827cce7ed765d9aac554e1ae421b867dd6904c8f38da1aff0cc9b21b62d5b6a8400a904ad3d494f406302c2f35b436da3d23c59ff3cdc632717266e007e02d3a2309e6fdec10c7542835a4b64a32161fdeeb4408575744e8491e3d5199edbe2196194840f2b6ec68c240d7ce6c4a21a87949d5e33630d7248eaa3c75c0bc7f22fbaf33cc17e39b9169a4cfc033877fc32874fd9809cdf5eba497efe4cf699804a62aa58087db293beae3f7d8db67d71bb9c8aa3955cf77e235577b13bf2bb853d93b5a60956aaf79767a95f8506d36c80c03ebe37d14c0750ad4e1b6cc07aae39ebef9190ed4f6e9d31b7dee95a761e2004e7e766fb771741e6d5fc26f9137541c15f5feed3513a3b01979a74dd1ab3585dc57345430dd4db2f720463258f02158eeadd958bd97957423ba5760b6cc6559fafaf9f0c583524c1e5d93944fe2297ef63e6f7df71a8be1d8ef349ff984f66886eb97acbfebd01f0e47632fdcb225ea20859ee5e21c052ce561ac1156e3f94ea681c1db29bc5ffa235a4d591caefaf7e407e1cf13d5712c033b958e17126fc182d0a446a52426796fc54f808c2856556e2634e47e599cf39c7c62736afced9e934f7b1004257f4a10f757b4052f10361dcbe7082bef10593a195923d698ba99be0ca8b8f43bed15b23590288225127537af5b7f18cdb029b108857ded57dd343333369ca6ea5b7b299782e3f0ef8567d737f455a39663d6586ea141ecca9ea867eda4447be84147ad59b9eed546e62601a2796d517a129c78908f7a6ec3e8be53d3805a28177fa1205973685c1948eb193b3556cb6636574bec45a43c37c5ee9d9430df8615c57af0e26549bbdfc42c7c1ea4a85fe695590ecd06e641911b08233e1b25efc93d0c150fd14d7d37c4a18709e3af8a2089c9b92c7bb3a9ed80ae5e4eff4e35f75312d12ac79d7cff2c445407a853cde504e9cef9bba55dfa83db6638f475144030c849a0fa0b212379598f0614db4a2b66dd737ae9f540062657d0fe35b159e26667d28b5a16f0faff7abe2f2da849ff5c464edc6187a3a52a3756e1f0ce4270c45ceffee9f1b983b9f56e5e74015c9dbcb88d85e7fbe6761b7d1d6f08576d24d354e31e3920f72180b9a4b6c3e65c981fc0f286a986c24fec3b019d46e6b28c23b3dc596577c8db3ebc741dfac060eddc5097dafcdff4b151e66aaf43d01771ff8e85854da1a3db475b40c738d42272ad07d707ab67477e00367786292543fd41b8981dd1d845a959f361340cbfd9147cb15bbc38c728f3e82f1a1c8c88d3bc0848c2d12788d5b67fa65ef08f79cb7c68cb5f3ce282e379899e7ecc0a05e3a9b9440fa0a84b0dec53fe9bd7f39f3f0f1c5b9e0d5c68beff4b6c6fbaf2da785f066879aca56c36c078fdef377cee6294544da2e778cc0c05683dc7f47a32ecfed6a33db6acb6ed36c2523049fb45a4d374d808f2aa8438b918d62faee231b62696b5f90f6ab6173e9411c5ec15aa96b7d28679a19f04e002b9baf7e7cfda288212f90c5b664b8fb1df31dafd70d9da4e5885dd214e9c1b7d369393cf0b99046301fad7ee3accbe70493390bb6291cca08d0d134e3fa590dda37c65b9f197d88e94f6c9f033a709a09a613c220078b419b2dbd5626168139788151df5540c8fad89c3dac0329afd87b9b85f9916f90b3e57f35ed0335fb055a3228ca5b5bd82d14d225b0a715b4180367f5f387f0aca652c040d2297155fadcf7843ee1f8f3cbaa154e59e79bdb0f9ebff5ed872a20b6e1b8051704b1192f5d9662a179bf92aa4542878876a71e0981f37d4db51932fadc955730576b6239ad7df700660b6ddb7c840750315bb50be0efc6dc68182474aada021070fd3a7ea32c55cc46e604674f98c9fc2c52205b55aa992cc1602e7bdbb6b33649f348c8776572ad42977aaaa440abf0025f05bb5d3e2f1ea2dc636c26404b4dc31276a402663d60639aca8a22eb557841ac9c9d902a88ed1f0b8ee3b45094755d14431af405fd72c74fe761e0ecab303c1aa075b3ccb1695a4e57b0ead77d94533dba2a5342900c28cfb958d12ba82d0f4ce3a9a3457468b3ddb8a98f8081cf72f67aba77ce5c355974ed137cb818ecbf0c4f648ffe1978fb152bfad23ad677ef4b0e1caf6364c4146f51ef76ad8b3c6ee0e5bf11c39dd562b072c40d7ded5bce43eec244eba8f7ee99ae0e512638064327633fcc0dbc144b974e567ba0ce94d378f039cc3339fa257a02a8b262836c40274fa96567ca0cdb64022b3cdbfd0d13dba116db5d9dcde1cd05020da8633b1b7ceb041750627983c72dea03430c3294d011a819346c0c82ca686d6fd105db26bbaea1aa00a2b2dee7766f139dce4d8dcebee9a3ad76ebe5ebadcc3cb0dc57068778e9fcd6b56eb8f69d421577f146dba2f539186c2e857986cd4124b0c2bcb52bd43339cf617efd72e6e5106edf5a0865b7921bd78f8b548b507d8302bf26f787f3358d8202ec26282e3fba425220c950446e3d35b2cdcfc0fc719ebf43c66d458c3d675e62052f6d545483dd134781f16ccd3c0a3cd6cc9676ea7955970196fc3a044eeaed892b8a3a2361521b807c0ecbc242fde0f17da36ffab883fcc68fe76e7306507e3397297f81bfa1872dc1d0e88092b7d591b8496d98e2dfb2a4896d194de36b33505d928b36213195998edf7ecc6024fa1dce57db5a36cf8f51845f52700a8263e2d05d8338b69869cd9725cac58634cda09160896f0c4c7edb0eea613f2f6e3d160893c557d706c911bc99275b9bfb6aec3df452a62cee7d38215d360d99c2e50bcaf0d6baa241563f135cd0c142568954a7606008828c35d4131177df64be82b87dc0d450c093ef86850c43c8326ee0391b63883c9e4b901f842abb8cb6252a62b23f8970063984b5011bc7ae56c3f46a917c5130b6a0064972178af2f3cf024aab2907523e894cdb81533cb4b4177568b995c0f6124ce923f4f32cdf5f3c702f1ecb4f54db660c9106249d3b1b149df3661bec176472abd77503afd9c09b8ea7dcf33e42efc2e17e6b03c9ee12ad62ef066f1ba3ce4498d274513f3568b6ad9d07202b55b9b281de882da89467e68dcdeec81ef49932a1cf332f1f233bf05aafa8b88845181e54df029277b7e334aa610fc47779691f9d6420a6ee104fd7ca8aa67718012d0a2adf6bd3184670cfdeee195c37770d6e29af50144c3b30c50b68ac9db95c976f5c897880dbd3e80cbb3d19f495f1bea847f4ec92a45403cab1cc3c4d2f86524441911d67fb5d9a2f0e78c637c259b2989a5c38b5a74c645a4b9d24cbc9c953274d071d7d6947768616c13d4180088b9d01b045ba1ae4b1d7368650d44b7a270f9dc281f45c420da629d5b7cf054880fd3880503dc868bc07dd271c3e2410d965395cb8b82cf9fb53076a8b9867c8b83231c9ee0ac6de1f8e82e94299f343aea0e45607e31252bc0ff859f958562c32525534634975e1fe7e6b72426a7d655e4dcd116640cdde7c91a4e6cb757ae49053186f6d3f6962325b7f5792789add7bda007f82043214a7a1cadfcf8dc43fd4831a67a1fb364238f7127686616329b753187c836be232a3ca96065643f835ce22770c940fea1ff43543483b6939ade1a15ea2bc3489c39429fbdf4a0dce85db9b33a71db9806fcc58fd4eba8ff547a62bd81e541e3ae9e19f18bf36a847833cd19541315aa4e0dcc734274d2644202516f77a84457885a8cf9dd728595ed6743681429f465b8467d265c00363636bfc2c161e0cf93606758a1eb5bb3479a84828fae5bf2e7f41e9bfde428aa8aaae0620aa98c9a60ecbcd5cf33cc9b387f36b5b86370cfe22a23e4c30d9e33d543be8567ecee10aa47a3eee1a223467c11ee1e425d045e6577eb094fe58b0a5b3cb9cb8a4dae1463b082e7f24c68212b6ed7cafe614c61e106133e04c2330d4449800785b15118a0514534cccae685800ec0ebc54d26292f6fe0409a6af45beebca59ea47f716349ac8c3949a2fdb1870acf7622cf96a7b64134b57b5d0bf2881c50dacd4f8811127fb46e420505950c0c5e7b7ca1e169c08248eada53b1d0d595076050d702b3ee3bd9f83d638146766bdb162ee61d3c8bb87617e815672e40f038cff3af8678339dc7487b9781ba6f35292624fbfb7421f71ea4526a5c5cc63ed278bd2c4fb0092e4d36bcb23971c61f489f07314639e5fb07c93bb92058976890328395e12aa79c30f37c5dc8bfc7ee233eb3feddd38cd4a564b8d3e9a518b43ba2230f218617b5496db035413e80362e604f9e31081f494ee84aab9d38b15ae659cac1f40fa9abd68403a571026917ace44adb1433de55651b417ded6da86d3c21a5e5dead3d26d7fd28fef1b402d4cc28959b9314ba84e03b78560345564bcfc7a0e4f311bcb3039c6569462c5ab9ae36d98cbca3e9fdf3742c3a327980a82ba3a3312dc9a8e91f5f358c10b10c4480318fa11d2746b8faa607ec3acdcb8df2f059b4059e30bb719eae4714097be08519b0dd3c44473d06d2e7fe9e73281d2fbe6629c4951f4af938e3ffeea8228f8858337e1d5c5a1bb68dc44b4f536610e77c354a2590c0c5164fb315518fb05913cd8c3df2ebb90148f50b8cf53e37d1477001336d2d685ca6a19b0a7c90f9c1a35c45b50b487d45c0a957bf19d8e7a1f8983a58087f469d44e597a9cc7063cab7cd37bd520812e5c55ffd2879634def89c85f96f50cfed4c4524d91b7bec69b28fcc0ef72934f24bad9f12753be62f84f53352f8a2a4d09f87c940714a311f14790748a78df80f23e11ab64d856b477b752479420e1959576760dd396da3611158e3a8fef844e840b07c19949af54decb0366e717a22d46086fe6c761c73784018a895423479546d35f33f4799769b5f41359079867ca2049fc590b32d7a53ef4eea2af19a576738397b84da46b1bec5d6df5d07e717aab65621191c554acf220973f2de1251bb3c365a68ddd030c10dd5a2c58049abc93e29fa429a1c6b02cf3dffea1d76ff062ea4e9ba7a614c6a88ac44e634f122633c161525e84ecc170056a6d414d2f6fd06c2936a949bfaff20afd0023be27891c611dd298d260374178d69578235ebcf2276a3aaa05bcfe9a9d8e4f4978ccdfd02b2abf39c630db0607180f9fb14320df6053a1687fcbce3310ffecce5b24d1b83fd9e3d6b35c01ab5288a93a96d5f500976783eed366652603ccc65fb0b5b427681f55bd55391fd621f044832224efa6ee51fd2bbaafc9acd8e8c84244144629fd5bf0b31398fddf31a035d22754afcfb0ee64e701f94e6c95a4378ee34eb8099233cd2846a4fe606ea66ea4583d25e7dd2aae0c2e9100e4e28e35ce05d6e1907af1adc9f4dd1e516cfac54a10b2ca49660aac0e8e84e73148adc06becb10362330db90fd68b8bbacd7bc4edc1d9f65c0fa2981866f8b7a78bd666ec8e0031995c73d9e0595c713654aa0ecf7deedf1dc15c9d48d244be56bf6032687c2c568f81c75dd002eedf7b2b65b32f88d86891f6b94a7f4efff498badff13f0aa902837d0fbf3cea095f70d598de53d263e2c6427ef9b387167eb5f3bb0a81d88c11215cf3853adca2c60807bda83ff62668955cd874e44e17a9138c6a86387d7d8224e1f1178e0277da0faad2aa22b17bb732d09315e21860b8f7497f21955c33251cb3cc1140af9cd275b53cf4b84d84d7913a908537d8e3e477df3590ddd6e44e21c34395270d2ca3ffd2f3185e684eada2725734e54f93d00f546ab719c4014f49b2458cb885466a7e3d009925e06473556ed39d7795207c0860532a549678fc84e31c6f2e5d9139971abb5da2f3d06a599fb8a091836b1b5f7463b5aeb96d2c08179a2cddaadd062e2d7aca3a85c8fdbf5be28309b453cbb8395b252cb6052b639f7d5f7a90f07e8034720ffcc513c624127381fc6f978d3a7355ff40741ea5bfd0b7ba081856aee6a97ea0e0329235e94f274dbe3afed43a1a372237f3c04e09a4fac9639a6bbc58798e340c555e3df5155d0721b98a5820799cf04da2330aef97c9ebc68e5d5658838ef6e1b347d04b74027676996c483c70ae32d724a084d3201f094e42fd6dfb65492570a1e32a0e84d407cd20684e20ddb592257d03de318e691d7aee759c10349fb8c86ed87753bd1de6a951c96d39e2d7b07dece6a62bb250a7f5c884fce9470e22a5de940c263893d6013b6fd8efcf6ad841626fa7ce5166010cd96bfe1faf0c290a5894706f36a82a0307daba64a7d0cd85e4836244831858f171e75b3e216ec29d01a8f63ee492df992ef3efcc505fe6f8af6d0dac542a1bf955dd6dcffa8b61eb69cdcf1303324b0f4a689d8d5eddf3c7a17fdc96a404ee7abc9c2d6ca0f3dfc008de286b413a00f3df561c3b5458e6e304a425b88c5c2989240ad9ed67c54a973e5e3abcb1315641cb500655d3fdb25979310f5b3340eb8090ecfff75d36ab9478b0401753667255fc6ae0ec74fa611ddd2b9f4461b5e87b7705359013f1a131d2ebd1709c7135025551b96ed53ff43772b5fef7835068c9b4410a4c8787e419ec2839ff96e7ce68296dec7ba4a5410eee4acfd9f1e1533290d74b9c8eb6dd37a69b489f9a97a0b4720412cfc22e0d7e07f482b11b5e7dbfbf16ee588f15c89ac7811b106047ec3fea893d1fed0710a683070dcf5765532120d88116f9c4c80b639daf707a894c9f4571547f7cebc77ac5f9a000d75de87a55c6004372148dffd99f54fe1c09f2d492eb7bcb24f9bcd97b74a462d91418e57d124051ecbbea862b7f5810f37ceac57ebd4faeae82e632a391be84d746cd19af6601816a9f846811fb3e8f9f",
      "public_key":"040d11a3515ff8a6fa3dd203ab3c91b68847e7b6d0458df88d4079a87e7d3061144cfa7b7cfa53d34b205450293aec1c2b78dff3960fa5cb6b15a0dae418ea0266"
    },{
      "encrypt_key_info":"0447c610f65d3abf16dddf9c04a2398abec1ee4bb40551afbdf1d556ed1d3436bb32144c6f8786ca8c0388955f06cbb38d1be59efcec23c029416ed4cd4fa5362691580c9302500a74c63f3f2da02c63e1dc1f279653fbceff03daac356becc12f2cbc3631bc28f7a0f847eb4850006451e62464e079d6486d731bf3c6e636fd52da33c6a4e91e7c457f2fbe74857a286083e3e2d06956cab6c762711f4fdf9e1d02a65caac222ee072441c064d8d231b83cf290ee544d944f9a3a8b12f12e949e73c0a626d05183910b70ec8376415661a6ad99970129096b5db5f02bdafbfd3d0d6e1bb9815c129fc7e21b4357d20da7d745978ff4ec2f0c85a58b8366a355edef93203c4d9a7a9d694a36ff7977305c060bddf886104046f02c0ca32a442383850af79c740974f0206b0f9bec39bf220091cb55df832778f1ba3d1b156fe9deba2e56f5e2f81b7ba5bc6f4f621d51127d584c938da20850c819e71f192b7d388e556b86cc4d4b494c785348f85f998549bd77e65d8cf3e5da65b141d325630bc2681137b92be0a010fa2219ed4b159402a6849a41a1ef01769f30f0693fca18b0012d9e5c7b3595a4190d6eec34c831cd332eab376ff0c6b2aef2457df757e72fa1bbdc613a564e3f7d35f946526c0e0e79a5a574d765d4e90d2b64f1e21a401cae13dafafbdb42ef2ab41a54fbc39fe0a48ece66a9a9c53d46eb1687ed18442e665af74cea370de6d0f2ce66dd04324f895fbb1b6d30a954a06cd938f44a49aa07d76e9e878dcade6d7ff7fe1eff2173a31f4187a22ba42c0ad97d540018b1e0fb10604c6cadc84d089dd50a60f4d3bd67fa19f26fedc10b7e629c7e5860f06e169bb2cbe8c8849ebb956a3be43d21b744c76dffd084185ea93e4204e979e28856a4ab832b52ef41d10711ced6bd1efa81579faf7c5dde3d55e8786a8ea479ce79002bdf46ef73c8cd19b455c514c695739130e8e8b89184399b403f29794fcf9daf71194614273800138912812e70df2752f4000abb56d394704c21e643db17209445cd92b131baa10de00b264fe0c36e22f8454e1ade49ad6e226020ed3b2210af032e0b9e56e870c06809fab19237f0600b47ee6657f73c2017bd7ce380a4561fd72cc96de2bf1f67e07e3bd2b72bb634a8ee0f69cceec8fa6752427d2b09974f33c44b97c077514660242a87e38d0535210d69490ee1de8cbe1cc62a64397badbd188809598007c266986b354d44f9af71053b506a13fcdf7ef13315ae62bd68524b598dbedceff7cd7bd9fde84e31c1b5dec455bc2434a60a3bef4759be750b44be73122708bbd8b980e5af03b2857fd60ede5c3b91c2107009660f512bf6521d8e252a23d72234987489649e23fc2032c74f7278a9b98267a0f08bc49d93069749d69a989aab9f91c734c47d27d64c96680bcb356b1451c84d5523fa3db48fa475fac4c28e30a3914a3d25e19d8efe67c95918494c890045445aa3ffc66486f97da7de4713cc9f55f48dd56666fd12a113492c624cd0a095b895231b0cc45c13aa45fe964e07df1d7b45c430f482193022ca32485b8f9c1c862b32dd0a5d9568e19a5869c97ac042ba537c06a8fa81a3eb6f5b44869f0390e7d0f1b282f709d61c8ab8c5b7c361791d32dcbaed5d52d06cd5092d9f80db0bd9133002d1152e1c69454ab5c5bc970288c79c20ad3c2e120b36cb87c7e536eba5b6ed7ef0db58e0eae0d8c450fb5a3b22af9acc25e0ce67a4e502197a1e5217a6482415f3cc486bdae76ffc49d60d75958664f5f936dbaa2f2344e4c1153e32f562daa61783d65b4fb6292dac3fe862b12d2622e6bf92e54f4b4e84480afd9e883e736d2ca1c19c6b73ca83db1a312f1f4445524a79d01fa897089b2f55d9ecdf850363cab88ecf7e42fcf5e37636d319fbc543c04933d18f094382a0d001ea98b7fff289ebf4ee0fc5c9fa769ef4a105277794fa7a6bfef60ed5fa2efd20f735b804364dcb722ca5202a0f7300bf51cf44ca65bc5d5beaea74eaad9845bfdf1079b0fc82430a04be9f5e9a1043aba72f164e5e5c63a5a2336438be0cae596c92c3dc5ed719de5f703beff59619d5a361e07ce883957a192434267aa7af7e9641c1ddd15963aa380c0b6fd2d0fd5fc1dc984bb8020c06908af017d6715e9c79e01638790392d813de87a873477273e2c2574a44d4fcca2c4effac3e89d7feaebc868f74549122af51c9d1259534830f1c60dd38fe97a1a7b35f1e9945379be12b961aaa0a7daaa8909ba84829f2d4517a794aaf220fd0d7f71662b447b1134fb167eea356a191ee583bbbc69c181e59dfa1a349637f63dc5c67dd0c5a4831d47cd14e86639fcfc38855c476133ef91e4444f9e2bcdea790231199e8c6465b0e79f55a302cd1261462fb0dfc9818930e31b82eecff18f1d3941d2bfc1b3f2c14a6ba47495f21e001e1fe216a2b38a1ab26b14756d4a2dd69fbe1662fb6264ce9da4865cf151290637e61294a839fc8769318f9b2984cda60bc360e541766efb1be5f5b2c4a61298982a6743b40f5910619b10ac5e1635a1a81b8a58c9eacfca55adca134289c3141311f79733da1f909c200c491e05caf3f705fcd344143a0c7f48952136434a0878260e31922d85de4fb13b586c5f161ccfe2583f91b0d545283de0b1948014b3149c02b98b9a7c6321753059719e58ab843424b71f478baff5101c5405fc66d3f01ddb554acde3ed1ca08c6ff2a4863acfa248acf086aa5b34b55b51648d34a64880bf9825529f8b1d1e9e8111921cf9a54c207e787da38b3d6ebbe2dbd1b09d59025c35c8886de35328c39a084796f1a1a84f5995b64fa88f45a9d921e6d42ce478aeb5fd4f0d7e35774ba43a8ebafe696419b455eea0ad73501eaadccdea0ae82e56fcbc6453c426286bcc88cb92b7b2232d337a444f1955da4e06d871d83efb52e6029aaaa2347ef378e2a47b662ddfb4203f80e7f289e2dfab703ed4f47b755a4f6abfc48716e0684fb4095d00875a029652ccdb03c7ab4cf16c758dad06b3695136d00aaabc4886b0b87fd9f104eb1a0c8577b6718b962517a0fa7a48522a004f9d92017cd91140e0aafcf0373394f21b318db34e54d94630e60dde9506bb9737a24c1b2e86aeb74087787c67bff6651a0411acfa2fe5c538b59e7c94f63fd91c4b7400f6b887fe98111b88b3013741a25ccf990613a6df791ebf4f727547c0f58c3713f7cd31444319eed2897809af8010adb9036022d45ff5e8704fa5c07c75b39c7e67673d8f3d86bc76bef354e47e6ed09909f9d290ec26004e2eb7d951aec1b9c10d580fd12ca3a17df4f02fe13e1fa9794ec994fc1476225a2a72b2b2cfcab703e210e3848c57e34c7010033401a0f13afb1037bc3ffe2a6811290daaa54b3f3e1a46f7905d60c8fd5262b71ae223e611cfba0b9cf2fa1991b4da5a424bdb5cf6b923a374a2d98296cd45ef244ed771140ebcdcc00e68feadf5c73594c15cd158557e89f778f24b800b8da6eb7841f21e474f17721972bfc7b8ec7fcf0ecc6b8b5f653be12fcb8d6bc19d487e9dde98e25df4db7059671db151fd15fd8ad18096f4e61e069c2c35a0a05a23c3806d8e94e5dc0d36d3185db4693119fb671b8cfa7a385324c25a99d5cbe493f3720def020be67aa7f1f0489e60a0da6d1544f6b330a1af3f2573e6546170cbc448480b7f7d97ca6a0f75c9ad2193fe91f7520f1d772891e9d290591e456e8ac5b975bb05aaf0378ccfda407f61ae2f16d5f44424dec983be9a2b51ce479b4439a64eba781fc2d91a944bef86336467ec04fb0990874351cac7fe8be5f4e947b04a3b1fe85c2960645176c849b1db47883f25d2a76f3f0995a2d4bc89c7f86d0720c4ad2c62be9ca693de64a2d69dd092cd2ff57639db53e727d4be6bafb206b1b4f34459e4d762d2a07766feebd6cea53d30f7a19567dd01e464596cb20e6c9621cbf9607c47f99615f0e2a115f8dd5457fa5d55e9ae27ef429e3289af2681607f6587fc20819d78272f055e63ec212c3cb4fb2a8f747e6bb71c2d29dbf6781cab372b74d72e780960816093013d495d03af5ec6c1fafcc03d91b82819ea161b3f00d7c1d6c036b51bc6c88dd60b2cb125f0ffe52553b3c65d61e0a0cfd9045c3c1aa19265d8b9476cfb2ea2ecd29b8a5e22a82aafe8c599a4fc658df9c7e37fbdd19982c4b491bef9d900fecd489b9f2be9a3de6e973d838be8f4caeb0216e7f9c7e8b05e831bd69fbd64fa25116d7671b87ae932db1dd02f50bc57fd12f99280d1660429d773e4a12f243ca4de84c880306eb76dbf44e9b0e6bf9bb9628149afe297e3a171fb08f8674be3fbd52ac978d8ed50850261ea7d92947906e24f1bdb3d0563255bc222fe437350eacefc50138b1e03cce48c94ba180588b95ec26befad7bc0e991e08fa6cc6a421a55dddcc9e0415c21e7c2c2802aea00ba0ba0bdbbdbec0122260f0b6ffe6d4537eba54a3696956a0099ed0ebcf03a2c236e59273cdc2ebccf168547719b3a0c2007b4e1b1c9559cc4ff342f14e1c61aaa41a45708f212a2db97773e60a95114e20a53a45a0261814c3f73459007fc654bd91881c69c95a1dc22c02de5a5e880bcbe242242f98e8dd3b6c7c0b1d7b3d3cc0219e004f358fc0b697b893de762aeb655704dbc790f2ef187e1452c828bb94b11bdf91b5b7bfd8e652e26910c3eff7ff4e2a7acdf01cd8a7d6d76e4f2e80fc6476a57fd479c2d9dc878f0945bd7d1a0625974f112d6390b56827d52fdb40aff887fd90b97b2a66a95416bc6f6204f7d63bb231872c51788573fe0028a2402c9d9b4a57be6e782ffb4552348b4f9abfcb4e5d4d76e4f57f361f0c190c668a3a02891fc4996fb7e77d9270956b5597de059f15fef864a3011a497a9ea4290668ce4ee55536c46e43986a502bbbc4db831425b88ad1459871a7fa1b697cec3f6ed0bfc5f5cb83ce70fbe468323624b49e2ae6132a0e73afc0dc036fa81a2c6279a75c17a206702d0457781024f9d047963274cf1e7494bdad18d73d5f635be022c08cbdf2ac02a10b227b4831a769b28bdda7b588af28ba0b30f97fce7b1d2b1a16e6e6036c47c95aebecc76a261e2e141c90c53e4db55e190aae1fbc45b30a928e26743b3c6feb4f36df77bc169f4eb7dc63c13e86e7d6f812a61589ea43ae93b84862a590331e980bed170b0fc08eb3d3c525ff7309c33dce2b7682718988b5fe895f14bed1564d7022764b23d190e6343c67e74a103ce10c90da969f5612c5a6110bd850cd4103fd884739b6dfd299f28a5f3233f349129c99e227baf67baabe194ac2610bd74cc405072b0ee5d9ae6a05007b14676b6c15d8797b0d6d14bc54ce762dcbba8f04be3e205c675e4136ea4880d3c758ff6049cbb2e6fee244fa6653bb4c76d89471e542f6aeb7bf7c1e4bc3081a1282b1fb6614bae3668bab5b9117653debc057be553ef7c6e5a53f914d812fa7bdb74b2bc9c8a0fab741f6aafa84fc77c41cb7839722a3534f236fe4405c94dfa81836e0a0e26b12580d3a9aff44d2843ae694fbb46f433c6cb21651c6f60c71580a712217b9847abed447a931d626f519521c9a6b46d15b9a98e5371bf1ddc965fd686be4f3624f40d771fac46655ecf56a69afd6f9f03d9388caa4c76f435137553e7e5e1bd44fb6b389aa1603500a396ea53e044458736a16714e8c272b1d4638a172cc37793dd4eed9f8348d03c11104211c5d41b9ae72bfdfe68ecf3db4a9454d969c21974d70b77b452f5a3055c015cc6dc34c3aa213f2fbbf96b24027878fe5e837c008935c12a70f5bb115861a952ee664f2a85e0035a9b216008004cd0c8c3af6be293e5bcbece5a4fc4eb7a6fd49c636662c2531f1501f2aa3db25a7a2d85af79a460e902bea3f42b243b871cda4ad3141762641726b67664ad33e570ac263aabb47b080797e8bb3fc89d9c716b52a7b4532d188083e04ed1c0836ba7f5be58766078791a6cf7faf51682e4b87b9dcf586ce93c26bc5b5a6539a82c301033f71c9a377136cc725b30d53df8887d38e56fafabbd7df304d8dfacba22f45703cea9bdc340f6636b0923b514104a69ddae2ca216d9cee8dd816f78c98b05b7822dd06417e2f89547ce685c7f4f89578f60a3a20427fa6c4cdd660672292c9d40170dc402240d17525d5a81bf4999dbd25fd29154305d57a5bef596094d72eddefa6d33cfe165799bec74db540586bf1b007e0b5bac66ebd897e2938b6d648eb50662490361d4ab040092b8d93f927b0b26aff73d2a6312ea71080f0afbd83550f7d5a467d142b30a51608c3ac90a8012dbd0bb9cbd78bea493d8d87922f3db90aafa35eb687656a00f4d0ff92894049d09f5268f250c5bc9328fecd8dd1b0dbe797e1c3d1d141a06881406d4d9829e6ea14da2b91e01faf400378ec0811d91315e1a59017912e84bb041b50d73b7cff028c59f4f5e1fe3d6b53576f7555316ce13bf6d9f7abe9f0d27c54fb434c613e2fe14cf9bd9836f3e2d21550a92d07ae2c22902d0bd48d1dba492acfb23a2e6ed6b71baaf3c102acd74fe7c4e317dbfb6f7c2a2b2f3507eb9532d74a4c5a75f3826670ae49d35bc8b761ea267a273208ab22c9fc64a68b78e8b7fb77b39a4a55dfc9d7caabbb95594bb442068219d96ba4cb6c893ef53027076e505ae9ae7f8df6dd760ae0a6c519ce4d7fc2dc584b5a53812ab6b7f8b3f5e16392baf29f3a55b28cf6c48cd5765912a29781400fccde7eb53bf5513963971a7011210f2307509f039367b50041043db77b7f90e6859b772040559eefecfb73affca66c79e9d3a55994e550b0fce9e5fb1b769e14e11f171bbc26e3f37e1edc907d86b9728483094bf168e976dfb2a75286d19597d4db4ea1d917aa8b616fb6ccd55bfe52fd93e380cadc5b673ecd19ca7ffa55c92792b9de12e586c4891fa2d4f72c245f3e0bd7294a539141f4a96a37858533e3162087e746ca5e9133ad404c64115ecabe8bce3ac65de3b0a8c526522a17046fd16d0c1dcee3f1ab7b5498a4154f94c7ce8216ab89bfdc5c955839571ce813360b84fca92cf24fddc7096d7d19c7dde85a59abb575d4cb47c6402496c541b821605e692e1642c186267f90691fdfe881402ab2cba9f41497ae558d64810246b7d1a6e51fc33e924de558f514b5b5fd703a943211b754074808f3b4d3195369d26fa47137b284268fc5b1eb773f878b06016fd17d6bc0fde82e87f5a87aed1761273aca492fbeb653cfbf3860d79b177974adee55bccfac9cec2026ccadfbbdfe691298d33d62cd46b935d2bf522676a480cc0672020925543c11629dbda671e51a77bfbae1353dd0d8c78edd409e653ec96a54613214db31776a73cb29f20a8058a1258255881c8b6dd225e9aec461be2d88363edbc91a356a5071a10a26edde53f01c0fe53d483d21a75de1d3ed90dbb50a1ba72bc450c778598ef274dad06a57fb73517c309473ddf39f82679198dc2cf1d1ee8943e0c290a4802886e75155f01e69a2ecf278085c7dbc4ba12a142ba530b17cc17c4ecf0748c7e621b6c69d4ea0a55558b271fdb7871468061232f80846acda76d11c949940d6f3bb5532ea061d7aae8e2fccab0f705967e4eb53bb33d949fc008e89e1b2c0fda2867fcfbbddd19683698f463ff1ade72880623ddff664876155e9a0f6dc7280164595a29a567d75822af77d72666f0565c9557fc0e01346990f9849bb57ef9b5fcc549e91251e75a7fa2f54e76c50ee56327164299bbe86dc75de09ebe385ff3a8bc9bc943d45592ca58db65a1ab7648944d71b41eb99f7826416b9990c74f40bbb4a6b82b529b6310c8111bccbc3938415505fb4789585241e742b3df89617f8a4180263b515b2b8e3cd9f989cd571f3736a7eba9942946689b9b1f7689ca71df46c9f134adbee5c0a8b744c4e04440bfbfda9e3f710994a44626a55cc69de6f9e9a4ff464e203579505eee78d5ffc4fe4f3eaf313de9f80bcdde16cf92852b548e1889f721a89568b3ccf3e138cee7a3903e57d1b5f88d8c8f4d5264da0d1c3914e290f5e6f44601b3733116200574b03abd50f6e8399c3fc54fad4c6c45d3769d1a55b0d79ce59b5b9e2767ca691ea2737ec1cdf913344cdd3a8caa7b0c644436830bce1d1e78fa5a5ea161fe1c3dadde623bbb32175c0ccfb99b971e9a51c9935a25a9345af8ca214329b94825829620eadb7dc95567bf8fe97bcaa526d47bb3a9833a25b18db6f8fa1e92270212608e778a2b1d231d09578f3a5c9ae745c6adfbed47fa1773c318c130d3a07097835fa31e8c2e200b0c9b12ffc2d2e8ef6838589229e5833532c3c92bcfea31de657255a5356382ae885be4cc399d5344af3782dcee432ced2343f2c9080c14fbe4d83984788f5a610b182964c7e6fa2bedb7cd890a0a54eb5620ff17bf59b929b79d0a20bd7989d354a31bb15540d53bc257233c6412f59505f271373e7a3362be79b071bd5d08c55f97b5c9276e9e97892ccc1bd787f457b9b288397c3d218ee1be1d9a4c58f974cd016a47209326cb3bc4c2cffdab3a18bf229a0a7e32e484aff9e44f91daf46f9e1ef7aa1c5fb0506ba908c216ea8e3f7af928f3b7b44050432502174db4bad8659e63e1cc5b19a8e2cf32225934328cc49b5084d08875307a740840abb74ab88c81e4f5d167329bde533eb22be82c72c75f39e59170abb4deb80b910518c9492937764400203717eafd4c3110b8653284a920bc4626ec6c4a41d5105e4018b389d05fa735014624f4fcf79247b8637c973ec82c6aee90b0fae2a1bfe6e341e0e0fdd4ba84d1f5e33ae15060e7812b1c4b6f13d65793af5aef5d7275b51c5bf6380c20f1667cbc3aec9161808d35ab76eff8c911cfd9978879c16a59a6198a37667af7fcf4f089a877e348bab18cb81f8fd2b259f950740104c55b55bd986df8a9359fb6a2ad449e6334b39337bc2480450c3be59361209f1c986cc47b225b8b1fb9140f35b16fe8ddf0f37479d737abb77ff8115a2cfd944bc2f9b50d87c9d7dc0939c87ce",
      "public_key":"04c89aea349bda56a20561fcbf5c0a57b1e7d3dfcb9e77dfaabce30494756f151f819e7837440c3ed9814a053a4cbfc4532abbb598007142e0b02639a58ee5010f"
    }],
  "rsa_public_key": {
    "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="
}

NOTE: A User Data segment in the report is an identifier of 1-to-1 relationship between the report and the request during the verification of the report.

The formula of the User Data is:

img

Example of Plaintext JSON Object

{
	"key_meta": {
		"k": 2,
		"l": 3,
		"vkv": "92880508AEAAF864A28FB18B905822E56FCB345858301A6C00A4958C3AFD0DF19845B47AE48557E5D97DD77784B9E45FD18FBFDF6C1ED337FFA0F0C7001E793E2A56958A456B3DF3C2C94C9FF4C64DF85B17B34B73F4103BB5D4C58A1506B36E2C935341237DC6F75C02D282D90ADC8B59BECDDCDB49CB67EE0638E3FE21E6F9",
		"vku": "3AA66E665E7C92D92C482CB5B572317D371D69CF512B3E90421390638FE98D7ECF278F4D99C4387AAAEFE85E008FA53D844FF8DA9EB88B1098843A949D1AFAE32F5AB2B473F64B9F93B47E1C69B1963C2EEE6D5198C97ABE9FD9E0D32FB54D29601A404CA5706655E92E459C49A94DE9ABEA95C9596C5DF8983831264446F984",
		"vkiArr": [
			"575AD1B299E5F2D6C54D27CEEAB2D540836712C7F3C42182FB49D33089FE1BDE342322611D066F212D3054212D6CA99B07E522705575346C4CB5790591DEADD5B965D924C0AA8575D0C547D141EDCDCF46103DEB12E5A48A869A265B42CA5CF5B0A90F3B9AE054472E3D5473B27E19C47088B2DD642478600B42C0FEE6540306",
			"2CC2B5E6B76BB981BA58C9F188ED4B8CC9D3194A3A89B39F8D4A1D401ABEBCD26335AD77D6E3A6BEBEB570F340BCCFEA1A5BF236B91C026AFA3A6506411FB5DD25FB43C768EF2C97358B7D2184DDF9BB05376847F6ADA019214E151DE198668C57F1FD37E64AF7FAA2DB32EDE6AF99E2668C92175C5DB2DDC76DEEB9AA46D771",
			"250FF864469C55AC00536A604D8ED738FBD603006AD729FF957601CCA01B24BF40901569C05B0D2B76A6C5A417670663DF5A34CECC96E67406547B35E65C5031DF5C22394B8CE2535A3724EAD084919C84FF6B5ED4594C66F9CCE5B3AE0031DA0C1A58B806ED366BB8A819AFB56F25DC2080792FDF2CEAA46DDE71A1D2D986E0"
		]
	},
	"key_shard": {
		"index": 1,
		"private_key_shard": "17E72B0D465C2391A55DEB3261791F8950D60E733FA4CD94DC6CED10D9436A8713B241AA11B4DC8F4136872C5C212B0835110A66D47C151552A999C0AAB0B96125974046BD9E3E2899AA58AB32099D192393FF5706B938D7DCEDD4672B72C765D202E239196EE7BF9A5FBC1E9EE0A1311F8485596719AD106B088541A1A77120"
	}
}

Query Request Details

Interface URL Example

http://YOUR_HOST/arweave/query_key_shard

Request Method

POST

Content-Type

JSON

Request Body

Parameter Type Required Description
pubkey_list_hash String YES The hash of the concatenation of the public keys from user_public_key_list generated by SHA-256 in hexadecimal.
{
  "pubkey_list_hash": "f6fca699eae08f95900e06744487f421a9e516c896efb72af4a7aad375c30636"
}

NOTE: Please refer Example of public key list hash calculation to get a valid pubkey_list_hash.

Example of the success response

{
  "request_id": "A1A37ADE5CA49998",
  "success": true,
  "code": 0,
  "message": {
    "success": true,
    "status_code": 1,
    "status_text": "Generating",
    "k": 2,
    "l": 3,
    "alive_time_seconds": 10
  }
}

Example of failure response

  • error in App
{
  "request_id": "A1A37ADE5CA49998",
  "success": false,
  "code": 536870913,
  "message": "invalid input, please check your data."
}
  • error in Enclave
{
  "request_id": "A1A37ADE5CA49998",
  "success": false,
  "code": 268435459,
  "message": {
    "success": false
  }
}

Intel® SGX Remote Attestation

In this project, we use Intel SGX DCAP to support remote attestation to provide a certification that this service is securely running within an enclave on an Intel® SGX enabled platform. As Example of Webhook Return Data shown above, there is a field tee_report which is the remote attestation certification (the report) generated by the Intel® SGX enabled platform on which the service is currently running.

Therefore, we offer a simple verification demo safeheron-sgx-remote-attestation-js for this specific project to verify the validation of the remote attestation certification (the report).

Please note that before you use safeheron-sgx-remote-attestation-js, please make sure that the MRENCLAVE of your deployed service is the same as the current MRENCLAVE (MRENCLAVE is the measurement of Enclave. Any change of the code and initial data in Enclave will result in a different value).

For more details on DCAP and remote attestation, please refer to the Intel® Documentation.

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.

About

Safeheron’s TEE based RSA key sharding service.

License:Other


Languages

Language:C++ 52.0%Language:C 44.1%Language:CMake 3.9%