From 0fb9f47e784261369c52c1b49d1484f34409ecaf Mon Sep 17 00:00:00 2001 From: "Li, Xun" Date: Fri, 30 Jun 2017 15:51:16 +0800 Subject: [PATCH] Linux 1.9 Open Source Gold release Signed-off-by: Li, Xun --- License.txt | 111 +- .../sgx/SGXEnclave/makefiles/c++/sgx_t.mk | 4 +- .../sgx/SGXEnclave/makefiles/c/sgx_t.mk | 4 +- .../makefiles/c++/sgx_t_static.mk | 4 +- .../makefiles/c/sgx_t_static.mk | 4 +- Makefile | 6 + README.md | 123 +- SampleCode/Cxx11SGXDemo/.cproject | 216 + SampleCode/Cxx11SGXDemo/.project | 28 + .../.settings/language.settings.xml | 73 + SampleCode/Cxx11SGXDemo/App/App.cpp | 263 + SampleCode/Cxx11SGXDemo/App/App.h | 69 + .../App/TrustedLibrary/Libcxx.cpp | 212 + .../Cxx11SGXDemo/Enclave/Enclave.config.xml | 12 + SampleCode/Cxx11SGXDemo/Enclave/Enclave.cpp | 50 + SampleCode/Cxx11SGXDemo/Enclave/Enclave.edl | 55 + SampleCode/Cxx11SGXDemo/Enclave/Enclave.h | 48 + SampleCode/Cxx11SGXDemo/Enclave/Enclave.lds | 9 + .../Cxx11SGXDemo/Enclave/Enclave_debug.lds | 10 + .../Cxx11SGXDemo/Enclave/Enclave_private.pem | 39 + .../Enclave/TrustedLibrary/Libcxx.cpp | 917 + .../Enclave/TrustedLibrary/Libcxx.edl | 70 + SampleCode/Cxx11SGXDemo/Makefile | 252 + SampleCode/Cxx11SGXDemo/README.txt | 44 + SampleCode/LocalAttestation/.cproject | 187 +- .../.settings/language.settings.xml | 73 + SampleCode/LocalAttestation/Makefile | 25 +- SampleCode/LocalAttestation/README.txt | 2 +- SampleCode/PowerTransition/.cproject | 187 +- .../.settings/language.settings.xml | 73 + SampleCode/PowerTransition/Makefile | 17 +- SampleCode/PowerTransition/README.txt | 2 +- SampleCode/RemoteAttestation/.cproject | 187 +- .../.settings/language.settings.xml | 73 + SampleCode/RemoteAttestation/Makefile | 18 +- SampleCode/RemoteAttestation/README.txt | 2 +- .../RemoteAttestation/isv_app/isv_app.cpp | 13 +- .../isv_app/sample_messages.h | 18 +- .../service_provider/ecp.cpp | 8 +- SampleCode/SampleEnclave/.cproject | 187 +- .../.settings/language.settings.xml | 73 + .../App/Edger8rSyntax/Pointers.cpp | 8 +- .../Enclave/TrustedLibrary/Libc.cpp | 2 +- .../Enclave/TrustedLibrary/Thread.cpp | 2 +- SampleCode/SampleEnclave/Makefile | 17 +- SampleCode/SampleEnclave/README.txt | 2 +- SampleCode/SealedData/.cproject | 187 +- .../.settings/language.settings.xml | 73 + SampleCode/SealedData/Makefile | 16 +- SampleCode/SealedData/README.txt | 2 +- buildenv.mk | 9 +- common/inc/internal/metadata.h | 5 +- common/inc/internal/routine.h | 2 +- common/inc/internal/se_cdefs.h | 9 +- common/inc/internal/se_macro.h | 2 +- common/inc/internal/se_version.h | 2 +- common/inc/sgx_attributes.h | 10 +- common/inc/sgx_defs.h | 2 + common/inc/sgx_error.h | 4 +- common/inc/sgx_report.h | 2 +- common/inc/sgx_tcrypto.h | 79 +- common/inc/sgx_thread.h | 10 +- common/inc/sgx_tkey_exchange.h | 2 +- common/inc/sgx_tprotected_fs.edl | 49 + common/inc/sgx_tprotected_fs.h | 276 + common/inc/sgx_trts_exception.h | 2 +- common/inc/sgx_tseal.h | 2 + common/inc/sgx_uae_service.h | 16 + common/inc/sgx_ukey_exchange.h | 4 +- common/inc/stdc++/linux/typeinfo | 10 + common/inc/tlibc/setjmp.h | 9 +- common/inc/tlibc/sys/_types.h | 7 +- common/inc/tlibc/sys/stdint.h | 12 + download_prebuilt.sh | 18 +- external/crypto_px/Makefile | 2 +- external/epid-sdk-3.0.0/LICENSE.txt | 6 +- external/epid-sdk-3.0.0/NOTICE.txt | 9 +- .../doc/html/1_81_2file__parser_8h.html | 104 - .../doc/html/1_81_2types_8h.html | 151 - .../epid-sdk-3.0.0/doc/html/Basenames.html | 93 - .../doc/html/BuildToolsInstallation.html | 128 - .../epid-sdk-3.0.0/doc/html/BuildingSdk.html | 179 - .../epid-sdk-3.0.0/doc/html/ChangeLog.html | 134 - .../epid-sdk-3.0.0/doc/html/ChoosingiKGF.html | 231 - .../epid-sdk-3.0.0/doc/html/EpidOverview.html | 173 - .../epid-sdk-3.0.0/doc/html/Examples.html | 85 - external/epid-sdk-3.0.0/doc/html/Examples.js | 5 - .../epid-sdk-3.0.0/doc/html/Glossary.html | 174 - .../doc/html/ImplementationNotes.html | 110 - .../doc/html/IssuerMaterial.html | 293 - .../doc/html/LegalInformation.html | 84 - .../epid-sdk-3.0.0/doc/html/Revocation.html | 142 - .../epid-sdk-3.0.0/doc/html/SdkOverview.html | 203 - .../doc/html/SignVerifyTutorial.html | 239 - .../doc/html/SignmsgWalkthru.html | 170 - .../doc/html/VerifysigWalkthru.html | 190 - .../epid-sdk-3.0.0/doc/html/annotated.html | 136 - .../epid-sdk-3.0.0/doc/html/arrowdown.png | Bin 246 -> 0 bytes .../epid-sdk-3.0.0/doc/html/arrowright.png | Bin 229 -> 0 bytes .../doc/html/basenames_8dox.html | 82 - external/epid-sdk-3.0.0/doc/html/basicdoc.png | Bin 19922 -> 0 bytes external/epid-sdk-3.0.0/doc/html/bc_s.png | Bin 676 -> 0 bytes external/epid-sdk-3.0.0/doc/html/bdwn.png | Bin 147 -> 0 bytes .../epid-sdk-3.0.0/doc/html/bignum_8h.html | 137 - .../doc/html/bitsupplier_8h.html | 92 - .../html/build__tools__installation_8dox.html | 82 - .../doc/html/building__sdk_8dox.html | 82 - .../doc/html/choosing__ikgf_8dox.html | 82 - external/epid-sdk-3.0.0/doc/html/classes.html | 113 - external/epid-sdk-3.0.0/doc/html/closed.png | Bin 132 -> 0 bytes .../dir_02c945662023679b89476bd7126bc985.html | 93 - .../dir_12b90d9c027aaf878a834df729679a56.html | 96 - .../dir_512d3e62841a8535b716ec4cf8b9e950.html | 90 - .../dir_a32be19bc88f3d7aac6b7249da379f26.html | 87 - .../dir_ef364879bae02db2684040178ed9b186.html | 84 - .../dir_f169ebf8da29290a918fa4b3f7151050.html | 111 - .../dir_f6bef457d5f671b6e774bfccc16651f6.html | 108 - external/epid-sdk-3.0.0/doc/html/doc.png | Bin 746 -> 0 bytes external/epid-sdk-3.0.0/doc/html/doxygen.css | 1475 -- external/epid-sdk-3.0.0/doc/html/doxygen.png | Bin 3779 -> 0 bytes .../epid-sdk-3.0.0/doc/html/dynsections.js | 97 - .../epid-sdk-3.0.0/doc/html/ecdsa_8h.html | 98 - .../epid-sdk-3.0.0/doc/html/ecgroup_8h.html | 165 - .../doc/html/epid__overview_8dox.html | 82 - .../epid_diagram_high_level_interaction.png | Bin 25513 -> 0 bytes .../html/epid_diagram_high_level_use_case.png | Bin 16041 -> 0 bytes .../html/epid_diagram_issuer_high_level.png | Bin 4857 -> 0 bytes .../html/epid_diagram_member_high_level.png | Bin 8319 -> 0 bytes .../html/epid_diagram_verifier_high_level.png | Bin 8897 -> 0 bytes .../epid-sdk-3.0.0/doc/html/epidstyle.css | 325 - .../epid-sdk-3.0.0/doc/html/errors_8h.html | 124 - .../doc/html/examples_8dox.html | 82 - .../doc/html/file__parser_8h.html | 154 - external/epid-sdk-3.0.0/doc/html/files.html | 105 - .../doc/html/finitefield_8h.html | 174 - .../epid-sdk-3.0.0/doc/html/folderclosed.png | Bin 616 -> 0 bytes .../epid-sdk-3.0.0/doc/html/folderopen.png | Bin 597 -> 0 bytes .../epid-sdk-3.0.0/doc/html/functions.html | 510 - .../doc/html/functions_vars.html | 510 - external/epid-sdk-3.0.0/doc/html/globals.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_b.html | 109 - .../epid-sdk-3.0.0/doc/html/globals_d.html | 97 - .../epid-sdk-3.0.0/doc/html/globals_defs.html | 83 - .../epid-sdk-3.0.0/doc/html/globals_e.html | 319 - .../epid-sdk-3.0.0/doc/html/globals_enum.html | 89 - .../epid-sdk-3.0.0/doc/html/globals_eval.html | 205 - .../epid-sdk-3.0.0/doc/html/globals_f.html | 127 - .../epid-sdk-3.0.0/doc/html/globals_func.html | 502 - .../epid-sdk-3.0.0/doc/html/globals_g.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_h.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_i.html | 82 - .../epid-sdk-3.0.0/doc/html/globals_k.html | 211 - .../epid-sdk-3.0.0/doc/html/globals_m.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_n.html | 103 - .../epid-sdk-3.0.0/doc/html/globals_p.html | 121 - .../epid-sdk-3.0.0/doc/html/globals_r.html | 88 - .../epid-sdk-3.0.0/doc/html/globals_s.html | 82 - .../epid-sdk-3.0.0/doc/html/globals_t.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_type.html | 131 - .../epid-sdk-3.0.0/doc/html/globals_v.html | 79 - .../epid-sdk-3.0.0/doc/html/globals_vars.html | 80 - .../epid-sdk-3.0.0/doc/html/globals_w.html | 85 - .../doc/html/glossary_8dox.html | 82 - .../doc/html/group___big_num_primitives.html | 616 - .../doc/html/group___big_num_primitives.js | 16 - .../doc/html/group___ec_group_primitives.html | 1198 - .../doc/html/group___ec_group_primitives.js | 25 - .../doc/html/group___ecdsa_primitives.html | 229 - .../doc/html/group___ecdsa_primitives.js | 5 - .../group___epid11_file_parser_module.html | 362 - .../html/group___epid11_file_parser_module.js | 7 - .../group___epid11_pairing_primitives.html | 245 - .../html/group___epid11_pairing_primitives.js | 7 - .../doc/html/group___epid11_types.html | 150 - .../doc/html/group___epid11_types.js | 97 - .../html/group___epid11_verifier_module.html | 780 - .../html/group___epid11_verifier_module.js | 22 - .../doc/html/group___epid_common.html | 135 - .../doc/html/group___epid_common.js | 9 - .../doc/html/group___epid_math.html | 106 - .../doc/html/group___epid_math.js | 9 - .../doc/html/group___epid_member_module.html | 933 - .../doc/html/group___epid_member_module.js | 38 - .../doc/html/group___epid_module.html | 97 - .../doc/html/group___epid_module.js | 6 - .../doc/html/group___epid_print.html | 664 - .../doc/html/group___epid_print.js | 20 - .../doc/html/group___epid_types.html | 277 - .../doc/html/group___epid_types.js | 171 - .../html/group___epid_verifier_module.html | 1019 - .../doc/html/group___epid_verifier_module.js | 29 - .../doc/html/group___error_codes.html | 232 - .../doc/html/group___error_codes.js | 26 - .../doc/html/group___file_parser.html | 534 - .../doc/html/group___file_parser.js | 42 - .../html/group___finite_field_primitives.html | 1328 - .../html/group___finite_field_primitives.js | 28 - .../doc/html/group___hash_primitives.html | 142 - .../doc/html/group___hash_primitives.js | 7 - .../doc/html/group___pairing_primitives.html | 256 - .../doc/html/group___pairing_primitives.js | 8 - external/epid-sdk-3.0.0/doc/html/hash_8h.html | 102 - .../doc/html/implementation__notes_8dox.html | 82 - external/epid-sdk-3.0.0/doc/html/index.html | 78 - .../doc/html/issuer__material_8dox.html | 82 - external/epid-sdk-3.0.0/doc/html/jquery.js | 68 - .../doc/html/legal__information_8dox.html | 82 - .../doc/html/mainpage_8dox.html | 82 - .../doc/html/member_2api_8h.html | 156 - external/epid-sdk-3.0.0/doc/html/modules.html | 99 - external/epid-sdk-3.0.0/doc/html/modules.js | 4 - external/epid-sdk-3.0.0/doc/html/nav_f.png | Bin 153 -> 0 bytes external/epid-sdk-3.0.0/doc/html/nav_g.png | Bin 95 -> 0 bytes external/epid-sdk-3.0.0/doc/html/nav_h.png | Bin 98 -> 0 bytes external/epid-sdk-3.0.0/doc/html/navtree.css | 143 - external/epid-sdk-3.0.0/doc/html/navtree.js | 523 - .../epid-sdk-3.0.0/doc/html/navtreedata.js | 137 - .../epid-sdk-3.0.0/doc/html/navtreeindex0.js | 253 - .../epid-sdk-3.0.0/doc/html/navtreeindex1.js | 253 - .../epid-sdk-3.0.0/doc/html/navtreeindex2.js | 61 - external/epid-sdk-3.0.0/doc/html/open.png | Bin 123 -> 0 bytes .../doc/html/organization_8dox.html | 82 - .../doc/html/pageorder_8dox.html | 84 - external/epid-sdk-3.0.0/doc/html/pages.html | 96 - .../epid-sdk-3.0.0/doc/html/pairing_8h.html | 109 - .../doc/html/printutils_8h.html | 138 - external/epid-sdk-3.0.0/doc/html/resize.js | 97 - .../doc/html/revocation_8dox.html | 82 - .../doc/html/sdk__overview_8dox.html | 82 - .../doc/html/sdk_block_diagram.png | Bin 12425 -> 0 bytes .../doc/html/sign__verify__tutorial_8dox.html | 82 - .../doc/html/signmsg__walkthrough_8dox.html | 82 - external/epid-sdk-3.0.0/doc/html/splitbar.png | Bin 314 -> 0 bytes .../epid-sdk-3.0.0/doc/html/stdtypes_8h.html | 109 - .../doc/html/struct_basic_signature.html | 126 - .../doc/html/struct_big_num_str.html | 97 - .../doc/html/struct_compressed_priv_key.html | 106 - .../doc/html/struct_ecdsa_private_key.html | 97 - .../doc/html/struct_ecdsa_public_key.html | 101 - .../doc/html/struct_ecdsa_signature.html | 101 - .../html/struct_epid11_basic_signature.html | 146 - .../doc/html/struct_epid11_g2_elem_str.html | 101 - .../doc/html/struct_epid11_group_pub_key.html | 110 - .../doc/html/struct_epid11_group_rl.html | 106 - .../doc/html/struct_epid11_gt_elem_str.html | 97 - .../doc/html/struct_epid11_nr_proof.html | 110 - .../doc/html/struct_epid11_params.html | 170 - .../doc/html/struct_epid11_priv_rl.html | 110 - .../doc/html/struct_epid11_sig_rl.html | 110 - .../doc/html/struct_epid11_sig_rl_entry.html | 101 - .../doc/html/struct_epid11_signature.html | 110 - .../html/struct_epid11_verifier_precomp.html | 113 - .../doc/html/struct_epid2_params.html | 130 - .../doc/html/struct_epid_ca_certificate.html | 129 - .../doc/html/struct_epid_file_header.html | 101 - .../doc/html/struct_epid_signature.html | 110 - .../doc/html/struct_fp_elem_str.html | 97 - .../doc/html/struct_fq12_elem_str.html | 97 - .../doc/html/struct_fq2_elem_str.html | 97 - .../doc/html/struct_fq3_elem_str.html | 97 - .../doc/html/struct_fq6_elem_str.html | 97 - .../doc/html/struct_fq_elem_str.html | 97 - .../doc/html/struct_g1_elem_str.html | 101 - .../doc/html/struct_g2_elem_str.html | 101 - .../doc/html/struct_group_pub_key.html | 110 - .../doc/html/struct_group_rl.html | 106 - .../doc/html/struct_gt_elem_str.html | 97 - .../doc/html/struct_i_priv_key.html | 102 - .../doc/html/struct_join_request.html | 106 - .../doc/html/struct_member_precomp.html | 111 - .../html/struct_membership_credential.html | 106 - .../doc/html/struct_nr_proof.html | 110 - .../doc/html/struct_oct_str128.html | 97 - .../doc/html/struct_oct_str16.html | 97 - .../doc/html/struct_oct_str256.html | 97 - .../doc/html/struct_oct_str32.html | 97 - .../doc/html/struct_oct_str512.html | 97 - .../doc/html/struct_oct_str600.html | 97 - .../doc/html/struct_oct_str64.html | 97 - .../doc/html/struct_oct_str768.html | 97 - .../doc/html/struct_oct_str8.html | 97 - .../doc/html/struct_oct_str80.html | 97 - .../html/struct_pre_computed_signature.html | 138 - .../doc/html/struct_priv_key.html | 110 - .../doc/html/struct_priv_rl.html | 110 - .../doc/html/struct_sha256_digest.html | 97 - .../doc/html/struct_sig_rl.html | 110 - .../doc/html/struct_sig_rl_entry.html | 101 - .../doc/html/struct_verifier_precomp.html | 115 - .../doc/html/struct_verifier_rl.html | 110 - external/epid-sdk-3.0.0/doc/html/sync_off.png | Bin 853 -> 0 bytes external/epid-sdk-3.0.0/doc/html/sync_on.png | Bin 845 -> 0 bytes external/epid-sdk-3.0.0/doc/html/tab_a.png | Bin 142 -> 0 bytes external/epid-sdk-3.0.0/doc/html/tab_b.png | Bin 169 -> 0 bytes external/epid-sdk-3.0.0/doc/html/tab_h.png | Bin 177 -> 0 bytes external/epid-sdk-3.0.0/doc/html/tab_s.png | Bin 184 -> 0 bytes external/epid-sdk-3.0.0/doc/html/tabs.css | 60 - .../doc/html/tatepairing_8h.html | 109 - .../epid-sdk-3.0.0/doc/html/types_8h.html | 228 - .../doc/html/verifier_21_81_2api_8h.html | 144 - .../doc/html/verifier_2api_8h.html | 158 - .../doc/html/verifysig__walkthrough_8dox.html | 82 - external/epid-sdk-3.0.0/doc/index.html | 15 - .../epid/common-testhelper/Makefile | 4 +- external/epid-sdk-3.0.0/epid/common/Makefile | 4 +- external/epid-sdk-3.0.0/epid/member/Makefile | 4 +- .../epid-sdk-3.0.0/epid/verifier/Makefile | 4 +- external/epid-sdk-3.0.0/example/Makefile | 4 +- external/epid-sdk-3.0.0/example/util/Makefile | 2 +- external/epid-sdk-3.0.0/ext/dropt/Makefile | 2 +- external/epid-sdk-3.0.0/ext/gtest/LICENSE | 28 - external/epid-sdk-3.0.0/ext/gtest/Makefile | 25 - .../epid-sdk-3.0.0/ext/gtest/gtest-all.cc | 9599 -------- external/epid-sdk-3.0.0/ext/gtest/gtest.h | 20061 ---------------- external/epid-sdk-3.0.0/ext/gtest/gtest.parts | 52 - .../ext/ipp/sources/ippcp/Makefile | 2 +- .../ext/ipp/sources/ippcpepid/Makefile | 2 +- external/epid-sdk-3.0.0/tools/Makefile | 10 +- external/epid/LICENSE.txt | 6 +- external/epid/NOTICE.txt | 2 +- external/epid/ReadMe.txt | 29 - external/epid/doc/html/BuildingSdk.html | 150 - external/epid/doc/html/ChangeLog.html | 106 - external/epid/doc/html/EpidOverview.html | 172 - external/epid/doc/html/Glossary.html | 170 - .../epid/doc/html/ImplementationNotes.html | 110 - external/epid/doc/html/IssuerMaterial.html | 136 - external/epid/doc/html/LegalInformation.html | 84 - external/epid/doc/html/SdkOverview.html | 163 - .../epid/doc/html/SignVerifyTutorial.html | 192 - external/epid/doc/html/annotated.html | 136 - external/epid/doc/html/arrowdown.png | Bin 246 -> 0 bytes external/epid/doc/html/arrowright.png | Bin 229 -> 0 bytes external/epid/doc/html/basicdoc.png | Bin 19922 -> 0 bytes external/epid/doc/html/bc_s.png | Bin 676 -> 0 bytes external/epid/doc/html/bdwn.png | Bin 147 -> 0 bytes external/epid/doc/html/bignum_8c.html | 120 - external/epid/doc/html/bignum_8h.html | 124 - external/epid/doc/html/bitsupplier_8h.html | 92 - .../epid/doc/html/building__sdk_8dox.html | 82 - .../doc/html/check__privrl__entry_8c.html | 93 - external/epid/doc/html/classes.html | 113 - external/epid/doc/html/closed.png | Bin 132 -> 0 bytes external/epid/doc/html/commitment_8c.html | 98 - external/epid/doc/html/commitment_8h.html | 108 - .../epid/doc/html/decompress__privkey_8c.html | 124 - .../dir_02c945662023679b89476bd7126bc985.html | 111 - .../dir_12b90d9c027aaf878a834df729679a56.html | 96 - .../dir_512d3e62841a8535b716ec4cf8b9e950.html | 123 - .../dir_f169ebf8da29290a918fa4b3f7151050.html | 132 - .../dir_f6bef457d5f671b6e774bfccc16651f6.html | 156 - external/epid/doc/html/doc.png | Bin 746 -> 0 bytes external/epid/doc/html/doxygen.css | 1475 -- external/epid/doc/html/doxygen.png | Bin 3779 -> 0 bytes external/epid/doc/html/dynsections.js | 97 - external/epid/doc/html/ecdsa_8h.html | 98 - external/epid/doc/html/ecdsa__sign_8c.html | 105 - external/epid/doc/html/ecdsa__verify_8c.html | 133 - external/epid/doc/html/ecgroup_8c.html | 222 - external/epid/doc/html/ecgroup_8h.html | 159 - .../epid/doc/html/endian__convert_8h.html | 92 - external/epid/doc/html/epid2params_8c.html | 98 - external/epid/doc/html/epid2params_8h.html | 105 - .../epid/doc/html/epid2params__ate_8inc.html | 82 - .../epid/doc/html/epid__overview_8dox.html | 82 - .../epid_diagram_high_level_interaction.png | Bin 25513 -> 0 bytes .../html/epid_diagram_high_level_use_case.png | Bin 16041 -> 0 bytes .../html/epid_diagram_issuer_high_level.png | Bin 4857 -> 0 bytes .../html/epid_diagram_member_high_level.png | Bin 8319 -> 0 bytes .../html/epid_diagram_verifier_high_level.png | Bin 8897 -> 0 bytes external/epid/doc/html/epidstyle.css | 325 - external/epid/doc/html/errors_8c.html | 101 - external/epid/doc/html/errors_8h.html | 122 - external/epid/doc/html/examples.html | 82 - external/epid/doc/html/examples.js | 5 - external/epid/doc/html/examples_8dox.html | 82 - external/epid/doc/html/file__parser_8c.html | 118 - external/epid/doc/html/file__parser_8h.html | 141 - external/epid/doc/html/files.html | 141 - external/epid/doc/html/finitefield_8c.html | 162 - external/epid/doc/html/finitefield_8h.html | 159 - external/epid/doc/html/folderclosed.png | Bin 616 -> 0 bytes external/epid/doc/html/folderopen.png | Bin 597 -> 0 bytes external/epid/doc/html/functions.html | 98 - external/epid/doc/html/functions_b.html | 107 - external/epid/doc/html/functions_c.html | 85 - external/epid/doc/html/functions_d.html | 90 - external/epid/doc/html/functions_e.html | 112 - external/epid/doc/html/functions_f.html | 100 - external/epid/doc/html/functions_g.html | 122 - external/epid/doc/html/functions_h.html | 98 - external/epid/doc/html/functions_k.html | 95 - external/epid/doc/html/functions_l.html | 79 - external/epid/doc/html/functions_m.html | 82 - external/epid/doc/html/functions_n.html | 102 - external/epid/doc/html/functions_p.html | 105 - external/epid/doc/html/functions_q.html | 80 - external/epid/doc/html/functions_r.html | 121 - external/epid/doc/html/functions_s.html | 113 - external/epid/doc/html/functions_t.html | 99 - external/epid/doc/html/functions_v.html | 88 - external/epid/doc/html/functions_vars.html | 98 - external/epid/doc/html/functions_vars_b.html | 107 - external/epid/doc/html/functions_vars_c.html | 85 - external/epid/doc/html/functions_vars_d.html | 90 - external/epid/doc/html/functions_vars_e.html | 112 - external/epid/doc/html/functions_vars_f.html | 100 - external/epid/doc/html/functions_vars_g.html | 122 - external/epid/doc/html/functions_vars_h.html | 98 - external/epid/doc/html/functions_vars_k.html | 95 - external/epid/doc/html/functions_vars_l.html | 79 - external/epid/doc/html/functions_vars_m.html | 82 - external/epid/doc/html/functions_vars_n.html | 102 - external/epid/doc/html/functions_vars_p.html | 105 - external/epid/doc/html/functions_vars_q.html | 80 - external/epid/doc/html/functions_vars_r.html | 121 - external/epid/doc/html/functions_vars_s.html | 113 - external/epid/doc/html/functions_vars_t.html | 99 - external/epid/doc/html/functions_vars_v.html | 88 - external/epid/doc/html/functions_vars_w.html | 83 - external/epid/doc/html/functions_vars_x.html | 95 - external/epid/doc/html/functions_vars_y.html | 83 - external/epid/doc/html/functions_w.html | 83 - external/epid/doc/html/functions_x.html | 95 - external/epid/doc/html/functions_y.html | 83 - external/epid/doc/html/get__sigsize_8c.html | 93 - external/epid/doc/html/globals.html | 80 - external/epid/doc/html/globals_b.html | 119 - external/epid/doc/html/globals_c.html | 104 - external/epid/doc/html/globals_d.html | 120 - external/epid/doc/html/globals_defs.html | 197 - external/epid/doc/html/globals_e.html | 308 - external/epid/doc/html/globals_enum.html | 86 - external/epid/doc/html/globals_eval.html | 184 - external/epid/doc/html/globals_f.html | 129 - external/epid/doc/html/globals_func.html | 80 - external/epid/doc/html/globals_func_b.html | 92 - external/epid/doc/html/globals_func_c.html | 99 - external/epid/doc/html/globals_func_d.html | 120 - external/epid/doc/html/globals_func_e.html | 287 - external/epid/doc/html/globals_func_f.html | 120 - external/epid/doc/html/globals_func_i.html | 83 - external/epid/doc/html/globals_func_m.html | 80 - external/epid/doc/html/globals_func_n.html | 107 - external/epid/doc/html/globals_func_o.html | 79 - external/epid/doc/html/globals_func_p.html | 128 - external/epid/doc/html/globals_func_r.html | 88 - external/epid/doc/html/globals_func_s.html | 99 - external/epid/doc/html/globals_func_w.html | 88 - external/epid/doc/html/globals_g.html | 79 - external/epid/doc/html/globals_h.html | 79 - external/epid/doc/html/globals_i.html | 89 - external/epid/doc/html/globals_k.html | 188 - external/epid/doc/html/globals_m.html | 86 - external/epid/doc/html/globals_n.html | 110 - external/epid/doc/html/globals_o.html | 79 - external/epid/doc/html/globals_p.html | 137 - external/epid/doc/html/globals_r.html | 100 - external/epid/doc/html/globals_s.html | 114 - external/epid/doc/html/globals_t.html | 79 - external/epid/doc/html/globals_type.html | 110 - external/epid/doc/html/globals_vars.html | 78 - external/epid/doc/html/globals_w.html | 91 - external/epid/doc/html/glossary_8dox.html | 82 - .../doc/html/group___big_num_primitives.html | 445 - .../doc/html/group___big_num_primitives.js | 12 - .../doc/html/group___ec_group_primitives.html | 1078 - .../doc/html/group___ec_group_primitives.js | 23 - .../doc/html/group___ecdsa_primitives.html | 229 - .../epid/doc/html/group___ecdsa_primitives.js | 5 - .../epid/doc/html/group___epid_common.html | 1066 - external/epid/doc/html/group___epid_common.js | 76 - external/epid/doc/html/group___epid_math.html | 106 - external/epid/doc/html/group___epid_math.js | 9 - .../doc/html/group___epid_member_module.html | 933 - .../doc/html/group___epid_member_module.js | 37 - .../epid/doc/html/group___epid_module.html | 97 - external/epid/doc/html/group___epid_module.js | 6 - .../epid/doc/html/group___epid_print.html | 660 - external/epid/doc/html/group___epid_print.js | 19 - .../epid/doc/html/group___epid_types.html | 266 - external/epid/doc/html/group___epid_types.js | 169 - .../html/group___epid_verifier_module.html | 834 - .../doc/html/group___epid_verifier_module.js | 22 - .../epid/doc/html/group___error_codes.html | 225 - external/epid/doc/html/group___error_codes.js | 24 - .../epid/doc/html/group___file_parser.html | 439 - external/epid/doc/html/group___file_parser.js | 34 - .../html/group___finite_field_primitives.html | 1048 - .../html/group___finite_field_primitives.js | 23 - .../doc/html/group___hash_primitives.html | 142 - .../epid/doc/html/group___hash_primitives.js | 7 - .../doc/html/group___pairing_primitives.html | 249 - .../doc/html/group___pairing_primitives.js | 7 - external/epid/doc/html/grouppubkey_8c.html | 96 - external/epid/doc/html/grouppubkey_8h.html | 104 - external/epid/doc/html/hash_8h.html | 102 - .../doc/html/implementation__notes_8dox.html | 82 - external/epid/doc/html/index.html | 78 - .../epid/doc/html/issuer__material_8dox.html | 82 - external/epid/doc/html/jquery.js | 68 - .../doc/html/legal__information_8dox.html | 82 - external/epid/doc/html/mainpage_8dox.html | 82 - external/epid/doc/html/member_2api_8h.html | 148 - .../epid/doc/html/member_2context_8c.html | 129 - .../epid/doc/html/member_2context_8h.html | 159 - external/epid/doc/html/memory_8c.html | 118 - external/epid/doc/html/memory_8h.html | 124 - external/epid/doc/html/modules.html | 95 - external/epid/doc/html/modules.js | 4 - external/epid/doc/html/nav_f.png | Bin 153 -> 0 bytes external/epid/doc/html/nav_g.png | Bin 95 -> 0 bytes external/epid/doc/html/nav_h.png | Bin 98 -> 0 bytes external/epid/doc/html/navtree.css | 143 - external/epid/doc/html/navtree.js | 523 - external/epid/doc/html/navtreedata.js | 91 - external/epid/doc/html/navtreeindex0.js | 253 - external/epid/doc/html/navtreeindex1.js | 203 - external/epid/doc/html/nr__prove_8c.html | 132 - external/epid/doc/html/nrverify_8c.html | 128 - external/epid/doc/html/open.png | Bin 123 -> 0 bytes external/epid/doc/html/organization_8dox.html | 82 - external/epid/doc/html/pageorder_8dox.html | 84 - external/epid/doc/html/pages.html | 89 - external/epid/doc/html/pairing_8c.html | 205 - external/epid/doc/html/pairing_8h.html | 109 - external/epid/doc/html/presig_8c.html | 161 - external/epid/doc/html/printutils_8c.html | 178 - external/epid/doc/html/printutils_8h.html | 137 - external/epid/doc/html/privkey_8c.html | 96 - external/epid/doc/html/privkey_8h.html | 104 - external/epid/doc/html/request__join_8c.html | 133 - external/epid/doc/html/resize.js | 97 - .../epid/doc/html/sdk__overview_8dox.html | 82 - external/epid/doc/html/sdk_block_diagram.png | Bin 9193 -> 0 bytes external/epid/doc/html/sha256_8c.html | 93 - external/epid/doc/html/sign_8c.html | 97 - .../doc/html/sign__verify__tutorial_8dox.html | 82 - external/epid/doc/html/signbasic_8c.html | 122 - .../epid/doc/html/signmsg_8c-example.html | 77 - external/epid/doc/html/sigrlvalid_8c.html | 94 - external/epid/doc/html/sigrlvalid_8h.html | 94 - external/epid/doc/html/sigs__linked_8c.html | 93 - external/epid/doc/html/splitbar.png | Bin 314 -> 0 bytes external/epid/doc/html/stack_8c.html | 113 - external/epid/doc/html/stack_8h.html | 105 - external/epid/doc/html/stdtypes_8h.html | 105 - .../doc/html/struct_allowed_basename.html | 105 - .../epid/doc/html/struct_basic_signature.html | 126 - .../epid/doc/html/struct_big_num_str.html | 97 - .../epid/doc/html/struct_commit_values.html | 137 - .../doc/html/struct_compressed_priv_key.html | 107 - .../doc/html/struct_ecdsa_private_key.html | 97 - .../doc/html/struct_ecdsa_public_key.html | 101 - .../epid/doc/html/struct_ecdsa_signature.html | 101 - .../epid/doc/html/struct_epid2_params.html | 130 - .../epid/doc/html/struct_epid2_params__.html | 153 - .../doc/html/struct_epid_ca_certificate.html | 130 - .../doc/html/struct_epid_file_header.html | 101 - ...struct_epid_group_pub_key_certificate.html | 115 - .../epid/doc/html/struct_epid_signature.html | 111 - .../doc/html/struct_error_text_entry.html | 99 - .../epid/doc/html/struct_fp_elem_str.html | 97 - .../epid/doc/html/struct_fq12_elem_dat.html | 95 - .../epid/doc/html/struct_fq12_elem_str.html | 97 - .../epid/doc/html/struct_fq2_elem_dat.html | 95 - .../epid/doc/html/struct_fq2_elem_str.html | 97 - .../epid/doc/html/struct_fq6_elem_dat.html | 95 - .../epid/doc/html/struct_fq6_elem_str.html | 97 - .../epid/doc/html/struct_fq_elem_dat.html | 95 - .../epid/doc/html/struct_fq_elem_str.html | 97 - .../epid/doc/html/struct_g1_elem_str.html | 101 - .../epid/doc/html/struct_g2_elem_str.html | 101 - .../epid/doc/html/struct_group_pub_key.html | 111 - .../epid/doc/html/struct_group_pub_key__.html | 109 - external/epid/doc/html/struct_group_rl.html | 107 - .../epid/doc/html/struct_gt_elem_str.html | 97 - external/epid/doc/html/struct_i_priv_key.html | 102 - .../doc/html/struct_join_p_commit_values.html | 127 - .../epid/doc/html/struct_join_request.html | 106 - external/epid/doc/html/struct_member_ctx.html | 147 - .../epid/doc/html/struct_member_precomp.html | 112 - .../html/struct_membership_credential.html | 106 - external/epid/doc/html/struct_nr_proof.html | 110 - .../html/struct_nr_verify_commit_values.html | 133 - external/epid/doc/html/struct_oct_str128.html | 97 - external/epid/doc/html/struct_oct_str16.html | 97 - external/epid/doc/html/struct_oct_str256.html | 97 - external/epid/doc/html/struct_oct_str32.html | 97 - external/epid/doc/html/struct_oct_str512.html | 97 - external/epid/doc/html/struct_oct_str64.html | 97 - external/epid/doc/html/struct_oct_str8.html | 97 - .../html/struct_pre_computed_signature.html | 138 - external/epid/doc/html/struct_priv_key.html | 111 - external/epid/doc/html/struct_priv_key__.html | 109 - external/epid/doc/html/struct_priv_rl.html | 111 - .../epid/doc/html/struct_sha256_digest.html | 97 - external/epid/doc/html/struct_sig_rl.html | 111 - .../epid/doc/html/struct_sig_rl_entry.html | 101 - external/epid/doc/html/struct_stack.html | 108 - .../epid/doc/html/struct_verifier_ctx.html | 143 - .../doc/html/struct_verifier_precomp.html | 112 - .../epid/doc/html/struct_verifier_rl.html | 111 - external/epid/doc/html/sync_off.png | Bin 853 -> 0 bytes external/epid/doc/html/sync_on.png | Bin 845 -> 0 bytes external/epid/doc/html/tab_a.png | Bin 142 -> 0 bytes external/epid/doc/html/tab_b.png | Bin 169 -> 0 bytes external/epid/doc/html/tab_h.png | Bin 177 -> 0 bytes external/epid/doc/html/tab_s.png | Bin 184 -> 0 bytes external/epid/doc/html/tabs.css | 60 - external/epid/doc/html/types_8h.html | 227 - external/epid/doc/html/verifier_2api_8h.html | 138 - .../epid/doc/html/verifier_2context_8c.html | 120 - .../epid/doc/html/verifier_2context_8h.html | 96 - external/epid/doc/html/verify_8c.html | 122 - external/epid/doc/html/verifybasic_8c.html | 125 - .../epid/doc/html/verifysig_8c-example.html | 77 - external/epid/doc/index.html | 15 - external/epid/ext/gtest/LICENSE | 28 - external/epid/ext/gtest/gtest-all.cc | 9596 -------- external/epid/ext/gtest/gtest.h | 20061 ---------------- external/epid/ext/gtest/gtest.parts | 50 - linux/installer/bin/install-sgx-sdk.bin.tmpl | 48 +- linux/installer/common/psw/Makefile | 7 +- linux/installer/common/psw/install.sh | 21 +- linux/installer/common/sdk/BOMs/sdk_base.txt | 161 + linux/installer/common/sdk/BOMs/sdk_x64.txt | 4 + linux/installer/common/sdk/BOMs/sdk_x86.txt | 4 + linux/installer/common/sdk/createTarball.sh | 2 +- linux/installer/common/sdk/install.sh | 17 +- psw/ae/Makefile | 8 +- psw/ae/aesm_service/Makefile | 9 +- .../config/aesmd_service/aesmd.service | 4 + .../source/aesm/application/aesm_logic.cpp | 31 +- .../source/aesm/application/aesm_logic.h | 1 + .../source/aesm/extension/aesm_http_msg.cpp | 4 +- .../aesm/extension/endpoint_select_info.cpp | 2 +- .../aesm/extension/platform_info_facility.cpp | 7 - .../aesm/extension/type_length_value.cpp | 2 +- .../source/aesm/extension/type_length_value.h | 3 +- .../aesm_wrapper/inc/AESMLogicWrapper.h | 2 + .../aesm_wrapper/src/UnixServerSocket.cpp | 5 +- .../source/epid_provision/epid_utility.cpp | 1 + psw/ae/aesm_service/source/le/LEClass.cpp | 95 +- .../aesm_service/source/oal/aesm_thread.cpp | 14 + psw/ae/aesm_service/source/pce/PCEClass.cpp | 4 +- .../source/pse_op/PSDAService.cpp | 104 +- .../aesm_service/source/pse_op/PSDAService.h | 1 + .../aesm_service/source/pse_op/PSEClass.cpp | 6 +- .../source/pse_op/aesm_pse_status.h | 2 +- .../source/pse_op/pse_op_psda_ocall.cpp | 2 +- psw/ae/aesm_service/source/qe/qe_logic.cpp | 24 +- .../storage/persistent_storage_table.cpp | 10 +- .../aesm_service/source/upse/interface_ocsp.h | 2 +- .../upse/u_certificate_provisioning.cpp | 2 +- psw/ae/buildenv.mk | 4 +- psw/ae/common/inc/AECloseSessionResponse.h | 2 +- psw/ae/common/inc/AECreateSessionResponse.h | 2 +- psw/ae/common/inc/AEExchangeReportResponse.h | 2 +- psw/ae/common/inc/AEGetLaunchTokenResponse.h | 2 +- psw/ae/common/inc/AEGetPsCapResponse.h | 2 +- psw/ae/common/inc/AEGetQuoteResponse.h | 2 +- psw/ae/common/inc/AEGetWhiteListResponse.h | 2 +- .../common/inc/AEGetWhiteListSizeResponse.h | 2 +- psw/ae/common/inc/AEInitQuoteResponse.h | 2 +- psw/ae/common/inc/AEInvokeServiceResponse.h | 2 +- .../common/inc/AEReportAttestationResponse.h | 2 +- .../inc/AESGXGetExtendedEpidGroupIdResponse.h | 2 +- .../AESGXSwitchExtendedEpidGroupResponse.h | 2 +- psw/ae/common/inc/IAEMessage.h | 2 +- psw/ae/common/inc/UnixCommunicationSocket.h | 4 +- psw/ae/common/se_sig_rl.cpp | 39 + psw/ae/common/src/AECloseSessionResponse.cpp | 2 +- psw/ae/common/src/AECreateSessionResponse.cpp | 2 +- .../common/src/AEExchangeReportResponse.cpp | 2 +- .../common/src/AEGetLaunchTokenResponse.cpp | 2 +- psw/ae/common/src/AEGetPsCapResponse.cpp | 2 +- psw/ae/common/src/AEGetQuoteRequest.cpp | 2 +- psw/ae/common/src/AEGetQuoteResponse.cpp | 2 +- psw/ae/common/src/AEGetWhiteListResponse.cpp | 2 +- .../common/src/AEGetWhiteListSizeResponse.cpp | 2 +- psw/ae/common/src/AEInitQuoteResponse.cpp | 2 +- psw/ae/common/src/AEInvokeServiceResponse.cpp | 2 +- .../src/AEReportAttestationResponse.cpp | 2 +- .../AESGXGetExtendedEpidGroupIdResponse.cpp | 2 +- .../AESGXSwitchExtendedEpidGroupResponse.cpp | 2 +- .../src/NonBlockingUnixSocketFactory.cpp | 5 +- psw/ae/common/src/ProtobufSerializer.cpp | 2 +- psw/ae/common/src/SocketTransporter.cpp | 6 +- psw/ae/common/src/UnixSocketFactory.cpp | 5 +- .../cse_provision_tool/cse_provision_tool.cpp | 1 + .../data/constants/linux/epid_verify_pub.hh | 27 +- psw/ae/data/constants/linux/pse_pr_padding.hh | 2 +- psw/ae/inc/internal/pse_pr_types.h | 2 +- psw/ae/inc/internal/utility.h | 2 +- psw/ae/inc/se_sig_rl.h | 1 + psw/ae/le/launch_enclave.cpp | 2 +- psw/ae/pse/pse_op/monotonic_counter.cpp | 2 +- psw/ae/pse/pse_op/monotonic_counter.h | 2 +- psw/ae/pse/pse_op/psda_service.cpp | 2 +- psw/ae/pse/pse_op/psda_service.h | 3 +- psw/ae/pse/pse_op/session_mgr.cpp | 4 +- psw/ae/pse/pse_op/session_mgr.h | 2 +- psw/ae/pse/pse_op/trusted_time.h | 2 +- psw/ae/pse/pse_op/vmc_db_generator/Makefile | 15 +- psw/ae/pse/pse_op/vmc_db_generator/main.cpp | 2 +- psw/ae/pse/pse_pr/Keys.cpp | 10 +- psw/ae/pse/pse_pr/Keys.h | 3 +- psw/ae/pse/pse_pr/Makefile | 4 + .../pse/pse_pr/X509_Parser/X509_Interface.h | 2 +- psw/ae/pse/pse_pr/X509_Parser/X509_Parser.cpp | 3 +- psw/ae/pse/pse_pr/X509_Parser/X509_Parser.h | 2 +- .../pse/pse_pr/X509_Parser/pse_pr_support.h | 12 - psw/ae/pse/pse_pr/include/csr_template_data.h | 2 +- psw/ae/pse/pse_pr/include/pse_pr_inc.h | 2 +- psw/ae/pse/pse_pr/include/safe_id.h | 2 +- psw/ae/pse/pse_pr/include/sign_template.h | 2 +- .../include/t_certificate_provisioning.h | 2 +- psw/ae/pse/pse_pr/t_long_term_pairing.cpp | 62 +- psw/uae_service/linux/Makefile | 2 +- psw/uae_service/linux/uae_service.lds | 3 + psw/uae_service/uae_service_version.cpp | 2 +- .../uae_wrapper/src/AEServicesImpl.cpp | 2 +- .../uae_wrapper/src/tae_ocall_api.cpp | 125 +- psw/uae_service/uae_wrapper/src/uae_api.cpp | 293 +- psw/urts/enclave.cpp | 2 +- psw/urts/linux/Makefile | 2 +- psw/urts/linux/enclave_creator_hw.cpp | 13 +- psw/urts/loader.cpp | 11 +- psw/urts/parser/Makefile | 2 +- psw/urts/parser/elfparser.cpp | 7 +- psw/urts/urts_com.h | 49 +- psw/urts/urts_version.cpp | 2 +- sdk/Makefile.opt_lib | 40 +- sdk/Makefile.source | 39 +- sdk/cpprt/linux/auxhelper.cc | 4 + sdk/cpprt/linux/stdexcept.cc | 13 + sdk/cpprt/tstdcxx_version.cpp | 2 +- sdk/debugger_interface/linux/Makefile | 9 +- sdk/debugger_interface/linux/ptrace_version.c | 2 +- sdk/debugger_interface/linux/se_ptrace.c | 3 +- sdk/gperftools/README | 11 +- sdk/gperftools/gperftools-2.5/Makefile.in | 13 + .../gperftools-2.5/autogen-linux.sh | 2 +- .../gperftools-2.5/src/malloc_extension.cc | 2 + .../gperftools-2.5/src/symbolize.cc | 2 + sdk/gperftools/gperftools-2.5/src/tcmalloc.cc | 6 + sdk/protected_fs/sgx_tprotected_fs/Makefile | 81 + .../sgx_tprotected_fs/file_crypto.cpp | 286 + .../sgx_tprotected_fs/file_flush.cpp | 548 + .../sgx_tprotected_fs/file_init.cpp | 652 + .../sgx_tprotected_fs/file_other.cpp | 395 + .../sgx_tprotected_fs/file_read_write.cpp | 657 + .../sgx_tprotected_fs/file_version.cpp | 24 +- .../sgx_tprotected_fs/lru_cache.cpp | 275 + .../sgx_tprotected_fs/lru_cache.h | 99 + .../sgx_tprotected_fs/protected_fs_file.h | 235 + .../sgx_tprotected_fs/protected_fs_nodes.h | 154 + .../sgx_tprotected_fs/sgx_tprotected_fs.cpp | 254 + .../validation_hook_recovery.h | 46 + sdk/protected_fs/sgx_uprotected_fs/Makefile | 74 + .../sgx_uprotected_fs/sgx_uprotected_fs.cpp | 510 + sdk/sample_libcrypto/Makefile | 7 +- sdk/selib/linux/Makefile | 2 +- sdk/selib/tservice_version.cpp | 2 +- sdk/sign_tool/SignTool/manage_metadata.cpp | 84 +- sdk/sign_tool/SignTool/manage_metadata.h | 1 + sdk/sign_tool/SignTool/sign_tool.cpp | 147 +- sdk/sign_tool/SignTool/util_st.h | 13 +- .../SEConfigureCPUSVN/linux/Makefile | 2 +- sdk/simulation/tae_service_sim/Makefile | 12 +- .../tae_service_sim/tae_service_sim.cpp | 57 +- sdk/simulation/trtssim/linux/Makefile | 10 +- .../uae_service_sim/licensing_sim.cpp | 3 +- sdk/simulation/uae_service_sim/linux/Makefile | 2 +- .../linux/uae_service_sim.linux.version | 3 + .../uae_service_sim/quoting_sim.cpp | 41 +- .../uae_service_sim/uae_service_deploy.c | 2 +- sdk/simulation/uinst/linux/Makefile | 2 +- sdk/simulation/urtssim/urts_sim.h | 2 +- sdk/tae_service/tae_service.cpp | 2 +- sdk/tlibc/gen/__strlen_chk.cpp | 2 +- sdk/tlibc/string/memset_s.c | 2 +- sdk/tlibc/tstdc_version.cpp | 2 +- sdk/tlibcrypto/Makefile | 2 +- sdk/tlibcrypto/sgx_rsa3072.cpp | 214 + sdk/tlibcxx/LICENSE.TXT | 76 + sdk/tlibcxx/Makefile | 70 + sdk/tlibcxx/README.sgx | 18 + sdk/tlibcxx/include/CMakeLists.txt | 63 + sdk/tlibcxx/include/__bit_reference | 1286 + sdk/tlibcxx/include/__bsd_locale_defaults.h | 33 + sdk/tlibcxx/include/__bsd_locale_fallbacks.h | 138 + sdk/tlibcxx/include/__config | 906 + sdk/tlibcxx/include/__config_site.in | 24 + sdk/tlibcxx/include/__debug | 226 + sdk/tlibcxx/include/__functional_03 | 1576 ++ sdk/tlibcxx/include/__functional_base | 680 + sdk/tlibcxx/include/__functional_base_03 | 224 + sdk/tlibcxx/include/__hash_table | 2642 ++ sdk/tlibcxx/include/__locale | 1481 ++ sdk/tlibcxx/include/__mutex_base | 438 + sdk/tlibcxx/include/__nullptr | 66 + sdk/tlibcxx/include/__refstring | 139 + sdk/tlibcxx/include/__sgx | 131 + sdk/tlibcxx/include/__split_buffer | 640 + sdk/tlibcxx/include/__sso_allocator | 79 + sdk/tlibcxx/include/__std_stream | 358 + sdk/tlibcxx/include/__threading_support | 205 + sdk/tlibcxx/include/__tree | 2647 ++ sdk/tlibcxx/include/__tuple | 438 + sdk/tlibcxx/include/__undef___deallocate | 20 + sdk/tlibcxx/include/__undef_min_max | 33 + sdk/tlibcxx/include/algorithm | 5761 +++++ sdk/tlibcxx/include/array | 349 + sdk/tlibcxx/include/atomic | 1865 ++ sdk/tlibcxx/include/bitset | 1127 + sdk/tlibcxx/include/cassert | 25 + sdk/tlibcxx/include/ccomplex | 29 + sdk/tlibcxx/include/cctype | 165 + sdk/tlibcxx/include/cerrno | 393 + sdk/tlibcxx/include/cfenv | 86 + sdk/tlibcxx/include/cfloat | 78 + sdk/tlibcxx/include/chrono | 1166 + sdk/tlibcxx/include/cinttypes | 261 + sdk/tlibcxx/include/ciso646 | 25 + sdk/tlibcxx/include/climits | 48 + sdk/tlibcxx/include/clocale | 60 + sdk/tlibcxx/include/cmath | 1697 ++ sdk/tlibcxx/include/codecvt | 552 + sdk/tlibcxx/include/complex | 1577 ++ sdk/tlibcxx/include/complex.h | 37 + sdk/tlibcxx/include/condition_variable | 272 + sdk/tlibcxx/include/csetjmp | 52 + sdk/tlibcxx/include/csignal | 62 + sdk/tlibcxx/include/cstdarg | 48 + sdk/tlibcxx/include/cstdbool | 32 + sdk/tlibcxx/include/cstddef | 102 + sdk/tlibcxx/include/cstdint | 191 + sdk/tlibcxx/include/cstdio | 224 + sdk/tlibcxx/include/cstdlib | 190 + sdk/tlibcxx/include/cstring | 122 + sdk/tlibcxx/include/ctgmath | 29 + sdk/tlibcxx/include/ctime | 86 + sdk/tlibcxx/include/cwchar | 256 + sdk/tlibcxx/include/cwctype | 215 + sdk/tlibcxx/include/deque | 2909 +++ sdk/tlibcxx/include/exception | 278 + sdk/tlibcxx/include/experimental/__config | 50 + sdk/tlibcxx/include/experimental/__memory | 90 + sdk/tlibcxx/include/experimental/algorithm | 120 + sdk/tlibcxx/include/experimental/any | 592 + sdk/tlibcxx/include/experimental/chrono | 59 + sdk/tlibcxx/include/experimental/deque | 47 + sdk/tlibcxx/include/experimental/dynarray | 321 + sdk/tlibcxx/include/experimental/filesystem | 2052 ++ sdk/tlibcxx/include/experimental/forward_list | 47 + sdk/tlibcxx/include/experimental/functional | 459 + sdk/tlibcxx/include/experimental/iterator | 114 + sdk/tlibcxx/include/experimental/list | 47 + sdk/tlibcxx/include/experimental/map | 57 + .../include/experimental/memory_resource | 422 + sdk/tlibcxx/include/experimental/optional | 902 + .../include/experimental/propagate_const | 576 + sdk/tlibcxx/include/experimental/ratio | 77 + sdk/tlibcxx/include/experimental/regex | 62 + sdk/tlibcxx/include/experimental/set | 57 + sdk/tlibcxx/include/experimental/string | 62 + sdk/tlibcxx/include/experimental/string_view | 813 + sdk/tlibcxx/include/experimental/system_error | 63 + sdk/tlibcxx/include/experimental/tuple | 82 + sdk/tlibcxx/include/experimental/type_traits | 427 + .../include/experimental/unordered_map | 65 + .../include/experimental/unordered_set | 59 + sdk/tlibcxx/include/experimental/utility | 47 + sdk/tlibcxx/include/experimental/vector | 47 + sdk/tlibcxx/include/ext/__hash | 135 + sdk/tlibcxx/include/ext/hash_map | 984 + sdk/tlibcxx/include/ext/hash_set | 663 + sdk/tlibcxx/include/forward_list | 1738 ++ sdk/tlibcxx/include/fstream | 1493 ++ sdk/tlibcxx/include/functional | 2672 ++ sdk/tlibcxx/include/future | 2612 ++ sdk/tlibcxx/include/initializer_list | 118 + sdk/tlibcxx/include/inttypes.h | 251 + sdk/tlibcxx/include/iomanip | 677 + sdk/tlibcxx/include/ios | 1032 + sdk/tlibcxx/include/iosfwd | 209 + sdk/tlibcxx/include/iostream | 68 + sdk/tlibcxx/include/istream | 1754 ++ sdk/tlibcxx/include/iterator | 1772 ++ sdk/tlibcxx/include/limits | 814 + sdk/tlibcxx/include/list | 2404 ++ sdk/tlibcxx/include/locale | 4259 ++++ sdk/tlibcxx/include/map | 2004 ++ sdk/tlibcxx/include/memory | 5729 +++++ sdk/tlibcxx/include/module.modulemap | 477 + sdk/tlibcxx/include/mutex | 678 + sdk/tlibcxx/include/new | 190 + sdk/tlibcxx/include/numeric | 197 + sdk/tlibcxx/include/ostream | 1116 + sdk/tlibcxx/include/queue | 742 + sdk/tlibcxx/include/random | 6729 ++++++ sdk/tlibcxx/include/ratio | 523 + sdk/tlibcxx/include/regex | 6525 +++++ sdk/tlibcxx/include/scoped_allocator | 604 + sdk/tlibcxx/include/set | 1225 + sdk/tlibcxx/include/shared_mutex | 501 + sdk/tlibcxx/include/sstream | 981 + sdk/tlibcxx/include/stack | 296 + sdk/tlibcxx/include/stdbool.h | 39 + sdk/tlibcxx/include/stdexcept | 174 + sdk/tlibcxx/include/streambuf | 589 + sdk/tlibcxx/include/string | 4330 ++++ sdk/tlibcxx/include/strstream | 404 + .../include/support/android/locale_bionic.h | 31 + sdk/tlibcxx/include/support/ibm/limits.h | 99 + .../include/support/ibm/locale_mgmt_aix.h | 85 + sdk/tlibcxx/include/support/ibm/support.h | 54 + sdk/tlibcxx/include/support/ibm/xlocale.h | 271 + sdk/tlibcxx/include/support/musl/xlocale.h | 58 + sdk/tlibcxx/include/support/newlib/xlocale.h | 25 + .../include/support/sgx/__sgx_mutex_base | 261 + .../support/sgx/sgx_condition_variable | 190 + sdk/tlibcxx/include/support/sgx/sgx_invoke | 207 + sdk/tlibcxx/include/support/sgx/sgx_mutex | 419 + .../include/support/solaris/floatingpoint.h | 14 + sdk/tlibcxx/include/support/solaris/wchar.h | 47 + sdk/tlibcxx/include/support/solaris/xlocale.h | 77 + .../include/support/win32/limits_win32.h | 79 + .../include/support/win32/locale_mgmt_win32.h | 33 + .../include/support/win32/locale_win32.h | 113 + .../include/support/win32/math_win32.h | 117 + sdk/tlibcxx/include/support/win32/support.h | 206 + .../support/xlocale/__nop_locale_mgmt.h | 52 + .../support/xlocale/__posix_l_fallback.h | 165 + .../support/xlocale/__strtonum_fallback.h | 67 + sdk/tlibcxx/include/support/xlocale/xlocale.h | 0 sdk/tlibcxx/include/system_error | 642 + sdk/tlibcxx/include/tgmath.h | 29 + sdk/tlibcxx/include/thread | 494 + sdk/tlibcxx/include/tuple | 1418 ++ sdk/tlibcxx/include/type_traits | 4704 ++++ sdk/tlibcxx/include/typeindex | 107 + sdk/tlibcxx/include/typeinfo | 173 + sdk/tlibcxx/include/unordered_map | 2071 ++ sdk/tlibcxx/include/unordered_set | 1388 ++ sdk/tlibcxx/include/utility | 787 + sdk/tlibcxx/include/valarray | 4881 ++++ sdk/tlibcxx/include/vector | 3317 +++ sdk/tlibcxx/src/algorithm.cpp | 104 + sdk/tlibcxx/src/any.cpp | 23 + sdk/tlibcxx/src/bind.cpp | 31 + sdk/tlibcxx/src/chrono.cpp | 154 + sdk/tlibcxx/src/condition_variable.cpp | 87 + sdk/tlibcxx/src/debug.cpp | 575 + sdk/tlibcxx/src/exception.cpp | 345 + .../filesystem/directory_iterator.cpp | 256 + .../experimental/filesystem/operations.cpp | 794 + .../src/experimental/filesystem/path.cpp | 391 + .../src/experimental/memory_resource.cpp | 144 + sdk/tlibcxx/src/future.cpp | 303 + sdk/tlibcxx/src/hash.cpp | 570 + sdk/tlibcxx/src/include/atomic_support.h | 158 + sdk/tlibcxx/src/include/config_elast.h | 36 + sdk/tlibcxx/src/ios.cpp | 469 + sdk/tlibcxx/src/iostream.cpp | 93 + sdk/tlibcxx/src/locale.cpp | 6123 +++++ sdk/tlibcxx/src/memory.cpp | 242 + sdk/tlibcxx/src/mutex.cpp | 267 + sdk/tlibcxx/src/new.cpp | 254 + sdk/tlibcxx/src/optional.cpp | 24 + sdk/tlibcxx/src/random.cpp | 157 + sdk/tlibcxx/src/regex.cpp | 320 + sdk/tlibcxx/src/sgx_condition_variable.cpp | 46 + sdk/tlibcxx/src/sgx_mutex.cpp | 136 + sdk/tlibcxx/src/shared_mutex.cpp | 117 + sdk/tlibcxx/src/stdexcept.cpp | 102 + sdk/tlibcxx/src/string.cpp | 560 + sdk/tlibcxx/src/strstream.cpp | 338 + sdk/tlibcxx/src/support/solaris/README | 4 + .../src/support/solaris/mbsnrtowcs.inc | 76 + .../src/support/solaris/wcsnrtombs.inc | 93 + sdk/tlibcxx/src/support/solaris/xlocale.c | 66 + .../src/support/win32/locale_win32.cpp | 105 + sdk/tlibcxx/src/support/win32/support.cpp | 166 + sdk/tlibcxx/src/system_error.cpp | 264 + sdk/tlibcxx/src/thread.cpp | 240 + sdk/tlibcxx/src/typeinfo.cpp | 39 + sdk/tlibcxx/src/utility.cpp | 17 + sdk/tlibcxx/src/valarray.cpp | 54 + sdk/tlibstdcxx/README.sgx | 6 +- sdk/trts/Makefile | 12 +- sdk/trts/linux/elf_parser.c | 2 +- sdk/trts/linux/global_init.c | 10 - sdk/trts/linux/trts_pic.S | 11 + sdk/trts/linux/trts_pic.h | 1 + sdk/trts/trts_ecall.cpp | 35 +- sdk/trts/trts_nsp.cpp | 97 + sdk/trts/trts_ocall.cpp | 20 +- sdk/trts/trts_util.cpp | 16 + sdk/trts/trts_util.h | 4 + sdk/trts/trts_veh.cpp | 14 +- sdk/trts/trts_version.cpp | 2 +- sdk/tsetjmp/Makefile | 11 +- sdk/tsetjmp/_setjmp.S | 271 +- sdk/ukey_exchange/ukey_exchange.cpp | 3 +- 1007 files changed, 147718 insertions(+), 128994 deletions(-) create mode 100644 SampleCode/Cxx11SGXDemo/.cproject create mode 100644 SampleCode/Cxx11SGXDemo/.project create mode 100644 SampleCode/Cxx11SGXDemo/.settings/language.settings.xml create mode 100644 SampleCode/Cxx11SGXDemo/App/App.cpp create mode 100644 SampleCode/Cxx11SGXDemo/App/App.h create mode 100644 SampleCode/Cxx11SGXDemo/App/TrustedLibrary/Libcxx.cpp create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave.config.xml create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave.cpp create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave.edl create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave.h create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave.lds create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave_debug.lds create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/Enclave_private.pem create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.cpp create mode 100644 SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.edl create mode 100644 SampleCode/Cxx11SGXDemo/Makefile create mode 100644 SampleCode/Cxx11SGXDemo/README.txt create mode 100644 SampleCode/LocalAttestation/.settings/language.settings.xml create mode 100644 SampleCode/PowerTransition/.settings/language.settings.xml create mode 100644 SampleCode/RemoteAttestation/.settings/language.settings.xml create mode 100644 SampleCode/SampleEnclave/.settings/language.settings.xml create mode 100644 SampleCode/SealedData/.settings/language.settings.xml create mode 100644 common/inc/sgx_tprotected_fs.edl create mode 100644 common/inc/sgx_tprotected_fs.h delete mode 100644 external/epid-sdk-3.0.0/doc/html/1_81_2file__parser_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/1_81_2types_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/Basenames.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/BuildToolsInstallation.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/BuildingSdk.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/ChangeLog.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/ChoosingiKGF.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/EpidOverview.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/Examples.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/Examples.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/Glossary.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/ImplementationNotes.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/IssuerMaterial.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/LegalInformation.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/Revocation.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/SdkOverview.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/SignVerifyTutorial.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/SignmsgWalkthru.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/VerifysigWalkthru.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/annotated.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/arrowdown.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/arrowright.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/basenames_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/basicdoc.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/bc_s.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/bdwn.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/bignum_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/bitsupplier_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/build__tools__installation_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/building__sdk_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/choosing__ikgf_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/classes.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/closed.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_02c945662023679b89476bd7126bc985.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_12b90d9c027aaf878a834df729679a56.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_ef364879bae02db2684040178ed9b186.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/doc.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/doxygen.css delete mode 100644 external/epid-sdk-3.0.0/doc/html/doxygen.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/dynsections.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/ecdsa_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/ecgroup_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid__overview_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_interaction.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_use_case.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid_diagram_issuer_high_level.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid_diagram_member_high_level.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/epid_diagram_verifier_high_level.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/epidstyle.css delete mode 100644 external/epid-sdk-3.0.0/doc/html/errors_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/examples_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/file__parser_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/files.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/finitefield_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/folderclosed.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/folderopen.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/functions.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/functions_vars.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_b.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_d.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_defs.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_e.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_enum.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_eval.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_f.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_func.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_g.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_i.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_k.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_m.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_n.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_p.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_r.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_s.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_t.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_type.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_v.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_vars.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/globals_w.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/glossary_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_types.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_types.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_common.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_common.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_math.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_math.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_member_module.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_member_module.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_module.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_module.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_print.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_print.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_types.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_types.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___error_codes.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___error_codes.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___file_parser.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___file_parser.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___hash_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___hash_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/hash_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/implementation__notes_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/index.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/issuer__material_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/jquery.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/legal__information_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/mainpage_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/member_2api_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/modules.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/modules.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/nav_f.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/nav_g.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/nav_h.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtree.css delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtree.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtreedata.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtreeindex0.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtreeindex1.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/navtreeindex2.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/open.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/organization_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/pageorder_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/pages.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/pairing_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/printutils_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/resize.js delete mode 100644 external/epid-sdk-3.0.0/doc/html/revocation_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/sdk__overview_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/sdk_block_diagram.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/sign__verify__tutorial_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/signmsg__walkthrough_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/splitbar.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/stdtypes_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_basic_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_big_num_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_compressed_priv_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_ecdsa_private_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_ecdsa_public_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_ecdsa_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_basic_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_g2_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_group_pub_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_group_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_gt_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_nr_proof.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_params.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_priv_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_sig_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_sig_rl_entry.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid11_verifier_precomp.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid2_params.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid_ca_certificate.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid_file_header.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_epid_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fp_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fq12_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fq2_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fq3_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fq6_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_fq_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_g1_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_g2_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_group_pub_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_group_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_gt_elem_str.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_i_priv_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_join_request.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_member_precomp.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_membership_credential.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_nr_proof.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str128.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str16.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str256.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str32.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str512.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str600.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str64.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str768.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str8.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_oct_str80.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_pre_computed_signature.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_priv_key.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_priv_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_sha256_digest.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_sig_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_sig_rl_entry.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_verifier_precomp.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/struct_verifier_rl.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/sync_off.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/sync_on.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/tab_a.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/tab_b.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/tab_h.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/tab_s.png delete mode 100644 external/epid-sdk-3.0.0/doc/html/tabs.css delete mode 100644 external/epid-sdk-3.0.0/doc/html/tatepairing_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/types_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/verifier_21_81_2api_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/verifier_2api_8h.html delete mode 100644 external/epid-sdk-3.0.0/doc/html/verifysig__walkthrough_8dox.html delete mode 100644 external/epid-sdk-3.0.0/doc/index.html delete mode 100644 external/epid-sdk-3.0.0/ext/gtest/LICENSE delete mode 100644 external/epid-sdk-3.0.0/ext/gtest/Makefile delete mode 100644 external/epid-sdk-3.0.0/ext/gtest/gtest-all.cc delete mode 100644 external/epid-sdk-3.0.0/ext/gtest/gtest.h delete mode 100644 external/epid-sdk-3.0.0/ext/gtest/gtest.parts delete mode 100644 external/epid/ReadMe.txt delete mode 100644 external/epid/doc/html/BuildingSdk.html delete mode 100644 external/epid/doc/html/ChangeLog.html delete mode 100644 external/epid/doc/html/EpidOverview.html delete mode 100644 external/epid/doc/html/Glossary.html delete mode 100644 external/epid/doc/html/ImplementationNotes.html delete mode 100644 external/epid/doc/html/IssuerMaterial.html delete mode 100644 external/epid/doc/html/LegalInformation.html delete mode 100644 external/epid/doc/html/SdkOverview.html delete mode 100644 external/epid/doc/html/SignVerifyTutorial.html delete mode 100644 external/epid/doc/html/annotated.html delete mode 100644 external/epid/doc/html/arrowdown.png delete mode 100644 external/epid/doc/html/arrowright.png delete mode 100644 external/epid/doc/html/basicdoc.png delete mode 100644 external/epid/doc/html/bc_s.png delete mode 100644 external/epid/doc/html/bdwn.png delete mode 100644 external/epid/doc/html/bignum_8c.html delete mode 100644 external/epid/doc/html/bignum_8h.html delete mode 100644 external/epid/doc/html/bitsupplier_8h.html delete mode 100644 external/epid/doc/html/building__sdk_8dox.html delete mode 100644 external/epid/doc/html/check__privrl__entry_8c.html delete mode 100644 external/epid/doc/html/classes.html delete mode 100644 external/epid/doc/html/closed.png delete mode 100644 external/epid/doc/html/commitment_8c.html delete mode 100644 external/epid/doc/html/commitment_8h.html delete mode 100644 external/epid/doc/html/decompress__privkey_8c.html delete mode 100644 external/epid/doc/html/dir_02c945662023679b89476bd7126bc985.html delete mode 100644 external/epid/doc/html/dir_12b90d9c027aaf878a834df729679a56.html delete mode 100644 external/epid/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html delete mode 100644 external/epid/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html delete mode 100644 external/epid/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html delete mode 100644 external/epid/doc/html/doc.png delete mode 100644 external/epid/doc/html/doxygen.css delete mode 100644 external/epid/doc/html/doxygen.png delete mode 100644 external/epid/doc/html/dynsections.js delete mode 100644 external/epid/doc/html/ecdsa_8h.html delete mode 100644 external/epid/doc/html/ecdsa__sign_8c.html delete mode 100644 external/epid/doc/html/ecdsa__verify_8c.html delete mode 100644 external/epid/doc/html/ecgroup_8c.html delete mode 100644 external/epid/doc/html/ecgroup_8h.html delete mode 100644 external/epid/doc/html/endian__convert_8h.html delete mode 100644 external/epid/doc/html/epid2params_8c.html delete mode 100644 external/epid/doc/html/epid2params_8h.html delete mode 100644 external/epid/doc/html/epid2params__ate_8inc.html delete mode 100644 external/epid/doc/html/epid__overview_8dox.html delete mode 100644 external/epid/doc/html/epid_diagram_high_level_interaction.png delete mode 100644 external/epid/doc/html/epid_diagram_high_level_use_case.png delete mode 100644 external/epid/doc/html/epid_diagram_issuer_high_level.png delete mode 100644 external/epid/doc/html/epid_diagram_member_high_level.png delete mode 100644 external/epid/doc/html/epid_diagram_verifier_high_level.png delete mode 100644 external/epid/doc/html/epidstyle.css delete mode 100644 external/epid/doc/html/errors_8c.html delete mode 100644 external/epid/doc/html/errors_8h.html delete mode 100644 external/epid/doc/html/examples.html delete mode 100644 external/epid/doc/html/examples.js delete mode 100644 external/epid/doc/html/examples_8dox.html delete mode 100644 external/epid/doc/html/file__parser_8c.html delete mode 100644 external/epid/doc/html/file__parser_8h.html delete mode 100644 external/epid/doc/html/files.html delete mode 100644 external/epid/doc/html/finitefield_8c.html delete mode 100644 external/epid/doc/html/finitefield_8h.html delete mode 100644 external/epid/doc/html/folderclosed.png delete mode 100644 external/epid/doc/html/folderopen.png delete mode 100644 external/epid/doc/html/functions.html delete mode 100644 external/epid/doc/html/functions_b.html delete mode 100644 external/epid/doc/html/functions_c.html delete mode 100644 external/epid/doc/html/functions_d.html delete mode 100644 external/epid/doc/html/functions_e.html delete mode 100644 external/epid/doc/html/functions_f.html delete mode 100644 external/epid/doc/html/functions_g.html delete mode 100644 external/epid/doc/html/functions_h.html delete mode 100644 external/epid/doc/html/functions_k.html delete mode 100644 external/epid/doc/html/functions_l.html delete mode 100644 external/epid/doc/html/functions_m.html delete mode 100644 external/epid/doc/html/functions_n.html delete mode 100644 external/epid/doc/html/functions_p.html delete mode 100644 external/epid/doc/html/functions_q.html delete mode 100644 external/epid/doc/html/functions_r.html delete mode 100644 external/epid/doc/html/functions_s.html delete mode 100644 external/epid/doc/html/functions_t.html delete mode 100644 external/epid/doc/html/functions_v.html delete mode 100644 external/epid/doc/html/functions_vars.html delete mode 100644 external/epid/doc/html/functions_vars_b.html delete mode 100644 external/epid/doc/html/functions_vars_c.html delete mode 100644 external/epid/doc/html/functions_vars_d.html delete mode 100644 external/epid/doc/html/functions_vars_e.html delete mode 100644 external/epid/doc/html/functions_vars_f.html delete mode 100644 external/epid/doc/html/functions_vars_g.html delete mode 100644 external/epid/doc/html/functions_vars_h.html delete mode 100644 external/epid/doc/html/functions_vars_k.html delete mode 100644 external/epid/doc/html/functions_vars_l.html delete mode 100644 external/epid/doc/html/functions_vars_m.html delete mode 100644 external/epid/doc/html/functions_vars_n.html delete mode 100644 external/epid/doc/html/functions_vars_p.html delete mode 100644 external/epid/doc/html/functions_vars_q.html delete mode 100644 external/epid/doc/html/functions_vars_r.html delete mode 100644 external/epid/doc/html/functions_vars_s.html delete mode 100644 external/epid/doc/html/functions_vars_t.html delete mode 100644 external/epid/doc/html/functions_vars_v.html delete mode 100644 external/epid/doc/html/functions_vars_w.html delete mode 100644 external/epid/doc/html/functions_vars_x.html delete mode 100644 external/epid/doc/html/functions_vars_y.html delete mode 100644 external/epid/doc/html/functions_w.html delete mode 100644 external/epid/doc/html/functions_x.html delete mode 100644 external/epid/doc/html/functions_y.html delete mode 100644 external/epid/doc/html/get__sigsize_8c.html delete mode 100644 external/epid/doc/html/globals.html delete mode 100644 external/epid/doc/html/globals_b.html delete mode 100644 external/epid/doc/html/globals_c.html delete mode 100644 external/epid/doc/html/globals_d.html delete mode 100644 external/epid/doc/html/globals_defs.html delete mode 100644 external/epid/doc/html/globals_e.html delete mode 100644 external/epid/doc/html/globals_enum.html delete mode 100644 external/epid/doc/html/globals_eval.html delete mode 100644 external/epid/doc/html/globals_f.html delete mode 100644 external/epid/doc/html/globals_func.html delete mode 100644 external/epid/doc/html/globals_func_b.html delete mode 100644 external/epid/doc/html/globals_func_c.html delete mode 100644 external/epid/doc/html/globals_func_d.html delete mode 100644 external/epid/doc/html/globals_func_e.html delete mode 100644 external/epid/doc/html/globals_func_f.html delete mode 100644 external/epid/doc/html/globals_func_i.html delete mode 100644 external/epid/doc/html/globals_func_m.html delete mode 100644 external/epid/doc/html/globals_func_n.html delete mode 100644 external/epid/doc/html/globals_func_o.html delete mode 100644 external/epid/doc/html/globals_func_p.html delete mode 100644 external/epid/doc/html/globals_func_r.html delete mode 100644 external/epid/doc/html/globals_func_s.html delete mode 100644 external/epid/doc/html/globals_func_w.html delete mode 100644 external/epid/doc/html/globals_g.html delete mode 100644 external/epid/doc/html/globals_h.html delete mode 100644 external/epid/doc/html/globals_i.html delete mode 100644 external/epid/doc/html/globals_k.html delete mode 100644 external/epid/doc/html/globals_m.html delete mode 100644 external/epid/doc/html/globals_n.html delete mode 100644 external/epid/doc/html/globals_o.html delete mode 100644 external/epid/doc/html/globals_p.html delete mode 100644 external/epid/doc/html/globals_r.html delete mode 100644 external/epid/doc/html/globals_s.html delete mode 100644 external/epid/doc/html/globals_t.html delete mode 100644 external/epid/doc/html/globals_type.html delete mode 100644 external/epid/doc/html/globals_vars.html delete mode 100644 external/epid/doc/html/globals_w.html delete mode 100644 external/epid/doc/html/glossary_8dox.html delete mode 100644 external/epid/doc/html/group___big_num_primitives.html delete mode 100644 external/epid/doc/html/group___big_num_primitives.js delete mode 100644 external/epid/doc/html/group___ec_group_primitives.html delete mode 100644 external/epid/doc/html/group___ec_group_primitives.js delete mode 100644 external/epid/doc/html/group___ecdsa_primitives.html delete mode 100644 external/epid/doc/html/group___ecdsa_primitives.js delete mode 100644 external/epid/doc/html/group___epid_common.html delete mode 100644 external/epid/doc/html/group___epid_common.js delete mode 100644 external/epid/doc/html/group___epid_math.html delete mode 100644 external/epid/doc/html/group___epid_math.js delete mode 100644 external/epid/doc/html/group___epid_member_module.html delete mode 100644 external/epid/doc/html/group___epid_member_module.js delete mode 100644 external/epid/doc/html/group___epid_module.html delete mode 100644 external/epid/doc/html/group___epid_module.js delete mode 100644 external/epid/doc/html/group___epid_print.html delete mode 100644 external/epid/doc/html/group___epid_print.js delete mode 100644 external/epid/doc/html/group___epid_types.html delete mode 100644 external/epid/doc/html/group___epid_types.js delete mode 100644 external/epid/doc/html/group___epid_verifier_module.html delete mode 100644 external/epid/doc/html/group___epid_verifier_module.js delete mode 100644 external/epid/doc/html/group___error_codes.html delete mode 100644 external/epid/doc/html/group___error_codes.js delete mode 100644 external/epid/doc/html/group___file_parser.html delete mode 100644 external/epid/doc/html/group___file_parser.js delete mode 100644 external/epid/doc/html/group___finite_field_primitives.html delete mode 100644 external/epid/doc/html/group___finite_field_primitives.js delete mode 100644 external/epid/doc/html/group___hash_primitives.html delete mode 100644 external/epid/doc/html/group___hash_primitives.js delete mode 100644 external/epid/doc/html/group___pairing_primitives.html delete mode 100644 external/epid/doc/html/group___pairing_primitives.js delete mode 100644 external/epid/doc/html/grouppubkey_8c.html delete mode 100644 external/epid/doc/html/grouppubkey_8h.html delete mode 100644 external/epid/doc/html/hash_8h.html delete mode 100644 external/epid/doc/html/implementation__notes_8dox.html delete mode 100644 external/epid/doc/html/index.html delete mode 100644 external/epid/doc/html/issuer__material_8dox.html delete mode 100644 external/epid/doc/html/jquery.js delete mode 100644 external/epid/doc/html/legal__information_8dox.html delete mode 100644 external/epid/doc/html/mainpage_8dox.html delete mode 100644 external/epid/doc/html/member_2api_8h.html delete mode 100644 external/epid/doc/html/member_2context_8c.html delete mode 100644 external/epid/doc/html/member_2context_8h.html delete mode 100644 external/epid/doc/html/memory_8c.html delete mode 100644 external/epid/doc/html/memory_8h.html delete mode 100644 external/epid/doc/html/modules.html delete mode 100644 external/epid/doc/html/modules.js delete mode 100644 external/epid/doc/html/nav_f.png delete mode 100644 external/epid/doc/html/nav_g.png delete mode 100644 external/epid/doc/html/nav_h.png delete mode 100644 external/epid/doc/html/navtree.css delete mode 100644 external/epid/doc/html/navtree.js delete mode 100644 external/epid/doc/html/navtreedata.js delete mode 100644 external/epid/doc/html/navtreeindex0.js delete mode 100644 external/epid/doc/html/navtreeindex1.js delete mode 100644 external/epid/doc/html/nr__prove_8c.html delete mode 100644 external/epid/doc/html/nrverify_8c.html delete mode 100644 external/epid/doc/html/open.png delete mode 100644 external/epid/doc/html/organization_8dox.html delete mode 100644 external/epid/doc/html/pageorder_8dox.html delete mode 100644 external/epid/doc/html/pages.html delete mode 100644 external/epid/doc/html/pairing_8c.html delete mode 100644 external/epid/doc/html/pairing_8h.html delete mode 100644 external/epid/doc/html/presig_8c.html delete mode 100644 external/epid/doc/html/printutils_8c.html delete mode 100644 external/epid/doc/html/printutils_8h.html delete mode 100644 external/epid/doc/html/privkey_8c.html delete mode 100644 external/epid/doc/html/privkey_8h.html delete mode 100644 external/epid/doc/html/request__join_8c.html delete mode 100644 external/epid/doc/html/resize.js delete mode 100644 external/epid/doc/html/sdk__overview_8dox.html delete mode 100644 external/epid/doc/html/sdk_block_diagram.png delete mode 100644 external/epid/doc/html/sha256_8c.html delete mode 100644 external/epid/doc/html/sign_8c.html delete mode 100644 external/epid/doc/html/sign__verify__tutorial_8dox.html delete mode 100644 external/epid/doc/html/signbasic_8c.html delete mode 100644 external/epid/doc/html/signmsg_8c-example.html delete mode 100644 external/epid/doc/html/sigrlvalid_8c.html delete mode 100644 external/epid/doc/html/sigrlvalid_8h.html delete mode 100644 external/epid/doc/html/sigs__linked_8c.html delete mode 100644 external/epid/doc/html/splitbar.png delete mode 100644 external/epid/doc/html/stack_8c.html delete mode 100644 external/epid/doc/html/stack_8h.html delete mode 100644 external/epid/doc/html/stdtypes_8h.html delete mode 100644 external/epid/doc/html/struct_allowed_basename.html delete mode 100644 external/epid/doc/html/struct_basic_signature.html delete mode 100644 external/epid/doc/html/struct_big_num_str.html delete mode 100644 external/epid/doc/html/struct_commit_values.html delete mode 100644 external/epid/doc/html/struct_compressed_priv_key.html delete mode 100644 external/epid/doc/html/struct_ecdsa_private_key.html delete mode 100644 external/epid/doc/html/struct_ecdsa_public_key.html delete mode 100644 external/epid/doc/html/struct_ecdsa_signature.html delete mode 100644 external/epid/doc/html/struct_epid2_params.html delete mode 100644 external/epid/doc/html/struct_epid2_params__.html delete mode 100644 external/epid/doc/html/struct_epid_ca_certificate.html delete mode 100644 external/epid/doc/html/struct_epid_file_header.html delete mode 100644 external/epid/doc/html/struct_epid_group_pub_key_certificate.html delete mode 100644 external/epid/doc/html/struct_epid_signature.html delete mode 100644 external/epid/doc/html/struct_error_text_entry.html delete mode 100644 external/epid/doc/html/struct_fp_elem_str.html delete mode 100644 external/epid/doc/html/struct_fq12_elem_dat.html delete mode 100644 external/epid/doc/html/struct_fq12_elem_str.html delete mode 100644 external/epid/doc/html/struct_fq2_elem_dat.html delete mode 100644 external/epid/doc/html/struct_fq2_elem_str.html delete mode 100644 external/epid/doc/html/struct_fq6_elem_dat.html delete mode 100644 external/epid/doc/html/struct_fq6_elem_str.html delete mode 100644 external/epid/doc/html/struct_fq_elem_dat.html delete mode 100644 external/epid/doc/html/struct_fq_elem_str.html delete mode 100644 external/epid/doc/html/struct_g1_elem_str.html delete mode 100644 external/epid/doc/html/struct_g2_elem_str.html delete mode 100644 external/epid/doc/html/struct_group_pub_key.html delete mode 100644 external/epid/doc/html/struct_group_pub_key__.html delete mode 100644 external/epid/doc/html/struct_group_rl.html delete mode 100644 external/epid/doc/html/struct_gt_elem_str.html delete mode 100644 external/epid/doc/html/struct_i_priv_key.html delete mode 100644 external/epid/doc/html/struct_join_p_commit_values.html delete mode 100644 external/epid/doc/html/struct_join_request.html delete mode 100644 external/epid/doc/html/struct_member_ctx.html delete mode 100644 external/epid/doc/html/struct_member_precomp.html delete mode 100644 external/epid/doc/html/struct_membership_credential.html delete mode 100644 external/epid/doc/html/struct_nr_proof.html delete mode 100644 external/epid/doc/html/struct_nr_verify_commit_values.html delete mode 100644 external/epid/doc/html/struct_oct_str128.html delete mode 100644 external/epid/doc/html/struct_oct_str16.html delete mode 100644 external/epid/doc/html/struct_oct_str256.html delete mode 100644 external/epid/doc/html/struct_oct_str32.html delete mode 100644 external/epid/doc/html/struct_oct_str512.html delete mode 100644 external/epid/doc/html/struct_oct_str64.html delete mode 100644 external/epid/doc/html/struct_oct_str8.html delete mode 100644 external/epid/doc/html/struct_pre_computed_signature.html delete mode 100644 external/epid/doc/html/struct_priv_key.html delete mode 100644 external/epid/doc/html/struct_priv_key__.html delete mode 100644 external/epid/doc/html/struct_priv_rl.html delete mode 100644 external/epid/doc/html/struct_sha256_digest.html delete mode 100644 external/epid/doc/html/struct_sig_rl.html delete mode 100644 external/epid/doc/html/struct_sig_rl_entry.html delete mode 100644 external/epid/doc/html/struct_stack.html delete mode 100644 external/epid/doc/html/struct_verifier_ctx.html delete mode 100644 external/epid/doc/html/struct_verifier_precomp.html delete mode 100644 external/epid/doc/html/struct_verifier_rl.html delete mode 100644 external/epid/doc/html/sync_off.png delete mode 100644 external/epid/doc/html/sync_on.png delete mode 100644 external/epid/doc/html/tab_a.png delete mode 100644 external/epid/doc/html/tab_b.png delete mode 100644 external/epid/doc/html/tab_h.png delete mode 100644 external/epid/doc/html/tab_s.png delete mode 100644 external/epid/doc/html/tabs.css delete mode 100644 external/epid/doc/html/types_8h.html delete mode 100644 external/epid/doc/html/verifier_2api_8h.html delete mode 100644 external/epid/doc/html/verifier_2context_8c.html delete mode 100644 external/epid/doc/html/verifier_2context_8h.html delete mode 100644 external/epid/doc/html/verify_8c.html delete mode 100644 external/epid/doc/html/verifybasic_8c.html delete mode 100644 external/epid/doc/html/verifysig_8c-example.html delete mode 100644 external/epid/doc/index.html delete mode 100644 external/epid/ext/gtest/LICENSE delete mode 100644 external/epid/ext/gtest/gtest-all.cc delete mode 100644 external/epid/ext/gtest/gtest.h delete mode 100644 external/epid/ext/gtest/gtest.parts create mode 100644 sdk/protected_fs/sgx_tprotected_fs/Makefile create mode 100644 sdk/protected_fs/sgx_tprotected_fs/file_crypto.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/file_flush.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/file_init.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/file_other.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/file_read_write.cpp rename common/inc/internal/sgx_tcrypto_internal.h => sdk/protected_fs/sgx_tprotected_fs/file_version.cpp (62%) create mode 100644 sdk/protected_fs/sgx_tprotected_fs/lru_cache.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/lru_cache.h create mode 100644 sdk/protected_fs/sgx_tprotected_fs/protected_fs_file.h create mode 100644 sdk/protected_fs/sgx_tprotected_fs/protected_fs_nodes.h create mode 100644 sdk/protected_fs/sgx_tprotected_fs/sgx_tprotected_fs.cpp create mode 100644 sdk/protected_fs/sgx_tprotected_fs/validation_hook_recovery.h create mode 100644 sdk/protected_fs/sgx_uprotected_fs/Makefile create mode 100644 sdk/protected_fs/sgx_uprotected_fs/sgx_uprotected_fs.cpp create mode 100644 sdk/tlibcrypto/sgx_rsa3072.cpp create mode 100644 sdk/tlibcxx/LICENSE.TXT create mode 100644 sdk/tlibcxx/Makefile create mode 100644 sdk/tlibcxx/README.sgx create mode 100644 sdk/tlibcxx/include/CMakeLists.txt create mode 100644 sdk/tlibcxx/include/__bit_reference create mode 100644 sdk/tlibcxx/include/__bsd_locale_defaults.h create mode 100644 sdk/tlibcxx/include/__bsd_locale_fallbacks.h create mode 100644 sdk/tlibcxx/include/__config create mode 100644 sdk/tlibcxx/include/__config_site.in create mode 100644 sdk/tlibcxx/include/__debug create mode 100644 sdk/tlibcxx/include/__functional_03 create mode 100644 sdk/tlibcxx/include/__functional_base create mode 100644 sdk/tlibcxx/include/__functional_base_03 create mode 100644 sdk/tlibcxx/include/__hash_table create mode 100644 sdk/tlibcxx/include/__locale create mode 100644 sdk/tlibcxx/include/__mutex_base create mode 100644 sdk/tlibcxx/include/__nullptr create mode 100644 sdk/tlibcxx/include/__refstring create mode 100644 sdk/tlibcxx/include/__sgx create mode 100644 sdk/tlibcxx/include/__split_buffer create mode 100644 sdk/tlibcxx/include/__sso_allocator create mode 100644 sdk/tlibcxx/include/__std_stream create mode 100644 sdk/tlibcxx/include/__threading_support create mode 100644 sdk/tlibcxx/include/__tree create mode 100644 sdk/tlibcxx/include/__tuple create mode 100644 sdk/tlibcxx/include/__undef___deallocate create mode 100644 sdk/tlibcxx/include/__undef_min_max create mode 100644 sdk/tlibcxx/include/algorithm create mode 100644 sdk/tlibcxx/include/array create mode 100644 sdk/tlibcxx/include/atomic create mode 100644 sdk/tlibcxx/include/bitset create mode 100644 sdk/tlibcxx/include/cassert create mode 100644 sdk/tlibcxx/include/ccomplex create mode 100644 sdk/tlibcxx/include/cctype create mode 100644 sdk/tlibcxx/include/cerrno create mode 100644 sdk/tlibcxx/include/cfenv create mode 100644 sdk/tlibcxx/include/cfloat create mode 100644 sdk/tlibcxx/include/chrono create mode 100644 sdk/tlibcxx/include/cinttypes create mode 100644 sdk/tlibcxx/include/ciso646 create mode 100644 sdk/tlibcxx/include/climits create mode 100644 sdk/tlibcxx/include/clocale create mode 100644 sdk/tlibcxx/include/cmath create mode 100644 sdk/tlibcxx/include/codecvt create mode 100644 sdk/tlibcxx/include/complex create mode 100644 sdk/tlibcxx/include/complex.h create mode 100644 sdk/tlibcxx/include/condition_variable create mode 100644 sdk/tlibcxx/include/csetjmp create mode 100644 sdk/tlibcxx/include/csignal create mode 100644 sdk/tlibcxx/include/cstdarg create mode 100644 sdk/tlibcxx/include/cstdbool create mode 100644 sdk/tlibcxx/include/cstddef create mode 100644 sdk/tlibcxx/include/cstdint create mode 100644 sdk/tlibcxx/include/cstdio create mode 100644 sdk/tlibcxx/include/cstdlib create mode 100644 sdk/tlibcxx/include/cstring create mode 100644 sdk/tlibcxx/include/ctgmath create mode 100644 sdk/tlibcxx/include/ctime create mode 100644 sdk/tlibcxx/include/cwchar create mode 100644 sdk/tlibcxx/include/cwctype create mode 100644 sdk/tlibcxx/include/deque create mode 100644 sdk/tlibcxx/include/exception create mode 100644 sdk/tlibcxx/include/experimental/__config create mode 100644 sdk/tlibcxx/include/experimental/__memory create mode 100644 sdk/tlibcxx/include/experimental/algorithm create mode 100644 sdk/tlibcxx/include/experimental/any create mode 100644 sdk/tlibcxx/include/experimental/chrono create mode 100644 sdk/tlibcxx/include/experimental/deque create mode 100644 sdk/tlibcxx/include/experimental/dynarray create mode 100644 sdk/tlibcxx/include/experimental/filesystem create mode 100644 sdk/tlibcxx/include/experimental/forward_list create mode 100644 sdk/tlibcxx/include/experimental/functional create mode 100644 sdk/tlibcxx/include/experimental/iterator create mode 100644 sdk/tlibcxx/include/experimental/list create mode 100644 sdk/tlibcxx/include/experimental/map create mode 100644 sdk/tlibcxx/include/experimental/memory_resource create mode 100644 sdk/tlibcxx/include/experimental/optional create mode 100644 sdk/tlibcxx/include/experimental/propagate_const create mode 100644 sdk/tlibcxx/include/experimental/ratio create mode 100644 sdk/tlibcxx/include/experimental/regex create mode 100644 sdk/tlibcxx/include/experimental/set create mode 100644 sdk/tlibcxx/include/experimental/string create mode 100644 sdk/tlibcxx/include/experimental/string_view create mode 100644 sdk/tlibcxx/include/experimental/system_error create mode 100644 sdk/tlibcxx/include/experimental/tuple create mode 100644 sdk/tlibcxx/include/experimental/type_traits create mode 100644 sdk/tlibcxx/include/experimental/unordered_map create mode 100644 sdk/tlibcxx/include/experimental/unordered_set create mode 100644 sdk/tlibcxx/include/experimental/utility create mode 100644 sdk/tlibcxx/include/experimental/vector create mode 100644 sdk/tlibcxx/include/ext/__hash create mode 100644 sdk/tlibcxx/include/ext/hash_map create mode 100644 sdk/tlibcxx/include/ext/hash_set create mode 100644 sdk/tlibcxx/include/forward_list create mode 100644 sdk/tlibcxx/include/fstream create mode 100644 sdk/tlibcxx/include/functional create mode 100644 sdk/tlibcxx/include/future create mode 100644 sdk/tlibcxx/include/initializer_list create mode 100644 sdk/tlibcxx/include/inttypes.h create mode 100644 sdk/tlibcxx/include/iomanip create mode 100644 sdk/tlibcxx/include/ios create mode 100644 sdk/tlibcxx/include/iosfwd create mode 100644 sdk/tlibcxx/include/iostream create mode 100644 sdk/tlibcxx/include/istream create mode 100644 sdk/tlibcxx/include/iterator create mode 100644 sdk/tlibcxx/include/limits create mode 100644 sdk/tlibcxx/include/list create mode 100644 sdk/tlibcxx/include/locale create mode 100644 sdk/tlibcxx/include/map create mode 100644 sdk/tlibcxx/include/memory create mode 100644 sdk/tlibcxx/include/module.modulemap create mode 100644 sdk/tlibcxx/include/mutex create mode 100644 sdk/tlibcxx/include/new create mode 100644 sdk/tlibcxx/include/numeric create mode 100644 sdk/tlibcxx/include/ostream create mode 100644 sdk/tlibcxx/include/queue create mode 100644 sdk/tlibcxx/include/random create mode 100644 sdk/tlibcxx/include/ratio create mode 100644 sdk/tlibcxx/include/regex create mode 100644 sdk/tlibcxx/include/scoped_allocator create mode 100644 sdk/tlibcxx/include/set create mode 100644 sdk/tlibcxx/include/shared_mutex create mode 100644 sdk/tlibcxx/include/sstream create mode 100644 sdk/tlibcxx/include/stack create mode 100644 sdk/tlibcxx/include/stdbool.h create mode 100644 sdk/tlibcxx/include/stdexcept create mode 100644 sdk/tlibcxx/include/streambuf create mode 100644 sdk/tlibcxx/include/string create mode 100644 sdk/tlibcxx/include/strstream create mode 100644 sdk/tlibcxx/include/support/android/locale_bionic.h create mode 100644 sdk/tlibcxx/include/support/ibm/limits.h create mode 100644 sdk/tlibcxx/include/support/ibm/locale_mgmt_aix.h create mode 100644 sdk/tlibcxx/include/support/ibm/support.h create mode 100644 sdk/tlibcxx/include/support/ibm/xlocale.h create mode 100644 sdk/tlibcxx/include/support/musl/xlocale.h create mode 100644 sdk/tlibcxx/include/support/newlib/xlocale.h create mode 100644 sdk/tlibcxx/include/support/sgx/__sgx_mutex_base create mode 100644 sdk/tlibcxx/include/support/sgx/sgx_condition_variable create mode 100644 sdk/tlibcxx/include/support/sgx/sgx_invoke create mode 100644 sdk/tlibcxx/include/support/sgx/sgx_mutex create mode 100644 sdk/tlibcxx/include/support/solaris/floatingpoint.h create mode 100644 sdk/tlibcxx/include/support/solaris/wchar.h create mode 100644 sdk/tlibcxx/include/support/solaris/xlocale.h create mode 100644 sdk/tlibcxx/include/support/win32/limits_win32.h create mode 100644 sdk/tlibcxx/include/support/win32/locale_mgmt_win32.h create mode 100644 sdk/tlibcxx/include/support/win32/locale_win32.h create mode 100644 sdk/tlibcxx/include/support/win32/math_win32.h create mode 100644 sdk/tlibcxx/include/support/win32/support.h create mode 100644 sdk/tlibcxx/include/support/xlocale/__nop_locale_mgmt.h create mode 100644 sdk/tlibcxx/include/support/xlocale/__posix_l_fallback.h create mode 100644 sdk/tlibcxx/include/support/xlocale/__strtonum_fallback.h create mode 100644 sdk/tlibcxx/include/support/xlocale/xlocale.h create mode 100644 sdk/tlibcxx/include/system_error create mode 100644 sdk/tlibcxx/include/tgmath.h create mode 100644 sdk/tlibcxx/include/thread create mode 100644 sdk/tlibcxx/include/tuple create mode 100644 sdk/tlibcxx/include/type_traits create mode 100644 sdk/tlibcxx/include/typeindex create mode 100644 sdk/tlibcxx/include/typeinfo create mode 100644 sdk/tlibcxx/include/unordered_map create mode 100644 sdk/tlibcxx/include/unordered_set create mode 100644 sdk/tlibcxx/include/utility create mode 100644 sdk/tlibcxx/include/valarray create mode 100644 sdk/tlibcxx/include/vector create mode 100644 sdk/tlibcxx/src/algorithm.cpp create mode 100644 sdk/tlibcxx/src/any.cpp create mode 100644 sdk/tlibcxx/src/bind.cpp create mode 100644 sdk/tlibcxx/src/chrono.cpp create mode 100644 sdk/tlibcxx/src/condition_variable.cpp create mode 100644 sdk/tlibcxx/src/debug.cpp create mode 100644 sdk/tlibcxx/src/exception.cpp create mode 100644 sdk/tlibcxx/src/experimental/filesystem/directory_iterator.cpp create mode 100644 sdk/tlibcxx/src/experimental/filesystem/operations.cpp create mode 100644 sdk/tlibcxx/src/experimental/filesystem/path.cpp create mode 100644 sdk/tlibcxx/src/experimental/memory_resource.cpp create mode 100644 sdk/tlibcxx/src/future.cpp create mode 100644 sdk/tlibcxx/src/hash.cpp create mode 100644 sdk/tlibcxx/src/include/atomic_support.h create mode 100644 sdk/tlibcxx/src/include/config_elast.h create mode 100644 sdk/tlibcxx/src/ios.cpp create mode 100644 sdk/tlibcxx/src/iostream.cpp create mode 100644 sdk/tlibcxx/src/locale.cpp create mode 100644 sdk/tlibcxx/src/memory.cpp create mode 100644 sdk/tlibcxx/src/mutex.cpp create mode 100644 sdk/tlibcxx/src/new.cpp create mode 100644 sdk/tlibcxx/src/optional.cpp create mode 100644 sdk/tlibcxx/src/random.cpp create mode 100644 sdk/tlibcxx/src/regex.cpp create mode 100644 sdk/tlibcxx/src/sgx_condition_variable.cpp create mode 100644 sdk/tlibcxx/src/sgx_mutex.cpp create mode 100644 sdk/tlibcxx/src/shared_mutex.cpp create mode 100644 sdk/tlibcxx/src/stdexcept.cpp create mode 100644 sdk/tlibcxx/src/string.cpp create mode 100644 sdk/tlibcxx/src/strstream.cpp create mode 100644 sdk/tlibcxx/src/support/solaris/README create mode 100644 sdk/tlibcxx/src/support/solaris/mbsnrtowcs.inc create mode 100644 sdk/tlibcxx/src/support/solaris/wcsnrtombs.inc create mode 100644 sdk/tlibcxx/src/support/solaris/xlocale.c create mode 100644 sdk/tlibcxx/src/support/win32/locale_win32.cpp create mode 100644 sdk/tlibcxx/src/support/win32/support.cpp create mode 100644 sdk/tlibcxx/src/system_error.cpp create mode 100644 sdk/tlibcxx/src/thread.cpp create mode 100644 sdk/tlibcxx/src/typeinfo.cpp create mode 100644 sdk/tlibcxx/src/utility.cpp create mode 100644 sdk/tlibcxx/src/valarray.cpp create mode 100644 sdk/trts/trts_nsp.cpp diff --git a/License.txt b/License.txt index 4c551de9..5697f615 100644 --- a/License.txt +++ b/License.txt @@ -98,21 +98,26 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS" AND A -2. compiler_rt +2. compiler_rt and libc++ The compiler_rt library is dual licensed under both the University of Illinois "BSD-Like" license and the MIT license. As a user of this code you may choose to use it under either license. As a contributor, you agree to allow your code to be used under both. +The libc++ library is dual licensed under both the University of Illinois +"BSD-Like" license and the MIT license. As a user of this code you may choose +to use it under either license. As a contributor, you agree to allow your code +to be used under both. + Full text of the relevant licenses is included below. -============================================================================= +============================================================================== University of Illinois/NCSA Open Source License -Copyright (c) 2009-2013 by the contributors listed in CREDITS.TXT +Copyright (c) 2009-2016 by the contributors listed in CREDITS.TXT All rights reserved. @@ -124,72 +129,72 @@ Developed by: http://llvm.org -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal with the -Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, subject -to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: -- Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimers. + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. -- Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimers in the documentation and/or -other materials provided with the distribution. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. -- Neither the names of the LLVM Team, University of Illinois at Urbana-Champaign, -nor the names of its contributors may be used to endorse or romote products derived -from this Software without specific prior written permission. + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS WITH THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. -============================================================================= +============================================================================== -Copyright (c) 2009-2013 by the contributors listed in CREDITS.TXT +Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or -substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ============================================================================= Copyrights and Licenses for Third Party Software Distributed with LLVM: ============================================================================= -The LLVM software contains code written by third parties. Such software will have its -own individual LICENSE.TXT file in the directory in which it appears. -This file will describe the copyrights, license, and restrictions which apply to that code. +The LLVM software contains code written by third parties. Such software will +have its own individual LICENSE.TXT file in the directory in which it appears. +This file will describe the copyrights, license, and restrictions which apply +to that code. -The disclaimer of warranty in the University of Illinois Open Source License applies to all -code in the LLVM Distribution, and nothing in any of the other licenses gives permission to -use the names of the LLVM Team or the University of Illinois to endorse or promote products -derived from this Software. - -The following pieces of software have additional or alternate copyrights, licenses, and/or -restrictions: - -Program Directory -------- --------- -mach_override lib/interception/mach_override +The disclaimer of warranty in the University of Illinois Open Source License +applies to all code in the LLVM Distribution, and nothing in any of the +other licenses gives permission to use the names of the LLVM Team or the +University of Illinois to endorse or promote products derived from this +Software. + 3. DLmalloc @@ -1115,7 +1120,7 @@ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -16. EPID SDK +16. Intel(R) Enhanced Privacy ID (Intel(R) EPID) SDK Apache License Version 2.0, January 2004 diff --git a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c++/sgx_t.mk b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c++/sgx_t.mk index 00174371..9e5bd817 100644 --- a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c++/sgx_t.mk +++ b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c++/sgx_t.mk @@ -45,7 +45,7 @@ Crypto_Library_Name := sgx_tcrypto $(EnclaveName)_Cpp_Files := trusted/$(enclaveName).cpp $(EnclaveName)_C_Files := -$(EnclaveName)_Include_Paths := -IInclude -Itrusted -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +$(EnclaveName)_Include_Paths := -IInclude -Itrusted -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx Flags_Just_For_C := -Wno-implicit-function-declaration -std=c11 @@ -57,7 +57,7 @@ $(EnclaveName)_Cpp_Flags := $($(EnclaveName)_Cpp_Flags) -fno-builtin-printf $(EnclaveName)_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ -Wl,--defsym,__ImageBase=0 \ diff --git a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c/sgx_t.mk b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c/sgx_t.mk index 3c38105b..add92a56 100644 --- a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c/sgx_t.mk +++ b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXEnclave/makefiles/c/sgx_t.mk @@ -44,7 +44,7 @@ endif Crypto_Library_Name := sgx_tcrypto $(EnclaveName)_C_Files := trusted/$(enclaveName).c -$(EnclaveName)_Include_Paths := -IInclude -Itrusted -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +$(EnclaveName)_Include_Paths := -IInclude -Itrusted -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx Flags_Just_For_C := -Wno-implicit-function-declaration -std=c11 Common_C_Cpp_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $($(EnclaveName)_Include_Paths) -fno-builtin-printf -I. @@ -52,7 +52,7 @@ $(EnclaveName)_C_Flags := $(Flags_Just_For_C) $(Common_C_Cpp_Flags) $(EnclaveName)_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ -Wl,--defsym,__ImageBase=0 \ diff --git a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c++/sgx_t_static.mk b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c++/sgx_t_static.mk index ca5e4ddd..bd24da04 100644 --- a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c++/sgx_t_static.mk +++ b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c++/sgx_t_static.mk @@ -45,7 +45,7 @@ Crypto_Library_Name := sgx_tcrypto $(EnclaveName)_Cpp_Files := static_trusted/$(enclaveName).cpp $(EnclaveName)_C_Files := -$(EnclaveName)_Include_Paths := -IInclude -I$(EnclaveName) -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +$(EnclaveName)_Include_Paths := -IInclude -I$(EnclaveName) -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx Flags_Just_For_C := -Wno-implicit-function-declaration -std=c11 Common_C_Cpp_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $($(EnclaveName)_Include_Paths) -fno-builtin-printf -I. @@ -56,7 +56,7 @@ $(EnclaveName)_Cpp_Flags := $($(EnclaveName)_Cpp_Flags) -fno-builtin-printf $(EnclaveName)_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ -Wl,--defsym,__ImageBase=0 \ diff --git a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c/sgx_t_static.mk b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c/sgx_t_static.mk index 27dc0a93..84f202e8 100644 --- a/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c/sgx_t_static.mk +++ b/Linux_SGXEclipsePlugin/build_directory/plugins/com.intel.sgx/templates/sgx/SGXTrustedStaticLibrary/makefiles/c/sgx_t_static.mk @@ -44,7 +44,7 @@ endif Crypto_Library_Name := sgx_tcrypto $(EnclaveName)_C_Files := static_trusted/$(enclaveName).c -$(EnclaveName)_Include_Paths := -IInclude -I$(EnclaveName) -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +$(EnclaveName)_Include_Paths := -IInclude -I$(EnclaveName) -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx Flags_Just_For_C := -Wno-implicit-function-declaration -std=c11 Common_C_Cpp_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $($(EnclaveName)_Include_Paths) -fno-builtin-printf -I. @@ -52,7 +52,7 @@ $(EnclaveName)_C_Flags := $(Flags_Just_For_C) $(Common_C_Cpp_Flags) $(EnclaveName)_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ -Wl,--defsym,__ImageBase=0 \ diff --git a/Makefile b/Makefile index a2ec9c97..5900ab2f 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,12 @@ clean: @$(MAKE) -C psw/ clean @$(RM) -r $(ROOT_DIR)/build @$(RM) -r linux/installer/bin/sgx_linux*.bin + @$(RM) -rf linux/installer/common/psw/output + @$(RM) -rf linux/installer/common/psw/gen_source.py + @$(RM) -rf linux/installer/common/sdk/output + @$(RM) -rf linux/installer/common/sdk/pkgconfig/x64 + @$(RM) -rf linux/installer/common/sdk/pkgconfig/x86 + @$(RM) -rf linux/installer/common/sdk/gen_source.py rebuild: $(MAKE) clean diff --git a/README.md b/README.md index 26e21159..a6d275aa 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,19 @@ Introduction ------------ Intel(R) Software Guard Extensions (Intel(R) SGX) is an Intel technology for application developers seeking to protect select code and data from disclosure or modification. -The Linux* Intel SGX software stack is comprised of the Intel SGX driver, the Intel SGX SDK, and the Intel SGX Platform Software (PSW). The Intel SGX SDK and Intel SGX PSW are hosted in the [linux-sgx](https://github.com/01org/linux-sgx) project. +The Linux\* Intel(R) SGX software stack is comprised of the Intel(R) SGX driver, the Intel(R) SGX SDK, and the Intel(R) SGX Platform Software (PSW). The Intel(R) SGX SDK and Intel(R) SGX PSW are hosted in the [linux-sgx](https://github.com/01org/linux-sgx) project. -The [linux-sgx-driver](https://github.com/01org/linux-sgx-driver) project hosts the out-of-tree driver for the Linux Intel SGX software stack, which will be used until the driver upstreaming process is complete. +The [linux-sgx-driver](https://github.com/01org/linux-sgx-driver) project hosts the out-of-tree driver for the Linux\* Intel(R) SGX software stack, which will be used until the driver upstreaming process is complete. -**Note:** This repository includes a subset of the Intel(R) Integrated Performance Primitives (IPP) Cryptography library under [external/crypto_px](https://github.com/01org/linux-sgx/external/crypto_px). It is provided as reference implementation for the cryptographic primitives used in SDK and PSW. The primitives are written in pure C and are not optimized for performance. Instructions are provided below for building the SDK and PSW with both precompiled, optimized IPP binaries and the non-optimized source code version. +**Note** This repository includes a subset of the Intel(R) Integrated Performance Primitives (IPP) Cryptography library under [external/crypto_px](external/crypto_px). It is provided as reference implementation for the cryptographic primitives used in SDK and PSW. The primitives are written in pure C and are not optimized for performance. Instructions are provided below for building the SDK and PSW with both precompiled optimized IPP binaries and the non-optimized source code version. License ------- -See `License.txt` for details. +See [License.txt](License.txt) for details. Contributing ------- -See `CONTRIBUTING.md` for details. +See [CONTRIBUTING.md](CONTRIBUTING.md) for details. Documentation ------------- @@ -28,14 +28,14 @@ Documentation Build and Install the Intel(R) SGX Driver ----------------------------------------- -Follow the instructions in the [linux-sgx-driver](https://github.com/01org/linux-sgx-driver) project to build and install the Intel SGX driver. +Follow the instructions in the [linux-sgx-driver](https://github.com/01org/linux-sgx-driver) project to build and install the Intel(R) SGX driver. Build the Intel(R) SGX SDK and Intel(R) SGX PSW Package ------------------------------------------------------- ### Prerequisites: -- Ensure that you have the one of following operating systems: +- Ensure that you have one of the following required operating systems: * Ubuntu\* Desktop-16.04-LTS 64bits - * Red Hat Enterprise Linux Server release 7.2 64bits + * Red Hat Enterprise Linux Server release 7.3 64bits * CentOS 7.3.1611 64bits - Use the following command(s) to install the required tools to build the Intel(R) SGX SDK: @@ -43,7 +43,7 @@ Build the Intel(R) SGX SDK and Intel(R) SGX PSW Package ``` $ sudo apt-get install build-essential ocaml automake autoconf libtool wget python ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` $ sudo yum groupinstall 'Development Tools' $ sudo yum install ocaml wget python @@ -53,7 +53,7 @@ Build the Intel(R) SGX SDK and Intel(R) SGX PSW Package ``` $ sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` $ sudo yum install openssl-devel libcurl-devel protobuf-compiler protobuf-devel ``` @@ -64,20 +64,20 @@ Build the Intel(R) SGX SDK and Intel(R) SGX PSW Package ``` ### Build the Intel(R) SGX SDK and Intel(R) SGX PSW -The following steps describe how to build the Intel SGX SDK and PSW. You can build the project according to your requirements. -- To build both Intel SGX SDK and PSW with the default configuration, enter the following command: +The following steps describe how to build the Intel(R) SGX SDK and PSW. You can build the project according to your requirements. +- To build both Intel(R) SGX SDK and PSW with default configuration, enter the following command: ``` $ make ``` You can find the tools and libraries generated in the `build/linux` directory. - **Note**: You can also go to the `sdk` folder and use the `make` command to build the Intel SGX SDK component only. However, building the PSW component is dependent on the result of building the Intel SGX SDK. + **Note**: You can also go to the `sdk` folder and use the `make` command to build the Intel(R) SGX SDK component only. However, building the PSW component is dependent on the result of building the Intel(R) SGX SDK. - The default build uses precompiled optimized libraries, which are downloaded by the script ``./download_prebuilt.sh``. You can also use the non-optimized source code version implementation instead by entering the following command: ``` $ make USE_OPT_LIBS=0 ``` -- To build Intel SGX SDK and PSW with debug information, enter the following command: +- To build Intel(R) SGX SDK and PSW with debug information, enter the following command: ``` $ make DEBUG=1 ``` @@ -87,72 +87,75 @@ The following steps describe how to build the Intel SGX SDK and PSW. You can bui ``` - The build above uses prebuilt Intel(R) Architecture Enclaves(LE/PvE/QE/PCE/PSE-OP/PSE-PR) and applet(PSDA) - the files ``psw/ae/data/prebuilt/libsgx_*.signed.so`` and ``psw/ae/data/prebuilt/PSDA.dalp``, which have been signed by Intel in advance. - To build those enclaves by yourself (without a signature), first you need to build both Intel SGX SDK and PSW with the default configuration. After that, you can build each Architecture Enclave by using the `make` command from the corresponding folder: + To build those enclaves by yourself (without a signature), first you need to build both Intel(R) SGX SDK and PSW with the default configuration. After that, you can build each Architecture Enclave by using the `make` command from the corresponding folder: ``` $ cd psw/ae/le $ make ``` -### Build Intel(R) SGX SDK Installer -To build Intel(R) SGX SDK installer, enter the following command: +### Build the Intel(R) SGX SDK Installer +To build the Intel(R) SGX SDK installer, enter the following command: ``` $ make sdk_install_pkg ``` -You can find the generated Intel SGX SDK installer ``sgx_linux_x64_sdk_${version}.bin`` located under `linux/installer/bin/`, where `${version}` refers to the version number. +You can find the generated Intel(R) SGX SDK installer ``sgx_linux_x64_sdk_${version}.bin`` located under `linux/installer/bin/`, where `${version}` refers to the version number. -### Build Intel(R) SGX PSW Installer -To build Intel(R) SGX PSW installer, enter the following command: +**Note**: The above command builds the Intel(R) SGX SDK with default configuration firstly and then generates the target SDK Installer. To build the Intel(R) SGX SDK Installer with debug information kept in the tools and libraries, enter the following command: +``` +$ make sdk_install_pkg DEBUG=1 +``` + +### Build the Intel(R) SGX PSW Installer +To build the Intel(R) SGX PSW installer, enter the following command: ``` $ make psw_install_pkg ``` -You can find the generated Intel SGX PSW installer ``sgx_linux_x64_psw_${version}.bin`` located under `linux/installer/bin/`, where `${version}` refers to the version number. +You can find the generated Intel(R) SGX PSW installer ``sgx_linux_x64_psw_${version}.bin`` located under `linux/installer/bin/`, where `${version}` refers to the version number. -Install Intel(R) SGX SDK +**Note**: The above command builds the Intel(R) SGX SDK and PSW with default configuration firstly and then generates the target PSW Installer. To build the Intel(R) SGX PSW Installer with debug information kept in the tools and libraries, enter the following command: +``` +$ make psw_install_pkg DEBUG=1 +``` + + +Install the Intel(R) SGX SDK ------------------------ ### Prerequisites - Ensure that you have one of the following operating systems: * Ubuntu\* Desktop-16.04-LTS 64bits - * Red Hat Enterprise Linux Server release 7.2 64bits + * Red Hat Enterprise Linux Server release 7.3 64bits * CentOS 7.3.1611 64bits - Use the following command to install the required tool to use Intel(R) SGX SDK: * On Ubuntu 16.04: ``` $ sudo apt-get install build-essential python ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` $ sudo yum groupinstall 'Development Tools' $ sudo yum install python ``` -### Install Intel(R) SGX SDK -To install Intel(R) SGX SDK, invoke the installer with root privilege, as follows: +### Install the Intel(R) SGX SDK +To install the Intel(R) SGX SDK, invoke the installer, as follows: ``` $ cd linux/installer/bin -$ sudo ./sgx_linux_x64_sdk_${version}.bin -``` -### Test Intel(R) SGX SDK Package with the Code Samples -- Copy the code samples installed by Intel(R) SGX SDK package into your work folder, for example: -``` - $ cp -r /opt/intel/sgxsdk/SampleCode ~ +$ ./sgx_linux_x64_sdk_${version}.bin ``` +### Test the Intel(R) SGX SDK Package with the Code Samples - Compile and run each code sample in Simulation mode to make sure the package works well: ``` $ cd SampleCode/LocalAttestation $ make SGX_MODE=SIM $ ./app ``` - Use similar commands for the other code samples. -### Compile and Run the Code Samples in Hardware Mode + Use similar commands for other sample codes. +### Compile and Run the Code Samples in the Hardware Mode If you use an Intel SGX hardware enabled machine, you can run the code samples in Hardware mode. Ensure that you install Intel(R) SGX driver and Intel(R) SGX PSW installer on the machine. -See the earlier topic, *Build and Install the Intel(R) SGX Driver*, for information on installing the Intel(R) SGX driver. -See the later topic, *Install Intel(R) SGX PSW*, for information on installing the PSW package. -- Copy the code samples installed by the Intel(R) SGX SDK package into your work folder, for example: -``` - $ cp -r /opt/intel/sgxsdk/SampleCode ~ -``` -- Compile and run each code sample in Hardware mode, Debug build, as follows: +See the earlier topic, *Build and Install the Intel(R) SGX Driver*, for information on how to install the Intel(R) SGX driver. +See the later topic, *Install Intel(R) SGX PSW*, for information on how to install the PSW package. +- Compile and run each code sample in Hardware mode, debug build, as follows: ``` $ cd SampleCode/LocalAttestation $ make @@ -161,34 +164,28 @@ See the later topic, *Install Intel(R) SGX PSW*, for information on installing t Use similar commands for other code samples. -Install Intel(R) SGX PSW +Install the Intel(R) SGX PSW ------------------------ ### Prerequisites - Ensure that you have one of the following operating systems: * Ubuntu\* Desktop-16.04-LTS 64bits - * Red Hat Enterprise Linux Server release 7.2 64bits + * Red Hat Enterprise Linux Server release 7.3 64bits * CentOS 7.3.1611 64bits -- Ensure that you have a system with one of the following processors: - * 6th Generation Intel(R) Core(TM) Processor (code named Skylake) - * 7th Generation Intel(R) Core(TM) Processor (code named Kaby Lake) -- Configure the system with the **Intel SGX hardware enabled** option and install Intel SGX driver in advance. - See the earlier topic, *Build and Install the Intel(R) SGX Driver*, for information on installing the Intel SGX driver. +- Ensure that you have a system with the following required hardware: + * 6th Generation Intel(R) Core(TM) Processor or newer +- Configure the system with the **Intel SGX hardware enabled** option and install Intel(R) SGX driver in advance. + See the earlier topic, *Build and Install the Intel(R) SGX Driver*, for information on how to install the Intel(R) SGX driver. - Install the library using the following command: * On Ubuntu 16.04: ``` $ sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` $ sudo yum install openssl-devel libcurl-devel protobuf-devel ``` - To use Trusted Platform Service functions: Ensure `mei_me` driver is enabled and `/dev/mei0` exists. - * On Red Hat Enterprise Linux 7.2: - Update kernel version to kernel-3.10.0-514.el7 or newer on Red Hat Enterprise Linux 7.2. - ``` - $ sudo yum update kernel - ``` Download [iclsClient](https://software.intel.com/en-us/sgx-sdk/download) and install it using the following commands: * On Ubuntu 16.04: ``` @@ -196,7 +193,7 @@ Install Intel(R) SGX PSW $ sudo alien --scripts iclsClient-1.45.449.12-1.x86_64.rpm $ sudo dpkg -i iclsclient_1.45.449.12-2_amd64.deb ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` $ sudo yum install iclsClient-1.45.449.12-1.x86_64.rpm ``` @@ -206,23 +203,18 @@ Install Intel(R) SGX PSW $ sudo apt-get install uuid-dev libxml2-dev cmake pkg-config $ cmake .;make;sudo make install;sudo systemctl enable jhi ``` - * On Red Hat Enterprise Linux 7.2 and CentOS 7.3: + * On Red Hat Enterprise Linux 7.3 and CentOS 7.3: ``` - $ sudo yum install libuuid-devel libxml2-devel cmake - $ cmake .;make;sudo make install;sudo systemctl enable jhi + $ sudo yum install libuuid-devel libxml2-devel cmake pkgconfig + $ cmake .;make;sudo make install;sudo ldconfig;sudo systemctl enable jhi ``` -### Install Intel(R) SGX PSW -To install Intel(R) SGX PSW, invoke the installer with root privilege: +### Install the Intel(R) SGX PSW +To install the Intel(R) SGX PSW, invoke the installer with root privilege: ``` $ cd linux/installer/bin $ sudo ./sgx_linux_x64_psw_${version}.bin ``` -**Note**: On Red Hat Enterprise Linux 7.2 and CentOS 7.3, after Intel(R) SGX PSW installation, execute the following command to also update the shared library cache: -``` -$ sudo ldconfig -``` - ### Start or Stop aesmd Service The Intel(R) SGX PSW installer installs an aesmd service in your machine, which is running in a special linux account `aesmd`. @@ -235,4 +227,3 @@ The aesmd service uses the HTTP protocol to initialize some services. If a proxy is required for the HTTP protocol, you may need to manually set up the proxy for the aesmd service. You should manually edit the file `/etc/aesmd.conf` (refer to the comments in the file) to set the proxy for the aesmd service. After you configure the proxy, you need to restart the service to enable the proxy. - diff --git a/SampleCode/Cxx11SGXDemo/.cproject b/SampleCode/Cxx11SGXDemo/.cproject new file mode 100644 index 00000000..6fff949b --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/.cproject @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/Cxx11SGXDemo/.project b/SampleCode/Cxx11SGXDemo/.project new file mode 100644 index 00000000..8feb4901 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/.project @@ -0,0 +1,28 @@ + + + Cxx11SGXDemo + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.core.ccnature + com.intel.sgx.sgxnature + + diff --git a/SampleCode/Cxx11SGXDemo/.settings/language.settings.xml b/SampleCode/Cxx11SGXDemo/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/Cxx11SGXDemo/App/App.cpp b/SampleCode/Cxx11SGXDemo/App/App.cpp new file mode 100644 index 00000000..bc5e7b3e --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/App/App.cpp @@ -0,0 +1,263 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include + +# include +# include +# define MAX_PATH FILENAME_MAX + +#include "sgx_urts.h" +#include "sgx_uae_service.h" +#include "App.h" +#include "Enclave_u.h" + +/* Global EID shared by multiple threads */ +sgx_enclave_id_t global_eid = 0; + +typedef struct _sgx_errlist_t { + sgx_status_t err; + const char *msg; + const char *sug; /* Suggestion */ +} sgx_errlist_t; + +/* Error code returned by sgx_create_enclave */ +static sgx_errlist_t sgx_errlist[] = { + { + SGX_ERROR_UNEXPECTED, + "Unexpected error occurred.", + NULL + }, + { + SGX_ERROR_INVALID_PARAMETER, + "Invalid parameter.", + NULL + }, + { + SGX_ERROR_OUT_OF_MEMORY, + "Out of memory.", + NULL + }, + { + SGX_ERROR_ENCLAVE_LOST, + "Power transition occurred.", + "Please refer to the sample \"PowerTransition\" for details." + }, + { + SGX_ERROR_INVALID_ENCLAVE, + "Invalid enclave image.", + NULL + }, + { + SGX_ERROR_INVALID_ENCLAVE_ID, + "Invalid enclave identification.", + NULL + }, + { + SGX_ERROR_INVALID_SIGNATURE, + "Invalid enclave signature.", + NULL + }, + { + SGX_ERROR_OUT_OF_EPC, + "Out of EPC memory.", + NULL + }, + { + SGX_ERROR_NO_DEVICE, + "Invalid SGX device.", + "Please make sure SGX module is enabled in the BIOS, and install SGX driver afterwards." + }, + { + SGX_ERROR_MEMORY_MAP_CONFLICT, + "Memory map conflicted.", + NULL + }, + { + SGX_ERROR_INVALID_METADATA, + "Invalid enclave metadata.", + NULL + }, + { + SGX_ERROR_DEVICE_BUSY, + "SGX device was busy.", + NULL + }, + { + SGX_ERROR_INVALID_VERSION, + "Enclave version was invalid.", + NULL + }, + { + SGX_ERROR_INVALID_ATTRIBUTE, + "Enclave was not authorized.", + NULL + }, + { + SGX_ERROR_ENCLAVE_FILE_ACCESS, + "Can't open enclave file.", + NULL + }, + { + SGX_ERROR_NDEBUG_ENCLAVE, + "The enclave is signed as product enclave, and can not be created as debuggable enclave.", + NULL + }, +}; + +/* Check error conditions for loading enclave */ +void print_error_message(sgx_status_t ret) +{ + size_t idx = 0; + size_t ttl = sizeof sgx_errlist/sizeof sgx_errlist[0]; + + for (idx = 0; idx < ttl; idx++) { + if(ret == sgx_errlist[idx].err) { + if(NULL != sgx_errlist[idx].sug) + printf("Info: %s\n", sgx_errlist[idx].sug); + printf("Error: %s\n", sgx_errlist[idx].msg); + break; + } + } + + if (idx == ttl) + printf("Error: Unexpected error occurred.\n"); +} + +/* Initialize the enclave: + * Step 1: try to retrieve the launch token saved by last transaction + * Step 2: call sgx_create_enclave to initialize an enclave instance + * Step 3: save the launch token if it is updated + */ +int initialize_enclave(void) +{ + char token_path[MAX_PATH] = {'\0'}; + sgx_launch_token_t token = {0}; + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + int updated = 0; + + /* Step 1: try to retrieve the launch token saved by last transaction + * if there is no token, then create a new one. + */ + /* try to get the token saved in $HOME */ + const char *home_dir = getpwuid(getuid())->pw_dir; + + if (home_dir != NULL && + (strlen(home_dir)+strlen("/")+sizeof(TOKEN_FILENAME)+1) <= MAX_PATH) { + /* compose the token path */ + strncpy(token_path, home_dir, strlen(home_dir)); + strncat(token_path, "/", strlen("/")); + strncat(token_path, TOKEN_FILENAME, sizeof(TOKEN_FILENAME)+1); + } else { + /* if token path is too long or $HOME is NULL */ + strncpy(token_path, TOKEN_FILENAME, sizeof(TOKEN_FILENAME)); + } + + FILE *fp = fopen(token_path, "rb"); + if (fp == NULL && (fp = fopen(token_path, "wb")) == NULL) { + printf("Warning: Failed to create/open the launch token file \"%s\".\n", token_path); + } + + if (fp != NULL) { + /* read the token from saved file */ + size_t read_num = fread(token, 1, sizeof(sgx_launch_token_t), fp); + if (read_num != 0 && read_num != sizeof(sgx_launch_token_t)) { + /* if token is invalid, clear the buffer */ + memset(&token, 0x0, sizeof(sgx_launch_token_t)); + printf("Warning: Invalid launch token read from \"%s\".\n", token_path); + } + } + /* Step 2: call sgx_create_enclave to initialize an enclave instance */ + /* Debug Support: set 2nd parameter to 1 */ + ret = sgx_create_enclave(ENCLAVE_FILENAME, SGX_DEBUG_FLAG, &token, &updated, &global_eid, NULL); + if (ret != SGX_SUCCESS) { + print_error_message(ret); + if (fp != NULL) fclose(fp); + return -1; + } + + /* Step 3: save the launch token if it is updated */ + if (updated == FALSE || fp == NULL) { + /* if the token is not updated, or file handler is invalid, do not perform saving */ + if (fp != NULL) fclose(fp); + return 0; + } + + /* reopen the file with write capablity */ + fp = freopen(token_path, "wb", fp); + if (fp == NULL) return 0; + size_t write_num = fwrite(token, 1, sizeof(sgx_launch_token_t), fp); + if (write_num != sizeof(sgx_launch_token_t)) + printf("Warning: Failed to save launch token to \"%s\".\n", token_path); + fclose(fp); + return 0; +} + +/* OCall functions */ +void ocall_print_string(const char *str) +{ + /* Proxy/Bridge will check the length and null-terminate + * the input string to prevent buffer overflow. + */ + printf("%s", str); +} + + +/* Application entry */ +int SGX_CDECL main(int argc, char *argv[]) +{ + (void)(argc); + (void)(argv); + + + /* Initialize the enclave */ + if(initialize_enclave() < 0){ + printf("Enter a character before exit ...\n"); + getchar(); + return -1; + } + + + /* Utilize trusted libraries */ + ecall_libcxx_functions(); + + /* Destroy the enclave */ + sgx_destroy_enclave(global_eid); + + printf("Info: Cxx11DemoEnclave successfully returned.\n"); + + //printf("Enter a character before exit ...\n"); + //getchar(); + return 0; +} + diff --git a/SampleCode/Cxx11SGXDemo/App/App.h b/SampleCode/Cxx11SGXDemo/App/App.h new file mode 100644 index 00000000..4c088ff3 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/App/App.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _APP_H_ +#define _APP_H_ + +#include +#include +#include +#include + +#include "sgx_error.h" /* sgx_status_t */ +#include "sgx_eid.h" /* sgx_enclave_id_t */ + +#ifndef TRUE +# define TRUE 1 +#endif + +#ifndef FALSE +# define FALSE 0 +#endif + +#if defined(__GNUC__) +# define TOKEN_FILENAME "enclave.token" +# define ENCLAVE_FILENAME "enclave.signed.so" +#endif + +extern sgx_enclave_id_t global_eid; /* global enclave id */ + +#if defined(__cplusplus) +extern "C" { +#endif + +void ecall_libcxx_functions(void); + + +#if defined(__cplusplus) +} +#endif + +#endif /* !_APP_H_ */ diff --git a/SampleCode/Cxx11SGXDemo/App/TrustedLibrary/Libcxx.cpp b/SampleCode/Cxx11SGXDemo/App/TrustedLibrary/Libcxx.cpp new file mode 100644 index 00000000..c04e5eae --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/App/TrustedLibrary/Libcxx.cpp @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include + +#include "../App.h" +#include "Enclave_u.h" +#include + +/* ecall_libcxx_functions: + * Invokes standard C++11 functions. + */ + + //This function is part of mutex demo +void demo_counter_without_mutex() +{ + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + ret = ecall_mutex_demo_no_protection(global_eid); + if (ret != SGX_SUCCESS) + abort(); +} + +//This function is part of mutex demo +void demo_counter_mutex() +{ + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + ret = ecall_mutex_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); +} + +//This function is used by processing thread of condition variable demo +void demo_cond_var_run() +{ + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + ret = ecall_condition_variable_run(global_eid); + if (ret != SGX_SUCCESS) + abort(); +} + +//This function is used by the loader thread of condition variable demo +void demo_cond_var_load() +{ + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + ret = ecall_condition_variable_load(global_eid); + if (ret != SGX_SUCCESS) + abort(); +} + +// Examples for C++11 library and compiler features +void ecall_libcxx_functions(void) +{ + sgx_status_t ret = SGX_ERROR_UNEXPECTED; + + // Example for lambda function feature: + ret = ecall_lambdas_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for auto feature: + ret = ecall_auto_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for decltype: + ret = ecall_decltype_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for strongly_typed_enum: + ret = ecall_strongly_typed_enum_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for range based for loops: + ret = ecall_range_based_for_loops_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for static_assert: + ret = ecall_static_assert_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for virtual function controls : override, final, default, and delete + ret = ecall_virtual_function_control_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for delegating_constructors: + ret = ecall_delegating_constructors_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for std::function: + ret = ecall_std_function_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for algorithms (std::all_of, std::any_of, std::none_of): + ret = ecall_cxx11_algorithms_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for variadic_templates feature: + ret = ecall_variadic_templates_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for SFINAE: + ret = ecall_SFINAE_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for initializer_list: + ret = ecall_initializer_list_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for rvalue: + ret = ecall_rvalue_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for nullptr: + ret = ecall_nullptr_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for enum class: + ret = ecall_enum_class_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for new container classes (unordered_set, unordered_map, unordered_multiset, and unordered_multimap): + ret = ecall_new_container_classes_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for tuple: + ret = ecall_tuple_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + // Example for shared_ptr: + ret = ecall_shared_ptr_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + // Example for atomic: + ret = ecall_atomic_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + +//The following threads are part of mutex demo + std::thread t1(demo_counter_without_mutex); + std::thread t2(demo_counter_without_mutex); + std::thread t3(demo_counter_without_mutex); + t1.join(); + t2.join(); + t3.join(); + ret = ecall_print_final_value_no_protection(global_eid); + if (ret != SGX_SUCCESS) + abort(); + + + +//The following threads are part of mutex demo + std::thread tm1(demo_counter_mutex); + std::thread tm2(demo_counter_mutex); + std::thread tm3(demo_counter_mutex); + tm1.join(); + tm2.join(); + tm3.join(); + ret = ecall_print_final_value_mutex_demo(global_eid); + if (ret != SGX_SUCCESS) + abort(); + +//The following threads are part of condition variable demo + std::thread th1(demo_cond_var_run); + std::thread th2(demo_cond_var_load); + th2.join(); + th1.join(); + +} + diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave.config.xml b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.config.xml new file mode 100644 index 00000000..a94d12f0 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.config.xml @@ -0,0 +1,12 @@ + + + 0 + 0 + 0x40000 + 0x100000 + 10 + 1 + 0 + 0 + 0xFFFFFFFF + diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave.cpp b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.cpp new file mode 100644 index 00000000..91a096ad --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include /* vsnprintf */ + +#include "Enclave.h" +#include "Enclave_t.h" /* print_string */ + +/* + * printf: + * Invokes OCALL to display the enclave buffer to the terminal. + */ +void printf(const char *fmt, ...) +{ + char buf[BUFSIZ] = {'\0'}; + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, BUFSIZ, fmt, ap); + va_end(ap); + ocall_print_string(buf); +} diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave.edl b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.edl new file mode 100644 index 00000000..f6a43766 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.edl @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Enclave.edl - Top EDL file. */ + +enclave { + + + /* Import ECALL/OCALL from sub-directory EDLs. + * [from]: specifies the location of EDL file. + * [import]: specifies the functions to import, + * [*]: implies to import all functions. + */ + + from "TrustedLibrary/Libcxx.edl" import *; + from "sgx_tstdc.edl" import sgx_thread_wait_untrusted_event_ocall, sgx_thread_set_untrusted_event_ocall, sgx_thread_setwait_untrusted_events_ocall, sgx_thread_set_multiple_untrusted_events_ocall; + + /* + * ocall_print_string - invokes OCALL to display string buffer inside the enclave. + * [in]: copy the string buffer to App outside. + * [string]: specifies 'str' is a NULL terminated buffer. + */ + untrusted { + void ocall_print_string([in, string] const char *str); + }; + +}; diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave.h b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.h new file mode 100644 index 00000000..eb2da002 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _ENCLAVE_H_ +#define _ENCLAVE_H_ + +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +void printf(const char *fmt, ...); + +#if defined(__cplusplus) +} +#endif + +#endif /* !_ENCLAVE_H_ */ diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave.lds b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.lds new file mode 100644 index 00000000..e3d9d0ee --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave.lds @@ -0,0 +1,9 @@ +enclave.so +{ + global: + g_global_data_sim; + g_global_data; + enclave_entry; + local: + *; +}; diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave_debug.lds b/SampleCode/Cxx11SGXDemo/Enclave/Enclave_debug.lds new file mode 100644 index 00000000..f5f35d5b --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave_debug.lds @@ -0,0 +1,10 @@ +enclave.so +{ + global: + g_global_data_sim; + g_global_data; + enclave_entry; + g_peak_heap_used; + local: + *; +}; diff --git a/SampleCode/Cxx11SGXDemo/Enclave/Enclave_private.pem b/SampleCode/Cxx11SGXDemo/Enclave/Enclave_private.pem new file mode 100644 index 00000000..529d07be --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/Enclave_private.pem @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.cpp b/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.cpp new file mode 100644 index 00000000..781feef3 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.cpp @@ -0,0 +1,917 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../Enclave.h" +#include "Enclave_t.h" + + +// Feature name : Lambda functions +// Feature description : It is used to create a function object that can capture variables in scope. +// Demo description : Shows lambda capture options and a some basic usages. +void ecall_lambdas_demo() +{ + // Lambdas capture options: + int local_var = 0; + + [] { return true; }; // captures nothing + + [&] { return ++local_var; }; // captures all variable by reference + [&local_var] { return ++local_var; }; // captures local_var by reference + [&, local_var] { return local_var; }; // captures all by reference except local_var + + [=] { return local_var; }; // captures all variable by value + [local_var] { return local_var; }; // captures local_var by value + [=, &local_var] { return ++local_var; }; // captures all variable by value except local_var + + // Sample usages for lamdbas: + std::vector< int> v { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + printf("[Lambdas] Initial array using lambdas: { "); + + // Print the elements in an array using lambdas + std::for_each(std::begin(v), std::end(v), [](int elem) { printf("%d ", elem); }); //capture specification + printf("}.\n"); + + // Find the first odd number using lambda as an unary predicate when calling find_if. + auto first_odd_element = std::find_if(std::begin(v), std::end(v), [=](int elem) { return elem % 2 == 1; }); + + if (first_odd_element != std::end(v)) + printf("[Lambdas] First odd element in the array is %d. \n", *first_odd_element); + else + printf("[Lambdas] No odd element found in the array.\n"); + + // Count the even numbers using a lambda function as an unary predicate when calling count_if. + long long number_of_even_elements = std::count_if(std::begin(v), std::end(v), [=](int val) { return val % 2 == 0; }); + printf("[Lambdas] Number of even elements in the array is %lld.\n", number_of_even_elements); + + // Sort the elements of an array using lambdas + std::sort(std::begin(v), std::end(v), [](int e1, int e2) {return e2 < e1; }); + + // Print the elements in an array using lambdas + printf("[Lambdas] Array after sort: { "); + std::for_each(std::begin(v), std::end(v), [](int elem) { printf("%d ", elem); }); + printf("}. \n"); + printf("\n"); // end of demo +} + + +// Feature name : auto +// Feature description : It is used for type deduction +// Demo description : Shows basic usages of auto specifier with different types. + +// Helper function for ecall_auto_demo: +void sample_func_auto_demo() +{ + printf("[auto] Function sample_func_auto_demo is called. \n"); +} + +void ecall_auto_demo() +{ + double local_var = 0.0; + + auto a = 7; // Type of variable a is deduced to be int + printf("[auto] Type of a is int. typeid = %s.\n", typeid(a).name()); + + const auto b1 = local_var, *b2 = &local_var; // auto can be used with modifiers like const or &. + printf("[auto] Type of b1 is const double. typeid = %s.\n", typeid(b1).name()); + printf("[auto] Type of b2 is const double*. typeid = %s.\n", typeid(b2).name()); + (void)b1; + (void)b2; + + auto c = 0, *d = &a; // multiple variable initialization if the deduced type does match + printf("[auto] Type of c is int. typeid = %s.\n", typeid(c).name()); + printf("[auto] Type of d is int*. typeid = %s.\n", typeid(d).name()); + (void)c; + (void)d; + + auto lambda = [] {}; // can be used to define lambdas + printf("[auto] Type of lambda is [] {}. typeid = %s.\n", typeid(lambda).name()); + (void)lambda; + + auto func = sample_func_auto_demo; // can be used to deduce type of function + printf("[auto] Type of func is void(__cdecl*)(void). typeid = %s.\n", typeid(func).name()); + func(); + + printf("\n"); // end of demo +} + +// Feature name : decltype +// Feature description : It is used for type deduction +// Demo description : Shows basic usages of decltype specifier with different types. +void ecall_decltype_demo() +{ + int a = 0 ; + decltype(a) b = 0; // create an element of the same type as another element + printf("[decltype] Type of b is int. typeid = %s.\n", typeid(b).name()); + + double c = 0; + decltype(a + c) sum = a + c; // deduce type of a sum of elements of different types and create an element of that type. + // most usefull in templates. + printf("[decltype] Type of sum is double. typeid = %s.\n", typeid(sum).name()); + (void)sum; + (void)b; + printf("\n"); // end of demo +} + +// Feature name : enum classes +// Feature description : A new type of enum that solves problems found in old enum like : +// unscoping of enum values and the possibility to compare them with int +// Demo description : Shows basic usages of enum classes. +void ecall_strongly_typed_enum_demo() +{ + // In enum class the underlying type can be set. In the case bellow it is char. + enum class DaysOfWeek : char { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }; + + // initialization of variable of type DaysOfWeek + DaysOfWeek random_day = DaysOfWeek::MONDAY; + (void)random_day; + + // In is not mandatory to specify the underlying type. + enum class Weekend { SATURDAY, SUNDAY }; + + // The two enum classes above: days_of_week and weekend ilustrate that it is now possible to have two enum classes with the same values in them. + + // end of demo +} + +// Feature name : Range based for loops +// Feature description : Easy to read way of accessing elements in an container. +// Demo description : Shows basic usage of range based for loop with c array and vector. +void ecall_range_based_for_loops_demo() +{ + char array_of_letters[] = { 'a','b','c','d' }; + std::vector vector_of_letters = { 'a','b','c','d' }; + + printf("[range_based_for_loops] Using range based for loops to print the content of an array: { "); + for (auto elem : array_of_letters) + printf("%c ", elem); + printf("}. \n"); + + printf("[range_based_for_loops] Using range based for loops to print the content of an vector: { "); + for (auto elem : vector_of_letters) + printf("%c ", elem); + printf("}.\n"); + + printf("\n"); // end of demo +} + + +// Feature name : static_assert +// Feature description : It is used to make assertions at compile time. +// Demo description : Shows basic usage of static_assert with compile time operation. +void ecall_static_assert_demo() +{ + static_assert(sizeof(int) < sizeof(double), "Error : sizeof(int) < sizeof(double) "); + const int a = 0; + static_assert(a == 0, "Error: value of a is not 0"); + + // end of demo +} + + +// Feature name : New virtual function controls : override, final, default, and delete +// Feature description : - delete : a deleted function cannot be inherited +// - final : a final function cannot be overrided in the derived class +// - default : intruction to the compiler to generate a default function +// - override : ensures that a virtual function from derived class overrides a function from base +// Demo description : Shows basic usage of new virtual function control. + +/* Helper class for ecall_virtual_function_control_demo.*/ +class Base +{ +public: + + virtual void f_cannot_be_inherited() final {}; + Base(const Base &) = delete; + Base() = default; + virtual void f_must_be_overrided() {}; +}; + +/* Helper class for ecall_virtual_function_control_demo.*/ +class Derived : Base +{ +public: + /* The code bellow in this comment does not compile. + The function cannot be override because it is declared with keyword final in base + virtual double f_cannot_be_inherited() {}; + */ + + /*The keyword override assures that the function overrides a base class member*/ + virtual void f_must_be_overrided() override {}; +}; + +void ecall_virtual_function_control_demo() +{ + // The default constructor will be called generated by the compiler with explicit keyword default + Base a; + // Trying to use the copy contructor will generate code that does not compile because it is deleted + // Base b = a; + + // end of demo +} + +// Feature name : Delegating constructors +// Feature description : A class constructors may have common code which can be delegated to a constructor to avoid code repetion +// Demo description : Shows basic usage of delegating constructors + +// Helper class for ecall_delegating_constructors +class DemoDelegatingConstructors +{ + int a, b, c; +public: + DemoDelegatingConstructors(int param_a, int param_b, int param_c) + { + this->a = param_a; + this->b = param_b; + this->c = param_c; + /*common initialization*/ + switch (c) + { + case 1: + printf("[delegating constructors] Called from DemoDelegatingConstructors(int a, int b). \n"); + break; + case 2: + printf("[delegating constructors] Called from DemoDelegatingConstructors(int a). \n"); + break; + default: + printf("[delegating constructors] Called from DemoDelegatingConstructors(int a, int b, int c).\n"); + break; + } + } + DemoDelegatingConstructors(int param_a, int param_b) : DemoDelegatingConstructors(param_a, param_b, 1) {} + DemoDelegatingConstructors(int param_a) : DemoDelegatingConstructors(param_a, 0, 2) {} +}; + +void ecall_delegating_constructors_demo() +{ + DemoDelegatingConstructors a(1, 2, 3); + DemoDelegatingConstructors b(1, 2); + DemoDelegatingConstructors c(1); + + printf("\n"); // end of demo +} + +// Feature name : std::function +// Feature description : It is used to store and invoke a callable +// Demo description : Shows basic usage of std::function + +// Helper class for ecall_std_function_demo: +void sample_std_function1() +{ + printf("[std_function] calling sample_std_function1\n"); +} + +void ecall_std_function_demo() +{ + // Example with functions + std::function funct = sample_std_function1; + funct(); + + //Example with lambda + std::function funct_lambda = [] { printf("[std_function] calling a lambda function\n"); }; + funct_lambda(); + + printf("\n"); // end of demo +} + +// Feature name : std::all_of, std::any_of, std::none_of +// Feature description : New C++11 algorithms +// Demo description : Shows basic usage of the std::all_of, std::any_of, std::none_of. +void ecall_cxx11_algorithms_demo() +{ + std::vector v = { 0, 1, 2, 3, 4, 5 }; + bool are_all_of = all_of(begin(v), end(v), [](int e) { return e % 2 == 0; }); + printf("[cxx11_algorithms] All elements in { 0 1 2 3 4 5 } are even is %s. \n", are_all_of ? "true" : "false"); + + bool are_any_of = any_of(begin(v), end(v), [](int e) { return e % 2 == 0; }); + printf("[cxx11_algorithms] Some elements in { 0 1 2 3 4 5 } are even is %s. \n", are_any_of ? "true" : "false"); + + bool are_none_of = none_of(begin(v), end(v), [](int e) { return e % 2 == 0; }); + printf("[cxx11_algorithms] Some elements in { 0 1 2 3 4 5 } are even is %s. \n", are_none_of ? "true" : "false"); + + printf("\n"); // end of demo +} + + +// Feature name : variadic templates +// Feature description : Templates that can have multiple arguments +// Demo description : Shows basic usage of variadic templates + +// Helper template for ecall_variadic_templates_demo: +template +T sum(T elem) +{ + return elem; +} + +template +T sum(T elem1, T elem2, Args... args) +{ + return elem1 + elem2 + sum(args...); +} + +void ecall_variadic_templates_demo() +{ + int computed_sum = sum(1, 2, 3, 4, 5); + printf("[variadic_templates] The sum of paramters (1, 2, 3, 4, 5) is %d. \n", computed_sum); + printf("\n"); // end of demo +} + +// Feature name : Substitution failure is not an error (SFINAE) +// Feature description : Describes the case where a substitution error in templates does not cause errors +// Demo description : Shows basic usage of SFINAE + +/*first candidate for substitution*/ +template void f(typename T::A*) { printf("[sfinae] First candidate for substitution is matched.\n"); }; + +/*second candidate for substitution*/ +template void f(T) { printf("[sfinae] Second candidate for substitution is matched.\n"); } + +void ecall_SFINAE_demo() +{ + f(0x0); // even if the first canditate substition will fail, the second one will pass + printf("\n"); // end of demo +} + +//Feature name : Initializer lists +//Feature description : An object of type std::initializer_list is a lightweight proxy object that provides access to an array of objects of type const T. +//Demo description : Demonstrates the usage of initializer list in the constructor of an object in enclave. +class Number +{ +public: + Number(const std::initializer_list &v) { + for (auto i : v) { + elements.push_back(i); + } + } + + void print_elements() { + printf("[initializer_list] The elements of the vector are:"); + for (auto item : elements) { + printf(" %d", item); + } + printf(".\n"); + } +private: + std::vector elements; +}; + +void ecall_initializer_list_demo() +{ + printf("[initializer_list] Using initializer list in the constructor. \n"); + Number m = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; + m.print_elements(); + + printf("\n"); //end of demo +} + + +// Feature name : Rvalue references and move semantics; +// Feature description : They are used for memory usage optimazation by eliminating copy operations +// Demo description : Shows basic usage of rvalue, move constructor, and move operator + +// Helper class for ecall_rvalue_demo +class DemoBuffer +{ +public: + unsigned int size = 100; + char *buffer; + + DemoBuffer(int param_size) + { + this->size = param_size; + buffer = new char[size]; + printf("[rvalue] Called constructor : DemoBuffer(int size).\n"); + } + + // A typical copy constructor needs to alocate memory for a new copy + // Copying an big array is an expensive operation + DemoBuffer(const DemoBuffer & rhs) + { + this->size = rhs.size; + buffer = new char[rhs.size]; + memcpy(buffer, rhs.buffer, size); + printf("[rvalue] Called copy constructor : DemoBuffer(const DemoBuffer & rhs).\n"); + } + + // A typical move constructor can reuse the memory pointed by the buffer + DemoBuffer(DemoBuffer && rhs) + { + buffer = rhs.buffer; + size = rhs.size; + // reset state of rhs + rhs.buffer = NULL; + rhs.size = 0; + printf("[rvalue] Called move constructor : DemoBuffer(DemoBuffer && rhs).\n"); + } + ~DemoBuffer() + { + delete buffer; + } + +}; + +// Helper class for ecall_rvalue_demo +DemoBuffer foobar(int a) +{ + DemoBuffer x(100); + DemoBuffer y(100); + + if (a > 0) + return x; + else + return y; +} +void ecall_rvalue_demo() +{ + // This will call the constructor + printf("[rvalue] DemoBuffer a(100).\n"); + DemoBuffer a(100); + + printf("[rvalue] DemoBuffer foobar(100). \n"); + // Initializing variable d using a temporary object will result in a call to move constructor + // This is usefull because it reduces the memory cost of the operation. + DemoBuffer d(foobar(100)); + + // This will call the copy constructor. State of a will not change. + printf("[rvalue] DemoBuffer b(a).\n"); + DemoBuffer b(a); + + printf("[rvalue] DemoBuffer c(std::move(a)).\n"); + // explicitly cast a to an rvalue so that c will be created using move constructor. + // State of a is going to be reseted. + DemoBuffer c(std::move(a)); + + printf("\n"); // end of demo +} + +// Feature name : Nullptr +// Feature description : Resolves the issues of converting NULL to integral types +// Demo description : Shows basic usage of nullptr + +// overload candidate 1 +void nullptr_overload_candidate(int i) { + (void)i; + printf("[nullptr] called void nullptr_overload_candidate(int i).\n"); +} + +// overload candidate 2 +void nullptr_overload_candidate(int* ptr) { + (void)ptr; + printf("[nullptr] called void nullptr_overload_candidate(int* ptr).\n"); +} + +template +void Fwd(F f, A a) +{ + f(a); +} + +void g(int* i) +{ + (void)i; + printf("[nullptr] Function %s called\n", __FUNCTION__); +} + +// Feature name : +// Feature description : +// Demo description : +void ecall_nullptr_demo() +{ + // NULL can be converted to integral types() like int and will call overload candidate 1 + nullptr_overload_candidate(NULL); + + // nullptr can't be converted to integral types() like int and will call overload candidate 2 + nullptr_overload_candidate(nullptr); + + g(NULL); // Fine + g(0); // Fine + Fwd(g, nullptr); // Fine + //Fwd(g, NULL); // ERROR: No function g(int) + + printf("\n"); // end of demo +} + +// Feature name : Scoped enums +// Feature description : +// Demo description : +enum class Color { orange, brown, green = 30, blue, red }; + +void ecall_enum_class_demo() +{ + int n = 0; + Color color1 = Color::brown; + switch (color1) + { + case Color::orange: printf("[enum class] orange"); break; + case Color::brown: printf("[enum class] brown"); break; + case Color::green: printf("[enum class] green"); break; + case Color::blue: printf("[enum class] blue"); break; + case Color::red: printf("[enum class] red"); break; + } + // n = color1; // Not allowed: no scoped enum to int conversion + n = static_cast(color1); // OK, n = 1 + printf(" - int = %d\n", n); + + Color color2 = Color::red; + switch (color2) + { + case Color::orange: printf("[enum class] orange"); break; + case Color::brown: printf("[enum class] brown"); break; + case Color::green: printf("[enum class] green"); break; + case Color::blue: printf("[enum class] blue"); break; + case Color::red: printf("[enum class] red"); break; + } + n = static_cast(color2); // OK, n = 32 + printf(" - int = %d\n", n); + + Color color3 = Color::green; + switch (color3) + { + case Color::orange: printf("[enum class] orange"); break; + case Color::brown: printf("[enum class] brown"); break; + case Color::green: printf("[enum class] green"); break; + case Color::blue: printf("[enum class] blue"); break; + case Color::red: printf("[enum class] red"); break; + } + n = static_cast(color3); // OK, n = 30 + printf(" - int = %d\n", n); + printf("\n"); +} + +// Feature name : new container classes +// Feature description : unordered_set, unordered_map, unordered_multiset, and unordered_multimap +// Demo description : Shows basic usage of new container classes +void ecall_new_container_classes_demo() +{ + // unordered_set + // container used for fast acces that groups elements in buckets based on their hash + + std::unordered_set set_of_numbers = { 0, 1, 2, 3, 4, 5 }; + const int searchVal = 3; + std::unordered_set::const_iterator got = set_of_numbers.find(searchVal); + + if (got == set_of_numbers.end()) + printf("[new_container_classes] unordered_set { 0, 1, 2, 3, 4, 5} has value 3.\n"); + else + printf("[new_container_classes] unordered_set { 0, 1, 2, 3, 4, 5} it does not have value 3.\n"); + + // unordered_multiset + // container used for fast acces that groups non unique elements in buckets based on their hash + std::unordered_multiset multiset_of_numbers = { 0, 1, 2, 3, 3, 3 }; + printf("[new_container_classes] multiset_set { 0, 1, 2, 3, 3, 3} has %d elements with value %d.\n", + (int)multiset_of_numbers.count(searchVal), searchVal); + + // unordered_map + std::unordered_map grades{ { "A", 10 },{ "B", 8 },{ "C", 7 },{ "D", 5 },{ "E", 3 } }; + printf("[new_container_classes] unordered_map elements: {"); + for (auto pair : grades) { + printf("[%s %d] ", pair.first.c_str(), pair.second); + } + + printf("}.\n"); + + // unordered_multimap + std::unordered_multimap multimap_grades{ { "A", 10 },{ "B", 8 },{ "B", 7 },{ "E", 5 },{ "E", 3 },{ "E",1 } }; + + printf("[new_container_classes] unordered_multimap elements: {"); + for (auto pair : multimap_grades) { + printf("[%s %d] ", pair.first.c_str(), pair.second); + } + printf("}.\n"); + + printf("\n"); // end of demo +} + +// Feature name : Tuple +// Feature description : Objects that pack elements of multiple types which can be accessed by index +// Demo description : Shows basic usage of tuple: creation and access +void ecall_tuple_demo() +{ + // Create tuple using std::make_tuple + char array_of_letters[4] = {'A','B','C','D'}; + std::vector vector_of_letters = { 'A','B','C','D' }; + std::map map_of_letters = { {'B','b' } }; + + // Creating a tuple using a tuple constructor + std::tuple tuple_sample_with_constructor(42, "Sample tuple"); + (void)tuple_sample_with_constructor; + + // Creating a tuple using std::make_tuple + auto tuple_sample = std::make_tuple("", 1, 7.9, vector_of_letters, array_of_letters, map_of_letters); + + // Access the elements in tupleSample using std::get + printf("[tuple] show first element in TupleSample: %s. \n", std::get<0>(tuple_sample)); + printf("[tuple] show second element in TupleSample: %d. \n", std::get<1>(tuple_sample)); + printf("[tuple] show third element in TupleSample: %f. \n", std::get<2>(tuple_sample)); + + // Getting vector from a tuple + std::vector temp_vector = std::get<3>(tuple_sample); + (void)temp_vector; + + // Getting array from a tuple + int first_elem_of_array = std::get<4>(tuple_sample)[0]; + (void)first_elem_of_array; + + // Getting map from a tuple + std::map temp_map = std::get<5>(tuple_sample); + (void)temp_map; + printf("\n"); // end of demo +} + +// Feature name : new smart pointer +// Feature description : shared_ptr and unique_ptr +// Demo decription : Shows basic usage of smart pointers +// Helper class for ecall_shared_ptr_demo +class DemoSmartPtr +{ + std::string smartPointerType; +public: + DemoSmartPtr(std::string param_smartPointerType) + { + printf("[smart_ptr] In construct of object demo_smart_ptr using %s. \n", param_smartPointerType.c_str()); + this->smartPointerType = param_smartPointerType; + } + ~DemoSmartPtr() + { + printf("[smart_ptr] In deconstructor of object demo_smart_ptr using %s. \n", smartPointerType.c_str()); + } +}; + +void ecall_shared_ptr_demo() +{ + // std::shared_ptr is smart pointer that takes ownership of an object using a pointer + // The object is freed when the last smart_pointer does not point to it. + + // Creating a shared pointer using std::make_shared + auto shared_ptr = std::make_shared("smart_ptr."); // The constructor of DemoSmartPtr will be called here + + printf("[smart_ptr] shared_ptr reference count = %ld. \n", shared_ptr.use_count()); + auto shared_ptr2 = shared_ptr; + printf("[smart_ptr] shared_ptr reference count = %ld incresead after creating another shared pointer.\n", shared_ptr.use_count()); + shared_ptr2.reset(); + printf("[smart_ptr] shared_ptr reference count = %ld decresead after calling releasing ownership. \n", shared_ptr.use_count()); + + // std::unique_ptr is smart pointer that takes ownership of an object using a pointer + // it is different from smart_ptr in the sense that only one unique_ptr can take ownership + + std::unique_ptr unique_ptr(new DemoSmartPtr("unique_ptr")); + // When going out of scope both shared_ptr and unique_ptr release the objects they own + + // end of demo +} + +//Feature name : atomic +//Feature description: The atomic library provides components for fine-grained atomic operations allowing for lockless concurrent programming. +// Each atomic operation is indivisible with regards to any other atomic operation that involves the same object. +// Atomic objects are free of data races. +//Demo description : Demonstrates the usage of atomic types, objects and functions in enclave. +void ecall_atomic_demo() +{ + printf("[atomic] Atomic types, objects and functions demo.\n"); + + printf("[atomic_store] Defining an atomic_char object with an initial value of 5.\n"); + std::atomic_char atc(5); + printf("[atomic_store] The current value stored in the atomic object is: %d\n", atc.load()); + printf("[atomic_store] Replacing the value of the atomic object with a non-atomic value of 3.\n"); + std::atomic_store(&atc, 3); + printf("[atomic_store] The new value of the atomic object is: %d.\n", atc.load()); + + printf("\n"); + + printf("[atomic_store_explicit] Defining an atomic_short object with an initial value of 5.\n"); + std::atomic_short ats(5); + printf("[atomic_store_explicit] The current value stored in the atomic object is: %d.\n", ats.load()); + printf("[atomic_store_explicit] Replacing the value of the atomic object with a non-atomic value of 3.\n"); + std::atomic_store_explicit(&ats, 3, std::memory_order_seq_cst); + printf("[atomic_store] The new value of the atomic object is: %d.\n", ats.load()); + + printf("\n"); + + printf("[atomic_load] Defining an atomic_int object with an initial value of 4.\n"); + std::atomic_int ati1(4); + printf("[atomic_load] Obtaining the value of the atomic object and saving it in a int variable.\n"); + int val = std::atomic_load(&ati1); + printf("[atomic_load] The obtained value is %d.\n", val); + + printf("\n"); + + printf("[atomic_load_explicit] Defining an atomic_int object with an initial value of 2.\n"); + std::atomic_int ati2(2); + printf("[atomic_load_explicit] Obtaining the value of the atomic object and saving it in a int variable.\n"); + int val1 = std::atomic_load_explicit(&ati2, std::memory_order_seq_cst); + printf("[atomic_load_explicit] The obtained value is %d.\n", val1); + + printf("\n"); + + printf("[atomic_fetch_add] Defining an atomic_int object with an initial value of 7.\n"); + std::atomic_int ati(7); + printf("[atomic_fetch_add] The current value stored in the atomic object is: %d.\n", ati.load()); + printf("[atomic_fetch_add] Adding a non-atomic value of 8 to the atomic object.\n"); + std::atomic_fetch_add(&ati, 8); + printf("[atomic_fetch_add] The new value of the atomic object is: %d.\n", ati.load()); + + printf("\n"); + + printf("[atomic_fetch_add_explicit] Defining an atomic_uint object with an initial value of 7.\n"); + std::atomic_uint atui(7); + printf("[atomic_fetch_add_explicit] The current value stored in the atomic object is: %u.\n", atui.load()); + printf("[atomic_fetch_add_explicit] Adding a non-atomic value of 8 to the atomic object.\n"); + std::atomic_fetch_add_explicit(&atui, 8, std::memory_order_seq_cst); + printf("[atomic_fetch_add_explicit] The new value of the atomic object is: %u.\n", atui.load()); + + printf("\n"); + + printf("[atomic_fetch_sub] Defining an atomic_long object with an initial value of 20.\n"); + std::atomic_long atl(20); + printf("[atomic_fetch_sub] The current value stored in the atomic object is: %ld.\n", atl.load()); + printf("[atomic_fetch_sub] Substracting a non-atomic value of 8 from the value of the atomic object.\n"); + std::atomic_fetch_sub(&atl, 8); + printf("[atomic_fetch_sub] The new value of the atomic object is: %ld.\n", atl.load()); + + printf("\n"); + + printf("[atomic_fetch_sub_explicit] Defining an atomic_llong object with an initial value of 20.\n"); + std::atomic_llong atll(20); + printf("[atomic_fetch_sub_explicit] The current value stored in the atomic object is: %lld.\n", atll.load()); + printf("[atomic_fetch_sub_explicit] Substracting a non-atomic value of 8 from the value of the atomic object.\n"); + std::atomic_fetch_sub_explicit(&atll, 8, std::memory_order_seq_cst); + printf("[atomic_fetch_sub_explicit] The new value of the atomic object is: %lld.\n", atll.load()); + + printf("\n"); // end of demo +} + +//Feature name : mutex +//Feature description : The mutex class is a synchronization primitive that can be used to protect shared data +// from being simultaneously accessed by multiple threads. +//Demo description : Demonstrates mutex protection when incrementing values in multiple threads. + +//Structure used in mutex demo to show the behavior without using a mutex +struct CounterWithoutMutex { + int value; + + CounterWithoutMutex() : value(0) {} + + void increment() { + ++value; + } +}; + +CounterWithoutMutex counter_without_protection; + +//E-call used by mutex demo to perform the incrementation using a counter without mutex protection +void ecall_mutex_demo_no_protection() +{ + for (int i = 0; i < 100000; ++i) { + counter_without_protection.increment(); + } +} + +//E-call used by mutex demo to get the final value of the counter from enclave +void ecall_print_final_value_no_protection() +{ + printf("[mutex] Incrementing values in three threads without mutex protection, using a 100000 times loop. \n[mutex]Expected value is 300000. The final value is %d.\n", counter_without_protection.value); +} + + +//Structure used in mutex demo +struct CounterProtectedByMutex { + std::mutex mutex; + int value; + + CounterProtectedByMutex() : value(0) {} + + void increment() { + //locking the mutex to avoid simultaneous incrementation in different threads + mutex.lock(); + ++value; + //unlocking the mutex + mutex.unlock(); + } +}; + +CounterProtectedByMutex counter_with_protection; + +//E-call used by mutex demo to perform the actual incrementation +void ecall_mutex_demo() +{ + for (int i = 0; i < 100000; ++i) { + counter_with_protection.increment(); + } +} + +//E-call used by mutex demo to get the final value of the counter from enclave +void ecall_print_final_value_mutex_demo() +{ + printf("[mutex] Mutex protection when incrementing a value in 3 threads, using a 100000 times loop. \n[mutex]Expected value is 300000. The final value is %d.\n", counter_with_protection.value); +} + +//Feature name : condition_variable +//Feature description: The condition_variable class is a synchronization primitive that can be used to block a thread, +// or multiple threads at the same time, until another thread both modifies a shared variable (the condition), +// and notifies the condition_variable. +//Demo description : Demonstrates condition_variable usage in a two threads environment. One thread is used for loading the data and +// the other processes the loaded data. The thread for processing the data waits untill the data is loaded in the +// other thread and gets notified when loading is completed. + +//This class is used by condition variable demo +class DemoConditionVariable +{ + std::mutex mtx; + std::condition_variable cond_var; + bool data_loaded; +public: + DemoConditionVariable() + { + data_loaded = false; + } + void load_data() + { + //Simulating loading of the data + printf("[condition_variable] Loading Data...\n"); + { + // Locking the data structure + std::lock_guard guard(mtx); + // Setting the flag to true to signal load data completion + data_loaded = true; + } + // Notify to unblock the waiting thread + cond_var.notify_one(); + } + bool is_data_loaded() + { + return data_loaded; + } + void main_task() + { + printf("\n"); + printf("[condition_variable] Running condition variable demo.\n"); + + // Acquire the lock + std::unique_lock lck(mtx); + + printf("[condition_variable] Waiting for the data to be loaded in the other thread.\n"); + cond_var.wait(lck, std::bind(&DemoConditionVariable::is_data_loaded, this)); + printf("[condition_variable] Processing the loaded data.\n"); + printf("[condition_variable] Done.\n"); + } +}; + + +DemoConditionVariable app; + +//E-call used by condition_variable demo - processing thread + +void ecall_condition_variable_run() +{ + app.main_task(); +} + +//E-call used by condifion_variable demo - loader thread +void ecall_condition_variable_load() +{ + app.load_data(); +} diff --git a/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.edl b/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.edl new file mode 100644 index 00000000..47a7d103 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Enclave/TrustedLibrary/Libcxx.edl @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Libcxx.edl - EDL sample for trusted C++ library. */ + +enclave { + + /* + * A subset of the C++03 standard is supported. + */ + + trusted { + + public void ecall_lambdas_demo(void); + public void ecall_auto_demo(void); + public void ecall_decltype_demo(void); + public void ecall_strongly_typed_enum_demo(void); + public void ecall_range_based_for_loops_demo(void); + public void ecall_static_assert_demo(void); + public void ecall_virtual_function_control_demo(void); + public void ecall_delegating_constructors_demo(void); + public void ecall_std_function_demo(void); + public void ecall_cxx11_algorithms_demo(void); + public void ecall_variadic_templates_demo(void); + public void ecall_SFINAE_demo(void); + public void ecall_initializer_list_demo(void); + public void ecall_rvalue_demo(void); + public void ecall_nullptr_demo(void); + public void ecall_enum_class_demo(void); + public void ecall_new_container_classes_demo(void); + public void ecall_tuple_demo(void); + public void ecall_shared_ptr_demo(void); + public void ecall_atomic_demo(void); + public void ecall_mutex_demo(void); + public void ecall_print_final_value_mutex_demo(void); + public void ecall_mutex_demo_no_protection(void); + public void ecall_print_final_value_no_protection(void); + public void ecall_condition_variable_run(void); + public void ecall_condition_variable_load(void); + + }; +}; diff --git a/SampleCode/Cxx11SGXDemo/Makefile b/SampleCode/Cxx11SGXDemo/Makefile new file mode 100644 index 00000000..4b5239e3 --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/Makefile @@ -0,0 +1,252 @@ +# +# Copyright (C) 2011-2017 Intel Corporation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# + +######## SGX SDK Settings ######## + +SGX_SDK ?= /opt/intel/sgxsdk +SGX_MODE ?= HW +SGX_ARCH ?= x64 +SGX_DEBUG ?= 1 + +ifeq ($(shell getconf LONG_BIT), 32) + SGX_ARCH := x86 +else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32) + SGX_ARCH := x86 +endif + +ifeq ($(SGX_ARCH), x86) + SGX_COMMON_CFLAGS := -m32 + SGX_LIBRARY_PATH := $(SGX_SDK)/lib + SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x86/sgx_sign + SGX_EDGER8R := $(SGX_SDK)/bin/x86/sgx_edger8r +else + SGX_COMMON_CFLAGS := -m64 + SGX_LIBRARY_PATH := $(SGX_SDK)/lib64 + SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x64/sgx_sign + SGX_EDGER8R := $(SGX_SDK)/bin/x64/sgx_edger8r +endif + +ifeq ($(SGX_DEBUG), 1) +ifeq ($(SGX_PRERELEASE), 1) +$(error Cannot set SGX_DEBUG and SGX_PRERELEASE at the same time!!) +endif +endif + +ifeq ($(SGX_DEBUG), 1) + SGX_COMMON_CFLAGS += -O0 -g +else + SGX_COMMON_CFLAGS += -O2 +endif + +######## App Settings ######## + +ifneq ($(SGX_MODE), HW) + Urts_Library_Name := sgx_urts_sim +else + Urts_Library_Name := sgx_urts +endif + +App_Cpp_Files := App/App.cpp $(wildcard App/TrustedLibrary/*.cpp) +App_Include_Paths := -IInclude -IApp -I$(SGX_SDK)/include + +App_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths) + +# Three configuration modes - Debug, prerelease, release +# Debug - Macro DEBUG enabled. +# Prerelease - Macro NDEBUG and EDEBUG enabled. +# Release - Macro NDEBUG enabled. +ifeq ($(SGX_DEBUG), 1) + App_C_Flags += -DDEBUG -UNDEBUG -UEDEBUG +else ifeq ($(SGX_PRERELEASE), 1) + App_C_Flags += -DNDEBUG -DEDEBUG -UDEBUG +else + App_C_Flags += -DNDEBUG -UEDEBUG -UDEBUG +endif + +App_Cpp_Flags := $(App_C_Flags) -std=c++11 +App_Link_Flags := $(SGX_COMMON_CFLAGS) -L$(SGX_LIBRARY_PATH) -l$(Urts_Library_Name) -lpthread + +ifneq ($(SGX_MODE), HW) + App_Link_Flags += -lsgx_uae_service_sim +else + App_Link_Flags += -lsgx_uae_service +endif + +App_Cpp_Objects := $(App_Cpp_Files:.cpp=.o) + +App_Name := app + +######## Enclave Settings ######## + +Enclave_Version_Script := Enclave/Enclave_debug.lds +ifeq ($(SGX_MODE), HW) +ifneq ($(SGX_DEBUG), 1) +ifneq ($(SGX_PRERELEASE), 1) + # Choose to use 'Enclave.lds' for HW release mode + Enclave_Version_Script = Enclave/Enclave.lds +endif +endif +endif + +ifneq ($(SGX_MODE), HW) + Trts_Library_Name := sgx_trts_sim + Service_Library_Name := sgx_tservice_sim +else + Trts_Library_Name := sgx_trts + Service_Library_Name := sgx_tservice +endif +Crypto_Library_Name := sgx_tcrypto + +Enclave_Cpp_Files := Enclave/Enclave.cpp $(wildcard Enclave/TrustedLibrary/*.cpp) +Enclave_Include_Paths := -IInclude -IEnclave -I$(SGX_SDK)/include -I$(SGX_SDK)/include/libcxx -I$(SGX_SDK)/include/tlibc + +Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) +Enclave_Cpp_Flags := $(Enclave_C_Flags) -nostdinc++ -std=c++11 + +# To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: +# 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, +# so that the whole content of trts is included in the enclave. +# 2. For other libraries, you just need to pull the required symbols. +# Use `--start-group' and `--end-group' to link these libraries. +# Do NOT move the libraries linked with `--start-group' and `--end-group' within `--whole-archive' and `--no-whole-archive' options. +# Otherwise, you may get some undesirable errors. +Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ + -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ + -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ + -Wl,--defsym,__ImageBase=0 \ + -Wl,--version-script=$(Enclave_Version_Script) + +Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o) + +Enclave_Name := enclave.so +Signed_Enclave_Name := enclave.signed.so +Enclave_Config_File := Enclave/Enclave.config.xml + +ifeq ($(SGX_MODE), HW) +ifeq ($(SGX_DEBUG), 1) + Build_Mode = HW_DEBUG +else ifeq ($(SGX_PRERELEASE), 1) + Build_Mode = HW_PRERELEASE +else + Build_Mode = HW_RELEASE +endif +else +ifeq ($(SGX_DEBUG), 1) + Build_Mode = SIM_DEBUG +else ifeq ($(SGX_PRERELEASE), 1) + Build_Mode = SIM_PRERELEASE +else + Build_Mode = SIM_RELEASE +endif +endif + + +.PHONY: all run + +ifeq ($(Build_Mode), HW_RELEASE) +all: .config_$(Build_Mode)_$(SGX_ARCH) $(App_Name) $(Enclave_Name) + @echo "The project has been built in release hardware mode." + @echo "Please sign the $(Enclave_Name) first with your signing key before you run the $(App_Name) to launch and access the enclave." + @echo "To sign the enclave use the command:" + @echo " $(SGX_ENCLAVE_SIGNER) sign -key -enclave $(Enclave_Name) -out <$(Signed_Enclave_Name)> -config $(Enclave_Config_File)" + @echo "You can also sign the enclave using an external signing tool." + @echo "To build the project in simulation mode set SGX_MODE=SIM. To build the project in prerelease mode set SGX_PRERELEASE=1 and SGX_MODE=HW." +else +all: .config_$(Build_Mode)_$(SGX_ARCH) $(App_Name) $(Signed_Enclave_Name) +ifeq ($(Build_Mode), HW_DEBUG) + @echo "The project has been built in debug hardware mode." +else ifeq ($(Build_Mode), SIM_DEBUG) + @echo "The project has been built in debug simulation mode." +else ifeq ($(Build_Mode), HW_PRERELEASE) + @echo "The project has been built in pre-release hardware mode." +else ifeq ($(Build_Mode), SIM_PRERELEASE) + @echo "The project has been built in pre-release simulation mode." +else + @echo "The project has been built in release simulation mode." +endif +endif + +run: all +ifneq ($(Build_Mode), HW_RELEASE) + @$(CURDIR)/$(App_Name) + @echo "RUN => $(App_Name) [$(SGX_MODE)|$(SGX_ARCH), OK]" +endif + +######## App Objects ######## + +App/Enclave_u.c: $(SGX_EDGER8R) Enclave/Enclave.edl + @cd App && $(SGX_EDGER8R) --untrusted ../Enclave/Enclave.edl --search-path ../Enclave --search-path $(SGX_SDK)/include + @echo "GEN => $@" + +App/Enclave_u.o: App/Enclave_u.c + @$(CC) $(App_C_Flags) -c $< -o $@ + @echo "CC <= $<" + +App/%.o: App/%.cpp + @$(CXX) $(App_Cpp_Flags) -c $< -o $@ + @echo "CXX <= $<" + +$(App_Name): App/Enclave_u.o $(App_Cpp_Objects) + @$(CXX) $^ -o $@ $(App_Link_Flags) + @echo "LINK => $@" + +.config_$(Build_Mode)_$(SGX_ARCH): + @rm -f .config_* $(App_Name) $(Enclave_Name) $(Signed_Enclave_Name) $(App_Cpp_Objects) App/Enclave_u.* $(Enclave_Cpp_Objects) Enclave/Enclave_t.* + @touch .config_$(Build_Mode)_$(SGX_ARCH) + +######## Enclave Objects ######## + +Enclave/Enclave_t.c: $(SGX_EDGER8R) Enclave/Enclave.edl + @cd Enclave && $(SGX_EDGER8R) --trusted ../Enclave/Enclave.edl --search-path ../Enclave --search-path $(SGX_SDK)/include + @echo "GEN => $@" + +Enclave/Enclave_t.o: Enclave/Enclave_t.c + @$(CC) $(Enclave_C_Flags) -c $< -o $@ + @echo "CC <= $<" + +Enclave/%.o: Enclave/%.cpp + @$(CXX) $(Enclave_Cpp_Flags) -c $< -o $@ + @echo "CXX <= $<" + +$(Enclave_Name): Enclave/Enclave_t.o $(Enclave_Cpp_Objects) + @$(CXX) $^ -o $@ $(Enclave_Link_Flags) + @echo "LINK => $@" + +$(Signed_Enclave_Name): $(Enclave_Name) + @$(SGX_ENCLAVE_SIGNER) sign -key Enclave/Enclave_private.pem -enclave $(Enclave_Name) -out $@ -config $(Enclave_Config_File) + @echo "SIGN => $@" + +.PHONY: clean + +clean: + @rm -f .config_* $(App_Name) $(Enclave_Name) $(Signed_Enclave_Name) $(App_Cpp_Objects) App/Enclave_u.* $(Enclave_Cpp_Objects) Enclave/Enclave_t.* diff --git a/SampleCode/Cxx11SGXDemo/README.txt b/SampleCode/Cxx11SGXDemo/README.txt new file mode 100644 index 00000000..f7898e3d --- /dev/null +++ b/SampleCode/Cxx11SGXDemo/README.txt @@ -0,0 +1,44 @@ +----------------------- +Purpose of Cxx11SGXDemo +----------------------- + +The project demonstrates serveral C++11 features inside the Enclave: +- lambda expressions; +- rvalue references and move semantics; +- automatic type deduction with auto and decltype; +- nullptr type; +- strongly typed enum classes; +- Range-based for statements; +- static_assert keyword for compile-time assertion; +- initializer lists and uniform initialization syntax; +- New virtual function controls: override, final, default, and delete; +- delegating constructors; +- new container classes (unordered_set, unordered_map, unordered_multiset, and unordered_multimap); +- tuple class; +- function object wrapper; +- atomic, mutexes, condition_variables; +- new smart pointer classes: shared_ptr, unique_ptr; +- new c++ algorithms: all_off, any_of, none_of; +- variadic templates; +- SFINAE; + +--------------------------------------------- +How to Build/Execute the C++11 sample program +--------------------------------------------- +1. Install Intel(R) Software Guard Extensions (Intel(R) SGX) SDK for Linux* OS +2. Build the project with the prepared Makefile: + a. Hardware Mode, Debug build: + $ make + b. Hardware Mode, Pre-release build: + $ make SGX_PRERELEASE=1 SGX_DEBUG=0 + c. Hardware Mode, Release build: + $ make SGX_DEBUG=0 + d. Simulation Mode, Debug build: + $ make SGX_MODE=SIM + e. Simulation Mode, Pre-release build: + $ make SGX_MODE=SIM SGX_PRERELEASE=1 SGX_DEBUG=0 + f. Simulation Mode, Release build: + $ make SGX_MODE=SIM SGX_DEBUG=0 +3. Execute the binary directly: + $ ./app +4. Remember to "make clean" before switching build mode diff --git a/SampleCode/LocalAttestation/.cproject b/SampleCode/LocalAttestation/.cproject index be4d6529..12d5e297 100644 --- a/SampleCode/LocalAttestation/.cproject +++ b/SampleCode/LocalAttestation/.cproject @@ -2,7 +2,7 @@ - + @@ -17,49 +17,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68,7 +35,7 @@ - + @@ -83,16 +50,49 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +101,7 @@ - + @@ -116,16 +116,16 @@ - - - - - - - - + @@ -149,16 +149,16 @@ - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - - - - - - - + - + - - - - - - - + diff --git a/SampleCode/LocalAttestation/.settings/language.settings.xml b/SampleCode/LocalAttestation/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/LocalAttestation/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/LocalAttestation/Makefile b/SampleCode/LocalAttestation/Makefile index b40405d6..9401f770 100644 --- a/SampleCode/LocalAttestation/Makefile +++ b/SampleCode/LocalAttestation/Makefile @@ -71,9 +71,9 @@ endif Trust_Lib_Name := libLocalAttestation_Trusted.a TrustLib_Cpp_Files := $(wildcard LocalAttestationCode/*.cpp) TrustLib_Cpp_Objects := $(TrustLib_Cpp_Files:.cpp=.o) -TrustLib_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport -I$(SGX_SDK)/include/epid -I./Include +TrustLib_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I$(SGX_SDK)/include/epid -I./Include TrustLib_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(TrustLib_Include_Paths) -TrustLib_Compile_Cxx_Flags := -std=c++03 -nostdinc++ +TrustLib_Compile_Cxx_Flags := -std=c++11 -nostdinc++ UnTrustLib_Name := libLocalAttestation_unTrusted.a UnTrustLib_Cpp_Files := $(wildcard Untrusted_LocalAttestation/*.cpp) @@ -134,9 +134,16 @@ Crypto_Library_Name := sgx_tcrypto Enclave_Cpp_Files_1 := $(wildcard Enclave1/*.cpp) Enclave_Cpp_Files_2 := $(wildcard Enclave2/*.cpp) Enclave_Cpp_Files_3 := $(wildcard Enclave3/*.cpp) -Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport -I./LocalAttestationCode -I./Include +Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I./LocalAttestationCode -I./Include -Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector +else + Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector-strong +endif + +Enclave_Compile_Flags += $(Enclave_Include_Paths) # To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: # 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, @@ -147,10 +154,10 @@ Enclave_Compile_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpi # Otherwise, you may get some undesirable errors. Common_Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -L. -lLocalAttestation_Trusted -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -L. -lLocalAttestation_Trusted -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ - -Wl,--defsym,__ImageBase=0 + -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections Enclave1_Link_Flags := $(Common_Enclave_Link_Flags) -Wl,--version-script=$(Enclave1_Version_Script) Enclave2_Link_Flags := $(Common_Enclave_Link_Flags) -Wl,--version-script=$(Enclave2_Version_Script) Enclave3_Link_Flags := $(Common_Enclave_Link_Flags) -Wl,--version-script=$(Enclave3_Version_Script) @@ -281,7 +288,7 @@ Enclave1/Enclave1_t.o: Enclave1/Enclave1_t.c @echo "CC <= $<" Enclave1/%.o: Enclave1/%.cpp Enclave1/Enclave1_t.h - @$(CXX) -std=c++03 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ + @$(CXX) -std=c++11 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ @echo "CXX <= $<" Enclave1.so: Enclave1/Enclave1_t.o $(Enclave_Cpp_Objects_1) $(Trust_Lib_Name) @@ -301,7 +308,7 @@ Enclave2/Enclave2_t.o: Enclave2/Enclave2_t.c @echo "CC <= $<" Enclave2/%.o: Enclave2/%.cpp - @$(CXX) -std=c++03 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ + @$(CXX) -std=c++11 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ @echo "CXX <= $<" Enclave2.so: Enclave2/Enclave2_t.o $(Enclave_Cpp_Objects_2) $(Trust_Lib_Name) @@ -321,7 +328,7 @@ Enclave3/Enclave3_t.o: Enclave3/Enclave3_t.c @echo "CC <= $<" Enclave3/%.o: Enclave3/%.cpp - @$(CXX) -std=c++03 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ + @$(CXX) -std=c++11 -nostdinc++ $(Enclave_Compile_Flags) -c $< -o $@ @echo "CXX <= $<" Enclave3.so: Enclave3/Enclave3_t.o $(Enclave_Cpp_Objects_3) $(Trust_Lib_Name) diff --git a/SampleCode/LocalAttestation/README.txt b/SampleCode/LocalAttestation/README.txt index 88214346..9c9d97d7 100644 --- a/SampleCode/LocalAttestation/README.txt +++ b/SampleCode/LocalAttestation/README.txt @@ -8,7 +8,7 @@ The project demonstrates: ------------------------------------ How to Build/Execute the Sample Code ------------------------------------ -1. Install Intel(R) SGX SDK for Linux* OS +1. Install Intel(R) Software Guard Extensions (Intel(R) SGX) SDK for Linux* OS 2. Build the project with the prepared Makefile: a. Hardware Mode, Debug build: $ make diff --git a/SampleCode/PowerTransition/.cproject b/SampleCode/PowerTransition/.cproject index 77c05bf4..28942341 100644 --- a/SampleCode/PowerTransition/.cproject +++ b/SampleCode/PowerTransition/.cproject @@ -2,7 +2,7 @@ - + @@ -17,49 +17,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68,7 +35,7 @@ - + @@ -83,16 +50,49 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +101,7 @@ - + @@ -116,16 +116,16 @@ - - - - - - - - + @@ -149,16 +149,16 @@ - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - - - - - - - + - + - - - - - - - + diff --git a/SampleCode/PowerTransition/.settings/language.settings.xml b/SampleCode/PowerTransition/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/PowerTransition/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/PowerTransition/Makefile b/SampleCode/PowerTransition/Makefile index 76a6bb00..ab392221 100644 --- a/SampleCode/PowerTransition/Makefile +++ b/SampleCode/PowerTransition/Makefile @@ -120,11 +120,16 @@ Crypto_Library_Name := sgx_tcrypto Enclave_Cpp_Files := $(wildcard Enclave/*.cpp) -Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport -I./Common +Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I./Common -Enclave_Compile_CFlags := -nostdinc -ffreestanding -fvisibility=hidden -fpie \ - $(Enclave_Include_Paths) -Enclave_Compile_CXXFlags := -nostdinc++ -std=c++03 $(Enclave_Compile_CFlags) +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + Enclave_Compile_CFlags := -fstack-protector +else + Enclave_Compile_CFlags := -fstack-protector-strong +endif +Enclave_Compile_CFlags += -nostdinc -ffreestanding -fvisibility=hidden -fpie -ffunction-sections -fdata-sections $(Enclave_Include_Paths) +Enclave_Compile_CXXFlags := -nostdinc++ -std=c++11 $(Enclave_Compile_CFlags) # To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: # 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, @@ -135,9 +140,9 @@ Enclave_Compile_CXXFlags := -nostdinc++ -std=c++03 $(Enclave_Compile_CFlags) # Otherwise, you may get some undesirable errors. Enclave_Link_Flags := -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,--version-script=Enclave/Enclave.lds -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ - -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 + -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o) Gen_Trusted_Source := Enclave/Enclave_t.c diff --git a/SampleCode/PowerTransition/README.txt b/SampleCode/PowerTransition/README.txt index 23c298b0..0f9e256b 100644 --- a/SampleCode/PowerTransition/README.txt +++ b/SampleCode/PowerTransition/README.txt @@ -7,7 +7,7 @@ Software Guard Extensions projects development. ------------------------------------ How to Build/Execute the Sample Code ------------------------------------ -1. Install Intel(R) SGX SDK for Linux* OS +1. Install Intel(R) Software Guard Extensions (Intel(R) SGX) SDK for Linux* OS 2. Build the project with the prepared Makefile: a. Hardware Mode, Debug build: $ make diff --git a/SampleCode/RemoteAttestation/.cproject b/SampleCode/RemoteAttestation/.cproject index efe1117e..28718ebf 100644 --- a/SampleCode/RemoteAttestation/.cproject +++ b/SampleCode/RemoteAttestation/.cproject @@ -2,7 +2,7 @@ - + @@ -17,49 +17,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68,7 +35,7 @@ - + @@ -83,16 +50,49 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +101,7 @@ - + @@ -116,16 +116,16 @@ - - - - - - - - + @@ -149,16 +149,16 @@ - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - - - - - - - + - + - - - - - - - + diff --git a/SampleCode/RemoteAttestation/.settings/language.settings.xml b/SampleCode/RemoteAttestation/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/RemoteAttestation/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/RemoteAttestation/Makefile b/SampleCode/RemoteAttestation/Makefile index 69f82338..aae43b42 100644 --- a/SampleCode/RemoteAttestation/Makefile +++ b/SampleCode/RemoteAttestation/Makefile @@ -110,7 +110,7 @@ App_Name := app ######## Service Provider Settings ######## ServiceProvider_Cpp_Files := service_provider/ecp.cpp service_provider/network_ra.cpp service_provider/service_provider.cpp service_provider/ias_ra.cpp -ServiceProvider_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport -Isample_libcrypto +ServiceProvider_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -Isample_libcrypto ServiceProvider_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes -I$(SGX_SDK)/include -Isample_libcrypto ServiceProvider_Cpp_Flags := $(ServiceProvider_C_Flags) -std=c++11 @@ -130,10 +130,16 @@ endif Crypto_Library_Name := sgx_tcrypto Enclave_Cpp_Files := isv_enclave/isv_enclave.cpp -Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) -Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector +else + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector-strong +endif +Enclave_C_Flags += $(Enclave_Include_Paths) +Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++11 -nostdinc++ # To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: # 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, @@ -144,10 +150,10 @@ Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ # Otherwise, you may get some undesirable errors. Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -lsgx_tkey_exchange -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -lsgx_tkey_exchange -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ - -Wl,--defsym,__ImageBase=0 \ + -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections \ -Wl,--version-script=isv_enclave/isv_enclave.lds Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o) diff --git a/SampleCode/RemoteAttestation/README.txt b/SampleCode/RemoteAttestation/README.txt index 2b781933..d6f5cb5d 100644 --- a/SampleCode/RemoteAttestation/README.txt +++ b/SampleCode/RemoteAttestation/README.txt @@ -8,7 +8,7 @@ The project demonstrates: ------------------------------------ How to Build/Execute the Sample Code ------------------------------------ -1. Install Intel(R) SGX SDK for Linux* OS +1. Install Intel(R) Software Guard Extensions (Intel(R) SGX) SDK for Linux* OS 2. Build the project with the prepared Makefile: a. Hardware Mode, Debug build: $ make diff --git a/SampleCode/RemoteAttestation/isv_app/isv_app.cpp b/SampleCode/RemoteAttestation/isv_app/isv_app.cpp index 82a2d2a5..6046a0f4 100644 --- a/SampleCode/RemoteAttestation/isv_app/isv_app.cpp +++ b/SampleCode/RemoteAttestation/isv_app/isv_app.cpp @@ -71,7 +71,7 @@ uint8_t* msg1_samples[] = { msg1_sample1, msg1_sample2 }; uint8_t* msg2_samples[] = { msg2_sample1, msg2_sample2 }; -uint8_t* msg3_samples[MSG3_BODY_SIZE] = { msg3_sample1, msg3_sample2 }; +uint8_t* msg3_samples[] = { msg3_sample1, msg3_sample2 }; uint8_t* attestation_msg_samples[] = { attestation_msg_sample1, attestation_msg_sample2}; @@ -437,8 +437,10 @@ int main(int argc, char* argv[]) ra_samp_response_header_t* precomputed_msg2 = (ra_samp_response_header_t *) msg2_samples[GET_VERIFICATION_ARRAY_INDEX()]; - if(memcmp( precomputed_msg2, p_msg2_full, - sizeof(ra_samp_response_header_t) + p_msg2_full->size)) + if(MSG2_BODY_SIZE != + sizeof(ra_samp_response_header_t) + p_msg2_full->size || + memcmp( precomputed_msg2, p_msg2_full, + sizeof(ra_samp_response_header_t) + p_msg2_full->size)) { fprintf(OUTPUT, "\nVerification ERROR. Our precomputed " "value for MSG2 does NOT match.\n"); @@ -575,7 +577,8 @@ int main(int argc, char* argv[]) "result message back\n."); if( VERIFICATION_INDEX_IS_VALID() ) { - if(memcmp(p_att_result_msg_full->body, + if(ATTESTATION_MSG_BODY_SIZE != p_att_result_msg_full->size || + memcmp(p_att_result_msg_full->body, attestation_msg_samples[GET_VERIFICATION_ARRAY_INDEX()], p_att_result_msg_full->size) ) { @@ -585,7 +588,7 @@ int main(int argc, char* argv[]) fprintf(OUTPUT, "\nEXPECTED ATTESTATION RESULT -"); PRINT_BYTE_ARRAY(OUTPUT, attestation_msg_samples[GET_VERIFICATION_ARRAY_INDEX()], - p_att_result_msg_full->size); + ATTESTATION_MSG_BODY_SIZE); } } } diff --git a/SampleCode/RemoteAttestation/isv_app/sample_messages.h b/SampleCode/RemoteAttestation/isv_app/sample_messages.h index 460bf980..2b428640 100644 --- a/SampleCode/RemoteAttestation/isv_app/sample_messages.h +++ b/SampleCode/RemoteAttestation/isv_app/sample_messages.h @@ -37,7 +37,9 @@ #include -uint8_t msg1_sample1[] = +#define MSG1_BODY_SIZE 68 + +uint8_t msg1_sample1[MSG1_BODY_SIZE] = { 0xe8, 0xcf, 0xf, 0x97, 0x8a, 0xf4, 0x24, 0x8a, 0xf5, 0x5b, 0x56, 0xf0, 0xac, 0x7f, 0x78, 0x39, @@ -50,7 +52,7 @@ uint8_t msg1_sample1[] = 0x3, 0x1, 0x0, 0x0 }; -uint8_t msg1_sample2[] = +uint8_t msg1_sample2[MSG1_BODY_SIZE] = { 0xa8, 0x56, 0x72, 0xc1, 0x14, 0x41, 0xa, 0x2f, 0xdc, 0xb0, 0xa8, 0xa1, 0x3a, 0x51, 0x40, 0xf9, @@ -63,7 +65,9 @@ uint8_t msg1_sample2[] = 0x3, 0x1, 0x0, 0x0 }; -uint8_t msg2_sample1[] = +#define MSG2_BODY_SIZE 176 + +uint8_t msg2_sample1[MSG2_BODY_SIZE] = { 0x2, 0x0, 0x0, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x6a, 0x83, 0xdc, 0x84, 0xd4, 0x4c, 0x8a, 0xbb, @@ -89,7 +93,7 @@ uint8_t msg2_sample1[] = 0x27, 0xc2, 0x55, 0xb9, 0x0, 0x0, 0x0, 0x0 }; -uint8_t msg2_sample2[] = +uint8_t msg2_sample2[MSG2_BODY_SIZE] = { 0x2, 0x0, 0x0, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x6a, 0x83, 0xdc, 0x84, 0xd4, 0x4c, 0x8a, 0xbb, @@ -490,7 +494,9 @@ uint8_t msg3_sample2[MSG3_BODY_SIZE] = 0xe8, 0x1e, 0x5e, 0xd8 }; -uint8_t attestation_msg_sample1[] = +#define ATTESTATION_MSG_BODY_SIZE 145 + +uint8_t attestation_msg_sample1[ATTESTATION_MSG_BODY_SIZE] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -513,7 +519,7 @@ uint8_t attestation_msg_sample1[] = 0xc0 }; -uint8_t attestation_msg_sample2[] = +uint8_t attestation_msg_sample2[ATTESTATION_MSG_BODY_SIZE] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, diff --git a/SampleCode/RemoteAttestation/service_provider/ecp.cpp b/SampleCode/RemoteAttestation/service_provider/ecp.cpp index aca7ec4f..74d6d42f 100644 --- a/SampleCode/RemoteAttestation/service_provider/ecp.cpp +++ b/SampleCode/RemoteAttestation/service_provider/ecp.cpp @@ -144,8 +144,8 @@ bool derive_key( sample_ret = sample_sha256_close(sha_context); static_assert(sizeof(sample_ec_key_128bit_t)* 2 == sizeof(sample_sha256_hash_t), "structure size mismatch."); - memcpy(first_derived_key, &key_material, sizeof(sample_ec_key_128bit_t)); - memcpy(second_derived_key, (uint8_t*)&key_material + sizeof(sample_ec_key_128bit_t), sizeof(sample_ec_key_128bit_t)); + memcpy_s(first_derived_key, sizeof(sample_ec_key_128bit_t), &key_material, sizeof(sample_ec_key_128bit_t)); + memcpy_s(second_derived_key, sizeof(sample_ec_key_128bit_t), (uint8_t*)&key_material + sizeof(sample_ec_key_128bit_t), sizeof(sample_ec_key_128bit_t)); // memset here can be optimized away by compiler, so please use memset_s on // windows for production code and similar functions on other OSes. @@ -233,7 +233,7 @@ bool derive_key( /*counter = 0x01 */ p_derivation_buffer[0] = 0x01; /*label*/ - memcpy(&p_derivation_buffer[1], label, label_length); + memcpy_s(&p_derivation_buffer[1], derivation_buffer_length - 1, label, label_length); /*output_key_len=0x0080*/ uint16_t *key_len = (uint16_t *)(&(p_derivation_buffer[derivation_buffer_length - 2])); *key_len = 0x0080; @@ -254,4 +254,4 @@ bool derive_key( } return true; } -#endif \ No newline at end of file +#endif diff --git a/SampleCode/SampleEnclave/.cproject b/SampleCode/SampleEnclave/.cproject index e685836b..690134a3 100644 --- a/SampleCode/SampleEnclave/.cproject +++ b/SampleCode/SampleEnclave/.cproject @@ -2,7 +2,7 @@ - + @@ -17,49 +17,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68,7 +35,7 @@ - + @@ -83,16 +50,49 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +101,7 @@ - + @@ -116,16 +116,16 @@ - - - - - - - - + @@ -149,16 +149,16 @@ - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - - - - - - - + - + - - - - - - - + diff --git a/SampleCode/SampleEnclave/.settings/language.settings.xml b/SampleCode/SampleEnclave/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/SampleEnclave/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp b/SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp index 18f31459..08308dcc 100644 --- a/SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp +++ b/SampleCode/SampleEnclave/App/Edger8rSyntax/Pointers.cpp @@ -76,25 +76,25 @@ void edger8r_pointer_attributes(void) ret = ecall_pointer_string(global_eid, str1); if (ret != SGX_SUCCESS) abort(); - assert(memcmp(str1, "0987654321", strlen(str1)) == 0); + assert(strlen(str1) == 10 && memcmp(str1, "0987654321", strlen(str1)) == 0); const char str2[] = "1234567890"; ret = ecall_pointer_string_const(global_eid, str2); if (ret != SGX_SUCCESS) abort(); - assert(memcmp(str2, "1234567890", strlen(str2)) == 0); + assert(strlen(str2) == 10 && memcmp(str2, "1234567890", strlen(str2)) == 0); char str3[] = "1234567890"; ret = ecall_pointer_size(global_eid, (void*)str3, strlen(str3)); if (ret != SGX_SUCCESS) abort(); - assert(memcmp(str3, "0987654321", strlen(str3)) == 0); + assert(strlen(str3) == 10 && memcmp(str3, "0987654321", strlen(str3)) == 0); char str4[] = "1234567890"; ret = ecall_pointer_isptr_readonly(global_eid, (buffer_t)str4, strlen(str4)); if (ret != SGX_SUCCESS) abort(); - assert(memcmp(str4, "1234567890", strlen(str4)) == 0); + assert(strlen(str4) == 10 && memcmp(str4, "1234567890", strlen(str4)) == 0); int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; ret = ecall_pointer_count(global_eid, arr, 10); diff --git a/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp b/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp index aefd2606..952c2190 100644 --- a/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp +++ b/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Libc.cpp @@ -31,7 +31,7 @@ #include -#include +#include "sgx_cpuid.h" #include "sgx_trts.h" #include "../Enclave.h" diff --git a/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp b/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp index 251d5e8a..ea40e338 100644 --- a/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp +++ b/SampleCode/SampleEnclave/Enclave/TrustedLibrary/Thread.cpp @@ -33,7 +33,7 @@ #include "../Enclave.h" #include "Enclave_t.h" -#include +#include "sgx_thread.h" static size_t global_counter = 0; static sgx_thread_mutex_t global_mutex = SGX_THREAD_MUTEX_INITIALIZER; diff --git a/SampleCode/SampleEnclave/Makefile b/SampleCode/SampleEnclave/Makefile index e2524b9e..e44755fb 100644 --- a/SampleCode/SampleEnclave/Makefile +++ b/SampleCode/SampleEnclave/Makefile @@ -116,10 +116,17 @@ endif Crypto_Library_Name := sgx_tcrypto Enclave_Cpp_Files := Enclave/Enclave.cpp $(wildcard Enclave/Edger8rSyntax/*.cpp) $(wildcard Enclave/TrustedLibrary/*.cpp) -Enclave_Include_Paths := -IInclude -IEnclave -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +Enclave_Include_Paths := -IInclude -IEnclave -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) -Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector +else + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector-strong +endif + +Enclave_C_Flags += $(Enclave_Include_Paths) +Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++11 -nostdinc++ # To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: # 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, @@ -130,10 +137,10 @@ Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ # Otherwise, you may get some undesirable errors. Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ - -Wl,--defsym,__ImageBase=0 \ + -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections \ -Wl,--version-script=Enclave/Enclave.lds Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o) diff --git a/SampleCode/SampleEnclave/README.txt b/SampleCode/SampleEnclave/README.txt index 3ecd3c3a..cd601fa1 100644 --- a/SampleCode/SampleEnclave/README.txt +++ b/SampleCode/SampleEnclave/README.txt @@ -2,7 +2,7 @@ Purpose of SampleEnclave ------------------------ The project demonstrates several fundamental usages of Intel(R) Software Guard -Extensions (SGX) SDK: +Extensions (Intel(R) SGX) SDK: - Initializing and destroying an enclave - Creating ECALLs or OCALLs - Calling trusted libraries inside the enclave diff --git a/SampleCode/SealedData/.cproject b/SampleCode/SealedData/.cproject index b5462bc9..16ae3171 100644 --- a/SampleCode/SealedData/.cproject +++ b/SampleCode/SealedData/.cproject @@ -2,7 +2,7 @@ - + @@ -17,49 +17,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -68,7 +35,7 @@ - + @@ -83,16 +50,49 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +101,7 @@ - + @@ -116,16 +116,16 @@ - - - - - - - - + @@ -149,16 +149,16 @@ - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - - - - - - - + - + - - - - - - - + diff --git a/SampleCode/SealedData/.settings/language.settings.xml b/SampleCode/SealedData/.settings/language.settings.xml new file mode 100644 index 00000000..bb1f9221 --- /dev/null +++ b/SampleCode/SealedData/.settings/language.settings.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleCode/SealedData/Makefile b/SampleCode/SealedData/Makefile index 1d7d7f03..07f6819c 100644 --- a/SampleCode/SealedData/Makefile +++ b/SampleCode/SealedData/Makefile @@ -116,10 +116,16 @@ endif Crypto_Library_Name := sgx_tcrypto Enclave_Cpp_Files := DRM_enclave/DRM_enclave.cpp -Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/stlport +Enclave_Include_Paths := -I$(SGX_SDK)/include -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) -Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector +else + Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -ffunction-sections -fdata-sections -fstack-protector-strong +endif +Enclave_C_Flags += $(Enclave_Include_Paths) +Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++11 -nostdinc++ # To generate a proper enclave, it is recommended to follow below guideline to link the trusted libraries: # 1. Link sgx_trts with the `--whole-archive' and `--no-whole-archive' options, @@ -130,10 +136,10 @@ Enclave_Cpp_Flags := $(Enclave_C_Flags) -std=c++03 -nostdinc++ # Otherwise, you may get some undesirable errors. Enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \ -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \ - -Wl,--start-group -lsgx_tstdc -lsgx_tstdcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) -l$(Service_Library_Name) -Wl,--end-group \ -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \ -Wl,-pie,-eenclave_entry -Wl,--export-dynamic \ - -Wl,--defsym,__ImageBase=0 \ + -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections \ -Wl,--version-script=DRM_enclave/DRM_enclave.lds Enclave_Cpp_Objects := $(Enclave_Cpp_Files:.cpp=.o) diff --git a/SampleCode/SealedData/README.txt b/SampleCode/SealedData/README.txt index 2ca93a9c..7c1723dd 100644 --- a/SampleCode/SealedData/README.txt +++ b/SampleCode/SealedData/README.txt @@ -10,7 +10,7 @@ replay-protected policy, and Trusted Time to enforce time based policy ------------------------------------ How to Build/Execute the Sample Code ------------------------------------ -1. Install Intel(R) SGX SDK for Linux* OS +1. Install Intel(R) Software Guard Extensions (Intel(R) SGX) SDK for Linux* OS 2. Build the project with the prepared Makefile: a. Hardware Mode, Debug build: $ make diff --git a/buildenv.mk b/buildenv.mk index 5d083475..7da182f4 100644 --- a/buildenv.mk +++ b/buildenv.mk @@ -67,7 +67,12 @@ INCLUDE := CUR_DIR := $(realpath $(call parent-dir,$(lastword $(wordlist 2,$(words $(MAKEFILE_LIST)),x $(MAKEFILE_LIST))))) # turn on stack protector for SDK -COMMON_FLAGS += -fstack-protector +CC_BELOW_4_9 := $(shell expr "`$(CC) -dumpversion`" \< "4.9") +ifeq ($(CC_BELOW_4_9), 1) + COMMON_FLAGS += -fstack-protector +else + COMMON_FLAGS += -fstack-protector-strong +endif ifdef DEBUG COMMON_FLAGS += -ggdb -DDEBUG -UNDEBUG @@ -80,6 +85,8 @@ ifdef SE_SIM COMMON_FLAGS += -DSE_SIM endif +COMMON_FLAGS += -ffunction-sections -fdata-sections + # turn on compiler warnings as much as possible COMMON_FLAGS += -Wall -Wextra -Winit-self -Wpointer-arith -Wreturn-type \ -Waddress -Wsequence-point -Wformat-security \ diff --git a/common/inc/internal/metadata.h b/common/inc/internal/metadata.h index 1c7b1192..8fa48256 100644 --- a/common/inc/internal/metadata.h +++ b/common/inc/internal/metadata.h @@ -38,7 +38,10 @@ /* version of metadata */ #define MAJOR_VERSION 1 /* MAJOR_VERSION should not larger than 0ffffffff */ -#define MINOR_VERSION 3 /* MINOR_VERSION should not larger than 0ffffffff */ +#define MINOR_VERSION 4 /* MINOR_VERSION should not larger than 0ffffffff */ + +#define SGX_1_5_MAJOR_VERSION 1 //MAJOR_VERSION should not larger than 0ffffffff +#define SGX_1_5_MINOR_VERSION 3 //MINOR_VERSION should not larger than 0ffffffff #define META_DATA_MAKE_VERSION(major, minor) (((uint64_t)major)<<32 | minor) diff --git a/common/inc/internal/routine.h b/common/inc/internal/routine.h index dd0e6b7c..c08884a7 100644 --- a/common/inc/internal/routine.h +++ b/common/inc/internal/routine.h @@ -52,4 +52,4 @@ sgx_status_t SGXAPI sgx_ecall(const sgx_enclave_id_t enclave_id, const int proc, } #endif -#endif \ No newline at end of file +#endif diff --git a/common/inc/internal/se_cdefs.h b/common/inc/internal/se_cdefs.h index 2eb2cdf0..c1572add 100644 --- a/common/inc/internal/se_cdefs.h +++ b/common/inc/internal/se_cdefs.h @@ -93,10 +93,11 @@ #endif #define SGX_ACCESS_VERSION(libname, num) \ - MY_EXTERN const char *sgx_##libname##_version; \ - const char * __attribute__((destructor)) libname##_access_version_dummy##num() \ - { \ - return sgx_##libname##_version; \ + MY_EXTERN char sgx_##libname##_version[]; \ + MY_EXTERN char * __attribute__((destructor)) libname##_access_version_dummy##num() \ + { \ + sgx_##libname##_version[0] = 's'; \ + return sgx_##libname##_version; \ } diff --git a/common/inc/internal/se_macro.h b/common/inc/internal/se_macro.h index fbf353b1..88866a00 100644 --- a/common/inc/internal/se_macro.h +++ b/common/inc/internal/se_macro.h @@ -37,4 +37,4 @@ #define SGX_HYPERV_ECO #endif - #endif \ No newline at end of file + #endif diff --git a/common/inc/internal/se_version.h b/common/inc/internal/se_version.h index 8b1a53df..b08d6fe8 100644 --- a/common/inc/internal/se_version.h +++ b/common/inc/internal/se_version.h @@ -28,5 +28,5 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -#define STRFILEVER "1.8.100.37739" +#define STRFILEVER "1.9.100.39124" diff --git a/common/inc/sgx_attributes.h b/common/inc/sgx_attributes.h index 8d2597e2..b314c300 100644 --- a/common/inc/sgx_attributes.h +++ b/common/inc/sgx_attributes.h @@ -39,14 +39,14 @@ #define SGX_FLAGS_DEBUG 0x0000000000000002ULL /* If set, then the enclave is debug */ #define SGX_FLAGS_MODE64BIT 0x0000000000000004ULL /* If set, then the enclave is 64 bit */ #define SGX_FLAGS_PROVISION_KEY 0x0000000000000010ULL /* If set, then the enclave has access to provision key */ -#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL /* If set, then the enclave has access to EINITTOKEN key */ +#define SGX_FLAGS_EINITTOKEN_KEY 0x0000000000000020ULL /* If set, then the enclave has access to EINITTOKEN key */ #define SGX_FLAGS_RESERVED (~(SGX_FLAGS_INITTED | SGX_FLAGS_DEBUG | SGX_FLAGS_MODE64BIT | SGX_FLAGS_PROVISION_KEY | SGX_FLAGS_EINITTOKEN_KEY)) /* XSAVE Feature Request Mask */ -#define SGX_XFRM_LEGACY 0x0000000000000003ULL /* Legacy XFRM */ -#define SGX_XFRM_AVX 0x0000000000000006ULL /* AVX */ -#define SGX_XFRM_AVX512 0x00000000000000E6ULL /* AVX-512 - not supported */ -#define SGX_XFRM_MPX 0x0000000000000018ULL /* MPX - not supported */ +#define SGX_XFRM_LEGACY 0x0000000000000003ULL /* Legacy XFRM which includes the basic feature bits required by SGX, x87 state(0x01) and SSE state(0x02) */ +#define SGX_XFRM_AVX 0x0000000000000006ULL /* AVX XFRM which includes AVX state(0x04) and SSE state(0x02) required by AVX */ +#define SGX_XFRM_AVX512 0x00000000000000E6ULL /* AVX-512 XFRM - not supported */ +#define SGX_XFRM_MPX 0x0000000000000018ULL /* MPX XFRM - not supported */ #define SGX_XFRM_RESERVED (~(SGX_XFRM_LEGACY | SGX_XFRM_AVX)) diff --git a/common/inc/sgx_defs.h b/common/inc/sgx_defs.h index 6a3a6d28..8cf1b888 100644 --- a/common/inc/sgx_defs.h +++ b/common/inc/sgx_defs.h @@ -48,6 +48,8 @@ # define SGX_DLLIMPORT # define SGX_UBRIDGE(attr, fname, args...) attr fname args +# define SGX_DEPRECATED __attribute__((deprecated)) + #define SGX_NOCONVENTION /* Empty. No calling convention specified. */ diff --git a/common/inc/sgx_error.h b/common/inc/sgx_error.h index 1b86deca..6643f6f1 100644 --- a/common/inc/sgx_error.h +++ b/common/inc/sgx_error.h @@ -72,8 +72,8 @@ typedef enum _status_t SGX_ERROR_INVALID_ISVSVN = SGX_MK_ERROR(0x3004), /* The isv svn is greater than the enclave's isv svn */ SGX_ERROR_INVALID_KEYNAME = SGX_MK_ERROR(0x3005), /* The key name is an unsupported value */ - SGX_ERROR_SERVICE_UNAVAILABLE = SGX_MK_ERROR(0x4001), /* Indicates aesm didn't response or the requested service is not supported */ - SGX_ERROR_SERVICE_TIMEOUT = SGX_MK_ERROR(0x4002), /* The request to aesm time out */ + SGX_ERROR_SERVICE_UNAVAILABLE = SGX_MK_ERROR(0x4001), /* Indicates aesm didn't respond or the requested service is not supported */ + SGX_ERROR_SERVICE_TIMEOUT = SGX_MK_ERROR(0x4002), /* The request to aesm timed out */ SGX_ERROR_AE_INVALID_EPIDBLOB = SGX_MK_ERROR(0x4003), /* Indicates epid blob verification error */ SGX_ERROR_SERVICE_INVALID_PRIVILEGE = SGX_MK_ERROR(0x4004), /* Enclave has no privilege to get launch token */ SGX_ERROR_EPID_MEMBER_REVOKED = SGX_MK_ERROR(0x4005), /* The EPID group membership is revoked. */ diff --git a/common/inc/sgx_report.h b/common/inc/sgx_report.h index 9be21651..51dfde29 100644 --- a/common/inc/sgx_report.h +++ b/common/inc/sgx_report.h @@ -63,7 +63,7 @@ typedef uint16_t sgx_prod_id_t; #define SGX_TARGET_INFO_RESERVED1_BYTES 4 #define SGX_TARGET_INFO_RESERVED2_BYTES 456 -typedef struct _targe_info_t +typedef struct _target_info_t { sgx_measurement_t mr_enclave; /* ( 0) The MRENCLAVE of the target enclave */ sgx_attributes_t attributes; /* ( 32) The ATTRIBUTES field of the target enclave */ diff --git a/common/inc/sgx_tcrypto.h b/common/inc/sgx_tcrypto.h index 3d581fd1..7b6976a6 100644 --- a/common/inc/sgx_tcrypto.h +++ b/common/inc/sgx_tcrypto.h @@ -52,6 +52,9 @@ #define SGX_CMAC_KEY_SIZE 16 #define SGX_CMAC_MAC_SIZE 16 #define SGX_AESCTR_KEY_SIZE 16 +#define SGX_RSA3072_KEY_SIZE 384 +#define SGX_RSA3072_PRI_EXP_SIZE 384 +#define SGX_RSA3072_PUB_EXP_SIZE 4 typedef struct _sgx_ec256_dh_shared_t { @@ -81,6 +84,20 @@ typedef struct _sgx_ec256_signature_t uint32_t y[SGX_NISTP_ECP256_KEY_SIZE]; } sgx_ec256_signature_t; +typedef struct _sgx_rsa3072_public_key_t +{ + uint8_t mod[SGX_RSA3072_KEY_SIZE]; + uint8_t exp[SGX_RSA3072_PUB_EXP_SIZE]; +} sgx_rsa3072_public_key_t; + +typedef struct _sgx_rsa3072_private_key_t +{ + uint8_t mod[SGX_RSA3072_KEY_SIZE]; + uint8_t exp[SGX_RSA3072_PRI_EXP_SIZE]; +} sgx_rsa3072_private_key_t; + +typedef uint8_t sgx_rsa3072_signature_t[SGX_RSA3072_KEY_SIZE]; + typedef void* sgx_sha_state_handle_t; typedef void* sgx_cmac_state_handle_t; typedef void* sgx_ecc_state_handle_t; @@ -120,6 +137,12 @@ typedef enum { } sgx_generic_ecresult_t; +typedef enum { + SGX_RSA_VALID, /* validation pass successfully */ + + SGX_RSA_INVALID_SIGNATURE /* invalid signature */ +} sgx_rsa_result_t; + #ifdef __cplusplus extern "C" { #endif @@ -437,7 +460,7 @@ extern "C" { * The private key p_private is a number that lies in the range of [1, n-1] where n is * the order of the elliptic curve base point. * - * The public key p_public is an elliptic curve point such that p_public = p_private ?G, + * The public key p_public is an elliptic curve point such that p_public = p_private *G, * where G is the base point of the elliptic curve. * * The context of the point p_public as an elliptic curve point must be created by using @@ -483,19 +506,19 @@ extern "C" { * * According to the scheme, Alice and Bob perform the following operations: * 1. Alice calculates her own public key pubKeyA by using her private key - * privKeyA: pubKeyA = privKeyA ?G, where G is the base point of the elliptic curve. + * privKeyA: pubKeyA = privKeyA *G, where G is the base point of the elliptic curve. * 2. Alice passes the public key to Bob. * 3. Bob calculates his own public key pubKeyB by using his private key - * privKeyB: pubKeyB = privKeyB ?G, where G is a base point of the elliptic curve. + * privKeyB: pubKeyB = privKeyB *G, where G is a base point of the elliptic curve. * 4. Bob passes the public key to Alice. * 5. Alice gets Bob's public key and calculates the secret point shareA. When calculating, * she uses her own private key and Bob's public key and applies the following formula: - * shareA = privKeyA ?pubKeyB = privKeyA ?privKeyB ?G. + * shareA = privKeyA *pubKeyB = privKeyA *privKeyB *G. * 6. Bob gets Alice's public key and calculates the secret point shareB. When calculating, * he uses his own private key and Alice's public key and applies the following formula: - * shareB = privKeyB ?pubKeyA = privKeyB ?privKeyA ?G. + * shareB = privKeyB *pubKeyA = privKeyB *privKeyA *G. * - * Because the following equation is true privKeyA ?privKeyB ?G = privKeyB ?privKeyA ?G, + * Because the following equation is true privKeyA *privKeyB *G = privKeyB *privKeyA *G, * the result of both calculations is the same, that is, the equation shareA = shareB is true. * The secret point serves as a secret key. * @@ -600,6 +623,50 @@ extern "C" { uint8_t *p_result, sgx_ecc_state_handle_t ecc_handle); + /** Computes signature for a given data based on RSA 3072 private key + * + * A digital signature over a message consists of a 3072 bit number. + * + * Return: If private key, signature or data pointer is NULL, + * SGX_ERROR_INVALID_PARAMETER is returned. + * If the signing process fails then SGX_ERROR_UNEXPECTED is returned. + * Parameters: + * Return: sgx_status_t - SGX_SUCCESS or failure as defined in sgx_error.h + * Inputs: uint8_t *p_data - Pointer to the data to be signed + * uint32_t data_size - Size of the data to be signed + * sgx_rsa3072_private_key_t *p_private - Pointer to the private key + * Output: sgx_rsa3072_signature_t *p_signature - Pointer to the signature output + */ + sgx_status_t sgx_rsa3072_sign(const uint8_t *p_data, + uint32_t data_size, + const sgx_rsa3072_private_key_t *p_private, + sgx_rsa3072_signature_t *p_signature); + + /** Verifies the signature for the given data based on the RSA 3072 public key. + * + * A digital signature over a message consists of a 3072 bit number. + * + * The typical result of the digital signature verification is one of the two values: + * SGX_Generic_ECValid - Digital signature is valid + * SGX_Generic_ECInvalidSignature - Digital signature is not valid + * + * Return: If public key, signature, result or data pointer is NULL, + * SGX_ERROR_INVALID_PARAMETER is returned. + * If the verification process fails then SGX_ERROR_UNEXPECTED is returned. + * Parameters: + * Return: sgx_status_t - SGX_SUCCESS or failure as defined in sgx_error.h + * Inputs: uint8_t *p_data - Pointer to the data to be verified + * uint32_t data_size - Size of the data to be verified + * sgx_rsa3072_public_key_t *p_public - Pointer to the public key + * sgx_rsa3072_signature_t *p_signature - Pointer to the signature + * Output: sgx_rsa_result_t *p_result - Pointer to the result of verification check + */ + sgx_status_t sgx_rsa3072_verify(const uint8_t *p_data, + uint32_t data_size, + const sgx_rsa3072_public_key_t *p_public, + const sgx_rsa3072_signature_t *p_signature, + sgx_rsa_result_t *p_result); + #ifdef __cplusplus } #endif diff --git a/common/inc/sgx_thread.h b/common/inc/sgx_thread.h index f29856d3..f90c5a3a 100644 --- a/common/inc/sgx_thread.h +++ b/common/inc/sgx_thread.h @@ -38,14 +38,14 @@ typedef uintptr_t sgx_thread_t; -typedef struct sgx_thread_queue +typedef struct _sgx_thread_queue_t { sgx_thread_t m_first; /* first element */ sgx_thread_t m_last; /* last element */ } sgx_thread_queue_t; /* Mutex */ -typedef struct sgx_thread_mutex +typedef struct _sgx_thread_mutex_t { size_t m_refcount; uint32_t m_control; @@ -65,13 +65,13 @@ typedef struct sgx_thread_mutex #define SGX_THREAD_MUTEX_INITIALIZER \ SGX_THREAD_NONRECURSIVE_MUTEX_INITIALIZER -typedef struct sgx_thread_mutex_attr +typedef struct _sgx_thread_mutex_attr_t { unsigned char m_dummy; /* for C syntax check */ } sgx_thread_mutexattr_t; /* Condition Variable */ -typedef struct sgx_thread_cond +typedef struct _sgx_thread_cond_t { volatile uint32_t m_lock; /* use sgx_spinlock_t */ sgx_thread_queue_t m_queue; @@ -79,7 +79,7 @@ typedef struct sgx_thread_cond #define SGX_THREAD_COND_INITIALIZER {0, {SGX_THREAD_T_NULL, SGX_THREAD_T_NULL}} -typedef struct sgx_thread_cond_attr +typedef struct _sgx_thread_cond_attr_t { unsigned char m_dummy; /* for C syntax check */ } sgx_thread_condattr_t; diff --git a/common/inc/sgx_tkey_exchange.h b/common/inc/sgx_tkey_exchange.h index c0ace5f7..f69f7b13 100644 --- a/common/inc/sgx_tkey_exchange.h +++ b/common/inc/sgx_tkey_exchange.h @@ -121,7 +121,7 @@ typedef sgx_status_t(*sgx_ra_derive_secret_keys_t)( * shared keys (SMK, SK, MK and VK). * @param p_context The output context for the subsequent remote attestation * and key exchange process, to be used in sgx_ra_get_msg1 and - * sgx_ra_get_msg2. + * sgx_ra_proc_msg2. * @return sgx_status_t SGX_SUCCESS Indicates success. * SGX_ERROR_INVALID_PARAMETER Indicates an error that * the input parameters are diff --git a/common/inc/sgx_tprotected_fs.edl b/common/inc/sgx_tprotected_fs.edl new file mode 100644 index 00000000..6371de5d --- /dev/null +++ b/common/inc/sgx_tprotected_fs.edl @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +enclave { + +from "sgx_tae_service.edl" import *; + + untrusted { + void* u_sgxprotectedfs_exclusive_file_open([in, string] const char* filename, uint8_t read_only, [out] int64_t* file_size, [out] int32_t* error_code); + uint8_t u_sgxprotectedfs_check_if_file_exists([in, string] const char* filename); + int32_t u_sgxprotectedfs_fread_node([user_check] void* f, uint64_t node_number, [out, size=node_size] uint8_t* buffer, uint32_t node_size); + int32_t u_sgxprotectedfs_fwrite_node([user_check] void* f, uint64_t node_number, [in, size=node_size] uint8_t* buffer, uint32_t node_size); + int32_t u_sgxprotectedfs_fclose([user_check] void* f); + uint8_t u_sgxprotectedfs_fflush([user_check] void* f); + int32_t u_sgxprotectedfs_remove([in, string] const char* filename); + + void* u_sgxprotectedfs_recovery_file_open([in, string] const char* filename); + uint8_t u_sgxprotectedfs_fwrite_recovery_node([user_check] void* f, [in, count=data_length] uint8_t* data, uint32_t data_length); + int32_t u_sgxprotectedfs_do_file_recovery([in, string] const char* filename, [in, string] const char* recovery_filename, uint32_t node_size); + }; +}; diff --git a/common/inc/sgx_tprotected_fs.h b/common/inc/sgx_tprotected_fs.h new file mode 100644 index 00000000..9eeb8d57 --- /dev/null +++ b/common/inc/sgx_tprotected_fs.h @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2011-2017 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +/** +* File: sgx_tprotected_fs.h +* Description: +* Interface for file API +*/ + +#pragma once + +#ifndef _SGX_TPROTECTED_FS_H_ +#define _SGX_TPROTECTED_FS_H_ + +#include + +#include "sgx_defs.h" +#include "sgx_key.h" + +#define SGX_FILE void + +#define EOF (-1) + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#define FILENAME_MAX 260 +#define FOPEN_MAX 20 + +#ifdef __cplusplus +extern "C" { +#endif + +/* sgx_fopen + * Purpose: open existing protected file (created with previous call to sgc_fopen) or create a new one (see c++ fopen documentation for more details). + * + * Parameters: + * filename - [IN] the name of the file to open/create. + * mode - [IN] open mode. only supports 'r' or 'w' or 'a' (one and only one of them must be present), and optionally 'b' and/or '+'. + * key - [IN] encryption key that will be used for the file encryption + * NOTE - the key is actually used as a KDK (key derivation key) and only for the meta-data node, and not used directly for the encryption of any part of the file + * this is important in order to prevent hitting the key wear-out problem, and some other issues with GCM encryptions using the same key + * + * Return value: + * SGX_FILE* - pointer to the newly created file handle, NULL if an error occurred - check errno for the error code. +*/ +SGX_FILE* SGXAPI sgx_fopen(const char* filename, const char* mode, sgx_key_128bit_t *key); + + +/* sgx_fopen_auto_key +* Purpose: open existing protected file (created with previous call to sgc_fopen_auto_key) or create a new one (see c++ fopen documentation for more details). +* this API doesn't require a key from the user, and instead uses the enclave's SEAL key as a KDK for deriving the mete-data encryption keys +* using the SEAL key as a KDK, may result losing file access in cases of disaster-recovery or in cases of VM migration in servers +* users that any of these scenarious apply to them, are advised to use sgx_fopen, where they can provide their own key and manage the keys provisioning for those scenarious +* for further information, please read the SGX SDK manual +* +* Parameters: +* filename - [IN] the name of the file to open/create. +* mode - [IN] open mode. only supports 'r' or 'w' or 'a' (one and only one of them must be present), and optionally 'b' and/or '+'. +* +* Return value: +* SGX_FILE* - pointer to the newly created file handle, NULL if an error occurred - check errno for the error code. +*/ +SGX_FILE* SGXAPI sgx_fopen_auto_key(const char* filename, const char* mode); + + +/* sgx_fwrite + * Purpose: write data to a file (see c++ fwrite documentation for more details). + * + * Parameters: + * ptr - [IN] pointer to the input data buffer + * size - [IN] size of data block + * count - [IN] count of data blocks to write + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * size_t - number of 'size' blocks written to the file, 0 in case of an error - check sgx_ferror for error code +*/ +size_t SGXAPI sgx_fwrite(const void* ptr, size_t size, size_t count, SGX_FILE* stream); + + +/* sgx_fread + * Purpose: read data from a file (see c++ fread documentation for more details). + * + * Parameters: + * ptr - [OUT] pointer to the output data buffer + * size - [IN] size of data block + * count - [IN] count of data blocks to write + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * size_t - number of 'size' blocks read from the file, 0 in case of an error - check sgx_ferror for error code +*/ +size_t SGXAPI sgx_fread(void* ptr, size_t size, size_t count, SGX_FILE* stream); + + +/* sgx_ftell + * Purpose: get the current value of the position indicator of the file (see c++ ftell documentation for more details). + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * int64_t - the current value of the position indicator, -1 on error - check errno for the error code +*/ +int64_t SGXAPI sgx_ftell(SGX_FILE* stream); + + +/* sgx_fseek + * Purpose: set the current value of the position indicator of the file (see c++ fseek documentation for more details). + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * offset - [IN] the new required value, relative to the origin parameter + * origin - [IN] the origin from which to calculate the offset (SEEK_SET, SEEK_CUR or SEEK_END) + * + * Return value: + * int32_t - result, 0 on success, -1 in case of an error - check sgx_ferror for error code +*/ +int32_t SGXAPI sgx_fseek(SGX_FILE* stream, int64_t offset, int origin); + + +/* sgx_fflush + * Purpose: force actual write of all the cached data to the disk (see c++ fflush documentation for more details). + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * int32_t - result, 0 on success, 1 in case of an error - check sgx_ferror for error code +*/ +int32_t SGXAPI sgx_fflush(SGX_FILE* stream); + + +/* sgx_ferror + * Purpose: get the latest operation error code (see c++ ferror documentation for more details). + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * int32_t - the error code, 0 means no error, anything else is the latest operation error code +*/ +int32_t SGXAPI sgx_ferror(SGX_FILE* stream); + + +/* sgx_feof + * Purpose: did the file's position indicator hit the end of the file in a previous read operation (see c++ feof documentation for more details). + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * int32_t - 1 - end of file was reached, 0 - end of file wasn't reached +*/ +int32_t SGXAPI sgx_feof(SGX_FILE* stream); + + +/* sgx_clearerr + * Purpose: try to clear an error in the file status, also clears the end-of-file flag (see c++ clearerr documentation for more details). + * call sgx_ferror or sgx_feof after a call to this function to learn if it was successful or not + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * none +*/ +void SGXAPI sgx_clearerr(SGX_FILE* stream); + + +/* sgx_fclose + * Purpose: close an open file handle (see c++ fclose documentation for more details). + * after a call to this function, the handle is invalid even if an error is returned + * + * Parameters: + * stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key) + * + * Return value: + * int32_t - result, 0 - file was closed successfully, 1 - there were errors during the operation +*/ +int32_t SGXAPI sgx_fclose(SGX_FILE* stream); + + +/* sgx_remove + * Purpose: delete a file from the file system (see c++ remove documentation for more details). + * + * Parameters: + * filename - [IN] the name of the file to remvoe. + * + * Return value: + * int32_t - result, 0 - success, 1 - there was an error, check errno for the error code +*/ +int32_t SGXAPI sgx_remove(const char* filename); + + +/* sgx_fexport_auto_key +* Purpose: export the last key that was used in the encryption of the file. +* with this key we can import the file in a different enclave/system +* NOTE - 1. in order for this function to work, the file should not be opened in any other process +* 2. this function only works with files created with sgx_fopen_auto_key +* +* Parameters: +* filename - [IN] the name of the file to export the encryption key from. +* key - [OUT] the exported encryption key +* +* Return value: +* int32_t - result, 0 - success, 1 - there was an error, check errno for the error code +*/ +int32_t SGXAPI sgx_fexport_auto_key(const char* filename, sgx_key_128bit_t *key); + + +/* sgx_fimport_auto_key +* Purpose: import a file that was created in a different enclave/system and make it a local file +* after this call return successfully, the file can be opened with sgx_fopen_auto_key +* NOTE - this function only works with files created with sgx_fopen_auto_key +* +* Parameters: +* filename - [IN] the name of the file to be imported. +* key - [IN] the encryption key, exported with a call to sgx_fexport_auto_key in the source enclave/system +* +* Return value: +* int32_t - result, 0 - success, 1 - there was an error, check errno for the error code +*/ +int32_t SGXAPI sgx_fimport_auto_key(const char* filename, sgx_key_128bit_t *key); + + +/* sgx_fclear_cache +* Purpose: scrubs and delete the internal cache used by the file, any changed data is flushed to disk before deletion +* Note - only the secrets that were in the cache are deleted, the file structure itself still holds keys and plain file data +* if a user wishes to remove all secrets from memory, he should close the file handle with sgx_fclose +* +* Parameters: +* stream - [IN] the file handle (opened with sgx_fopen or sgx_fopen_auto_key +* +* Return value: +* int32_t - result, 0 - success, 1 - there was an error, check errno for the error code +*/ +int32_t SGXAPI sgx_fclear_cache(SGX_FILE* stream); + + +#ifdef __cplusplus +} +#endif + +#endif // _SGX_TPROTECTED_FS_H_ diff --git a/common/inc/sgx_trts_exception.h b/common/inc/sgx_trts_exception.h index f0dc5459..b71f418a 100644 --- a/common/inc/sgx_trts_exception.h +++ b/common/inc/sgx_trts_exception.h @@ -125,7 +125,7 @@ extern "C" { * exception_handler - a pointer to the handler to be called. * Return Value * handler - success - * NULL - fail + * NULL - fail */ void * SGXAPI sgx_register_exception_handler(int is_first_handler, sgx_exception_handler_t exception_handler); diff --git a/common/inc/sgx_tseal.h b/common/inc/sgx_tseal.h index 7cee008f..57cabd43 100644 --- a/common/inc/sgx_tseal.h +++ b/common/inc/sgx_tseal.h @@ -85,10 +85,12 @@ extern "C" { * * Return Value: * uint32_t - The number of bytes in the optional additional MAC buffer + * If the function fails, the return value is UINT32_MAX */ uint32_t sgx_get_add_mac_txt_len(const sgx_sealed_data_t* p_sealed_data); /* sgx_get_encrypt_txt_len + * Purpose: This function is used to determine how much memory to allocate for the decrypted data returned by the sgx_unseal_data function * * Parameter: * p_sealed_data - [IN] Pointer to the sgx_sealed_data_t structure which was populated by the sgx_seal_data function diff --git a/common/inc/sgx_uae_service.h b/common/inc/sgx_uae_service.h index 2bfead8b..59990edc 100644 --- a/common/inc/sgx_uae_service.h +++ b/common/inc/sgx_uae_service.h @@ -74,6 +74,21 @@ sgx_status_t SGXAPI sgx_init_quote( /* + * Function used to calculate quote size. + * + * @param p_sig_rl[in] OPTIONAL Signature Revocation List. + * @param sig_rl_size[in] Signature Revocation List size, in bytes. + * @param p_quote_size[out] Quote size, in bytes. + * @return If quote size is calculated,return SGX_SUCCESS, otherwise return + * SGX_ERROR_INVALID_PARAMETER to indicate special error condition. + */ +sgx_status_t SGXAPI sgx_calc_quote_size( + const uint8_t *p_sig_rl, + uint32_t sig_rl_size, + uint32_t* p_quote_size); + +/* + * [DEPRECATED] Use sgx_calc_quote_size function instead of this one * Function used to get quote size. * * @param p_sig_rl[in] OPTIONAL Signature Revocation List. @@ -81,6 +96,7 @@ sgx_status_t SGXAPI sgx_init_quote( * @return If quote size is calculated,return SGX_SCCUESS, otherwise return * SGX_ERROR_INVALID_PARAMETER to indicate special error condition. */ +SGX_DEPRECATED sgx_status_t SGXAPI sgx_get_quote_size( const uint8_t *p_sig_rl, uint32_t* p_quote_size); diff --git a/common/inc/sgx_ukey_exchange.h b/common/inc/sgx_ukey_exchange.h index 331a484e..03b993b7 100644 --- a/common/inc/sgx_ukey_exchange.h +++ b/common/inc/sgx_ukey_exchange.h @@ -118,7 +118,7 @@ sgx_status_t SGXAPI sgx_ra_get_msg1( sgx_ra_msg1_t *p_msg1); /* - * sgx_ra_get_msg2 is used to process the remote attestation and key exchange + * sgx_ra_proc_msg2 is used to process the remote attestation and key exchange * protocol message 2 from the service provider and generate message 3 to send * to the service provider. If the service provider accepts message 3, * negotiated session keys between the application enclave and the service @@ -134,7 +134,7 @@ sgx_status_t SGXAPI sgx_ra_get_msg1( * generated by sgx_edger8r. The application enclave should * link with sgx_tkey_exchange library and import the * sgx_tkey_exchange.edl in the application enclave's EDL - * file to expose the ECALL proxy for sgx_ra_get_msg2. + * file to expose the ECALL proxy for sgx_ra_proc_msg2. * @param p_get_msg3 Function pointer of the ECALL proxy sgx_ra_get_msg3_trusted * generated by sgx_edger8r. The application enclave should * link with sgx_tkey_exchange library and import the diff --git a/common/inc/stdc++/linux/typeinfo b/common/inc/stdc++/linux/typeinfo index a32df180..6c6d9dd5 100644 --- a/common/inc/stdc++/linux/typeinfo +++ b/common/inc/stdc++/linux/typeinfo @@ -133,6 +133,16 @@ namespace std bad_typeid& operator=(const bad_typeid &__rhs) throw(); virtual const char* what() const throw(); }; + + class bad_array_new_length: public bad_alloc + { + public: + bad_array_new_length() throw(); + bad_array_new_length(const bad_array_new_length&) throw(); + bad_array_new_length& operator=(const bad_array_new_length&) throw(); + virtual ~bad_array_new_length(); + virtual const char *what() const throw(); + }; } #endif /* _LINUX_TYPEINFO_ */ diff --git a/common/inc/tlibc/setjmp.h b/common/inc/tlibc/setjmp.h index ac5627f7..0c198cae 100644 --- a/common/inc/tlibc/setjmp.h +++ b/common/inc/tlibc/setjmp.h @@ -40,11 +40,11 @@ #define _SETJMP_H_ #ifndef _JB_ATTRIBUTES -#define _JB_ATTRIBUTES /**/ +#define _JB_ATTRIBUTES /**/ #else #endif #ifndef _BSD_JBSLOT_T_ -#define _BSD_JBSLOT_T_ long +#define _BSD_JBSLOT_T_ long #endif #define _JBLEN 8 @@ -55,9 +55,10 @@ typedef _BSD_JBSLOT_T_ jmp_buf[_JBLEN] _JB_ATTRIBUTES; #define __returns_twice __attribute__((__returns_twice__)) #define __dead + __BEGIN_DECLS -int _setjmp(jmp_buf) __returns_twice; -void _longjmp(jmp_buf, int) __dead; +int setjmp(jmp_buf) __returns_twice; +void longjmp(jmp_buf, int) __dead; __END_DECLS #endif /* !_SETJMP_H_ */ diff --git a/common/inc/tlibc/sys/_types.h b/common/inc/tlibc/sys/_types.h index b1b315c7..0fd68f91 100644 --- a/common/inc/tlibc/sys/_types.h +++ b/common/inc/tlibc/sys/_types.h @@ -42,8 +42,13 @@ typedef short __int16_t; typedef unsigned short __uint16_t; typedef int __int32_t; typedef unsigned int __uint32_t; +#ifdef __x86_64__ +typedef long __int64_t; +typedef unsigned long __uint64_t; +#else typedef long long __int64_t; typedef unsigned long long __uint64_t; +#endif /* 7.18.1.2 Minimum-width integer types */ typedef __int8_t __int_least8_t; @@ -105,7 +110,7 @@ typedef long __clock_t; typedef long __time_t; typedef __builtin_va_list __va_list; -typedef int __wint_t; +typedef unsigned int __wint_t; /* wctype_t and wctrans_t are defined in wchar.h */ typedef unsigned long int __wctype_t; typedef int * __wctrans_t; diff --git a/common/inc/tlibc/sys/stdint.h b/common/inc/tlibc/sys/stdint.h index b76cc52e..7149079a 100644 --- a/common/inc/tlibc/sys/stdint.h +++ b/common/inc/tlibc/sys/stdint.h @@ -110,17 +110,29 @@ typedef __uintmax_t uintmax_t; #define INT8_MIN (-0x7f - 1) #define INT16_MIN (-0x7fff - 1) #define INT32_MIN (-0x7fffffff - 1) +#ifdef __x86_64__ +#define INT64_MIN (-0x7fffffffffffffffL - 1) +#else #define INT64_MIN (-0x7fffffffffffffffLL - 1) +#endif #define INT8_MAX 0x7f #define INT16_MAX 0x7fff #define INT32_MAX 0x7fffffff +#ifdef __x86_64__ +#define INT64_MAX 0x7fffffffffffffffL +#else #define INT64_MAX 0x7fffffffffffffffLL +#endif #define UINT8_MAX 0xff #define UINT16_MAX 0xffff #define UINT32_MAX 0xffffffffU +#ifdef __x86_64__ +#define UINT64_MAX 0xffffffffffffffffUL +#else #define UINT64_MAX 0xffffffffffffffffULL +#endif /* 7.18.2.2 Limits of minimum-width integer types */ #define INT_LEAST8_MIN INT8_MIN diff --git a/download_prebuilt.sh b/download_prebuilt.sh index 4d3009a2..40535a6b 100755 --- a/download_prebuilt.sh +++ b/download_prebuilt.sh @@ -33,21 +33,21 @@ top_dir=`dirname $0` out_dir=$top_dir -optlib_name=optimized_libs-1.8.100.37641.tar -ae_file_name=prebuilt-ae-1.8.100.37641.tar -server_url_path=https://download.01.org/intel-sgx/linux-1.8/ +optlib_name=optimized_libs-1.9.100.38927.tar +ae_file_name=prebuilt-ae-1.9.100.38927.tar +server_url_path=https://download.01.org/intel-sgx/linux-1.9/ server_optlib_url=$server_url_path/$optlib_name server_ae_url=$server_url_path/$ae_file_name -optlib_md5=d873e20155fceb870c2e14771cc2258a -ae_md5=96b496bbc083397f41de624c0eda66ba +optlib_sha256=239cae39f87934d56c4eb919a4702c6ac82c19957b9a8d56c02b10eb4e27f573 +ae_sha256=c2f86a1e8483b91c5517c99d196599492f3106d4b2f9f7523fd9eaf59b9ed37b rm -rf $out_dir/$optlib_name wget $server_optlib_url -P $out_dir if [ $? -ne 0 ]; then echo "Fail to download file $server_optlib_url" exit -1 fi -md5sum $out_dir/$optlib_name > check_sum.txt -grep $optlib_md5 check_sum.txt +sha256sum $out_dir/$optlib_name > check_sum.txt +grep $optlib_sha256 check_sum.txt if [ $? -ne 0 ]; then echo "File $server_optlib_url checksum failure" exit -1 @@ -58,8 +58,8 @@ if [ $? -ne 0 ]; then echo "Fail to download file $server_ae_url" exit -1 fi -md5sum $out_dir/$ae_file_name > check_sum.txt -grep $ae_md5 check_sum.txt +sha256sum $out_dir/$ae_file_name > check_sum.txt +grep $ae_sha256 check_sum.txt if [ $? -ne 0 ]; then echo "File $server_ae_url checksum failure" exit -1 diff --git a/external/crypto_px/Makefile b/external/crypto_px/Makefile index f57acc01..963b2218 100644 --- a/external/crypto_px/Makefile +++ b/external/crypto_px/Makefile @@ -43,7 +43,7 @@ INC := -I./include \ -I./sources/ippcp/src SRCS := $(wildcard ./sources/ippcp/src/*.c) -OBJS := $(SRCS:.c=.o) +OBJS := $(sort $(SRCS:.c=.o)) libcrypto_px.a: $(OBJS) ar crv $@ $^ diff --git a/external/epid-sdk-3.0.0/LICENSE.txt b/external/epid-sdk-3.0.0/LICENSE.txt index 38f89e4a..2afcf387 100644 --- a/external/epid-sdk-3.0.0/LICENSE.txt +++ b/external/epid-sdk-3.0.0/LICENSE.txt @@ -203,9 +203,9 @@ ======================================================================= -EPID SDK Subcomponents: +Intel(R) Enhanced Privacy ID (Intel(R) EPID) SDK Subcomponents: -The EPID SDK contains subcomponents with separate copyright notices +The Intel(R) EPID SDK contains subcomponents with separate copyright notices and license terms. Your use of the source code for these subcomponents is subject to the terms and conditions of the following licenses. @@ -214,7 +214,7 @@ is subject to the terms and conditions of the following licenses. The BSD 3-Clause License ----------------------------------------------------------------------- -The EPID SDK bundles portions of the following under the BSD 3-Clause +The Intel(R) EPID SDK bundles portions of the following under the BSD 3-Clause License: - Google Test (https://github.com/google/googletest) diff --git a/external/epid-sdk-3.0.0/NOTICE.txt b/external/epid-sdk-3.0.0/NOTICE.txt index fc0c4208..3a89982c 100644 --- a/external/epid-sdk-3.0.0/NOTICE.txt +++ b/external/epid-sdk-3.0.0/NOTICE.txt @@ -1,4 +1,4 @@ -Intel(R) EPID SDK +Intel(R) Enhanced Privacy ID (Intel(R) EPID) SDK Copyright 2016 Intel Corporation ========== @@ -15,8 +15,9 @@ their respective licenses. ---------- The source code used for math primitives in the Intel(R) EPID SDK is a -subset of the Intel(R) IPP Cryptography library (v9.0.3) written in -C. For higher performance, you can use the commercial version of the -IPP Cryptography libraries, which are available at +subset of the Intel(R) Integrated Performance Primitives (Intel(R) IPP) +Cryptography library (v9.0.3) written in C. +For higher performance, you can use the commercial version of the +Intel(R) IPP Cryptography libraries, which are available at https://software.intel.com/articles/download-ipp-cryptography-libraries. diff --git a/external/epid-sdk-3.0.0/doc/html/1_81_2file__parser_8h.html b/external/epid-sdk-3.0.0/doc/html/1_81_2file__parser_8h.html deleted file mode 100644 index 5019855e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/1_81_2file__parser_8h.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/1.1/file_parser.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
file_parser.h File Reference
-
-
- -

Epid 1.1 issuer material parsing utilities. -More...

-
#include <stddef.h>
-#include "epid/common/1.1/types.h"
-#include "epid/common/errors.h"
-#include "epid/common/file_parser.h"
-
- - - - - - - - - - - - - -

-Functions

EpidStatus Epid11ParseGroupPubKeyFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11GroupPubKey *pubkey)
 Extracts group public key from buffer in issuer binary format. More...
 
EpidStatus Epid11ParsePrivRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11PrivRl *rl, size_t *rl_len)
 Extracts private key revocation list from buffer in issuer binary format. More...
 
EpidStatus Epid11ParseSigRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11SigRl *rl, size_t *rl_len)
 Extracts signature revocation list from buffer in issuer binary format. More...
 
EpidStatus Epid11ParseGroupRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11GroupRl *rl, size_t *rl_len)
 Extracts group revocation list from buffer in issuer binary format. More...
 
-

Detailed Description

-

Epid 1.1 issuer material parsing utilities.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/1_81_2types_8h.html b/external/epid-sdk-3.0.0/doc/html/1_81_2types_8h.html deleted file mode 100644 index c5d3fb23..00000000 --- a/external/epid-sdk-3.0.0/doc/html/1_81_2types_8h.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/1.1/types.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
types.h File Reference
-
-
- -

SDK data types for Intel(R) EPID 1.1. -More...

-
#include <limits.h>
-#include "epid/common/types.h"
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  OctStr80
 80 bit octet string More...
 
struct  OctStr600
 600 bit octet string More...
 
struct  OctStr768
 768 bit octet string More...
 
struct  Fq3ElemStr
 Serialized Fq3 element. More...
 
struct  Epid11G2ElemStr
 Serialized Intel(R) EPID 1.1 G2 element. More...
 
struct  Epid11GtElemStr
 Serialized Intel(R) EPID 1.1 GT element. More...
 
struct  Epid11Params
 Intel(R) EPID 1.1 Parameters. More...
 
struct  Epid11GroupPubKey
 Intel(R) EPID 1.1 group public key. More...
 
struct  Epid11BasicSignature
 Intel(R) EPID 1.1 basic signature. More...
 
struct  Epid11NrProof
 Intel(R) EPID 1.1 non-revoked Proof. More...
 
struct  Epid11Signature
 Intel(R) EPID 1.1 Signature. More...
 
struct  Epid11PrivRl
 Intel(R) EPID 1.1 private-key based revocation list. More...
 
struct  Epid11SigRlEntry
 Intel(R) EPID 1.1 entry in SigRL (B,K) More...
 
struct  Epid11SigRl
 Intel(R) EPID 1.1 signature based revocation list. More...
 
struct  Epid11GroupRl
 Intel(R) EPID 1.1 group revocation list. More...
 
- - - - - - - - - - -

-Typedefs

-typedef G1ElemStr Epid11G1ElemStr
 Serialized Intel(R) EPID 1.1 G1 element.
 
-typedef G1ElemStr Epid11G3ElemStr
 Serialized Intel(R) EPID 1.1 G3 element.
 
-typedef OctStr32 Epid11GroupId
 Intel(R) EPID 1.1 group ID.
 
-

Detailed Description

-

SDK data types for Intel(R) EPID 1.1.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/Basenames.html b/external/epid-sdk-3.0.0/doc/html/Basenames.html deleted file mode 100644 index 91d749da..00000000 --- a/external/epid-sdk-3.0.0/doc/html/Basenames.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: In-Depth Explanation of Basenames - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
In-Depth Explanation of Basenames
-
-
-

This in-depth explanation covers the use of basenames in the Intel® EPID scheme. It provides detail on name based signatures, random base signatures and how and when they are used.

-


-

-

-Random Base Signatures

-

By default, members sign using a random basename that is not shared with the verifier. This signing method is also referred to as signing using random base. Signing using random base provides the strongest privacy properties for the signer. If a member signs using random base, the signature generated by the member is anonymous.

-

When the signer and verifier agree to use random base, the basename is chosen at random for each signature. Two signatures using a random base cannot be linked to the same signer.

-

-Name Based Signatures

-

A name based signature is a type of signature that gives the verifier the ability to link Intel® EPID signatures from the same member, reducing the member's privacy. When using name based signatures, the signer and verifier agree on an explicit basename.

-

The verifier can ask the member to sign a message with a basename that the verifier chooses. If the member agrees to use a name based signature, then all the signatures created by the member using the same basename are linkable by the verifier, reducing the member's privacy.

-

Reasons why a verifier might require members to use a basename when signing include the following:

-
    -
  • Profiling for Advertising Widget-Mart wants to show targeted advertising to privacy-conscious customers. Widget-Mart requests that all customers use a specific basename so that Widget-Mart can build an individualized profile for each anonymous user, while Intel® EPID technology ensures that the retailer does not have the ability to aggregate that information with other retailers to build a more extensive profile of the consumer.
  • -
  • Voting A voting machine is designed so that each anonymous authorized voter can only vote once per race. A basename per office being contested allows the verifier to confirm that the voter has not already voted for that office, without revealing their identity or correlating their voting patterns across multiple races.
  • -
-
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/BuildToolsInstallation.html b/external/epid-sdk-3.0.0/doc/html/BuildToolsInstallation.html deleted file mode 100644 index aa4a4772..00000000 --- a/external/epid-sdk-3.0.0/doc/html/BuildToolsInstallation.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Guide to Installing Build Tools - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Guide to Installing Build Tools
-
-
- -

Building SDK code out of the box requires a number of tools. This section explains how to install the following tools:

- - - - - - - - - -
Prerequisite Download Link
Python python 2.7.12 installers
SCons scons-2.4.1.zip
Parts parts-0.11.0.zip
-


-

-

-Installing Python

-
    -
  1. Download and install Python according to the installation procedure for your platform.
  2. -
  3. Make sure that the Python directory and the Python scripts directory are in the path.
  4. -
-

To verify that Python installed correctly, run:

    > python --version
-


-

-

-Installing SCons

-

After Python is installed, install SCons.

-
    -
  1. Download and extract the files from the SCons archive.
  2. -
  3. To install SCons, go to the directory with the extracted files and run:
     > python setup.py install
    -
  4. -
-
Note
You may need administrative privileges to execute this command.
-


- To verify that SCons installed correctly, run:

    > scons --version
-


-

-

-Installing Parts

-

After SCons is installed, install Parts.

-
    -
  1. Download and extract the files from the Parts archive.
  2. -
  3. To install Parts, go to the directory with the extracted files and run:
     > python setup.py install
    -
  4. -
-
Note
You may need administrative privileges to execute this command.
-


-

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/BuildingSdk.html b/external/epid-sdk-3.0.0/doc/html/BuildingSdk.html deleted file mode 100644 index fcb2c1ec..00000000 --- a/external/epid-sdk-3.0.0/doc/html/BuildingSdk.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Building from Source - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Building from Source
-
-
- -

To use the SDK in a project, the code from the SDK must be included in that project. The easiest way to do this is to link to static libraries. The SDK comes with build scripts to build static libraries for common environments.

-

-Prerequisites

-

Building SDK code out of the box requires a number of tools. This section lists the tools used to build the SDK.

-

For more information on how to install these tools, refer to Guide to Installing Build Tools.

- - - - - - - - - - - -
Prerequisite Notes
A C/C++ compiler Core code in C. Unit tests need C++11 support.
Python Validated with v2.7.10
SCons Validated with v2.4.1
Parts 0.10.9.2 or later
-

-Building SDK with SCons

-

To use the SDK, you need to build it to generate libraries compatible with your build environment.

-

To build based on the default SConstruct file in the root directory of the SDK, invoke scons with no arguments.

cd <path/to/sdk-root>
-scons
-

By default, this performs a 64 bit release build.

-

Potentially useful command line options:

- - - - - - - - - - - - - - - - - - - - - - - - - -
Option Action
--cfg=debug Build in debug mode
--cfg=release Build in release mode
--target=x86 Target x86
--target=x86_64 Target x86_64
--tc=cl Use MSVC to compile (Microsoft®* C/C++ Optimizing Compiler)
--tc=gcc Use GCC to compile (GNU* Compiler Collection)
--tc=icl,mstools Use Intel® C++ compiler
build:: Build the SDK (does not build unit tests)
utest:: Build unit tests
run_utest:: Run unit tests (builds tests if needed)
-c Clean the build
-

Built components appear in the _install directory of the SDK root.

-

-Alternate Makefile/Autoconf Based Build Approach

-

You can build with the make command on platforms that support Make/Autoconf.

-

In the root directory of the SDK, run:

./configure
-make all
-make check
-make install
-

./configure sets up the default settings:

-
    -
  • The default compilers are GCC/G++. You can specify compilers via the CC and CXX variables. For example, ./configure CC=/opt/intel/bin/icc CXX=/opt/intel/bin/icpc
  • -
  • The default installation directory is ./_install. You can specify the installation directory by using ./configure --prefix=/usr/local/epid_install
  • -
  • To change OS bit version, use CFLAGS parameter -m32 and -m64. For example, ./configure CFLAGS=-m32
  • -
-

make check is optional. It builds and runs the unit tests.

-

Alternatively, you can use make build as a shortcut to replace make all, make check, and make install.

-

To clean the build, run make clean.

-

To remove the install directory, run make uninstall.

-

-Improving Performance with Commercial IPP

-

For higher performance, you can use the commercial version of Cryptography for Intel® Integrated Performance Primitives, available at https://software.intel.com/articles/download-ipp-cryptography-libraries.

-
Note
The SDK has been validated with v9.0.3 of the cryptography library.
-

To build the SDK using a commercial Intel® IPP installation, the IPPROOT environment variable must be properly configured to point to the IPP installation directory, as described in Setting Environment Variables* in the Intel® IPP User's Guide (PDF link).

-

Once the environment is configured, you can build using commercial IPP by specifying --use-commercial-ipp as a command line option.

-

-Example Programs

-

The SDK includes several examples that show you different aspects of how the Intel® EPID scheme works. In the SDK build, these examples are located in _install/epid-sdk/example.

- - - - - - - -
Name Description
signmsg Create Intel® EPID signature of message
verifysig Verify signature is from a group member in good standing
-

-Building with Other Build Systems

-

It is relatively straightforward to port the SDK to your build system of choice. The following dependency diagram shows the relationship between components and the sources used to build them.

-
-basicdoc.png -
-


-

-

Other names and brands may be claimed as the property of others.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/ChangeLog.html b/external/epid-sdk-3.0.0/doc/html/ChangeLog.html deleted file mode 100644 index 0e48d4f7..00000000 --- a/external/epid-sdk-3.0.0/doc/html/ChangeLog.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: What's New - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
What's New
-
-
-

[3.0.0]

-

New in This Release

-
    -
  • Support for verification of EPID 1.1 members.
  • -
  • Make-based build system support.
  • -
  • Sample material includes compressed keys.
  • -
  • Enhanced documentation, including step-by-step walkthroughs of example applications.
  • -
  • Validated on additional IoT platforms.
      -
    • Ostro Linux
    • -
    • Snappy Ubuntu Core
    • -
    -
  • -
-

Changes

-
    -
  • A new verifier API has been added to set the basename to be used for verification. Verifier APIs that used to accept basenames now use the basename set via EpidVerifierSetBasename.
  • -
  • The verifier pre-computation structure has been changed to include the group ID to allow detection of errors that result from providing a pre-computation blob from a different group to EpidVerifierCreate.
  • -
-

Fixes

-
    -
  • The kEpidxxxRevoked enums have been renamed to be consistent with other result return values.
  • -
-

Known Issues

-
    -
  • SHA-512/256 hash algorithm is not supported.
  • -
-

[2.0.0] - 2016-07-20

-

New in This Release

-
    -
  • Signed binary issuer material support.
      -
    • Binary issuer material validation APIs.
    • -
    • Updated sample issuer material.
    • -
    • Updated samples that parse signed binary issuer material.
    • -
    -
  • -
  • Compressed member private key support.
  • -
  • Validated on additional IoT platforms.
      -
    • Windows 10 IoT Core
    • -
    • WindRiver IDP
    • -
    -
  • -
-

Changes

-
    -
  • The default hash algorithm has changed. It is now SHA-512.
  • -
  • Functions that returned EpidNullPtrErr now return EpidBadArgErr instead.
  • -
-

Fixes

-
    -
  • Updated build flags to work around GCC 4.8.5 defect.
  • -
-

[1.0.0] - 2016-03-03

-

New in This Release

-
    -
  • Basic sign and verify functionality
  • -
  • Dynamic join support for member
  • -
  • Apache 2.0 License
  • -
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/ChoosingiKGF.html b/external/epid-sdk-3.0.0/doc/html/ChoosingiKGF.html deleted file mode 100644 index 42c9de9a..00000000 --- a/external/epid-sdk-3.0.0/doc/html/ChoosingiKGF.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: If You Choose iKGF as Your Issuer - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
If You Choose iKGF as Your Issuer
-
-
- -

To use the Intel® EPID APIs, you need to use the following items that are created by the issuer:

-
    -
  • Group public key, which corresponds to the issuing private key kept by the issuer
  • -
  • Member private keys
  • -
  • Signature based revocation list (SigRL)
  • -
  • Private key based revocation list (PrivRL)
  • -
  • Group based revocation list (GroupRL)
  • -
-

If you want to use the Intel Key Generation Facility (iKGF) as the issuer, contact info@.nosp@m.digi.nosp@m.tal-c.nosp@m.p.co.nosp@m.m to get started.

-

If you choose to use iKGF as the issuer, you can take advantage of tools included in the SDK that are designed to make it easier for you to interact with iKGF by creating requests to update revocation lists and by extracting member private keys and group public keys from iKGF files.

-

-Tools for Creating Revocation Requests

-

The Intel® EPID SDK includes tools to help you request additions to revocation lists managed by iKGF if you are using iKGF as the issuer.

-

These tools are designed to create a revocation request in the format required by iKGF. In order to update a revocation list, the requests generated by these tools must be submitted to the issuer.

-

To access the tools, go to _install/epid-sdk/tools in the SDK directory.

-

You need to build the SDK before you can use these tools. For more information, refer to Building from Source.

-

The following tools are available:

- - - - - - - - - -
Tool Purpose
revokegrp Create group revocation request
revokekey Create member private key revocation request
revokesig Create signature revocation request
-

-Requesting Group Revocation

-

The revokegrp tool adds a group to the revocation request file.

Usage: revokegrp [OPTION]...
-Revoke Intel(R) EPID group
-
-Options:
-  --gpubkey=FILE
-      load group public key from FILE (default: pubkey.bin)
-
-  --capubkey=FILE
-      load IoT Issuing CA public key from FILE
-
-  --reason=NUM
-      revocation reason (default: 0)
-
-  --req=FILE
-      append group revocation request to FILE (default: grprlreq.dat)
-
-  -h, --help
-      display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-

-Requesting Private Key Revocation

-

The revokekey tool adds a member private key to the revocation request file.

Usage: revokekey [OPTION]
-Revoke Intel(R) EPID private key
-
-Options:
-    --mprivkey=FILE
-        load private key to revoke from FILE (default: mprivkey.dat)
-
-    --req=FILE
-        append private key revocation request to FILE (default: privreq.dat)
-
-    -h, --help
-        display this help and exit
-
-    -v,--verbose
-        print status messages to stdout
-
-The following options are only needed for compressed keys:
-
-    --gpubkey=FILE
-        load group public key from FILE (default: pubkey.bin)
-
-    --capubkey=FILE
-        load IoT Issuing CA public key from FILE
-

-Requesting Signature Revocation

-

The revokesig tool creates a request to add a signature to the revocation request file.

-

revokesig only accepts valid signatures for addition to the revocation request.

Usage: revokesig [OPTION]...
-Revoke Intel(R) EPID signature
-
-Options:
-  --sig=FILE
-      load signature to revoke from FILE (default: sig.dat)
-
-  --msg=MESSAGE
-      MESSAGE used to generate signature to revoke
-
-  --msgfile=FILE
-      FILE containing message used to generate signature to revoke
-
-  --gpubkey=FILE
-      load group public key from FILE (default: pubkey.bin)
-
-  --capubkey=FILE
-      load IoT Issuing CA public key from FILE
-
-  --req=FILE
-      append signature revocation request to FILE (default: sigrlreq.dat)
-
-  -h, --help
-      display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-

-Tools for Extracting Keys from iKGF Files

-

The Intel® EPID SDK includes tools to help you extract individual keys from files provided by the Intel Key Generation Facility (iKGF) if you are using iKGF as the issuer.

-

To access the tools, go to _install/epid-sdk/tools in the SDK directory.

-

You need to build the SDK before you can use these tools. For more information, refer to Building from Source.

-

The following tools are available:

- - - - - - - -
Tool Purpose
extractgrps Extracts group public keys
extractkeys Extracts member private keys
-

-Extracting Group Public Keys

-

The extractgrps tool extracts group public keys from the input file to the current directory.

Usage: extractgrps [OPTION]... [FILE] [NUM]
-Extract the first NUM group certs from FILE to current directory
-
-Options:
-  -h, --help
-      display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-

-Extracting Member Private Keys

-

The extractkeys tool extracts member private keys from the input file to the current directory.

Usage: extractkeys [OPTION]... [FILE] [NUM]
-Extract the first NUM private keys from FILE to current directory.
-
-Options:
-  -c, --compressed
-      extract compressed keys
-
-  -h, --help
-      display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/EpidOverview.html b/external/epid-sdk-3.0.0/doc/html/EpidOverview.html deleted file mode 100644 index f7209054..00000000 --- a/external/epid-sdk-3.0.0/doc/html/EpidOverview.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Introduction to the Intel® EPID Scheme - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Introduction to the Intel® EPID Scheme
-
-
- -

Intel® EPID is a cryptographic protocol which enables the remote authentication of a trusted platform whilst preserving the user's privacy.

-

-Roles

-

In the Intel® EPID scheme, there are three roles: issuers, members, and verifiers.

-

The entities in these roles interact with each other in such a way that a member can prove to a verifier that it is a trusted member of a group without disclosing the identity of the member. Groups are created and managed by the issuer.

-
-epid_diagram_high_level_use_case.png -
-

-Issuers

-

The issuer is responsible for managing group membership. Issuer functionality is not included in the SDK.

-

The issuer manages groups by doing the following:

-
    -
  • Creates groups by generating one issuing private key and one group certificate for each group. The group certificate contains the group public key.
  • -
  • Creates group members by generating unique Intel® EPID member private keys through bulk provisioning. Member private keys are created from the issuing private key for the group.
  • -
  • Manages requests from prospective members to join existing groups by using the join protocol.
  • -
  • Creates and maintains signature based revocation lists and private key based revocation lists. These lists of members no longer in good standing allow members to be dropped from a group.
  • -
  • Creates and maintains group revocation lists.
  • -
  • Makes group public keys and revocation lists available to verifiers.
  • -
-
-epid_diagram_issuer_high_level.png -
-

-Members

-

The member is the entity that attempts to anonymously prove its group membership to the verifier.

-
    -
  • Members are authorized by the issuer as part of a group.
  • -
  • Each group member has a unique Intel® EPID private key, which corresponds to the group.
  • -
  • The member uses its member private key to sign a message to prove group membership to the verifier without revealing the identity of the member.
  • -
-
-epid_diagram_member_high_level.png -
-

-Verifiers

-

The verifier checks an Intel(R) EPID signature to establish whether it was signed by an entity or device that is a member in good standing.

-

The verifier acts on behalf of a party that needs to know it is communicating with a trusted device. Verifiers obtain group certificates and revocation lists from issuers and negotiate details of signature protocol with members.

-

A verifier can do the following:

-
    -
  • Confirm a member is in fact a member of a given group in good standing.
  • -
  • Obtain group certificates and revocation lists from issuers.
  • -
  • Negotiate details of signature protocol with members.
  • -
  • Manage a private list of revoked members, also called the verifier blacklist.
  • -
-
-epid_diagram_verifier_high_level.png -
-

-Groups

-

An Intel® EPID group represents a set of trusted entities called members. Issuers create groups and manage group membership. For each group, the issuer creates a group public key simultaneously with the corresponding issuing private key. The issuer uses the issuing private key to create unique member private keys for each group member, and makes the group public key available to verifiers.

-

All groups have the following:

-
    -
  • Group public key, which corresponds to the issuing private key kept by the issuer
  • -
  • Signature based revocation list
  • -
  • Private key based revocation list
  • -
  • Member private keys, generated from the issuing private key
  • -
-

If a signature based revocation list or private key based revocation list does not exist, it is assumed to be empty.

-

-Keys

-

The Intel® EPID scheme works with three types of keys: the group public key, the issuing private key, and the member private key. A group public key corresponds to the unique member private keys that are part of the group. Member private keys are generated from the issuing private key.

-

Additionally, in the Intel® EPID scheme, a private key can be revoked given a signature created by that key, even if the key itself is still unknown. Group membership can be revoked and entire groups can be revoked. For more information on revocation, refer to In-Depth Explanation of Revocation.

-

-Group Public Key

-

The group public key is the key used by the verifier to confirm that a member belongs to a group in good standing. Each member private key in a group is associated with the group's public key.

-

When a group is created, the group public key and the issuing private key are simultaneously generated by the issuer. The verifier obtains the group public key from the issuer.

-

-Issuing Private Key

-

The issuing private key is the key used by the issuer to generate unique private keys for each member of a given group. For every group public key, there is a corresponding issuing private key. The issuing private key remains with the issuer and is kept private.

-

-Member Private Key

-

The member private key is the key used by the member to digitally sign a message when attempting to prove to the verifier that the member belongs to the group and is in good standing.

-

Unique member private keys are generated by the issuer for each member of a given group. The same group public key corresponds to each member private key in the group.

-

-Member and Verifier Interaction

-

Each Intel® EPID member uses its Intel® EPID private key to digitally sign a message. The resulting signature is called an Intel® EPID signature.

-

The Intel® EPID verifier uses the group public key to verify the correctness of an Intel® EPID signature, i.e., to verify that the signature was indeed created by a member with a valid Intel® EPID private key.

-

However, the Intel® EPID signature does not convey any information about which unique private key was used to create the signature.

-
-epid_diagram_high_level_interaction.png -
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/Examples.html b/external/epid-sdk-3.0.0/doc/html/Examples.html deleted file mode 100644 index a69755f9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/Examples.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Walkthroughs of Examples Showing API Usage - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Walkthroughs of Examples Showing API Usage
-
-
-

Several example applications are included that demonstrate how to use the SDK APIs.

- - - - - - - -
Example Application Concept Demonstrated
signmsg Generating an Intel® EPID Signature
verifysig Verifying an Intel® EPID Signature
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/Examples.js b/external/epid-sdk-3.0.0/doc/html/Examples.js deleted file mode 100644 index 35ebbda6..00000000 --- a/external/epid-sdk-3.0.0/doc/html/Examples.js +++ /dev/null @@ -1,5 +0,0 @@ -var Examples = -[ - [ "Generating an Intel® EPID Signature", "SignmsgWalkthru.html", null ], - [ "Verifying an Intel® EPID Signature", "VerifysigWalkthru.html", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/Glossary.html b/external/epid-sdk-3.0.0/doc/html/Glossary.html deleted file mode 100644 index f4c563ba..00000000 --- a/external/epid-sdk-3.0.0/doc/html/Glossary.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Glossary - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Glossary
-
-
- -

-CA public key

-

The CA (Certificate Authority) public key contains the ECDSA public key of the issuing CA. The verifier uses this key to authenticate that information provided by the issuer is genuine.

-

-DAA

-

Direct Anonymous Attestation (DAA) is a digital signature algorithm that supports anonymity by providing a group public verification key associated with many unique private signing keys. Intel® EPID enhances DAA by enabling a private key to be revoked given a signature created by that key, even if the key itself is still unknown.

-

-Elliptic curve

-

In elliptic curve cryptography, an elliptic curve is an algebraic structure used to create a function whose output is easy to compute, but whose input is difficult to compute given the output. Elliptic curve cryptography requires smaller keys compared to non-elliptic curve cryptography (based on Galois fields) to provide equivalent security.

-

-Elliptic curve point

-

An elliptic curve point is a point along an elliptic curve. The security of elliptic curve cryptography depends on the ability to compute a point multiplication and the inability to compute the multiplicand given the original and product points.

-

-Group

-

An Intel® EPID group represents a set of trusted entities called members.

-

Issuers create groups and manage group membership. For each group, the issuer creates a group public key simultaneously with the corresponding issuing private key. The issuer uses the issuing private key to create unique member private keys for each group member, and makes the group public key available to verifiers.

-

All groups have the following:

-
    -
  • Group public key, which corresponds to the issuing private key kept by the issuer
  • -
  • Signature based revocation list
  • -
  • Private key based revocation list
  • -
  • Member private keys, generated from the issuing private key
  • -
-

If a signature based revocation list or private key based revocation list does not exist, it is assumed to be empty.

-

-Group certificate

-

The group certificate contains the group public key. The group certificate is created by the issuer and obtained by the verifier. When the issuer creates groups, it generates one issuing private key and one group certificate for each group.

-

-Group public key

-

The group public key is the key used by the verifier to confirm that a member belongs to a group in good standing. Each member private key in a group is associated with the group's public key.

-

When a group is created, the group public key and the issuing private key are simultaneously generated by the issuer. The verifier obtains the group public key from the issuer.

-

-Intel® EPID

-

Enhanced Privacy ID (Intel® EPID) is a cryptographic protocol for attestation of a trusted platform while preserving the user's privacy. Intel® EPID can be used as a foundational building block for a multitude of security solutions.

-

-Intel® EPID signature

-

An Intel® EPID signature is a type of digital signature that preserves anonymity of the signer, while still proving the signer is a member of a trusted group.

-

-Issuer

-

The issuer is the entity in the Intel® EPID scheme that is responsible for managing group membership. Issuer APIs are not included in the SDK. An example of an issuer is the Intel Key Generation Facility. For sample issuer material, refer to Sample Issuer Material. For tools that can help you if you choose to use iKGF as your issuer, refer to If You Choose iKGF as Your Issuer.

-

The issuer manages groups by doing the following:

-
    -
  • Creates groups by generating one issuing private key and one group certificate for each group. The group certificate contains the group public key.
  • -
  • Creates group members by generating unique Intel® EPID member private keys through bulk provisioning. Member private keys are created from the issuing private key for the group.
  • -
  • Manages requests from prospective members to join existing groups by using the join protocol.
  • -
  • Creates and maintains signature based revocation lists and private key based revocation lists. These lists of members no longer in good standing allow members to be dropped from a group.
  • -
  • Creates and maintains group revocation lists.
  • -
  • Makes group public keys and revocation lists available to verifiers.
  • -
-

-Issuing private key

-

The issuing private key is the key used by the issuer to generate unique private keys for each member of a given group. For every group public key, there is a corresponding issuing private key. The issuing private key remains with the issuer and is kept private.

-

-Member

-

The member is the entity that attempts to prove its group membership to the verifier. Members are authorized by the issuer as part of a group and each group member has a unique Intel® EPID private key. The member uses its member private key to sign a message to prove group membership without revealing its identity. An example of a member is a PC with an embedded Intel® EPID member private key.

-

-Name-based signature

-

A name-based signature is a type of signature that gives the verifier the ability to link Intel® EPID signatures from the same member, reducing the member's privacy.

-

A name-based signature is created using the additional parameter of a basename. If a basename is not specified, a random number is chosen as the basename. If the member uses the same basename, the verifier can mathematically link signatures generated by the member, showing that the signatures are from the same member.

-

-Member private key

-

The member private key is the key used by the member to digitally sign a message when attempting to prove to the verifier that the member belongs to the group and is in good standing.

-

Unique member private keys are generated by the issuer for each member of a given group. The same group public key corresponds to each member private key in the group.

-

-Non-revoked proof

-

A non-revoked proof is part of an Intel® EPID signature that proves that the member is not a specific revoked entity in the signature based revocation list. The member provides the signature with a number of non-revoked proofs, one per revocation list entry, to prove to the verifier that the member does not correspond to any entry in the revocation list.

-

-Pairing

-

Pairing is a mathematical operation that maps two elliptic curve groups to a third multiplicative group.

-

-Revocation, revocation lists

-

Revocation lists are data structures used by the verifier to identify members that are no longer approved members of the group.

-

The verifier obtains the member private key based revocation list (PrivRL), signature based revocation list (SigRL), and group based revocation list (GroupRL) from the issuer. The verifier can also maintain its own verifier blacklist (VerifierRL). Verifier blacklist revocation only works with name based signatures.

-

-Verifier

-

The verifier is the entity that checks an Intel® EPID signature to establish whether it was signed by an entity or device that is a member in good standing.

-

The verifier acts on behalf of a party that needs to know it is communicating with a trusted device. Verifiers obtain group certificates and revocation lists from issuers and negotiate details of signature protocol with members.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/ImplementationNotes.html b/external/epid-sdk-3.0.0/doc/html/ImplementationNotes.html deleted file mode 100644 index 6aa26d78..00000000 --- a/external/epid-sdk-3.0.0/doc/html/ImplementationNotes.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Implementation Notes - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Implementation Notes
-
-
- -

-Random Number Generation

-

Some SDK APIs require a random number data source. A BitSupplier provides a source of random data. This function should be a cryptographically secure random number generator.

-
Warning
The pseudo-random number generator provided with the examples is for sample use only and is not suitable for cryptographically secure applications.
-

-Protecting Secrets

-

Member code works with private keys, so member code must be run in a trusted environment.

-
Warning
If member memory is available to an untrusted source, the member private key could be exposed.
-

The EpidZeroMemory function is used by the memory allocation routines EpidAlloc, EpidRealloc and EpidFree to wipe the memory as memory is freed.

-
Warning
The EpidZeroMemory function may be optimized away by some compilers. If it is, you should consider using a compiler or operating system specific memory sanitization function (e.g. memcpy_s or SecureZeroMemory).
-

-Replacing Math Primitives

-

SDK math primitives are designed to be replaced with your own implementation if you need to rely on custom hardware for performance. The SDK is designed to simplify this process by isolating implementation details behind a clearly defined interface, defined by the non-internal headers in the epid/common/math directory. Math functionality has detailed tests to ease validation.

-

-Octstring/Buffer Types

-

Serialized information in the SDK is passed in fixed size buffer types whenever possible. Collectively these fixed size buffer types are called Octstrings.

-

In epid/common/types.h, there are a large number of packed structs that contain other packed structs, which eventually contain OctStr* types. Normally these are named *Str and are refered to as Str types.

-

OctStr* types are buffers that hold N bits, where N is the number at the end of the type name. These types usually represent numbers in a Big Endian format (buffer[0] is the most significant value).

-

Str types generally represent fixed size groups of numbers such as a point or vector.

-

OctStr* and Str types are usually populated by reading a buffer from a file or other storage, or by calling a serialize function. OctStr* and Str types must be packed so that the compiler does not insert padding. In the current code, this is done using pragmas.

-
#pragma pack(1)
// OctStr* type holding 256 bits
typedef struct OctStr256 {
unsigned char data[256 / CHAR_BIT];
// Str type consisting of a single 256 bit number
typedef struct FqElemStr {
// Str type consisting of a two other Str types
typedef struct G1ElemStr {

Many APIs use void* parameters where OctStr* types are expected. If more than one size is allowed, a size parameter is usually also required.

-

-Flexible Arrays

-

A common idiom in the SDK is the use of flexible array types. These types are structs with the last element being an array of size 1 of some type. Flexible array types always have a size value embedded in the struct. The name of the count and array fields differs between flexible array types.

-
typedef struct Sample {
OctStr32 data;
OctStr32 count;
G1ElemStr array[1];
} Sample;

Flexible array types are expected to be in a buffer of size sizeof(FA) + ((N-1) * sizeof(E)) where FA is the flexible array type, N is the number of elements in the array and E is the type of each element. Note that this may be smaller than sizeof(FA) if N is 0, in which case referencing any element is an error.

-
Sample* AllocSample(size_t count) {
return (Sample*)malloc(sizeof(Sample)
+ (count * sizeof(G1ElemStr))
- sizeof(G1ElemStr));
}

In many cases, functions that accept flexible array types will also expect a buffer size that is compared against the computed size of the array as a sanity check.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/IssuerMaterial.html b/external/epid-sdk-3.0.0/doc/html/IssuerMaterial.html deleted file mode 100644 index 8a9012a0..00000000 --- a/external/epid-sdk-3.0.0/doc/html/IssuerMaterial.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Sample Issuer Material - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Sample Issuer Material
-
-
- -

The Intel® EPID SDK does not include issuer APIs. That means you cannot generate the following items for validation:

-
    -
  • Group public key, which corresponds to the issuing private key kept by the issuer
  • -
  • Member private keys
  • -
  • Signature based revocation list (SigRL)
  • -
  • Private key based revocation list (PrivRL)
  • -
  • Group based revocation list (GroupRL)
  • -
-

For validation purposes, you can use pre-generated sample data. This sample issuer material includes sample groups and revocation lists.

-

Sample compressed key material is not included in the package.

-

-Sample Groups

-

-Sample Group A

-

Group A (groupa) contains eight group members and sample revocation lists:

-


-

-

Members in Group A

- - - - - - - - - - - - - - - - - - - -
Group Member Revocation Status
groupa/member0 Non-revoked
groupa/member1 Non-revoked
groupa/privrevokedmember0 Revoked in PrivRL
groupa/privrevokedmember1 Revoked in PrivRL
groupa/privrevokedmember2 Revoked in PrivRL
groupa/sigrevokedmember0 Revoked in SigRL
groupa/sigrevokedmember1 Revoked in SigRL
groupa/sigrevokedmember2 Revoked in SigRL
-


-

-

Revocation Lists for Group A

- - - - - - - - - - - -
Description Directory Location Revoked Members
Private key based revocation list groupa/privrl.bin privrevokedmember0,
- privrevokedmember1,
- privrevokedmember2
Signature based revocation list groupa/sigrl.bin sigrevokedmember0,
- sigrevokedmember1,
- sigrevokedmember2
Empty private key based revocation list groupa/privrl_empty.bin None
Empty signature based revocation list groupa/sigrl_empty.bin None
-


-

-

-Sample Group B

-

Group B (groupb) contains four group members and sample revocation lists:

-


-

-

Members in Group B

- - - - - - - - - - - -
Group Member Revocation Status
groupb/member0 Non-revoked
groupb/member1 Non-revoked
groupb/privrevokedmember0 Revoked in PrivRL
groupb/sigrevokedmember0 Revoked in SigRL
-


-

-

Revocation Lists for Group B

- - - - - - - - - - - -
Description Directory Location Revoked Members
Private key based revocation list groupb/privrl.bin privrevokedmember0
Signature based revocation list groupb/sigrl.bin sigrevokedmember0
Empty private key based revocation list groupb/privrl_empty.bin None
Empty signature based revocation list groupb/sigrl_empty.bin None
-

-Group Based Revocation Lists

-

If an entire group is no longer valid, the issuer can revoke it using the group based revocation list. Two sample group based revocation lists are provided with the SDK.

-


-

-

Sample GrpRLs

- - - - - - - -
Group Based Revocation List Description
grprl_empty.bin No entries
grprl.bin One entry in which groupb is revoked
-

-Compressed Member Private Key

-

Sample Groups

-

Intel® EPID SDK supports use of compressed member private keys. The groups described here use compressed compressed member private keys but structuarlly corospond to groups described above.

-

-Compressed Sample Group A

-

Group A (groupa) contains eight group members and sample revocation lists:

-


-

-

Members in Group A

- - - - - - - - - - - - - - - - - - - -
Group Member Revocation Status
groupa/member0 Non-revoked
groupa/member1 Non-revoked
groupa/privrevokedmember0 Revoked in PrivRL
groupa/privrevokedmember1 Revoked in PrivRL
groupa/privrevokedmember2 Revoked in PrivRL
groupa/sigrevokedmember0 Revoked in SigRL
groupa/sigrevokedmember1 Revoked in SigRL
groupa/sigrevokedmember2 Revoked in SigRL
-


-

-

Revocation Lists for Group A

- - - - - - - - - - - -
Description Directory Location Revoked Members
Private key based revocation list groupa/privrl.bin privrevokedmember0,
- privrevokedmember1,
- privrevokedmember2
Signature based revocation list groupa/sigrl.bin sigrevokedmember0,
- sigrevokedmember1,
- sigrevokedmember2
Empty private key based revocation list groupa/privrl_empty.bin None
Empty signature based revocation list groupa/sigrl_empty.bin None
-


-

-

-Compressed Sample Group B

-

Group B (groupb) contains four group members and sample revocation lists:

-


-

-

Members in Group B

- - - - - - - - - - - -
Group Member Revocation Status
groupb/member0 Non-revoked
groupb/member1 Non-revoked
groupb/privrevokedmember0 Revoked in PrivRL
groupb/sigrevokedmember0 Revoked in SigRL
-


-

-

Revocation Lists for Group B

- - - - - - - - - - - -
Description Directory Location Revoked Members
Private key based revocation list groupb/privrl.bin privrevokedmember0
Signature based revocation list groupb/sigrl.bin sigrevokedmember0
Empty private key based revocation list groupb/privrl_empty.bin None
Empty signature based revocation list groupb/sigrl_empty.bin None
-

-Compressed Group Based Revocation Lists

-

If an entire group is no longer valid, the issuer can revoke it using the group based revocation list. Two sample group based revocation lists are provided with the SDK.

-


-

-

Sample GrpRLs

- - - - - - - -
Group Based Revocation List Description
grprl_empty.bin No entries
grprl.bin One entry in which groupb is revoked
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/LegalInformation.html b/external/epid-sdk-3.0.0/doc/html/LegalInformation.html deleted file mode 100644 index e86d60f5..00000000 --- a/external/epid-sdk-3.0.0/doc/html/LegalInformation.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Legal Information - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Legal Information
-
-
-

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL® PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.

-

UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

-

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

-

The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

-

Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.

-

Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's web site http://www.intel.com.

-

Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and other countries.

-

*Other names and brands may be claimed as the property of others.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/Revocation.html b/external/epid-sdk-3.0.0/doc/html/Revocation.html deleted file mode 100644 index 7191f2d8..00000000 --- a/external/epid-sdk-3.0.0/doc/html/Revocation.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: In-Depth Explanation of Revocation - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
In-Depth Explanation of Revocation
-
-
-

This in-depth explanation covers the available options to revoke members in the Intel® EPID scheme. It also provides details on how and why each type of revocation is used.

-


-

-

-Revocation Hierarchy

-

The verifier only checks the revocation lists if the message was signed with a member private key that corresponds with the correct group public key.

-

After concluding that the signer is a member of a group, the verifier proceeds to check for group based revocation, then member private key based revocation, then signature based revocation, then verifier blacklist revocation.

-

If the group is revoked, the verifier stops and reports it.

-

If the member private key is revoked, the verifier does not check the signature based revocation list.

-

-Revocation List Versions

-

The verifier should periodically download the revocation lists (GroupRL, PrivRL, and SigRL) from the issuer and should use the latest revocation list during signature verification. The verifier should make sure that it gets the newest version of the revocation list during the update by checking RLver, the revocation list version number.

-

-Group Based Revocation

-

The group based revocation list, also called the GroupRL, has a list of revoked groups.

-

The issuer revokes the entire Intel® EPID group by revoking the group public key. This results in the revocation of all members of a group.

-

-Reasons the Issuer Might Revoke a Group

-

Group revocation is expected to be a rare event and would only happen under limited criteria.

-

Reasons to revoke a group might include:

-
    -
  • A manufacturing defect causes the devices in the group to malfunction.
  • -
  • A subscriber terminates or violates the service agreement.
  • -
  • The Intel® EPID issuing private key is exposed.
  • -
  • A critical vulnerability in a member implementation is identified.
  • -
  • Performance problems arise due to the expensive calculation of non-revoked proofs in signature based revocation, and a replacement group needs to be provisioned.
  • -
-

-Private Key Based Revocation

-

Private key based revocation is used to revoke a compromised member. For example, the issuer can revoke a member if the member private key is exposed. When a compromised member private key is identified, it needs to be communicated to the issuer so that the issuer can revoke the member private key.

-

The issuer manages and publishes the member private key revocation list, also called the PrivRL, which contains member private keys that can no longer be used.

-

-Reasons the Issuer Might Revoke a Member Private Key

-

Depending on the use case, these member private keys could belong to members whose identity was compromised. For example, if a member private key is exposed online, allowing group members to be impersonated, then the compromised member private key is known, and the issuer revokes the member private key.

-

-Signature Based Revocation

-

In signature based revocation, the issuer revokes a member based on the signature generated by the member. This revocation method is used when a member becomes subject to revocation criteria, but the issuer does not know the member's member private key.

-

The issuer manages and publishes the signature based revocation list, also called SigRL.

-

Entries in the SigRL cause signing to take longer for all members of the group. Therefore, when an issuer receives a signature revocation request, it first checks the signature against all entries in the private key based revocation list. If the signature was generated by a revoked private key, then it is not placed in the SigRL.

-

For the same reason, if the issuer were requested to revoke a private key, and the current SigRL had entries that corresponded to that private key, then the issuer would remove those entries from the SigRL.

-

-Signing with Non-Revoked Proofs

-

The verifier and the member both use the SigRL managed by the issuer (the method of obtaining the SigRL is outside the scope of the SDK). The member sends the verifier an Intel® EPID signature that includes a number of non-revoked proofs that correspond to each revoked member in the SigRL.

-

In other words, the member mathematically proves that it is not any of the members who created the entries on the SigRL. One proof of non-revocation is generated by the member per entry in the SigRL. A single proof indicates the member in question cannot be the one who generated that signature in the SigRL.

-

For privacy, Intel® EPID signatures that are generated by the same member are unlinkable by default. This means that the verifier cannot recognize if two Intel® EPID signatures are from the same device. Therefore, multiple Intel® EPID signatures on the SigRL could be from the same member.

-

-Reasons the Issuer Might Revoke an Intel® EPID Signature

-

Reasons for revoking a signature might include the following:

-
    -
  • A member's signature is connected to an aspect of its behavior that indicates that the member is compromised.
  • -
  • A member repeatedly generates a constant signature for the same message. Per the Intel® EPID algorithm, multiple signatures generated for the same challenge must be different.
  • -
-

-Verifier Blacklist Revocation

-

Verifier blacklist revocation is similar to signature based revocation in that it can be used to revoke a member using only a signature from a compromised member. Unlike the procedure for the signature based revocation list, members do not have to create non-revoked proofs for each entry on the verifier blacklist. Instead, the verifier relies on the member to use a basename when creating the signature (in other words, to use a name based signature) in order to determine if the same member created any of the signatures on the verifier blacklist.

-

For the verifier to determine that a member created an entry on the verifier blacklist, the member and verifier must use the same basename. The mechanism that allows them to agree on a basename is outside the scope of the SDK.

-

For more information on basenames, refer to Name Based Signatures.

-

The verifier adds a signature to a blacklist when the verifier does not want to trust the signer, but the verifier does not have enough reason to send a request to the issuer to revoke the member's signature.

-

When the verifier tracks a member using a basename, and decides the member is not trustworthy, the verifier can add the member's signature to the verifier blacklist.

-

-Reasons the Verifier Might Revoke an Intel® EPID Signature

-

Reasons a verifier might revoke a member based on its tracked signatures include the following:

-
    -
  • A service provider receives a complaint about a customer. In this case, even though the verifier no longer trusts that customer to use the service, the verifier does not have a case to petition the issuer to revoke the member.
  • -
  • A service provider detects suspicious behavior that might indicate illegal activity or another violation of the service provider's policy.
  • -
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/SdkOverview.html b/external/epid-sdk-3.0.0/doc/html/SdkOverview.html deleted file mode 100644 index 0cc61242..00000000 --- a/external/epid-sdk-3.0.0/doc/html/SdkOverview.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: What's Included in the SDK - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
What's Included in the SDK
-
-
- -

-SDK Components

-

The SDK is divided into logical components to separate responsibilities and create interfaces that you can re-implement using custom tools such as hardware accelerators.

-
-sdk_block_diagram.png -
-


- The Intel® EPID SDK is divided into the following components:

-

Components in the SDK Core implement the features of Intel® EPID.

- - - - - - - - - - - - - -
Component Description
member Library containing APIs needed to implement a member
verifier Library containing APIs needed to implement a verifier
common Library containing common types and functions
math Math primitives used by member and verifier
IPP A C-only non-optimized subset of Intel® IPP
-

Examples show how to use the SDK APIs in working code.

- - - - - - - - - - - -
Component Description
signmsg A sample program showing how to sign messages
verfifysig A sample program showing how to verify signatures
util Common utilities used by samples
Sample Issuer Material Sample keys and revocation lists
-

Tools implement utility code to interact with Intel® EPID related services such as the Intel® Key GenerationFacility (iKGF)".

- - - - - - - - - - - - - -
Component Description
extractgrps A tool to extract groups from a bulk group file
extractkeys A tool to extract member keys from a bulk key file
revokegrp A tool to create a revocation request for a group
revokekey A tool to create a revocation request for a member key
revokesig A tool to create a revocation request from a signature
-

The SDK comes with a number of other components that support building and validating the code.

- - - - - - - -
Component Description
gtest gtest unit test framework
Build Scripts Scripts to configure and build the SDK
-

Math primitives are implemented in the math sub-component of common. The reference math primitive implementation is based on a non-optimized Vanilla C subset of the Intel® Performance Primitives. Math is designed so that you can replace its implementation to call custom hardware IP blocks or optimized libraries.

-

Intel® EPID 1.1 Compatibility

-

In addition to the default Intel® EPID 2.0 APIs, the verifier component also includes APIs that allow verification of Intel® EPID 1.1 signatures.

-

Billions of existing devices, including most Intel platforms manufactured since 2008, create signatures that need Intel® EPID 1.1 verification.

-

For details on verifying Intel® EPID 1.1 signatures see EPID 1.1 support in the API Reference.

-

-Filesystem Layout

-

The Intel® EPID SDK has two filesystem layouts: the Source Layout and the Install Layout.

-

The Source Layout is what you find when you download the SDK and extract it to disk. This layout contains all of the files that you need to build the libraries, samples, tests, and data generated by the SDK.

-

The Install Layout is the layout of files under the _install folder after you build the SDK.

-

-Source Layout

-

The Source Layout is used by the build scripts in the Intel® EPID SDK to find components and files needed to create libraries and executables.

epid-sdk/
-|__ LICENSE.txt             Distribution license
-|__ NOTICE.txt              Legal notices
-|__ README.md               Readme
-|__ CHANGELOG.md            Change log
-|__ SConstruct              Main build configuration
-|
-|__ doc/
-|   |__ html/               HTML format documentation
-|   |__ index.html          Entry point for HTML format documentation
-|
-|__ epid/
-|   |__ common/             Source for Common
-|   |__ common-testhelper/  Source for unit test helper common helpers
-|   |__ member/             Source for Member
-|   |__ verifier/           Source for Verifier
-|
-|__ example/
-|   |__ data/               Binary data used for testing and tutorials
-|   |__ compressed_data/    Compressed Member Key Binary data used for testing and tutorials
-|   |__ signmsg/            Source for message signing example
-|   |__ util/               Common utilities for examples
-|   |__ verifysig/          Source for signature validation signing example
-|
-|__ ext/
-|   |__ gtest/             Third party gtest library
-|   |__ ipp/               IPP library
-|
-|__ parts-site/            Parts platform config scripts
-|
-|__ tools/
-    |__ extractgrps/       Tool to extract groups
-    |__ extractkeys/       Tool to extract keys
-    |__ revokegrp/         Tool to create group revocation request
-    |__ revokekey/         Tool to create a member key revocation request
-    |__ revokesig/         Tool to create a signature based revocation
-                           request
-

-Install Layout

-

The Install Layout contains the data developers need to develop and build their applications using the Intel® EPID SDK. Once built, the Install Layout has no dependency on the Source Layout, allowing developers to build the SDK once and reuse the built files in other locations or on other computers.

_install/
-|__ epid-sdk/
-    |__ include/            C include header files for the SDK
-    |__ lib/
-    |   |__ <platform>      Target specific static libraries for the SDK
-    |
-    |__example/             Sample applications and data
-    |__test/                Unit test executables (if unit tests built)
-    |__tools/               Tools
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/SignVerifyTutorial.html b/external/epid-sdk-3.0.0/doc/html/SignVerifyTutorial.html deleted file mode 100644 index 5fc86a4a..00000000 --- a/external/epid-sdk-3.0.0/doc/html/SignVerifyTutorial.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Signing and Verification Tutorial - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Signing and Verification Tutorial
-
-
- -

The Intel® EPID SDK provides example tools to show you how to use the Intel® EPID SDK APIs. These examples are called signmsg and verifysig.

-

You can build these examples using the instructions in Building from Source. The tutorial assumes _install/epid-sdk/example is the current directory.

-

All command lines in this tutorial use posix command line conventions; for other systems, adjust accordingly.

-

For the code used in this tutorial, refer to Walkthroughs of Examples Showing API Usage.

-
Note
The data for running this tutorial is pre-generated. Once the samples are built, the data is in the _install/epid-sdk/example/data directory. See Sample Issuer Material.
-

-Creating an Intel® EPID Signature of a Given Message

-

The example application signmsg shows you how to create an Intel® EPID signature of a given message.

$ ./signmsg -h
-Usage: signmsg [OPTION]...
-Create Intel(R) EPID signature of message
-
-Options:
-  --sig=FILE
-      write signature to FILE (default: sig.dat)
-
-  --msg=MESSAGE
-      MESSAGE to sign
-
-  --bsn=BASENAME
-      BASENAME to sign with (default: random)
-
-  --sigrl=FILE
-      load signature based revocation list from FILE
-
-  --gpubkey=FILE
-      load group public key from FILE (default: pubkey.bin)
-
-  --mprivkey=FILE
-      load member private key from FILE (default: mprivkey.dat)
-
-  --mprecmpi=FILE
-      load pre-computed member data from FILE
-
-  --mprecmpo=FILE
-      write pre-computed member data to FILE
-
-  --capubkey=FILE
-      load IoT Issuing CA public key from FILE (default: cacert.bin)
-
-  --hashalg={SHA-256 | SHA-384 | SHA-512}
-      use specified hash algorithm (default: SHA-512)
-
-  -h, --help
-      display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-

To sign a message, a group member in good standing uses the following command:

$ ./signmsg --msg="test0"
-

The above command signs a message "test0". signmsg uses default options for the group public key, member private key, hash algorithm and IoT Issuing CA public key. All other parameters that are not given are ignored. The command produces a signature file: sig.dat

-

-Verifying an Intel® EPID Signature

-

The example application verifysig shows you how to verify that a given Intel® EPID signature is produced by a member in good standing.

$ ./verifysig -h
-Usage: verifysig [OPTION]...
-Verify signature was created by group member in good standing
-
-Options:
-  --sig=FILE
-      load signature from FILE (default: sig.dat)
-
-  --msg=MESSAGE
-      MESSAGE that was signed (default: empty)
-
-  --bsn=BASENAME
-      BASENAME used in signature (default: random)
-
-  --privrl=FILE
-      load private key revocation list from FILE
-
-  --sigrl=FILE
-      load signature based revocation list from FILE
-
-  --grprl=FILE
-      load group revocation list from FILE
-       (default: grprl.bin)
-
-  --verifierrl=FILE
-      load verifier revocation list from FILE
-
-  --gpubkey=FILE
-      load group public key from FILE (default: pubkey.bin)
-
-  --vprecmpi=FILE
-      load pre-computed verifier data from FILE
-
-  --vprecmpo=FILE
-      write pre-computed verifier data to FILE
-
-  --capubkey=FILE
-      load IoT Issuing CA public key from FILE
-   (default: cacert.bin)
-
-  --hashalg={SHA-256 | SHA-384 | SHA-512}
-      use specified hash algorithm for 2.0 groups (default: SHA-512)
-
-  -h, --help
-  display this help and exit
-
-  -v, --verbose
-      print status messages to stdout
-

To verify that a signature is from a member in good standing, the verifier uses the following command:

$ ./verifysig --msg="test0"
-signature verified successfully
-

This verifies that the default signature file sig.dat is generated for the message "test0" by a member in good standing. verifysig uses default inputs for group public key, hash algorithm and IoT Issuing CA public key. All other parameters are ignored. The output verifysig: signature verified successfully denotes that the verification is successful.

-

-Linking Intel® EPID Signatures from the Same Member

-

A name based signature is created using the additional parameter of a basename. If the member uses the same basename, the verifier can mathematically link signatures generated by the member, showing that the signatures are from the same member.

-

To validate a signature with a basename, you need to use the same basename for signing and verification. The mechanism for ensuring that the member and verifier use the same basename is outside the scope of the SDK.

-

If a basename is not provided, then the member uses a random basename and the signature generated by the member is anonymous.

-

For more general information on why you might want to use a basename, refer to Name Based Signatures.

-
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
-

To sign message "test0" with a basename "base0":

$ ./signmsg --msg="test0" --bsn="base0"
-

To verify the signature:

$ ./verifysig --msg="test0" --bsn="base0"
-verifysig: signature verified successfully
-

To validate a signature, you need to use the same message for signing and verification. The mechanism for ensuring that the member and verifier use the same message is outside the scope of the SDK.

-

Member and verifier must also use the same hash algorithm and basename, if applicable.

-

-Expected Failures

-

The signature verification process fails if there is a parameter mismatch between sign and verify operations. Here are some examples.

-

Verification fails if there is a mismatch in the message:

$ ./signmsg --msg="test0"
-$ ./verifysig --msg="test1"
-verifysig: signature verification failed: invalid signature
-

Verification fails if there is a mismatch in the basename:

$ ./signmsg --msg="test0" --bsn="base0"
-$ ./verifysig --msg="test0" --bsn="base1"
-verifysig: signature verification failed: invalid signature
-

The Intel® EPID SDK supports the following hash algorithms: SHA-256, SHA-384, SHA-512. The selected hash algorithm must be the same for both sign and verify. Mismatch in hash algorithm results in verification failure:

$ ./signmsg --msg="test0" --hashalg=SHA-256
-$ ./verifysig --msg="test0" --hashalg=SHA-384
-verifysig: signature verification failed: invalid signature
-

-Revocation

-

Revocation lists are data structures used by the verifier to identify members that are no longer approved members of the group.

-

The verifier obtains the member private key based revocation list (PrivRL), signature based revocation list (SigRL), and group based revocation list (GroupRL) from the issuer. The verifier can also maintain its own verifier blacklist (VerifierRL).

-

-Detecting Revoked Group from Group Revocation List

-

Verification of a signature fails if it is generated by a member of a group that is revoked in the group revocation list.

-

For example,

$ ./signmsg --msg="test0" --gpubkey=data/groupb/pubkey.bin --mprivkey=data/groupb/member0/mprivkey.dat
-$ ./verifysig --msg="test0" --grprl=data/grprl.bin --gpubkey=data/groupb/pubkey.bin
-verifysig: signature verification failed: signature revoked in GroupRl
-

The verification fails because groupb is revoked and is an entry in the group revocation list (grprl.bin).

-

-Detecting Revoked Member from Private Key Based Revocation List

-

Verification of a signature fails if it is generated by a member whose private key is revoked in a private-key based revocation list.

-

For example,

$ ./signmsg --msg=test0 --gpubkey=data/groupa/pubkey.bin --mprivkey=data/groupa/privrevokedmember0/mprivkey.dat
-$ ./verifysig --msg=test0 --privrl=data/groupa/privrl.bin --gpubkey=data/groupa/pubkey.bin
-verifysig: signature verification failed: signature revoked in PrivRl
-

The verification fails because the private key of privrevokedmember0 is revoked and is an entry in the private key based revocation list of groupa (privrl.bin).

-

-Detecting Revoked Member from Signature Based Revocation List

-

Verification of a signature fails if it is generated by a member whose signature is revoked in a signature based revocation list.

$ ./signmsg --msg="test1" --sigrl=data/groupa/sigrl.bin --gpubkey=data/groupa/pubkey.bin --mprivkey=data/groupa/sigrevokedmember0/mprivkey.dat
-signmsg: signature revoked in SigRL
-$ ./verifysig --msg="test1" --sigrl=data/groupa/sigrl.bin --gpubkey=data/groupa/pubkey.bin
-verifysig: signature verification failed: signature revoked in SigRl
-

The message "test1" is signed by signmsg with a warning signmsg: signature revoked in SigRL. This means that the signature of sigrevokedmember0 is revoked in the signature based revocation list. The verification fails because the signature was generated by sigrevokedmember0, which is revoked and is an entry in the signature based revocation list of groupa (sigrl.bin).

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/SignmsgWalkthru.html b/external/epid-sdk-3.0.0/doc/html/SignmsgWalkthru.html deleted file mode 100644 index f41b6bd9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/SignmsgWalkthru.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Generating an Intel® EPID Signature - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Generating an Intel® EPID Signature
-
-
-

This walkthrough of the signmsg example shows you how to use SDK APIs to generate an Intel® EPID signature. Signmsg is built during the SDK build.

-


-

-

First, we include headers so we have access to needed declarations.

-

#include <stdlib.h>
#include <string.h>
#include "src/signmsg.h"
#include "src/prng.h"
#include "util/envutil.h"
#include "util/stdtypes.h"
#include "util/buffutil.h"

-

The prng.h header provides access to a pseudo-random number generator needed for signing, while the utility headers are used by signmsg for logging and buffer management. The epid/member/api.h header provides access to the core member APIs. The epid/common/file_parser.h header provides an API for parsing buffers formatted according to the various IoT Intel® EPID binary file formats.

-


-

-

We define a stub function responsible for checking that the CA certificate is authorized by the root CA.

-

bool IsCaCertAuthorizedByRootCa(void const* data, size_t size) {
(void)data;
(void)size;
return true;
}

-

IsCaCertAuthorizedByRootCa is called from main.c to validate the CA certificate before calling SignMsg. In an actual implementation, you need to provide an implementation to validate the issuing CA certificate with the CA root certificate before using it in parse functions.

-


-

-

The core signing functionality is contained in SignMsg.

-

EpidStatus SignMsg(void const* msg, size_t msg_len, void const* basename,
size_t basename_len, unsigned char const* signed_sig_rl,
size_t signed_sig_rl_size,
unsigned char const* signed_pubkey,
size_t signed_pubkey_size, unsigned char const* priv_key_ptr,
size_t privkey_size, HashAlg hash_alg,
MemberPrecomp* member_precomp, bool member_precomp_is_input,
EpidSignature** sig, size_t* sig_len,
EpidCaCertificate const* cacert) {

-

The SignMsg parameters are either received by the member, or they are part of the member's configuration. The exceptions are the sig and sig_len parameters, which are used to output the signature.

-

The verifier might send the message to the member or there may be another mechanism to choose the message, but the way the message is communicated is outside the scope of the Intel® EPID scheme.

-

We use the parameters member_precomp and member_precomp_is_input to pass in a pre-computation blob if provided. We can use the pre-computation blob to increase performance when verifying signatures repeatedly with the same group public key.

-

The member knows the group public key and the member private key.

-

The member and the verifier agree on the message, basename, hash algorithm, and SigRL that the member uses for signing.

-


-

-

Next we do basic variable setup and argument checking.

-

void* prng = NULL;
MemberCtx* member = NULL;
SigRl* sig_rl = NULL;
do {
GroupPubKey pub_key = {0};
PrivKey priv_key = {0};
size_t sig_rl_size = 0;
if (!sig) {
break;
}

-

We create pointers to resources to be allocated and use the do {} while(0) idiom so that we can reliably free resources on return from SignMsg.

-

We create variables on the stack to hold the group public key and member private key.

-

Finally we check to make sure that sig is a vaild pointer.

-


-

-

Next, we authenticate and extract the group public key using EpidParseGroupPubKeyFile.

-

sts = EpidParseGroupPubKeyFile(signed_pubkey, signed_pubkey_size, cacert,
&pub_key);
if (kEpidNoErr != sts) {
break;
}

-

EpidParseGroupPubKeyFile takes a buffer containing a group public key in issuer binary format and validates that the public key is signed by the private key that corresponds to the provided CA certificate, extracting the key in the process.

-


-

-

We authenticate and extract the signed SigRL using EpidParseSigRlFile.

-

if (signed_sig_rl) {
// authenticate and determine space needed for SigRl
sts = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert, NULL,
&sig_rl_size);
if (kEpidSigInvalid == sts) {
// authentication failure
break;
}
if (kEpidNoErr != sts) {
break;
}
sig_rl = AllocBuffer(sig_rl_size);
if (!sig_rl) {
break;
}
// fill the SigRl
sts = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert,
sig_rl, &sig_rl_size);
if (kEpidSigInvalid == sts) {
// authentication failure
break;
}
if (kEpidNoErr != sts) {
break;
}
} // if (signed_sig_rl)

-

We use EpidParseSigRlFile to:

-
    -
  • extract the signature based revocation list
  • -
  • validate that the revocation list was signed by the private key corresponding to the provided CA certificate
  • -
  • validate that the size of the input buffer is correct
  • -
  • determine the required size of the revocation list output buffer
  • -
-

To determine the required sig_rl output buffer size, we provide a null pointer for the output buffer when calling EpidParseSigRlFile. This updates sig_rl_size with the required size of the output buffer.

-

After we find out the required size of the sig_rl, we allocate a buffer for the sig_rl. Then we fill the buffer using EpidParseSigRlFile.

-


-

-

Next, we fill the member private key.

-

if (privkey_size == sizeof(PrivKey)) {
priv_key = *(PrivKey*)priv_key_ptr;
} else if (privkey_size == sizeof(CompressedPrivKey)) {
sts = EpidDecompressPrivKey(&pub_key, (CompressedPrivKey*)priv_key_ptr,
&priv_key);
if (kEpidNoErr != sts) {
break;
}
} else {
sts = kEpidErr;
break;
} // if (privkey_size == sizeof(PrivKey))

-

If the member private key is compressed, then we decompress it using EpidDecompressPrivKey before it can be passed to the member APIs. To determine if the member private key is compressed, we check if it is the known size of a compressed key.

-

If the key size is not the size of a known format, we return an error.

-


-

-

Next, we create a pseudo-random number generator.

-

sts = PrngCreate(&prng);
if (kEpidNoErr != sts) {
break;
}

-
Warning
This pseudo-random number generator is included only for demonstration, and should not be used in production code as a source of secure random data. For security, prng should be a cryptographically secure random number generator.
-


-

-

Now that the inputs have been prepared, we create a member context using EpidMemberCreate.

-

sts = EpidMemberCreate(&pub_key, &priv_key,
member_precomp_is_input ? member_precomp : NULL,
PrngGen, prng, &member);
if (kEpidNoErr != sts) {
break;
}

-

If a pre-computation blob is provided to the top level application, we use it. Otherwise, we pass in NULL.

-


-

-

We serialize pre-computed member data using EpidMemberWritePrecomp.

-

sts = EpidMemberWritePrecomp(member, member_precomp);
if (kEpidNoErr != sts) {
break;
}

-

The serialized member pre-computation blob can be used to greatly increase performance of EpidMemberCreate in future sessions if the same member private key is used.

-


-

-

Next, if a basename is specified, we register it with EpidRegisterBaseName so that the member can use it.

-

if (0 != basename_len) {
sts = EpidRegisterBaseName(member, basename, basename_len);
if (kEpidNoErr != sts) {
break;
}
}

-

In a typical use case, to prevent loss of privacy, the member keeps a list of basenames that correspond to authorized verifiers. The member signs a message with a basename only if the basename is in the member's basename list.

-
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
-


-

-

Then we set the hash algorithm to be used by the member using EpidMemberSetHashAlg.

-

sts = EpidMemberSetHashAlg(member, hash_alg);
if (kEpidNoErr != sts) {
break;
}

-

After the hash algorithm is set, future calls to EpidSign will use the same algorithm.

-


-

-

Next, we sign the message, generating an Intel® EPID signature.

-

*sig_len = EpidGetSigSize(sig_rl);
*sig = AllocBuffer(*sig_len);
if (!*sig) {
break;
}
// sign message
sts = EpidSign(member, msg, msg_len, basename, basename_len, sig_rl,
sig_rl_size, *sig, *sig_len);
if (kEpidNoErr != sts) {
break;
}

-

To create a signature, first we find out the required size of the signature using EpidGetSigSize. Then we allocate a buffer for the signature and fill the buffer using EpidSign.

-

It is important to compute signature size after loading sig_rl because the signature size varies with the size of the SigRL.

-


-

-

Finally, we clean up and exit.

-

sts = kEpidNoErr;
} while (0);
PrngDelete(&prng);
EpidMemberDelete(&member);
if (sig_rl) free(sig_rl);
return sts;
}

-

If we made it past signing without an error, we set the return code appropriately and fall out of the do-while loop. If there was an error earlier, all breaks in the do-while loop bring us to this point with an error status.

-

Next, we free the allocated resources. EpidMemberDelete deletes an existing member context.

-

We return from SignMsg with the success or error status.

-


-

-

This concludes the signmsg walkthrough. Now you should be able to generate an Intel® EPID signature that proves a member's group membership to a verifier without revealing the member's identity.

-

To learn more about the SDK APIs see the API Reference. To learn more about the Intel® EPID scheme see Introduction to the Intel® EPID Scheme in the documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/VerifysigWalkthru.html b/external/epid-sdk-3.0.0/doc/html/VerifysigWalkthru.html deleted file mode 100644 index c66ada5d..00000000 --- a/external/epid-sdk-3.0.0/doc/html/VerifysigWalkthru.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Verifying an Intel® EPID Signature - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Verifying an Intel® EPID Signature
-
-
-

This walkthrough of the verifysig example shows you how to use SDK APIs to verify an Intel® EPID 2.0 signature. Verifysig is built during the SDK build.

-

To verify an Intel® EPID 1.1 signature see the example code in verifysig11.c. For information on Intel® EPID 1.1 speciifc APIs see EPID 1.1 support.

-


-

-

First, we include headers so we have access to needed declarations.

-

#include "src/verifysig.h"
#include <stdlib.h>
#include "util/buffutil.h"
#include "util/envutil.h"

-

The utility headers are used by verifysig for logging and buffer management. The epid/verifier/api.h header provides access to the core verifier APIs, and the epid/common/file_parser.h header provides an API for parsing buffers formatted according to the various IoT Intel® EPID binary file formats.

-


-

-

We define a stub function responsible for checking that the CA certificate is authorized by the root CA.

-

bool IsCaCertAuthorizedByRootCa(void const* data, size_t size) {
(void)data;
(void)size;
return true;
}

-

IsCaCertAuthorizedByRootCa is called from main.c to validate the CA certificate before calling Verify. In an actual implementation, you need to provide an implementation to validate the issuing CA certificate with the CA root certificate before using it in parse functions.

-


-

-

We use Verify to verify an Intel® EPID signature. Verify is a wrapper function that isolates SDK API functionality for the purpose of this walkthrough.

-

EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
size_t msg_len, void const* basename, size_t basename_len,
void const* signed_priv_rl, size_t signed_priv_rl_size,
void const* signed_sig_rl, size_t signed_sig_rl_size,
void const* signed_grp_rl, size_t signed_grp_rl_size,
VerifierRl const* ver_rl, size_t ver_rl_size,
void const* signed_pub_key, size_t signed_pub_key_size,
EpidCaCertificate const* cacert, HashAlg hash_alg,
VerifierPrecomp* verifier_precomp,
bool verifier_precomp_is_input) {

-

The Verify parameters were either sent by the verifier to the member, or they were part of the member's configuration. The exceptions are the sig and sig_len parameters, which we use to input the signature to be verified.

-

The verifier might send the message to the member or there may be another mechanism to choose the message, but the way the message is communicated is outside the scope of the Intel® EPID scheme.

-

We use the parameters verifier_precomp and verifier_precomp_is_input to pass in a pre-computation blob if provided. We can use the pre-computation blob to increase performance when verifying signatures repeatedly with the same group public key.

-

The member and the verifier agree on the message, basename, hash algorithm, and SigRL that the verifier uses for verification.

-
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
-


-

-

Next we do basic variable setup.

-

EpidStatus result = kEpidErr;
VerifierCtx* ctx = NULL;
PrivRl* priv_rl = NULL;
SigRl* sig_rl = NULL;
GroupRl* grp_rl = NULL;
do {
GroupPubKey pub_key = {0};

-

We create pointers to resources to be allocated and we use the do {} while(0) idiom so that we can reliably free resources on return from Verify. We also allocate the group public key on the stack.

-


-

-

Next, we authenticate and extract the group public key using EpidParseGroupPubKeyFile.

-

result = EpidParseGroupPubKeyFile(signed_pub_key, signed_pub_key_size,
cacert, &pub_key);
if (kEpidNoErr != result) {
break;
}

-

EpidParseGroupPubKeyFile takes a buffer containing a group public key in issuer binary format and validates that the public key is signed by the private key that corresponds to the provided CA certificate, reading the key into pub_key in the process.

-


-

-

Next, we create a verifier context using EpidVerifierCreate.

-

&pub_key, verifier_precomp_is_input ? verifier_precomp : NULL, &ctx);
if (kEpidNoErr != result) {
break;
}

-

If a pre-computation blob is provided to the top level application, we use it. Otherwise, we pass in NULL.

-


-

-

Then we serialize pre-computed verifier data using EpidVerifierWritePrecomp.

-

result = EpidVerifierWritePrecomp(ctx, verifier_precomp);
if (kEpidNoErr != result) {
break;
}

-

The serialized verifier pre-computation blob can be used to greatly increase performance of EpidVerifierCreate in future sessions if the same group public key is used.

-


-

-

We use EpidVerifierSetHashAlg to indicate the hash algorithm used for verification, which should be the same algorithm that the member used when signing.

-

result = EpidVerifierSetHashAlg(ctx, hash_alg);
if (kEpidNoErr != result) {
break;
}

-

After the hash algorithm is set, future calls to EpidVerify will use the same algorithm.

-


-

-

We use EpidVerifierSetBasename to indicate the basename used for verification, which should be the same one that the member used when signing.

-

result = EpidVerifierSetBasename(ctx, basename, basename_len);
if (kEpidNoErr != result) {
break;
}

-

After the basename is set, future calls to EpidVerify will use the same basename.

-


-

-

Before we verify a signature, we have to configure revocation lists so that we can check to see if a signer's group membership has been revoked.

-
Note
Configured revocation lists are referenced directly by the verifier until a new revocation list is set or the verifier is destroyed. Until the verifier is destroyed, we do not modify the revocation lists.
-


-

-

We set the private key based revocation list using EpidVerifierSetPrivRl.

-

if (signed_priv_rl) {
// authenticate and determine space needed for RL
size_t priv_rl_size = 0;
result = EpidParsePrivRlFile(signed_priv_rl, signed_priv_rl_size, cacert,
NULL, &priv_rl_size);
if (kEpidSigInvalid == result) {
// authentication failure
break;
}
if (kEpidNoErr != result) {
break;
}
priv_rl = AllocBuffer(priv_rl_size);
if (!priv_rl) {
result = kEpidMemAllocErr;
break;
}
// fill the rl
result = EpidParsePrivRlFile(signed_priv_rl, signed_priv_rl_size, cacert,
priv_rl, &priv_rl_size);
if (kEpidNoErr != result) {
break;
}
// set private key based revocation list
result = EpidVerifierSetPrivRl(ctx, priv_rl, priv_rl_size);
if (kEpidNoErr != result) {
break;
}
} // if (signed_priv_rl)

-

We use EpidParsePrivRlFile to:

-
    -
  • extract the private key based revocation list
  • -
  • validate that the revocation list was signed by the private key corresponding to the provided CA certificate
  • -
  • validate that the size of the input buffer is correct
  • -
  • determine the required size of the revocation list output buffer
  • -
-

To determine the required priv_rl buffer size, we provide a null pointer for the output buffer when calling EpidParsePrivRlFile.

-

After we find out the required size of the priv_rl buffer, we allocate memory for it. Then we fill the buffer using EpidParsePrivRlFile.

-


-

-

Next, we set the signature based revocation list using EpidVerifierSetSigRl.

-

if (signed_sig_rl) {
// authenticate and determine space needed for RL
size_t sig_rl_size = 0;
result = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert,
NULL, &sig_rl_size);
if (kEpidSigInvalid == result) {
// authentication failure
break;
}
if (kEpidNoErr != result) {
break;
}
sig_rl = AllocBuffer(sig_rl_size);
if (!sig_rl) {
result = kEpidMemAllocErr;
break;
}
// fill the rl
result = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert,
sig_rl, &sig_rl_size);
if (kEpidNoErr != result) {
break;
}
// set signature based revocation list
result = EpidVerifierSetSigRl(ctx, sig_rl, sig_rl_size);
if (kEpidNoErr != result) {
break;
}
} // if (signed_sig_rl)

-

We use EpidParseSigRlFile to:

-
    -
  • extract the signature based revocation list
  • -
  • validate that the revocation list was signed by the private key corresponding to the provided CA certificate
  • -
  • validate that the size of the input buffer is correct
  • -
  • determine the required size of the revocation list output buffer
  • -
-

To determine the required sig_rl buffer size, we provide a null pointer for the output buffer when calling EpidParseSigRlFile.

-

After we find out the required size of the sig_rl buffer, we allocate memory for it. Then we fill the buffer using EpidParseSigRlFile.

-


-

-

Next, we set the group based revocation list using EpidVerifierSetGroupRl.

-

if (signed_grp_rl) {
// authenticate and determine space needed for RL
size_t grp_rl_size = 0;
result = EpidParseGroupRlFile(signed_grp_rl, signed_grp_rl_size, cacert,
NULL, &grp_rl_size);
if (kEpidSigInvalid == result) {
// authentication failure
break;
}
if (kEpidNoErr != result) {
break;
}
grp_rl = AllocBuffer(grp_rl_size);
if (!grp_rl) {
result = kEpidMemAllocErr;
break;
}
// fill the rl
result = EpidParseGroupRlFile(signed_grp_rl, signed_grp_rl_size, cacert,
grp_rl, &grp_rl_size);
if (kEpidNoErr != result) {
break;
}
// set group revocation list
result = EpidVerifierSetGroupRl(ctx, grp_rl, grp_rl_size);
if (kEpidNoErr != result) {
break;
}
} // if (signed_grp_rl)

-

We use EpidParseGroupRlFile to:

-
    -
  • extract the group based revocation list
  • -
  • validate that the revocation list was signed by the private key corresponding to the provided CA certificate
  • -
  • validate that the size of the input buffer is correct
  • -
  • determine the required size of the revocation list output buffer
  • -
-

To determine the required grp_rl buffer size, we provide a null pointer for the output buffer when calling EpidParseGroupRlFile.

-

After we find out the required size of the grp_rl buffer, we allocate memory for it. Then we fill the buffer using EpidParseGroupRlFile.

-


-

-

Next, we set the verifier blacklist using EpidVerifierSetVerifierRl.

-

if (ver_rl) {
// set verifier based revocation list
result = EpidVerifierSetVerifierRl(ctx, ver_rl, ver_rl_size);
if (kEpidNoErr != result) {
break;
}
}

-

The verifier is responsible for ensuring that the verifier revocation list is authorized. Validating it is outside the scope of this example.

-


-

-

Next, we use EpidVerify to verify that the Intel® EPID signature was created by a valid member of a group in good standing.

-

result = EpidVerify(ctx, sig, sig_len, msg, msg_len);
if (kEpidNoErr != result) {
break;
}

-

-

Finally, we clean up and exit.

-

} while (0);
// delete verifier
if (priv_rl) free(priv_rl);
if (sig_rl) free(sig_rl);
if (grp_rl) free(grp_rl);
return result;
}

-

If we made it past verification without an error, we set the return code appropriately and fall out of the do-while loop. If there was an error earlier, all breaks in the do-while loop bring us to this point with an error status.

-

Then we free the allocated resources. EpidVerifierDelete deletes the verifier context.

-

After deleting the verifier context, we can also delete the revocation lists.

-

We return from Verify with the success or error status.

-


-

-

This concludes the verifysig walkthrough. Now you should be able to verify an Intel® EPID signature using the SDK APIs.

-

To learn more about the SDK APIs see the API Reference. To learn more about the Intel® EPID Scheme see Introduction to the Intel® EPID Scheme in the documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/annotated.html b/external/epid-sdk-3.0.0/doc/html/annotated.html deleted file mode 100644 index e60838c8..00000000 --- a/external/epid-sdk-3.0.0/doc/html/annotated.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Data Structures - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Data Structures
-
-
-
Here are the data structures with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 CBasicSignatureIntel(R) EPID 2.0 basic signature
 CBigNumStrSerialized BigNum
 CCompressedPrivKeyCompressed private key
 CEcdsaPrivateKeyECDSA Private Key
 CEcdsaPublicKeyECDSA Public Key
 CEcdsaSignatureECDSA Signature using NIST 256-bit curve secp256r1
 CEpid11BasicSignatureIntel(R) EPID 1.1 basic signature
 CEpid11G2ElemStrSerialized Intel(R) EPID 1.1 G2 element
 CEpid11GroupPubKeyIntel(R) EPID 1.1 group public key
 CEpid11GroupRlIntel(R) EPID 1.1 group revocation list
 CEpid11GtElemStrSerialized Intel(R) EPID 1.1 GT element
 CEpid11NrProofIntel(R) EPID 1.1 non-revoked Proof
 CEpid11ParamsIntel(R) EPID 1.1 Parameters
 CEpid11PrivRlIntel(R) EPID 1.1 private-key based revocation list
 CEpid11SignatureIntel(R) EPID 1.1 Signature
 CEpid11SigRlIntel(R) EPID 1.1 signature based revocation list
 CEpid11SigRlEntryIntel(R) EPID 1.1 entry in SigRL (B,K)
 CEpid11VerifierPrecompIntel(R) EPID 1.1 Pre-computed verifier settings
 CEpid2ParamsIntel(R) EPID 2.0 Parameters
 CEpidCaCertificateIoT CA Certificate binary format
 CEpidFileHeaderIntel(R) EPID binary file header
 CEpidSignatureIntel(R) EPID 2.0 Signature
 CFpElemStrNumber in [0, p-1]
 CFq12ElemStrSerialized Fq2^3^2 element
 CFq2ElemStrSerialized Fq2 element
 CFq3ElemStrSerialized Fq3 element
 CFq6ElemStrSerialized Fq2^3 element
 CFqElemStrNumber in [0, q-1]
 CG1ElemStrSerialized G1 element
 CG2ElemStrSerialized G2 element
 CGroupPubKeyIntel(R) EPID 2.0 group public key
 CGroupRlGroup revocation list
 CGtElemStrSerialized GT element
 CIPrivKeyIntel(R) EPID 2.0 issuing private key
 CJoinRequestJoin request
 CMemberPrecompPre-computed member settings
 CMembershipCredentialMembership credential
 CNrProofNon-revoked Proof
 COctStr128128 bit octet string
 COctStr1616 bit octet string
 COctStr256256 bit octet string
 COctStr3232 bit octet string
 COctStr512512 bit octet string
 COctStr600600 bit octet string
 COctStr6464 bit octet string
 COctStr768768 bit octet string
 COctStr88 bit octet string
 COctStr8080 bit octet string
 CPreComputedSignaturePre-computed signature
 CPrivKeyIntel(R) EPID 2.0 private key
 CPrivRlPrivate-key based revocation list
 CSha256DigestSHA256 digest
 CSigRlSignature based revocation list
 CSigRlEntryEntry in SigRL (B,K)
 CVerifierPrecompPre-computed verifier settings
 CVerifierRl
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/arrowdown.png b/external/epid-sdk-3.0.0/doc/html/arrowdown.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/external/epid-sdk-3.0.0/doc/html/arrowright.png b/external/epid-sdk-3.0.0/doc/html/arrowright.png deleted file mode 100644 index c6ee22f937a07d1dbfc27c669d11f8ed13e2f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/external/epid-sdk-3.0.0/doc/html/basenames_8dox.html b/external/epid-sdk-3.0.0/doc/html/basenames_8dox.html deleted file mode 100644 index 459857a2..00000000 --- a/external/epid-sdk-3.0.0/doc/html/basenames_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/basenames.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/basenames.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/basicdoc.png b/external/epid-sdk-3.0.0/doc/html/basicdoc.png deleted file mode 100644 index e092eb64db088145daa571cd093c338c269ba0ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19922 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 KMNUMnLSTYoA~SLT diff --git a/external/epid-sdk-3.0.0/doc/html/bdwn.png b/external/epid-sdk-3.0.0/doc/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math/bignum.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
bignum.h File Reference
-
-
- -

Big number interface. -More...

-
#include <stddef.h>
-#include <stdint.h>
-#include "epid/common/stdtypes.h"
-#include "epid/common/errors.h"
-#include "epid/common/types.h"
-
- - - - -

-Typedefs

-typedef struct BigNum BigNum
 Internal representation of large numbers.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewBigNum (size_t data_size_bytes, BigNum **bignum)
 Constructs a new BigNum. More...
 
void DeleteBigNum (BigNum **bignum)
 Deletes a previously allocated BigNum. More...
 
EpidStatus ReadBigNum (void const *bn_str, size_t strlen, BigNum *bn)
 Deserializes a BigNum from a string. More...
 
EpidStatus WriteBigNum (BigNum const *bn, size_t strlen, void *bn_str)
 Serializes a BigNum to a string. More...
 
EpidStatus BigNumAdd (BigNum const *a, BigNum const *b, BigNum *r)
 Adds two BigNum values. More...
 
EpidStatus BigNumSub (BigNum const *a, BigNum const *b, BigNum *r)
 Subtracts two BigNum values. More...
 
EpidStatus BigNumMul (BigNum const *a, BigNum const *b, BigNum *r)
 Multiplies two BigNum values. More...
 
EpidStatus BigNumDiv (BigNum const *a, BigNum const *b, BigNum *q, BigNum *r)
 Divides two BigNum values. More...
 
EpidStatus BigNumMod (BigNum const *a, BigNum const *b, BigNum *r)
 Computes modular reduction for BigNum value by specified modulus. More...
 
EpidStatus BigNumIsEven (BigNum const *a, bool *is_even)
 Checks if a BigNum is even. More...
 
EpidStatus BigNumIsZero (BigNum const *a, bool *is_zero)
 Checks if a BigNum is zero. More...
 
EpidStatus BigNumPow2N (unsigned int n, BigNum *r)
 Raises 2 to the given power. More...
 
-

Detailed Description

-

Big number interface.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/bitsupplier_8h.html b/external/epid-sdk-3.0.0/doc/html/bitsupplier_8h.html deleted file mode 100644 index 24d64447..00000000 --- a/external/epid-sdk-3.0.0/doc/html/bitsupplier_8h.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/bitsupplier.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
bitsupplier.h File Reference
-
-
- -

Random data supplier interface. -More...

- - - - - -

-Typedefs

typedef int(__STDCALL * BitSupplier) (unsigned int *rand_data, int num_bits, void *user_data)
 Generates random data. More...
 
-

Detailed Description

-

Random data supplier interface.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/build__tools__installation_8dox.html b/external/epid-sdk-3.0.0/doc/html/build__tools__installation_8dox.html deleted file mode 100644 index 52c1f0b3..00000000 --- a/external/epid-sdk-3.0.0/doc/html/build__tools__installation_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/build_tools_installation.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/build_tools_installation.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/building__sdk_8dox.html b/external/epid-sdk-3.0.0/doc/html/building__sdk_8dox.html deleted file mode 100644 index 0b63f2c9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/building__sdk_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/building_sdk.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/building_sdk.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/choosing__ikgf_8dox.html b/external/epid-sdk-3.0.0/doc/html/choosing__ikgf_8dox.html deleted file mode 100644 index d63d34a0..00000000 --- a/external/epid-sdk-3.0.0/doc/html/choosing__ikgf_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/choosing_ikgf.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/choosing_ikgf.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/classes.html b/external/epid-sdk-3.0.0/doc/html/classes.html deleted file mode 100644 index 6329f929..00000000 --- a/external/epid-sdk-3.0.0/doc/html/classes.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Data Structure Index - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Data Structure Index
-
-
-
B | C | E | F | G | I | J | M | N | O | P | S | V
- - - - - - - - - - - - - - - - - - - - - -
  B  
-
Epid11NrProof   Fq6ElemStr   MembershipCredential   PrivKey   
Epid11Params   FqElemStr   
  N  
-
PrivRl   
BasicSignature   Epid11PrivRl   
  G  
-
  S  
-
BigNumStr   Epid11Signature   NrProof   
  C  
-
Epid11SigRl   G1ElemStr   
  O  
-
Sha256Digest   
Epid11SigRlEntry   G2ElemStr   SigRl   
CompressedPrivKey   Epid11VerifierPrecomp   GroupPubKey   OctStr128   SigRlEntry   
  E  
-
Epid2Params   GroupRl   OctStr16   
  V  
-
EpidCaCertificate   GtElemStr   OctStr256   
EcdsaPrivateKey   EpidFileHeader   
  I  
-
OctStr32   VerifierPrecomp   
EcdsaPublicKey   EpidSignature   OctStr512   VerifierRl   
EcdsaSignature   
  F  
-
IPrivKey   OctStr600   
Epid11BasicSignature   
  J  
-
OctStr64   
Epid11G2ElemStr   FpElemStr   OctStr768   
Epid11GroupPubKey   Fq12ElemStr   JoinRequest   OctStr8   
Epid11GroupRl   Fq2ElemStr   
  M  
-
OctStr80   
Epid11GtElemStr   Fq3ElemStr   
  P  
-
MemberPrecomp   
PreComputedSignature   
-
B | C | E | F | G | I | J | M | N | O | P | S | V
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/closed.png b/external/epid-sdk-3.0.0/doc/html/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/external/epid-sdk-3.0.0/doc/html/dir_02c945662023679b89476bd7126bc985.html b/external/epid-sdk-3.0.0/doc/html/dir_02c945662023679b89476bd7126bc985.html deleted file mode 100644 index 2da52538..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_02c945662023679b89476bd7126bc985.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/verifier Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
verifier Directory Reference
-
-
- -

Verifier functionality.

- -More...

- - -

-Directories

- - - - -

-Files

file  api.h
 Intel(R) EPID SDK verifier API.
 
-

Detailed Description

-

Verifier functionality.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_12b90d9c027aaf878a834df729679a56.html b/external/epid-sdk-3.0.0/doc/html/dir_12b90d9c027aaf878a834df729679a56.html deleted file mode 100644 index 3b6b9389..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_12b90d9c027aaf878a834df729679a56.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
epid Directory Reference
-
-
- -

Core Intel® EPID functionality.

- -More...

- - - - - - - - - - - -

-Directories

directory  common
 Common code shared between core sub-components.
 
directory  member
 Member functionality.
 
directory  verifier
 Verifier functionality.
 
-

Detailed Description

-

Core Intel® EPID functionality.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html b/external/epid-sdk-3.0.0/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html deleted file mode 100644 index c2d5b413..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/member Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
member Directory Reference
-
-
- -

Member functionality.

- -More...

- - - - - -

-Files

file  api.h
 Intel(R) EPID SDK member API.
 
-

Detailed Description

-

Member functionality.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html b/external/epid-sdk-3.0.0/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html deleted file mode 100644 index 446b40ef..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/1.1 Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
1.1 Directory Reference
-
-
- - - - - - - - -

-Files

file  file_parser.h
 Epid 1.1 issuer material parsing utilities.
 
file  types.h
 SDK data types for Intel(R) EPID 1.1.
 
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_ef364879bae02db2684040178ed9b186.html b/external/epid-sdk-3.0.0/doc/html/dir_ef364879bae02db2684040178ed9b186.html deleted file mode 100644 index 5a8f5eb3..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_ef364879bae02db2684040178ed9b186.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/verifier/1.1 Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
1.1 Directory Reference
-
-
- - - - - -

-Files

file  api.h
 Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API.
 
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html b/external/epid-sdk-3.0.0/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html deleted file mode 100644 index 3a07fce1..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
math Directory Reference
-
-
- -

Math primitives.

- -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  bignum.h
 Big number interface.
 
file  ecdsa.h
 Ecdsa interface.
 
file  ecgroup.h
 Elliptic curve group interface.
 
file  finitefield.h
 Finite field interface.
 
file  hash.h
 Hash primitives.
 
file  pairing.h
 Pairing interface.
 
file  printutils.h
 Print helper interface.
 
file  tatepairing.h
 Intel(R) EPID 1.1 Pairing interface.
 
-

Detailed Description

-

Math primitives.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html b/external/epid-sdk-3.0.0/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html deleted file mode 100644 index b4547802..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common Directory Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
common Directory Reference
-
-
- -

Common code shared between core sub-components.

- -More...

- - - - - -

-Directories

directory  math
 Math primitives.
 
- - - - - - - - - - - - - - - - -

-Files

file  bitsupplier.h
 Random data supplier interface.
 
file  errors.h
 Error reporting.
 
file  file_parser.h
 Epid issuer material parsing utilities.
 
file  stdtypes.h
 C99 standard data types.
 
file  types.h
 SDK data types.
 
-

Detailed Description

-

Common code shared between core sub-components.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/doc.png b/external/epid-sdk-3.0.0/doc/html/doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/external/epid-sdk-3.0.0/doc/html/doxygen.css b/external/epid-sdk-3.0.0/doc/html/doxygen.css deleted file mode 100644 index 1425ec53..00000000 --- a/external/epid-sdk-3.0.0/doc/html/doxygen.css +++ /dev/null @@ -1,1475 +0,0 @@ -/* The standard CSS for doxygen 1.8.11 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 4px 6px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: bold; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - border-top-left-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - diff --git a/external/epid-sdk-3.0.0/doc/html/doxygen.png b/external/epid-sdk-3.0.0/doc/html/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/external/epid-sdk-3.0.0/doc/html/dynsections.js b/external/epid-sdk-3.0.0/doc/html/dynsections.js deleted file mode 100644 index 85e18369..00000000 --- a/external/epid-sdk-3.0.0/doc/html/dynsections.js +++ /dev/null @@ -1,97 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math/ecdsa.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
ecdsa.h File Reference
-
-
- -

Ecdsa interface. -More...

-
#include <stddef.h>
-#include "epid/common/errors.h"
-#include "epid/common/types.h"
-#include "epid/common/bitsupplier.h"
-
- - - - - - - -

-Functions

EpidStatus EcdsaVerifyBuffer (void const *buf, size_t buf_len, EcdsaPublicKey const *pubkey, EcdsaSignature const *sig)
 Verifies authenticity of a digital signature over a buffer. More...
 
EpidStatus EcdsaSignBuffer (void const *buf, size_t buf_len, EcdsaPrivateKey const *privkey, BitSupplier rnd_func, void *rnd_param, EcdsaSignature *sig)
 Creates ECDSA signature of buffer. More...
 
-

Detailed Description

-

Ecdsa interface.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/ecgroup_8h.html b/external/epid-sdk-3.0.0/doc/html/ecgroup_8h.html deleted file mode 100644 index adf8f29e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/ecgroup_8h.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math/ecgroup.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
ecgroup.h File Reference
-
-
- -

Elliptic curve group interface. -More...

- - - - - - - - -

-Typedefs

-typedef struct EcGroup EcGroup
 Elliptic curve group over finite field.
 
-typedef struct EcPoint EcPoint
 Point on elliptic curve over finite field.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewEcGroup (FiniteField const *ff, FfElement const *a, FfElement const *b, FfElement const *x, FfElement const *y, BigNum const *order, BigNum const *cofactor, EcGroup **g)
 Constructs a new EcGroup. More...
 
void DeleteEcGroup (EcGroup **g)
 Deletes a previously allocated EcGroup. More...
 
EpidStatus NewEcPoint (EcGroup const *g, EcPoint **p)
 Creates a new EcPoint. More...
 
void DeleteEcPoint (EcPoint **p)
 Deletes a previously allocated EcPoint. More...
 
EpidStatus ReadEcPoint (EcGroup *g, void const *p_str, size_t strlen, EcPoint *p)
 Deserializes an EcPoint from a string. More...
 
EpidStatus WriteEcPoint (EcGroup *g, EcPoint const *p, void *p_str, size_t strlen)
 Serializes an EcPoint to a string. More...
 
EpidStatus EcMul (EcGroup *g, EcPoint const *a, EcPoint const *b, EcPoint *r)
 Multiplies two elements in an elliptic curve group. More...
 
EpidStatus EcExp (EcGroup *g, EcPoint const *a, BigNumStr const *b, EcPoint *r)
 Raises a point in an elliptic curve group to a power. More...
 
EpidStatus EcSscmExp (EcGroup *g, EcPoint const *a, BigNumStr const *b, EcPoint *r)
 Software side-channel mitigated implementation of EcExp. More...
 
EpidStatus EcMultiExp (EcGroup *g, EcPoint const **a, BigNumStr const **b, size_t m, EcPoint *r)
 Multi-exponentiates elements in elliptic curve group. More...
 
EpidStatus EcMultiExpBn (EcGroup *g, EcPoint const **a, BigNum const **b, size_t m, EcPoint *r)
 Multi-exponentiates elements in elliptic curve group. More...
 
EpidStatus EcSscmMultiExp (EcGroup *g, EcPoint const **a, BigNumStr const **b, size_t m, EcPoint *r)
 Software side-channel mitigated implementation of EcMultiExp. More...
 
EpidStatus EcGetRandom (EcGroup *g, BitSupplier rnd_func, void *rnd_func_param, EcPoint *r)
 Generates a random element from an elliptic curve group. More...
 
EpidStatus EcInGroup (EcGroup *g, void const *p_str, size_t strlen, bool *in_group)
 Checks if a point is in an elliptic curve group. More...
 
EpidStatus Epid11EcHash (EcGroup *g, void const *msg, size_t msg_len, EcPoint *r)
 Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group. More...
 
EpidStatus EcHash (EcGroup *g, void const *msg, size_t msg_len, HashAlg hash_alg, EcPoint *r)
 Hashes an arbitrary message to an element in an elliptic curve group. More...
 
EpidStatus EcMakePoint (EcGroup *g, FfElement const *x, EcPoint *r)
 Sets an EcPoint variable to a point on a curve. More...
 
EpidStatus EcInverse (EcGroup *g, EcPoint const *p, EcPoint *r)
 Computes the additive inverse of an EcPoint. More...
 
EpidStatus EcIsEqual (EcGroup *g, EcPoint const *a, EcPoint const *b, bool *is_equal)
 Checks if two EcPoints are equal. More...
 
EpidStatus EcIsIdentity (EcGroup *g, EcPoint const *p, bool *is_identity)
 Checks if an EcPoint is the identity element. More...
 
-

Detailed Description

-

Elliptic curve group interface.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/epid__overview_8dox.html b/external/epid-sdk-3.0.0/doc/html/epid__overview_8dox.html deleted file mode 100644 index 1aae71e9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/epid__overview_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/epid_overview.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/epid_overview.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_interaction.png b/external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_interaction.png deleted file mode 100644 index 1013eb05f21ed8d32711372cea3756ffdbe79830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25513 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 diff --git a/external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_use_case.png b/external/epid-sdk-3.0.0/doc/html/epid_diagram_high_level_use_case.png deleted file mode 100644 index acc63747281f6b6233c1a641044c5a6face6fff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16041 zcmb8WWmweD7dI@@-HoKANK3bL3L=6mONW58l!SDHlq)Tb(jnaqO9)6wNi0YSES=ti zzyEVR*ZuN-!Nu-(XU?3NIdkTm&*yw2pJ^%M@K=jMV(h+r}D4`iI$W@CP1VH(zd*3%=^6G(CKwdUEcEC-rvQ zW&6jD#9z1V96}i^rVtJiWHpg__uAT;Yhw%kh8RhTXmopT ze}9h>GVB4k{Ez6OBKCFB>@i}5DPKoc;VTT4G+Dn-f?f0T>2O;@xY)qrVkUgRLXy7b zqet_edIoyp)M*FZ9ZiNDaGX0*eh=%z+b8$M6Oszl0 zyu7@QgGG-en{s5XP33olQ)t`L4&^&CM+!z$AOx zFJ#K@N%}}}QgLeE8vj&c`ZNDKQTLF&aYpV>-&(q>ZbehWUDL&C(`WOPHN$ln*x#;MZkn3(#s7Ko$ot_G3YB@PNMoktmfnUUSU0$8A zQGRG{ZeDRV`0x~Lmxc!+JF{fQJZWmPnL4xV~q9$4wqji z2&8&rsW?>d84FV#O2KS`LlP8u3~6-%5)xQKjC+0M_31EpO%5}?z*^I#j#y7_{a{t_ z_VV`Lau=VmLx440?>#yaoT+O{Q6Dm|qKfb5aWMp2hYTu7v!7>;+qfEIknue~I6OMz z@#8X)P8bQ-Hi00cEWardyAF9gEtzT>iqEj4{ExX?(#MnnF5TM}>;6+XFa*d)Tjcp0Gbo|HJ#uNYcCYYK>*q!NsW7Nby6%MV{d0d_rwr5Ucj9 zlPd^9&Km3k zO}IwvC}d6pE6O(9D3JK=&#;cDy5KCXH%nwY_!Xj%Kc-xgR?VMwW(n31vuh}IBJu~}yP9)^z`i7`oD}M==4drZZe0KXRjWFG) za0V&bCXzCCbc2%3fJDn72Ybn~h;aGwWo$GLn*b;ZI==++eB2fZN$PYE+Lv9-N*|JJweq z`Nci}J4x7qF0ERY8|4gv6A|t2{>|Na03$e19fAs^FEn26dqo|St$4ZukHXXWLb`@A z4smfo%~|9VD6I{~q+>RJqvJ#Q;6v{Mlp5c?p+kxC3iz7IOJ`U}#Fj?X5o_ z)o<)r`6>f$QI7soP8lgFvm?p2G+y90UN)NFPo{1?~$LN6iar?YJM70R({Nf{YZOBdEn7gAL!1LWx`1q+L& z2p9V4NiJ!S$-CDFwZ(=|id+sxt9@Zz89xs83E7yKgfjc{Vk(bsuUtg6{v?S0sVBbw z?+)12$e7ymIN94c%3)evE|ti68JJfY5WUY4@lE@8P9iLngZa0q5Y4w&k8531v}<5A z%#a)Q8c>$W0T{f8k=&cL0LQPTXfEtuRo_K^~DLHgxiR=z6xz1@VtMrr$g0TJ8oOKd59~)pb0BhPn*!4{7!RF-^G=# zuD^n;E@s;ytgJ**hC9gN6dAGO2FSg~|ktVWrv712u{ zGFL`(d{WQAd>8!q?cE|VzuU!ekF*e7iDXW|w$_$#p2jCZiB+mJLjUd{yjc90ZGkaw zd_aKR-$t=_Ur$V~Q1!Q%n2TS-!6^1SY~3F@Iyloyc~72A)f*oOcz8q#QsH6rx2-Vq zMss_6d*?*@XxS%Q4XzZYKa^jWV>71y0TtqgFh4<74}6X=FUy^TB?INj1=(%M+R zV%<4un%T+RaQ8N}?DLX@(jBQ2VLp2q#zAm&kx_G4JfGgfp>nYLq$ugf9b``m8AO+j>c6Q_pHrsipk3o+ zuj!?4v}56o9_pqZwHh6qa}XZ6XDSZt*3;8770piZSb*O0Xty9wzoZwVhLWnVy30pT z-yq(5VWIcEhe$!LL-Ge#-B-A+W$SD^xhZ09v$`HZ>KWm{KsrIdhj0)PXs^Xxv8uz# z8%O)4+he6CjW@4;X%%2F#O#;!?Zwvt_@DR}+LKND>m~7J>*Q*tKuUW$A0OQCjv&%!B|v}9Wu0v z;E3wcvk_YyVybF}(j3{xy|2 z#TvtWy`pAe@AAFb>g(ely1NXgBv(;Vef|;`7yb4*XO)W7E6F?V;u)>p^^hu=nJ015 zzNza7s}OmKN}TR^m@}N_d=s86*)v$IZ%oHY?rNQjTq#G3XItR-7 zhsl|3+clCe)jM@058qLw+F)6XIBB*&O=i~!ZN$ILdC{M{o}R}AkKI=e5|Jd=-wNd| z3IC)0-ZXmWC+mI7Usge)rP}ju!s#jHGPUmCJ8WcX>RsFu(pf@UsZNWxQx!+CYePjp zCZR@@s%)Q0EW+0n-_@K46?6H&^?LbZa}diPTWR9BRdU<&W$%-L1N^C^6|SYT%}8h; zI#uAkqF?yiL*2LRecYv)GdoYFJSN!Du_%TYZ~WVRoaQ2eo?6b?3PDzVdX}Dv{e)Xv zLOx4u^mguQ3>Xg62H&!yU$Z~m;~dv7c|sq*b0Cnw!I<$;0guN;%6$I|-HMfPFg$X{ zgx{6F>Q}P$_*A+z=I0Ob@$s%z4dSO>8S0Su*-eQRTR%JWk^apRp zG$WdH9C_EwjW=Px;OuFqM$-PbOR>@@?ewh%MSJ$Y=3mX_K9gNXvw3OQ+G4=Xap}Fc z`q^o8LX*Px??v9DsKc%3bZ4tvM37sw^^I1Qwz73E91aJUsgHBkI!gL?TOm=G=mjyB zAr;P6jp5#fe(4|@Rx(tYxli9EJu)^d7BEBkY96IMir)K%htpR@8>>_-7+*)g(Qi=1J_%3H2ni%JGHP&6pZ=6lh!8TP^d^-az1Rqeqyq!E(t>^X8!;3cAtz zKg8$=YF-H1OoTSqiL%c{?X;mYepMK38Ag|N5&WIz{%VObyJ#RjTPD2FiM7paGym7@ z-g%i>y~9hQ>|mBEJ|%|)X8SYPxA7}g*x*@nuepe2g#&FDEx81oni~eko6^XSNj6@s zuC!|{ek_oq0o|B*fQOMhTQJs<%GMWRhWW-C3)eaLah-@iOXH*wym|Qs+oQ#7NSp$w6Xo+nD845J~5H7dt;gZEKt#bPp5ibOr|-= zThNE4=19QV@{7Cis$ODStt&tM@muQz^nydzK9fT%FHVgf6Ekhcs@_w!#sy|Wx`9q& z3nf}|h_}gQixf?F z^%4s|-I`XEAm(T5GhyOKKkReb#2s;02|S#oQ-wbydkwSTd((Y8>@S_5!CdoZ)+kol z(pY#h?03v&_u-yLGrNpi9arC&UcdjgVniNCAgmG6xFoP&H&1Qd-`3ud$|)=Ro++ax zNQ`~BX(~fo!_l;6kCL-|*U@JoUsF0VT7hkMOSsK4u60i|$!)*;P0G(4TI&YmZTf@&;SH)>7^s0i@O_}JVwUJr3-$=`a6*fCn?3U6nGm4&})`$$c(;;}S z0NElOK|$LHNa@Zrq62I2^rkc1Zhm3tsoiLC8!R!b*oa zv1OP#t3T;;$rP8z+eqlNA@r$M^IJA>wK#XcGd6h=9;lY6A0wxh$%tT^wI*2~VTx89 zO|Z9<6=50H2Hu8xVY%;88zO%XPUNx;Ti0y4Z$-oX6i>*hsl+77klp zS`yD3?c}q2gnLEaQZ}8j(-yKS+Fsw$eHJaUe~Rls@2J~#J&qly+KGL2E1p}7ZRpKX zU*kBdF;~!Kc-fAJ)!EgvvFjm!P>+UsH0OX>{mt8O7(sgF7NjaEB{j~sYS4U~@X-6B z_V<-Bhs`cK`nr{iG>8HoK5n#nglluZ=6wZrKnDYL2X(hAR!wR$U%>EgX9~ug&xDJT z4r#w~<=krB@63$uXg(exi`9?KoXuSf25%*8s{@SsF05^4IT6((O#S<}<~iJJV&%my zhM{aB@Yd``6CtA^b+!#ULrY~-d55}>Fqw>&Z9XR_C&Ns;I|D%+2@G$#xnj3FkdOqj z-e<#V=*D>Z={bpe5?{NBXN>KtzUjqPK98Nbey2Axf}rra1-0QK(Uria4i+lHBrxV5 zNG)Bt{Qv-Ybp55Hf_HZN_h$L;4ZQtY9ftMHmKT-!ZS!JBd{vm$N-fb&+~=gAb~vm! zJ@{zfxzP!WyNZd=s+(9*bAU@o8{+X18TM5B6Ph|nx|^sV)+l*%*E6$gGZF3KF>FV} zGJU#EH^*Z|V60DM?E?-e16In@rCgEKaKHGQ(a5Jz44yh@1xOvW{HwR=BvCIMe@+@M ziq$?9g#r-G0=5^wIsj+APmH$0Rd-{}4O18C%+t>{lO1}Oi6SA2a7DU0w9vsNpcu_v zHTcaFW=oMo_}KOuxv<7{Q79ywC-VW)6{S-Eak|#c}K1^gok4iJgb>|_`zmYlY`!axu8@g4k_?ev4O|sgSyw;FL!>48dmb(@3@F} z-<*og?DfVtkoCh$`Fkn5)%zwVlis|lpEu^Fu!{6Lcn~N#&Jk27uDbOlI>DWSwR0G8 zTHUE*CTKfz4;A)9VbOFM!}A;MJ2`{baxK^Ue{c7b2GogtkGUIEx zEfix~eJAkuaH3VF^2aqeecrJ5Zf$O-T-9Et1{-CK;MJ)R z=hNO+I?G0gtDbFzA<>BS%u0;L7+5#4h?{OGbDN5HB`@CL)y7Sh=>N`0x_>P@Rt7Hg ztOgZ8FfUg7cjVvnFj>sIxG#-Jm*=_t)CL(PVNo7-#N}k#=C|0qmnG!$S_;GdzkI*d zK7PG}y|vA5F+$NJw(Kqw(ODTp>h4;js;rkquFr z#)3qSJ4e-c|A;z|OZ&KoCW$4Cmoymig;@9!k5rOeza)jWIn-kJBc5#S&NMNUlhur? zz`S!+D4Tas2fA^uG3QLQAKrl&Vqyu`V6M*lrSYs^QLPlC;K9~}au<33lTRz-Bi7oy_JOmL7IY%1|Utsu) z_S*EjgTgFNN`Y_;Ob_X2!LHRS4H=h(;Cdn+TD2O;(+-wjwSo~DRzi5N!!35il3Xv3 z_6+WRR$I5Kl#V_0^7YTgSY@n+Pb0ewDrT-?X_Z!YuJ5qJVk`u*8i0lkU1P6t+gn1IKI(K_X7|p_!mH`2vG*5zlq21eB?RYBN8YtMuUHgdoRbV^|s;IsjK> zQ(EvKr#-!$OT(86cD+ReWdM-0lA1yT*N`%L-1yAAaQCdCSChPKawAO){D z3l@9ftM%!6?C#~(;MWCKg@n)38h>eV8xQ79 z{Ew!z{ZEWw)$1ZM53Vnp56;*AsXPUDNTz?mBhZcKKe>O_etX%!e0>aScT+tdsqnvC zb85SZRe!*^ZpE8jK^YJeC-YBn)>aK#YR=7Le$@o*RJuGFf00?jck%UhcIid3Pzvhz zuy^m;dsEP$9#8kjx7^ErTj^`|{vydOX0-a@tFL^-K+%rHapJj*(Pfi$GBC|y&J zDjI|i>zz~q#>qDRJHgrEoB{F5&oZ}*bR+=bj!2ZlV&j3^3W@JEzb9DE$Gdhv*pb;) z!uadGve);OXVh;7zQ6I|Jz!*#{kH+w86?{r_4PPrI>qp9RkJ51)7~ZB9^$FkL%@g; z=VB3VMv{sib-Za3@L(zne~a&Qm03@>hVXP#0aG@|M49PrJ9;FrSsE6{K55JzX2!CY zo$ek3tM88dC!uO>!BNfS1)w9p=s$9{0DZcuAUpsOQ;%>JNFOPj{G$GkWyD7_1UXh$ zcGnkdx_;iZUizrs1q31;8hTJ7 z$?A8b4W&3yH0dsu6biE?X;knA=T!3!f{XH-?B6dT&}61j;?W@i-sL$(bg!4B2eyu} zEy*~aYh)rwkm*iStKQ}>I?Bk%G=~(UAjDUJcX|NHh7|BHZFd5^9Z==!Wc1#K zKL~DC-{N!5$iZNWdmJx+KNQG;#6ASiAQew zw|){&9>S4$oCe<}fGm=A$EE zpr?oAb^vXalK=QY5*|-(xeKQ^Dg**?vES>Z?6nNrE`T_ioH6pLjB24zKn}~$L@S4D zF1HBP-50gXodM>jYKO9ME!^9H_BYBKcgEIvsdjj;89WG*-sk*GW>S_2Q#Ae#<3~$g zU8=Zi2bi7qWzR^iBg7=;`Ef6+@lOkp>beD=1_d23vataVEV#3SHA?YE{wDG8-akI} z`npwQsc^T#N>H0hL|gWESZw?TgSE_GbN>H~o(vE*KSJ;SHCKGan~v_870dpC7MJgA zx+2Eh+3AU@<01p0zX#@qcYVlAKA8*z;NVS+yn!NvdwbVAn7%+) z1U!r^Spy2~akWho;MYE(i+noCpzv#HtfyJ{1?Nu#QN-2dqT3EdeP5aRVw1Gr+@m+P za|61ec^!*}5@1~@aeTXNmfg*Sm!jjAFZm-7M8o*^ar;!LbH$uCqaF>i&38jRlGa|n zxTofF^%59H4g~4}b>n28`+(kkiJ#v^y2QS{tian}Dyqla%@(dijtw}b`#M~_SFdnY zg+sRT2BUnb{rr;kiWIU$&lQ`nQI-z(sNpUEWr|r}Yakj95KDA}8#= zLF9j=fEzL(V4p-0Ea#KlIfu5kwx*C`)0hy6_c9{r}pi3+k`;0G@%H zf=9;`$l+CUnO9y{Fm${INDY*Tm-GoZchpwi&vbzUFc(M#Nh*x!?f>Xb4p1LaOxbku z(rCzalJKs#ZQsPFx7a%D#qnQKjB{tf8S(gC)=mS6yJ@>`Lr99Y7H&Ib&bDKY>H>&~ zH^4FWzK4IZS83$3xI4mWwIkNgwfSdo?98_uS_It!vntv9u$t*!1=8Oc=7-IGiF z=~p^Y%dhZ(Ig0C+Hy^EPsGXsKqhzOMC~d|vnjgbZ0?v*m(|hI^SKx>K$A#TFqD$SV zY#-9i|F~EaC=}B45UALe{5u$XRY>hpj0|W&*~JmWDK!8wQ#;m-VFUv{VQqC(q!}{W z2P-n2{5!p6)nMqV>t_g9^EKm&`~UQFB;knc|9hJc%T zm!tq#fO-E@F_|Jpyfg_RA4u*nU@=3!<98(L2G09Q13^q*-Mwd`xLy>4&pK*nZqB*p zGP7VX;-_2w#O0%4)jY&AxfUx^z(N%IRTI~nOdNDgs{sp$O=|W1Z0PQw{Qyu1a#y4-km+VhXU&rMT1FE%HTM^ z*1=m^TDrXPf3ZITX3^3;IZ0|aO*#^~y0NhVifCB5!a?=R6~KX4oH?FQhNvy={43nR z$rUsg0)%-U0j4|{_Ob5K)R#e~JHbIi^`E0P{CtwYNsN1H*M{?Ldld$r)1*yA_ja)= z+?MK>__v!3DyLY0k_*w$L$A`8D7+xqe_HmB_+|$;x>8;OeHJ|B!WY`jP6kMHtf`+5L&>z#D$2F?};QLxWnjH;j z;eq!vGc*3}GU+3bR~bXDjroa26*D}>>OjBhz``?k@!rwPl%z>hOf9ygPSej1zz!s^ z0wy6-EBy0VfueX;R+dlelCQMqmd{HFRU|D5Qyw4l~yb#a8lh>f! zM(06YJopBkb)!*Heo%PDxH{)hD4h-Bb|z$K2lZ9)rci{GJAbCuiJI13fk9)iA6pW( zhrh3{d*1fY(a}*ya9;>5>nT{s2BJ^J%lm}k-9Bw}DhP%5rE$?hz=9yj;o;#P&3Tc1 ze45EL2>7R7Z~ry0Db+b^9?fqSd3|#DjljS-_{7Dkm6KaUAEEH^w&>vA?-jM{cNJl; zBL=FL_W?vYx_Q*!-|xVp&xML?X>Mi-XpZ#k<;n>IOOZ^X5F>uLVJRT@-Rr13oUj$@ z#7D(9;RUMg=o#G3Ks}zili6s%%}fA-cZ0P=DR10Cn7W~{u}Wio75A=M?twn26KP!F zmg(nS%Q@~1zWK3;hc1c!$f>9$F9335xX;fUm zyoqEqik{zm^8D}fzjOazn~}3U&Y_;zT>aQCZ@`RuHfl05wfb3mzTL@9 zr@T%ZDO8WJ2kI~h3(?@W>gW>PwF>iSF54#}N4x8uGqdyJsvkogtV_r&2w+YmSkS>) zmv;bVTz5yR=f#~U+Feq29;WiByGEa1-bMxAeE`|xzc9H36k9O~gOdlX*d$p6#HxG* z{(m6;|9Zy}GCT~C|J=gG^2B5b?oZXujPki=BR((JhtbS8I5T<}ZfKLc< z{yp;&_wE9YZD?;-Zd-Ib3s$a}p^fkNk0~`Vd5i_j=G!j>!itY7Mu~;lyq(k=ls8b| z_Oa}M<9OjKovPuG*uV^0O@&7^Om5NrmQb2T8^1$6V;dGZTmbUR#6=Lur|W-)A{z8t z=Bh^Ks-*q$5sYHyDF{_o^V`$U82%nI$XpC+gLNhZ2F`VKem=W@X1po|Tw2@Zb_u9y zgi*W%{wa5e?&<}i{qI%#-|W8^3^0{WaMW&YZo0dJ{b~80f}y?+S5-uDQ$z<`_XoH~ zT0%`s`qx})<{awhK{==>oxpdyZ&ZU1MUq7CYGb&9#p6j3fDv#P=Sg@kwHVmRA_nqo zKIB0#12aCD(hCfA`YDqb-GI}Y>_!E;nzyF6>r=M$=XeBZ4BnZ;P{@LF*W=6L? ztN43aVQfyAy9KQ{J3ZZ)z~*~eKR#RQDsy^V%Ghma%tn#t0)+^n@+oFI=b{K)1=Q?2xL3lR+4`D=r=D^i)`7f}K z493F<2FdT=^$PWHrax?#9+71KBUDyFaLe>nyL~x8#J#sMq#Kkn%(# z!vwF7DDqnar2VSxZC|}E%z@fJu)54l`rAIU=w zl$u082(T>s(WFryw=Mr$A++V-0W!||`8~mA;t20?`}_*S<^G0yU^rF`>|9gxSwaSB zP*rhDvPrU+Yt4oq-kt1}{E+xc^hkF(2~G{Ps5T#K9oank^+tRr^Z+56sipcee^U1H zsvd>Ex~)Bf0f<7Z?d{={v$e9{pH4OH6d)F=t~=}xN-(_cSaTe^Y)z!Q^N|c89j|ju zdo(p-^O_fV0v2a~7!XGKMDgBT7=tPo&(Mf8J;fiy#2Cf<9Df?duHSo1Vr~|eKC%(M zhFyNVwKd4RLuwb%1S&~&1k5FTlVn5l#67LFnTxwISaMmiuZ3H z(>0YE|3NfOs;O!!o>|DNy?CbuX+!C_ZG!?1mR15IYEKI%Lz3(lnalBbET?$C!=K^g zI^L$17~frXlW4u#=l2RLOzlE}eyOsS9Am5#fv`hHxkvu)c?3b7e~-2Q9s`K@Z}GiS ziTi=8zaxy20G#p=b35KM+g<6V=Le^K^s75<*|1D?^40S#e)|%^{@4HQ5$JDG2LeZe7nmtqS_PUn)DlO(|!m&*~?`HR;mq)LhOR-(4KTlZA zDzSAocDD8Y+MT)?#oV@jcN**+_jA*qIs_y%_#PJF_NbXm<`~X&h3X72a{OH3q4@Ui z;jd}-Ka|SKJW2mpefCjG7SVHWKI?cE)zIbGLW(weSy^s0LG9hkYww8JXD}RPDMyKB&XxCw@JlS41q^`&3GANi^+e=u?k|{fIIPdi$G) zig|2~b|$`QZR}BgDk!HlFIqClk*<5cg5*>oRXx3E(r9Y1EgBvITP)&dggJzttz=s^ z3R5t@QsZR*h*gKbe>&{3Vl@mm5n+mXyGvi9NMR=D!SW=7_FL~I?8~lL#X>Qe0Y5~3 z0DgkjW^RxNN@s_QF@3%`9olFbnmFJ2ilKT(F3i$a>BdxN5r)Faf-il?p0WTDeBrpo-! za)r_QlYfyBTZkM-QE2v1jQJm!Hh&tzCYs|R-3eUUG~knV;YYoaX7w-nYKq}1{fq(4 zY>KRdH6*+RV%T8XApdHqXy}o1&5rpmPIIYKS~-q5Hw$%wK*3GaKi17b#ta))xUP%E zWam;;bq%pXd;;U*r)L)1-5Z(7%-KNuJ$??cDFMDTWcVSPkE;v@&Jtl1XOYxTxz~o28{ZDEK3gEgzOpy54Zu@^ zc48?WQRduVFYT}zKu38@5pDm%wIM!=Vs1r0!|T4@ltH3+7~R14mx9E{4#E<3?172~ zL?u5bDX%_=l~khWH!;N2u+L>{h=2W?FFgP!4}6|olMyW^a*Vtu7}syHyQ`c=i5hCC zw==OBn7OxQ@$OadCGFZ(CZX_H^KA8P@G$W}?1U>+U?EW5(- zIpwCSJWc0z2q}3=&10MgONvk){t#M-dI*yt`g3M{+faR(3Dt|1PO(ZHW<%Hj)=<1I zwXOHE)oE;3MM-v;7{u@is#R$a5wSwB3g5k2~Vx;EJJQHlX~ z-u@QEf)KWb^G14C-S?u@T<2JJ*X^pV5osX`$KQx9Sqs!i92F9IXWu`mRPm8??fZ`RV9S^{T@3SnLJWNBfVF?y> z&^pXDq!-&y=>6l?0Fc0Q@OU&ehj0)YK4@@gb$II=rc*XHc`7A)#dCB4x_&IqL=1aKTB9(Ef^0c~e)8CImz0zo zwie_%cbKAl{w|8YHJrwww+taVq z+)xdu^W+u?#X2G=@%CbbH@ks3$oF!!5OVK%y0Yar|ElUk@Ro){fsCg%Nr6_;bC_sk zX$v0GHSz-tS8cnW@4odyf(0HGTf^z+-o(Ca4bIk>oP%WbjF1+HHjrsvZwpx^8hvjR z+OS^Gv-{(eUoUL$w|2HbReC>4c$Nmew-SJ~Hr< zJv`ccBQ7*&X2Bwc77Q+;s@tDmNAzn(y88StNg~B9+>VqSZ5At2tJOnmj_WbI#6+(X z_|q9ajak1F(Kc#?Z(lhRKXi%`u0%jMwN0`?Ma*2JQvLz8GJ9%$uBiy>ywGXkC zOv~*(@%4EiByP&~gMd$Jphe1%a5Wk2&IGdh%7iSkre$|{wQv8L_`!+-q5zc!X@mQf zll$vE;WO(L;ciD;L3`7jo`wI4TDX2ctAEq1x*{s|0StgC=+@x9(D0q)zqdFp7?G|t z>j*5Qt6Wu$B>KDit_lt$`mxH+Au_wX8%TUN+sE^A+9`EQi!_ODxa5yM7(XP>sx}^e z>kxj3j2b1ZiwG~{5zwxD*tv54qM4+^M zoYO2}02Y5eO#J~i26mC-OMqH`X;np`AAh6R)7`>!N6CeO4yyjPzw-8nFDpmhF1yQ} z;!|I!tR2?D+sKUo?K3_=BDAR`n&T~ zK}O!}JH0^`1YUhmr|UB8j(nr6r$KMl8v;ATr=)sNwX~$hZ0|DHpEjy}IeY$H(q+zY zi1zmUBD&11dj$+7=UhJfEmVz!&ZEZfvbKHOQ}pl4eV#SMz$Z^LYl^A`-~WFWLjFc& zAKOAr?wyilr~Sy(iHzyDV0Of_A}RoHJ&?9&uq`^y(6=SSqT^d25ac<1o@f?nYsR2W z+?P-M$?;N~@b~E%1dzcXZYynFIJ{RG%ENOzCfiWkKv3kBxWNNB}l4{0JZx_K+Nj&SWL;CVtxm+u>>#qQlmFaR&; z^m#m$qoeVRT$z3P)0{4px4pG>#JXl+em<;)P7caL%DWU#y(4ToUdeSdoQ+ghWrJpE zu$}f`Wvp4jLi?Mc){;j(T8S_gPzBUY1E1UyDw@ApHHbh-K=#rL$}GdV|LARZG8cKL zq8n4t-+o0PjuK$%*gODS+Va2mY#kj%K&j37fp;71Ol$_@k{`8cbYl}1XOHhK9`3`(!|a> ztsR~VR7BCChm&{q${VkSb+uf5k7$7its}N;AUv8v8J8-`L2;q2ArW)xXaiLy@KQdc z>-Y!QPS?)PBO95CoKCn&*i>()bk%abRrdF<2HX@U3n118P3$ob1#|>qC{;PF<@)u6 zj*Jn2jzSBJOAxRtzi1Zwug!?vx3m%KkSLE%(?>j6Y98*D#&rd;O5Mx4B4wwRJBSmX z5#1_-uquES*0+Ehkua;8gT(Ev_=8m#KwzQXItXqG+;?kX@T|S+kAY1yXM@x5Ro`_h z;ybWdQ(d0Qy)Wgpw#i&SlaA52x!n+IGX9aS7O6|c%+sOb)Ps=`c0egd12}03QR#7EY$H1I}N1(YLp?9M#cxA@@1LKOIeC@!` z`!BMsYhL%^bq%Y2It&IBC=3=Jx~I@Ne0^}x@pFnZ0b51*yugu!Rry`ESgfiEE zjGTtGG23s0Y2Ad7NKjxGTFlJ$y#f;j_wUBbasGZ5UK4=lMR2X6HO)563SHh67EGGl zUN%?4ZYnQJvK_3C65B6NVZs~f6_o83{sG$_x3LRvFl4CW*K5q4;~VHB&#UfGAL32K zveP9`8}xcyoWJd6gdrFzjQdxZ?>e*SrPJ+5hS8DZ$8QD0?Sa(7(co5~Uh+y!`{lW0 z>vH${;ESFk7U)vcY&0}rXYj|F0C8<->wG}_`6;X}S!T+i*~l(^&$?8m1>gx774r%S zNY#HsnxrjtD8Zn=oA#|JH)-Vd=(iBhq-oa?lXoZ;vqa$S?TpDj{VY%?ynXA diff --git a/external/epid-sdk-3.0.0/doc/html/epid_diagram_issuer_high_level.png b/external/epid-sdk-3.0.0/doc/html/epid_diagram_issuer_high_level.png deleted file mode 100644 index d03d6b9fdb1f216d83576b612707bbf5601874d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4857 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 ul > li > div { - display: none; -} - -/* Shift remaining nav-tree nodes left */ -#nav-tree-contents > ul { - margin: 0; - padding: 0; - margin-left: -16px; - margin-top: -2em; /* nav-tree hack*/ -} - -#projectlink { - color:inherit; - text-decoration:none; -} \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/errors_8h.html b/external/epid-sdk-3.0.0/doc/html/errors_8h.html deleted file mode 100644 index ecda4e4c..00000000 --- a/external/epid-sdk-3.0.0/doc/html/errors_8h.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/errors.h File Reference - - - - - - - - - - - - -

-
- -
-
-
- -
-
- -
-
errors.h File Reference
-
-
- -

Error reporting. -More...

- - - - - -

-Enumerations

enum  EpidStatus {
-  kEpidNoErr = 0, -kEpidSigValid = 0, -kEpidSigInvalid = 1, -kEpidSigRevokedInGroupRl = 2, -
-  kEpidSigRevokedInPrivRl = 3, -kEpidSigRevokedInSigRl = 4, -kEpidSigRevokedInVerifierRl = 5, -kEpidErr = -999, -
-  kEpidNotImpl, -kEpidBadArgErr, -kEpidNoMemErr, -kEpidMemAllocErr, -
-  kEpidMathErr, -kEpidDivByZeroErr, -kEpidUnderflowErr, -kEpidHashAlgorithmNotSupported, -
-  kEpidRandMaxIterErr, -kEpidDuplicateErr, -kEpidInconsistentBasenameSetErr, -kEpidMathQuadraticNonResidueError -
- }
 Return status for SDK functions. More...
 
- - - - -

-Functions

char const * EpidStatusToString (EpidStatus e)
 Returns string representation of error code. More...
 
-

Detailed Description

-

Error reporting.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/examples_8dox.html b/external/epid-sdk-3.0.0/doc/html/examples_8dox.html deleted file mode 100644 index 0114afb9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/examples_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/examples.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/examples.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/file__parser_8h.html b/external/epid-sdk-3.0.0/doc/html/file__parser_8h.html deleted file mode 100644 index 5b29071b..00000000 --- a/external/epid-sdk-3.0.0/doc/html/file__parser_8h.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/file_parser.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
file_parser.h File Reference
-
-
- -

Epid issuer material parsing utilities. -More...

-
#include <stddef.h>
-#include "epid/common/types.h"
-#include "epid/common/errors.h"
-
- - - - - - - -

-Data Structures

struct  EpidFileHeader
 Intel(R) EPID binary file header. More...
 
struct  EpidCaCertificate
 IoT CA Certificate binary format. More...
 
- - - - - - - -

-Enumerations

enum  EpidVersion { kEpid1x, -kEpid2x, -kNumEpidVersions - }
 Recognized Intel(R) EPID versions. More...
 
enum  EpidFileType {
-  kIssuingCaPubKeyFile, -kGroupPubKeyFile, -kPrivRlFile, -kSigRlFile, -
-  kGroupRlFile, -kPrivRlRequestFile, -kSigRlRequestFile, -kGroupRlRequestFile, -
-  kNumFileTypes -
- }
 Recognized Intel(R) EPID file types. More...
 
- - - - - - - - - - - - - - - - -

-Functions

EpidStatus EpidParseFileHeader (void const *buf, size_t len, EpidVersion *epid_version, EpidFileType *file_type)
 Extracts Intel(R) EPID Binary Output File header information. More...
 
EpidStatus EpidParseGroupPubKeyFile (void const *buf, size_t len, EpidCaCertificate const *cert, GroupPubKey *pubkey)
 Extracts group public key from buffer in issuer binary format. More...
 
EpidStatus EpidParsePrivRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, PrivRl *rl, size_t *rl_len)
 Extracts private key revocation list from buffer in issuer binary format. More...
 
EpidStatus EpidParseSigRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, SigRl *rl, size_t *rl_len)
 Extracts signature revocation list from buffer in issuer binary format. More...
 
EpidStatus EpidParseGroupRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, GroupRl *rl, size_t *rl_len)
 Extracts group revocation list from buffer in issuer binary format. More...
 
- - - - - - - -

-Variables

-const OctStr16 kEpidVersionCode [kNumEpidVersions]
 Encoding of issuer material Intel(R) EPID versions.
 
-const OctStr16 kEpidFileTypeCode [kNumFileTypes]
 Encoding of issuer material file types.
 
-

Detailed Description

-

Epid issuer material parsing utilities.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/files.html b/external/epid-sdk-3.0.0/doc/html/files.html deleted file mode 100644 index ab34f5b2..00000000 --- a/external/epid-sdk-3.0.0/doc/html/files.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: File List - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
-
[detail level 1234]
- - - - - - - - - - - - - - - - - - - - - - - - - -
  epidCore Intel® EPID functionality
  commonCommon code shared between core sub-components
  1.1
 file_parser.hEpid 1.1 issuer material parsing utilities
 types.hSDK data types for Intel(R) EPID 1.1
  mathMath primitives
 bignum.hBig number interface
 ecdsa.hEcdsa interface
 ecgroup.hElliptic curve group interface
 finitefield.hFinite field interface
 hash.hHash primitives
 pairing.hPairing interface
 printutils.hPrint helper interface
 tatepairing.hIntel(R) EPID 1.1 Pairing interface
 bitsupplier.hRandom data supplier interface
 errors.hError reporting
 file_parser.hEpid issuer material parsing utilities
 stdtypes.hC99 standard data types
 types.hSDK data types
  memberMember functionality
 api.hIntel(R) EPID SDK member API
  verifierVerifier functionality
  1.1
 api.hIntel(R) EPID SDK verifier Intel(R) EPID 1.1 API
 api.hIntel(R) EPID SDK verifier API
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/finitefield_8h.html b/external/epid-sdk-3.0.0/doc/html/finitefield_8h.html deleted file mode 100644 index ca7b07f7..00000000 --- a/external/epid-sdk-3.0.0/doc/html/finitefield_8h.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math/finitefield.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
finitefield.h File Reference
-
-
- -

Finite field interface. -More...

- - - - - - - - -

-Typedefs

-typedef struct FiniteField FiniteField
 A finite field.
 
-typedef struct FfElement FfElement
 An element in a finite field.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewFiniteField (BigNumStr const *prime, FiniteField **ff)
 Creates new finite field. More...
 
EpidStatus NewFiniteFieldViaBinomalExtension (FiniteField const *ground_field, FfElement const *ground_element, int degree, FiniteField **ff)
 Creates a new finite field using binomial extension. More...
 
EpidStatus NewFiniteFieldViaPolynomialExtension (FiniteField const *ground_field, BigNumStr const *irr_polynomial, int degree, FiniteField **ff)
 Creates a new finite field using polynomial extension. More...
 
void DeleteFiniteField (FiniteField **ff)
 Frees a previously allocated FiniteField. More...
 
EpidStatus NewFfElement (FiniteField const *ff, FfElement **new_ff_elem)
 Creates a new finite field element. More...
 
void DeleteFfElement (FfElement **ff_elem)
 Frees a previously allocated FfElement. More...
 
EpidStatus ReadFfElement (FiniteField *ff, void const *ff_elem_str, size_t strlen, FfElement *ff_elem)
 Deserializes a FfElement from a string. More...
 
EpidStatus InitFfElementFromBn (FiniteField *ff, BigNum *bn, FfElement *ff_elem)
 Initializes an existing FfElement from a BigNum. More...
 
EpidStatus WriteFfElement (FiniteField *ff, FfElement const *ff_elem, void *ff_elem_str, size_t strlen)
 Serializes a finite field element to a string. More...
 
EpidStatus FfNeg (FiniteField *ff, FfElement const *a, FfElement *r)
 Calculates the additive inverse of a finite field element. More...
 
EpidStatus FfInv (FiniteField *ff, FfElement const *a, FfElement *r)
 Calculates the multiplicative inverse of a finite field element. More...
 
EpidStatus FfAdd (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Adds two finite field elements. More...
 
EpidStatus FfSub (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Subtracts two finite field elements. More...
 
EpidStatus FfMul (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Multiplies two finite field elements. More...
 
EpidStatus FfIsZero (FiniteField *ff, FfElement const *a, bool *is_zero)
 Checks if given finite field element is the additive identity (zero). More...
 
EpidStatus FfExp (FiniteField *ff, FfElement const *a, BigNum const *b, FfElement *r)
 Raises an element of a finite field to a power. More...
 
EpidStatus FfMultiExp (FiniteField *ff, FfElement const **a, BigNumStr const **b, size_t m, FfElement *r)
 Multi-exponentiates finite field elements. More...
 
EpidStatus FfMultiExpBn (FiniteField *ff, FfElement const **a, BigNum const **b, size_t m, FfElement *r)
 Multi-exponentiates finite field elements. More...
 
EpidStatus FfSscmMultiExp (FiniteField *ff, FfElement const **a, BigNumStr const **b, size_t m, FfElement *r)
 Software side-channel mitigated implementation of FfMultiExp. More...
 
EpidStatus FfIsEqual (FiniteField *ff, FfElement const *a, FfElement const *b, bool *is_equal)
 Checks if two finite field elements are equal. More...
 
EpidStatus FfHash (FiniteField *ff, void const *msg, size_t msg_len, HashAlg hash_alg, FfElement *r)
 Hashes an arbitrary message to an element in a finite field. More...
 
EpidStatus FfGetRandom (FiniteField *ff, BigNumStr const *low_bound, BitSupplier rnd_func, void *rnd_param, FfElement *r)
 Generate random finite field element. More...
 
EpidStatus FfSqrt (FiniteField *ff, FfElement const *a, FfElement *r)
 Finds a square root of a finite field element. More...
 
-

Detailed Description

-

Finite field interface.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/folderclosed.png b/external/epid-sdk-3.0.0/doc/html/folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/external/epid-sdk-3.0.0/doc/html/functions.html b/external/epid-sdk-3.0.0/doc/html/functions.html deleted file mode 100644 index ee04435e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/functions.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Data Fields - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
- -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- k -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- q -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- v -

- - -

- w -

- - -

- x -

- - -

- y -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/functions_vars.html b/external/epid-sdk-3.0.0/doc/html/functions_vars.html deleted file mode 100644 index 056b9bc5..00000000 --- a/external/epid-sdk-3.0.0/doc/html/functions_vars.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Data Fields - Variables - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- k -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- q -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- v -

- - -

- w -

- - -

- x -

- - -

- y -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals.html b/external/epid-sdk-3.0.0/doc/html/globals.html deleted file mode 100644 index bc81e4fc..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- _ -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_b.html b/external/epid-sdk-3.0.0/doc/html/globals_b.html deleted file mode 100644 index 32e65967..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_b.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- b -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_d.html b/external/epid-sdk-3.0.0/doc/html/globals_d.html deleted file mode 100644 index 5a581ac5..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_d.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- d -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_defs.html b/external/epid-sdk-3.0.0/doc/html/globals_defs.html deleted file mode 100644 index 32be0f52..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_defs.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_e.html b/external/epid-sdk-3.0.0/doc/html/globals_e.html deleted file mode 100644 index 4d01760d..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_e.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- e -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_enum.html b/external/epid-sdk-3.0.0/doc/html/globals_enum.html deleted file mode 100644 index e5d8f319..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_enum.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_eval.html b/external/epid-sdk-3.0.0/doc/html/globals_eval.html deleted file mode 100644 index d509456e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_eval.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-  - -

- k -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_f.html b/external/epid-sdk-3.0.0/doc/html/globals_f.html deleted file mode 100644 index a7623e41..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_f.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- f -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_func.html b/external/epid-sdk-3.0.0/doc/html/globals_func.html deleted file mode 100644 index e1724354..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_func.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-  - -

- b -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- i -

- - -

- n -

- - -

- p -

- - -

- r -

- - -

- s -

    -
  • Sha256MessageDigest() -: hash.h -
  • -
- - -

- w -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_g.html b/external/epid-sdk-3.0.0/doc/html/globals_g.html deleted file mode 100644 index 73f98a59..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_g.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- g -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_h.html b/external/epid-sdk-3.0.0/doc/html/globals_h.html deleted file mode 100644 index 227a488b..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_h.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- h -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_i.html b/external/epid-sdk-3.0.0/doc/html/globals_i.html deleted file mode 100644 index cd8c032e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_i.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- i -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_k.html b/external/epid-sdk-3.0.0/doc/html/globals_k.html deleted file mode 100644 index b403cac4..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_k.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- k -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_m.html b/external/epid-sdk-3.0.0/doc/html/globals_m.html deleted file mode 100644 index 4e74e83a..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_m.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- m -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_n.html b/external/epid-sdk-3.0.0/doc/html/globals_n.html deleted file mode 100644 index 2edd5a5f..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_n.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- n -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_p.html b/external/epid-sdk-3.0.0/doc/html/globals_p.html deleted file mode 100644 index 45b4ea43..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_p.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- p -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_r.html b/external/epid-sdk-3.0.0/doc/html/globals_r.html deleted file mode 100644 index 9d6af060..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_r.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- r -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_s.html b/external/epid-sdk-3.0.0/doc/html/globals_s.html deleted file mode 100644 index ffba267a..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_s.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- s -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_t.html b/external/epid-sdk-3.0.0/doc/html/globals_t.html deleted file mode 100644 index 7e7f3e8c..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_t.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- t -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_type.html b/external/epid-sdk-3.0.0/doc/html/globals_type.html deleted file mode 100644 index 1dfada33..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_type.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_v.html b/external/epid-sdk-3.0.0/doc/html/globals_v.html deleted file mode 100644 index dfd30988..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_v.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- v -

    -
  • VerifierCtx -: api.h -
  • -
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_vars.html b/external/epid-sdk-3.0.0/doc/html/globals_vars.html deleted file mode 100644 index ea821a9f..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_vars.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/globals_w.html b/external/epid-sdk-3.0.0/doc/html/globals_w.html deleted file mode 100644 index 49073427..00000000 --- a/external/epid-sdk-3.0.0/doc/html/globals_w.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Globals - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- w -

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/glossary_8dox.html b/external/epid-sdk-3.0.0/doc/html/glossary_8dox.html deleted file mode 100644 index e8cf60a4..00000000 --- a/external/epid-sdk-3.0.0/doc/html/glossary_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/glossary.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/glossary.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.html deleted file mode 100644 index b71ca763..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: bignum - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
bignum
-
-
- -

Big number operations. -More...

- - - - - -

-Typedefs

-typedef struct BigNum BigNum
 Internal representation of large numbers.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewBigNum (size_t data_size_bytes, BigNum **bignum)
 Constructs a new BigNum. More...
 
void DeleteBigNum (BigNum **bignum)
 Deletes a previously allocated BigNum. More...
 
EpidStatus ReadBigNum (void const *bn_str, size_t strlen, BigNum *bn)
 Deserializes a BigNum from a string. More...
 
EpidStatus WriteBigNum (BigNum const *bn, size_t strlen, void *bn_str)
 Serializes a BigNum to a string. More...
 
EpidStatus BigNumAdd (BigNum const *a, BigNum const *b, BigNum *r)
 Adds two BigNum values. More...
 
EpidStatus BigNumSub (BigNum const *a, BigNum const *b, BigNum *r)
 Subtracts two BigNum values. More...
 
EpidStatus BigNumMul (BigNum const *a, BigNum const *b, BigNum *r)
 Multiplies two BigNum values. More...
 
EpidStatus BigNumDiv (BigNum const *a, BigNum const *b, BigNum *q, BigNum *r)
 Divides two BigNum values. More...
 
EpidStatus BigNumMod (BigNum const *a, BigNum const *b, BigNum *r)
 Computes modular reduction for BigNum value by specified modulus. More...
 
EpidStatus BigNumIsEven (BigNum const *a, bool *is_even)
 Checks if a BigNum is even. More...
 
EpidStatus BigNumIsZero (BigNum const *a, bool *is_zero)
 Checks if a BigNum is zero. More...
 
EpidStatus BigNumPow2N (unsigned int n, BigNum *r)
 Raises 2 to the given power. More...
 
-

Detailed Description

-

Big number operations.

-

This module provides an API for working with large numbers. BigNums represent non-negative integers.

-

Each BigNum variable represents a number of a byte-size set when the variable was created. BigNum variables cannot be re-sized after they are created.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus BigNumAdd (BigNum const * a,
BigNum const * b,
BigNumr 
)
-
- -

Adds two BigNum values.

-
Parameters
- - - - -
[in]aThe first operand to be added.
[in]bThe second operand to be added.
[out]rThe result of adding a and b.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus BigNumDiv (BigNum const * a,
BigNum const * b,
BigNumq,
BigNumr 
)
-
- -

Divides two BigNum values.

-
Note
Only needed for Intel(R) EPID 1.1 verification.
-
Parameters
- - - - - -
[in]aDividend parameter.
[in]bDivisor parameter.
[out]qQuotient of result.
[out]rRemainder of result.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus BigNumIsEven (BigNum const * a,
boolis_even 
)
-
- -

Checks if a BigNum is even.

-
Parameters
- - - -
[in]aThe BigNum to check.
[out]is_evenThe result of the check.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus BigNumIsZero (BigNum const * a,
boolis_zero 
)
-
- -

Checks if a BigNum is zero.

-
Parameters
- - - -
[in]aThe BigNum to check.
[out]is_zeroThe result of the check.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus BigNumMod (BigNum const * a,
BigNum const * b,
BigNumr 
)
-
- -

Computes modular reduction for BigNum value by specified modulus.

-
Parameters
- - - - -
[in]aThe BigNum value.
[in]bThe modulus.
[out]rModular reduction result.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus BigNumMul (BigNum const * a,
BigNum const * b,
BigNumr 
)
-
- -

Multiplies two BigNum values.

-
Parameters
- - - - -
[in]aThe first operand to be multiplied.
[in]bThe second operand to be multiplied.
[out]rThe result of multiplying a and b.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus BigNumPow2N (unsigned int n,
BigNumr 
)
-
- -

Raises 2 to the given power.

-
Parameters
- - - -
[in]nThe power.
[out]rThe result of 2^n.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus BigNumSub (BigNum const * a,
BigNum const * b,
BigNumr 
)
-
- -

Subtracts two BigNum values.

-
Parameters
- - - - -
[in]aThe first operand to use in subtraction.
[in]bThe second operand to use in subtraction.
[out]rThe result of subtracting a and b.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - -
void DeleteBigNum (BigNum ** bignum)
-
- -

Deletes a previously allocated BigNum.

-

Frees memory pointed to by bignum. Nulls the pointer.

-
Parameters
- - -
[in]bignumThe BigNum. Can be NULL.
-
-
-
See also
NewBigNum
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus NewBigNum (size_t data_size_bytes,
BigNum ** bignum 
)
-
- -

Constructs a new BigNum.

-

Allocates memory and creates a new BigNum.

-

Use DeleteBigNum() to free memory.

-
Parameters
- - - -
[in]data_size_bytesThe size in bytes of the new number.
[out]bignumThe BigNum.
-
-
-
Returns
EpidStatus
-
See also
DeleteBigNum
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus ReadBigNum (void const * bn_str,
size_t strlen,
BigNumbn 
)
-
- -

Deserializes a BigNum from a string.

-
Parameters
- - - - -
[in]bn_strThe serialized value.
[in]strlenThe size of bn_str in bytes.
[out]bnThe target BigNum.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus WriteBigNum (BigNum const * bn,
size_t strlen,
void * bn_str 
)
-
- -

Serializes a BigNum to a string.

-
Parameters
- - - - -
[in]bnThe BigNum to be serialized.
[in]strlenThe size of bn_str in bytes.
[out]bn_strThe target string.
-
-
-
Returns
EpidStatus
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.js deleted file mode 100644 index ccdcec2b..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___big_num_primitives.js +++ /dev/null @@ -1,16 +0,0 @@ -var group___big_num_primitives = -[ - [ "BigNum", "group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718", null ], - [ "BigNumAdd", "group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8", null ], - [ "BigNumDiv", "group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573", null ], - [ "BigNumIsEven", "group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084", null ], - [ "BigNumIsZero", "group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb", null ], - [ "BigNumMod", "group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929", null ], - [ "BigNumMul", "group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317", null ], - [ "BigNumPow2N", "group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4", null ], - [ "BigNumSub", "group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea", null ], - [ "DeleteBigNum", "group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03", null ], - [ "NewBigNum", "group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed", null ], - [ "ReadBigNum", "group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024", null ], - [ "WriteBigNum", "group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.html deleted file mode 100644 index 8c143ca0..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.html +++ /dev/null @@ -1,1198 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: ecgroup - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
ecgroup
-
-
- -

Elliptic curve group operations. -More...

- - - - - - - - -

-Typedefs

-typedef struct EcGroup EcGroup
 Elliptic curve group over finite field.
 
-typedef struct EcPoint EcPoint
 Point on elliptic curve over finite field.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewEcGroup (FiniteField const *ff, FfElement const *a, FfElement const *b, FfElement const *x, FfElement const *y, BigNum const *order, BigNum const *cofactor, EcGroup **g)
 Constructs a new EcGroup. More...
 
void DeleteEcGroup (EcGroup **g)
 Deletes a previously allocated EcGroup. More...
 
EpidStatus NewEcPoint (EcGroup const *g, EcPoint **p)
 Creates a new EcPoint. More...
 
void DeleteEcPoint (EcPoint **p)
 Deletes a previously allocated EcPoint. More...
 
EpidStatus ReadEcPoint (EcGroup *g, void const *p_str, size_t strlen, EcPoint *p)
 Deserializes an EcPoint from a string. More...
 
EpidStatus WriteEcPoint (EcGroup *g, EcPoint const *p, void *p_str, size_t strlen)
 Serializes an EcPoint to a string. More...
 
EpidStatus EcMul (EcGroup *g, EcPoint const *a, EcPoint const *b, EcPoint *r)
 Multiplies two elements in an elliptic curve group. More...
 
EpidStatus EcExp (EcGroup *g, EcPoint const *a, BigNumStr const *b, EcPoint *r)
 Raises a point in an elliptic curve group to a power. More...
 
EpidStatus EcSscmExp (EcGroup *g, EcPoint const *a, BigNumStr const *b, EcPoint *r)
 Software side-channel mitigated implementation of EcExp. More...
 
EpidStatus EcMultiExp (EcGroup *g, EcPoint const **a, BigNumStr const **b, size_t m, EcPoint *r)
 Multi-exponentiates elements in elliptic curve group. More...
 
EpidStatus EcMultiExpBn (EcGroup *g, EcPoint const **a, BigNum const **b, size_t m, EcPoint *r)
 Multi-exponentiates elements in elliptic curve group. More...
 
EpidStatus EcSscmMultiExp (EcGroup *g, EcPoint const **a, BigNumStr const **b, size_t m, EcPoint *r)
 Software side-channel mitigated implementation of EcMultiExp. More...
 
EpidStatus EcGetRandom (EcGroup *g, BitSupplier rnd_func, void *rnd_func_param, EcPoint *r)
 Generates a random element from an elliptic curve group. More...
 
EpidStatus EcInGroup (EcGroup *g, void const *p_str, size_t strlen, bool *in_group)
 Checks if a point is in an elliptic curve group. More...
 
EpidStatus Epid11EcHash (EcGroup *g, void const *msg, size_t msg_len, EcPoint *r)
 Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group. More...
 
EpidStatus EcHash (EcGroup *g, void const *msg, size_t msg_len, HashAlg hash_alg, EcPoint *r)
 Hashes an arbitrary message to an element in an elliptic curve group. More...
 
EpidStatus EcMakePoint (EcGroup *g, FfElement const *x, EcPoint *r)
 Sets an EcPoint variable to a point on a curve. More...
 
EpidStatus EcInverse (EcGroup *g, EcPoint const *p, EcPoint *r)
 Computes the additive inverse of an EcPoint. More...
 
EpidStatus EcIsEqual (EcGroup *g, EcPoint const *a, EcPoint const *b, bool *is_equal)
 Checks if two EcPoints are equal. More...
 
EpidStatus EcIsIdentity (EcGroup *g, EcPoint const *p, bool *is_identity)
 Checks if an EcPoint is the identity element. More...
 
-

Detailed Description

-

Elliptic curve group operations.

-

Provides APIs for working with Elliptic curve groups. Elliptic curve groups allow simple mathematical operations based on points that lie on a defined elliptic curve. The results of these operations also lie on the same curve.

-

Curves themselves are defined based on elements (FfElement) of a finite field (FiniteField).

-

Function Documentation

- -
-
- - - - - - - - -
void DeleteEcGroup (EcGroup ** g)
-
- -

Deletes a previously allocated EcGroup.

-

Frees memory pointed to by elliptic curve group. Nulls the pointer.

-
Parameters
- - -
[in]gThe elliptic curve group. Can be NULL.
-
-
-
See also
NewEcGroup
- -
-
- -
-
- - - - - - - - -
void DeleteEcPoint (EcPoint ** p)
-
- -

Deletes a previously allocated EcPoint.

-

Frees memory used by a point on elliptic curve group. Nulls the pointer.

-
Parameters
- - -
[in]pThe EcPoint. Can be NULL.
-
-
-
See also
NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcExp (EcGroupg,
EcPoint const * a,
BigNumStr const * b,
EcPointr 
)
-
- -

Raises a point in an elliptic curve group to a power.

-

This exponentiation operation is also known as element multiplication for elliptic curve groups.

Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]aThe base.
[in]bThe power. Power must be less than the order of the elliptic curve group.
[out]rThe result of raising a to the power b.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcGetRandom (EcGroupg,
BitSupplier rnd_func,
void * rnd_func_param,
EcPointr 
)
-
- -

Generates a random element from an elliptic curve group.

-

This function is only available for G1 and GT.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]rnd_funcRandom number generator.
[in]rnd_func_paramPass through context data for rnd_func.
[in,out]rOutput random elliptic curve element.
-
-
-
Returns
EpidStatus
-
See also
NewEcPoint
-
-BitSupplier
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcHash (EcGroupg,
void const * msg,
size_t msg_len,
HashAlg hash_alg,
EcPointr 
)
-
- -

Hashes an arbitrary message to an element in an elliptic curve group.

-
Parameters
- - - - - - -
[in]gThe elliptic curve group.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[in]hash_algThe hash algorithm.
[out]rThe hashed value.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcInGroup (EcGroupg,
void const * p_str,
size_t strlen,
boolin_group 
)
-
- -

Checks if a point is in an elliptic curve group.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]p_strA serialized point. Must be a G1ElemStr or G2ElemStr.
[in]strlenThe size of p_str in bytes.
[out]in_groupThe result of the check.
-
-
-
Returns
EpidStatus
-
See also
NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcInverse (EcGroupg,
EcPoint const * p,
EcPointr 
)
-
- -

Computes the additive inverse of an EcPoint.

-

This inverse operation is also known as element negation for elliptic curve groups.

-
Parameters
- - - - -
[in]gThe elliptic curve group.
[in]pThe point.
[out]rThe inverted point.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcIsEqual (EcGroupg,
EcPoint const * a,
EcPoint const * b,
boolis_equal 
)
-
- -

Checks if two EcPoints are equal.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]aA point to check.
[in]bAnother point to check.
[out]is_equalThe result of the check.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcIsIdentity (EcGroupg,
EcPoint const * p,
boolis_identity 
)
-
- -

Checks if an EcPoint is the identity element.

-

Takes a group element P as input. It outputs true if P is the identity element of G. Otherwise, it outputs false.

-
Parameters
- - - - -
[in]gThe elliptic curve group.
[in]pThe point to check.
[out]is_identityThe result of the check.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcMakePoint (EcGroupg,
FfElement const * x,
EcPointr 
)
-
- -

Sets an EcPoint variable to a point on a curve.

-

This function is only available for G1.

-
Parameters
- - - - -
[in]gThe elliptic curve group.
[in]xThe x coordinate.
[out]rThe point.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcMul (EcGroupg,
EcPoint const * a,
EcPoint const * b,
EcPointr 
)
-
- -

Multiplies two elements in an elliptic curve group.

-

This multiplication operation is also known as element addition for elliptic curve groups.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]aThe first operand to be multiplied.
[in]bThe second operand to be multiplied.
[out]rThe result of multiplying a and b.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcMultiExp (EcGroupg,
EcPoint const ** a,
BigNumStr const ** b,
size_t m,
EcPointr 
)
-
- -

Multi-exponentiates elements in elliptic curve group.

-

Takes a group elements a[0], ... , a[m-1] in G and positive integers b[0], ..., b[m-1], where m is a small positive integer. Outputs r (in G) = EcExp(a[0],b[0]) * ... * EcExp(a[m-1],b[m-1]).

-
Parameters
- - - - - - -
[in]gThe elliptic curve group.
[in]aThe bases.
[in]bThe powers. Power must be less than the order of the elliptic curve group.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcMultiExpBn (EcGroupg,
EcPoint const ** a,
BigNum const ** b,
size_t m,
EcPointr 
)
-
- -

Multi-exponentiates elements in elliptic curve group.

-

Takes a group elements a[0], ... , a[m-1] in G and positive integers b[0], ..., b[m-1], where m is a small positive integer. Outputs r (in G) = EcExp(a[0],b[0]) * ... * EcExp(a[m-1],b[m-1]).

-
Parameters
- - - - - - -
[in]gThe elliptic curve group.
[in]aThe bases.
[in]bThe powers. Power must be less than the order of the elliptic curve group.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcSscmExp (EcGroupg,
EcPoint const * a,
BigNumStr const * b,
EcPointr 
)
-
- -

Software side-channel mitigated implementation of EcExp.

-

This exponentiation operation is also known as element multiplication for elliptic curve groups.

-
Attention
The reference implementation of EcSscmExp calls EcExp directly because the implementation of EcExp is already side channel mitigated. Implementers providing their own versions of this function are responsible for ensuring that EcSscmExp is side channel mitigated per section 8 of the Intel(R) EPID 2.0 spec.
-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]aThe base.
[in]bThe power. Power must be less than the order of the elliptic curve group.
[out]rThe result of raising a to the power b.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcSscmMultiExp (EcGroupg,
EcPoint const ** a,
BigNumStr const ** b,
size_t m,
EcPointr 
)
-
- -

Software side-channel mitigated implementation of EcMultiExp.

-

Takes a group elements a[0], ... , a[m-1] in G and positive integers b[0], ..., b[m-1], where m is a small positive integer. Outputs r (in G) = EcExp(a[0],b[0]) * ... * EcExp(a[m-1],b[m-1]).

-
Attention
The reference implementation of EcSscmMultiExp calls EcMultiExp directly because the implementation of EcMultiExp is already side channel mitigated. Implementers providing their own versions of this function are responsible for ensuring that EcSscmMultiExp is side channel mitigated per section 8 of the Intel(R) EPID 2.0 spec.
-
Parameters
- - - - - - -
[in]gThe elliptic curve group.
[in]aThe bases.
[in]bThe powers. Power must be less than the order of the elliptic curve group.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11EcHash (EcGroupg,
void const * msg,
size_t msg_len,
EcPointr 
)
-
- -

Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[out]rThe hashed value.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus NewEcGroup (FiniteField const * ff,
FfElement const * a,
FfElement const * b,
FfElement const * x,
FfElement const * y,
BigNum const * order,
BigNum const * cofactor,
EcGroup ** g 
)
-
- -

Constructs a new EcGroup.

-

Allocates memory and creates a new elliptic curve group.

-

Use DeleteFiniteField() to free memory.

-
Parameters
- - - - - - - - - -
[in]ffThe finite field on which the curve is based.
[in]aThe A value of the elliptic curve.
[in]bThe B value of the elliptic curve.
[in]xThe X-coordinate of the base point of the elliptic curve.
[in]yThe Y-coordinate of the base point of the elliptic curve.
[in]orderThe order of the elliptic curve group.
[in]cofactorThe co-factor of the elliptic curve.
[out]gThe newly constructed elliptic curve group.
-
-
-
Returns
EpidStatus
-
See also
DeleteEcGroup
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus NewEcPoint (EcGroup const * g,
EcPoint ** p 
)
-
- -

Creates a new EcPoint.

-

Allocates memory and creates a new point on elliptic curve group.

-

Use DeleteEcPoint() to free memory.

-
Parameters
- - - -
[in]gElliptic curve group.
[out]pNewly constructed point on the elliptic curve group g.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-DeleteEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus ReadEcPoint (EcGroupg,
void const * p_str,
size_t strlen,
EcPointp 
)
-
- -

Deserializes an EcPoint from a string.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]p_strThe serialized value.
[in]strlenThe size of p_str in bytes.
[out]pThe target EcPoint.
-
-
-
Returns
EpidStatus
-
See also
NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus WriteEcPoint (EcGroupg,
EcPoint const * p,
void * p_str,
size_t strlen 
)
-
- -

Serializes an EcPoint to a string.

-
Parameters
- - - - - -
[in]gThe elliptic curve group.
[in]pThe EcPoint to be serialized.
[out]p_strThe target string.
[in]strlenthe size of p_str in bytes.
-
-
-
Returns
EpidStatus
-
See also
NewEcPoint
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.js deleted file mode 100644 index af74b1c5..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___ec_group_primitives.js +++ /dev/null @@ -1,25 +0,0 @@ -var group___ec_group_primitives = -[ - [ "EcGroup", "group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159", null ], - [ "EcPoint", "group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa", null ], - [ "DeleteEcGroup", "group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea", null ], - [ "DeleteEcPoint", "group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7", null ], - [ "EcExp", "group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270", null ], - [ "EcGetRandom", "group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196", null ], - [ "EcHash", "group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a", null ], - [ "EcInGroup", "group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970", null ], - [ "EcInverse", "group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466", null ], - [ "EcIsEqual", "group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061", null ], - [ "EcIsIdentity", "group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210", null ], - [ "EcMakePoint", "group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e", null ], - [ "EcMul", "group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96", null ], - [ "EcMultiExp", "group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4", null ], - [ "EcMultiExpBn", "group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a", null ], - [ "EcSscmExp", "group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57", null ], - [ "EcSscmMultiExp", "group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4", null ], - [ "Epid11EcHash", "group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc", null ], - [ "NewEcGroup", "group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62", null ], - [ "NewEcPoint", "group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb", null ], - [ "ReadEcPoint", "group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad", null ], - [ "WriteEcPoint", "group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.html deleted file mode 100644 index 50d135d9..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: ecdsa - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
ecdsa
-
-
- -

Elliptic Curve Digital Signature Algorithm Primitives. -More...

- - - - - - - - -

-Functions

EpidStatus EcdsaVerifyBuffer (void const *buf, size_t buf_len, EcdsaPublicKey const *pubkey, EcdsaSignature const *sig)
 Verifies authenticity of a digital signature over a buffer. More...
 
EpidStatus EcdsaSignBuffer (void const *buf, size_t buf_len, EcdsaPrivateKey const *privkey, BitSupplier rnd_func, void *rnd_param, EcdsaSignature *sig)
 Creates ECDSA signature of buffer. More...
 
-

Detailed Description

-

Elliptic Curve Digital Signature Algorithm Primitives.

-

Provides APIs for computing and checking buffer signatures using the Elliptic Curve Digital Signature Algorithm.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcdsaSignBuffer (void const * buf,
size_t buf_len,
EcdsaPrivateKey const * privkey,
BitSupplier rnd_func,
void * rnd_param,
EcdsaSignaturesig 
)
-
- -

Creates ECDSA signature of buffer.

-

Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to generate a signature of the SHA-256 hash of the input buffer with the provided private key.

-

The operation is over the standard secp256r1 curve.

-
Parameters
- - - - - - - -
[in]bufPointer to buffer containing message to sign.
[in]buf_lenThe size of buf in bytes.
[in]privkeyThe ECDSA private key on secp256r1 curve.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[out]sigThe resulting ECDSA signature.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidRandMaxIterErrFailed to sign after maximum number of iterations due to bad luck in random number generation.
-
-
-
See also
EcdsaSignBuffer
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EcdsaVerifyBuffer (void const * buf,
size_t buf_len,
EcdsaPublicKey const * pubkey,
EcdsaSignature const * sig 
)
-
- -

Verifies authenticity of a digital signature over a buffer.

-

Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to verify that the SHA-256 hash of the input buffer was signed with the private key corresponding to the provided public key.

-

The operation is over the standard secp256r1 curve.

-
Warning
It is the responsibility of the caller to verify the identity of the public key.
-
Parameters
- - - - - -
[in]bufPointer to buffer containing message to verify.
[in]buf_lenThe size of buf in bytes.
[in]pubkeyThe ECDSA public key on secp256r1 curve.
[in]sigThe ECDSA signature to be verified.
-
-
-
Returns
EpidStatus
-
Return values
- - - -
kEpidSigValidEcdsaSignature is valid for the given buffer.
kEpidSigInvalidEcdsaSignature is invalid for the given buffer.
-
-
-
See also
EcdsaSignBuffer
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.js deleted file mode 100644 index 37f85bf0..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___ecdsa_primitives.js +++ /dev/null @@ -1,5 +0,0 @@ -var group___ecdsa_primitives = -[ - [ "EcdsaSignBuffer", "group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe", null ], - [ "EcdsaVerifyBuffer", "group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.html b/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.html deleted file mode 100644 index 4f3dc04d..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: EPID 1.1 support - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
EPID 1.1 support
-
-
- -

Parser for 1.1 issuer material. -More...

- - - - - - - - - - - - - - -

-Functions

EpidStatus Epid11ParseGroupPubKeyFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11GroupPubKey *pubkey)
 Extracts group public key from buffer in issuer binary format. More...
 
EpidStatus Epid11ParsePrivRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11PrivRl *rl, size_t *rl_len)
 Extracts private key revocation list from buffer in issuer binary format. More...
 
EpidStatus Epid11ParseSigRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11SigRl *rl, size_t *rl_len)
 Extracts signature revocation list from buffer in issuer binary format. More...
 
EpidStatus Epid11ParseGroupRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, Epid11GroupRl *rl, size_t *rl_len)
 Extracts group revocation list from buffer in issuer binary format. More...
 
-

Detailed Description

-

Parser for 1.1 issuer material.

-

Defines the APIs needed to parse Intel(R) EPID 1.1 issuer material.

-
See also
EPID 1.1 support
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11ParseGroupPubKeyFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11GroupPubKeypubkey 
)
-
- -

Extracts group public key from buffer in issuer binary format.

-

Extracts the first group public key from a buffer with format of Intel(R) EPID 1.1 Group Public Key Certificate Binary File. The function validates that the first public key was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - -
[in]bufPointer to buffer containing public key to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]pubkeyThe extracted group public key.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
-
See also
EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11ParseGroupRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11GroupRlrl,
size_t * rl_len 
)
-
- -

Extracts group revocation list from buffer in issuer binary format.

-

Extracts the group revocation list from a buffer with format of Intel(R) EPID 1.1 Binary Group Certificate Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
-
See also
EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11ParsePrivRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11PrivRlrl,
size_t * rl_len 
)
-
- -

Extracts private key revocation list from buffer in issuer binary format.

-

Extracts the private key revocation list from a buffer with format of Intel(R) EPID 1.1 Binary Private Key Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
-
See also
EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11ParseSigRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11SigRlrl,
size_t * rl_len 
)
-
- -

Extracts signature revocation list from buffer in issuer binary format.

-

Extracts the signature based revocation list from a buffer with format of Intel(R) EPID 1.1 Binary Signature Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
-
See also
EPID 1.1 support
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.js b/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.js deleted file mode 100644 index aacd2908..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_file_parser_module.js +++ /dev/null @@ -1,7 +0,0 @@ -var group___epid11_file_parser_module = -[ - [ "Epid11ParseGroupPubKeyFile", "group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c", null ], - [ "Epid11ParseGroupRlFile", "group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3", null ], - [ "Epid11ParsePrivRlFile", "group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546", null ], - [ "Epid11ParseSigRlFile", "group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.html deleted file mode 100644 index 0d60502f..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: EPID 1.1 specific pairing - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
EPID 1.1 specific pairing
-
-
- -

EPID 1.1 pairing operations. -More...

- - - - - -

-Typedefs

-typedef struct Epid11PairingState Epid11PairingState
 A pairing.
 
- - - - - - - - - - -

-Functions

EpidStatus NewEpid11PairingState (EcGroup const *ga, EcGroup const *gb, FiniteField const *ff, Epid11PairingState **ps)
 Constructs a new Tate pairing state. More...
 
void DeleteEpid11PairingState (Epid11PairingState **ps)
 Frees a previously allocated by Epid11PairingState. More...
 
EpidStatus Epid11Pairing (Epid11PairingState *ps, EcPoint const *a, EcPoint const *b, FfElement *d)
 Computes a Tate Pairing for two parameters. More...
 
-

Detailed Description

-

EPID 1.1 pairing operations.

-

Provides APIs for defining and using a pairing relationship between two Elliptic curve groups.

-

These pairing operations are intended to support Intel(R) EPID 1.1 verification.

-
See also
EPID 1.1 support
-

Function Documentation

- -
-
- - - - - - - - -
void DeleteEpid11PairingState (Epid11PairingState ** ps)
-
- -

Frees a previously allocated by Epid11PairingState.

-

Frees memory pointed to by pairing state. Nulls the pointer.

-

This pairing operation is intended to support Intel(R) EPID 1.1 verification.

-
Parameters
- - -
[in]psThe pairing state. Can be NULL.
-
-
-
See also
NewEpid11PairingState
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11Pairing (Epid11PairingStateps,
EcPoint const * a,
EcPoint const * b,
FfElementd 
)
-
- -

Computes a Tate Pairing for two parameters.

-

This pairing operation is intended to support Intel(R) EPID 1.1 verification. It frees memory pointed to by an Intel(R) EPID 1.1 pairing state.

-
Parameters
- - - - - -
[in]psThe pairing state.
[in]aThe first value to pair. Must be in ga.
[in]bThe second value to pair. Must be in gb.
[out]dThe result of the pairing. Must be in ff.
-
-
-
Returns
EpidStatus
-
See also
EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus NewEpid11PairingState (EcGroup const * ga,
EcGroup const * gb,
FiniteField const * ff,
Epid11PairingState ** ps 
)
-
- -

Constructs a new Tate pairing state.

-

Allocates memory and creates a new pairing state for Tate pairing.

-

Use DeleteEpid11PairingState() to free memory.

-

This pairing operation is intended to support Intel(R) EPID 1.1 verification.

-
Parameters
- - - - - -
[in]gaThe EcGroup from which the first parameter of the pairing will be taken.
[in]gbThe EcGroup from which the second parameter of the pairing will be taken.
[in]ffThe result finite field. Must be a Fq12 field.
[out]psNewly constructed pairing state.
-
-
-
Returns
EpidStatus
-
See also
DeleteEpid11PairingState
-
-EPID 1.1 support
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.js deleted file mode 100644 index 53b346ae..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_pairing_primitives.js +++ /dev/null @@ -1,7 +0,0 @@ -var group___epid11_pairing_primitives = -[ - [ "Epid11PairingState", "group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b", null ], - [ "DeleteEpid11PairingState", "group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758", null ], - [ "Epid11Pairing", "group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059", null ], - [ "NewEpid11PairingState", "group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_types.html b/external/epid-sdk-3.0.0/doc/html/group___epid11_types.html deleted file mode 100644 index 8b4241f6..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_types.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: EPID 1.1 specific types - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
EPID 1.1 specific types
-
-
- -

Intel(R) EPID 1.1 specific data types. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  OctStr80
 80 bit octet string More...
 
struct  OctStr600
 600 bit octet string More...
 
struct  OctStr768
 768 bit octet string More...
 
struct  Fq3ElemStr
 Serialized Fq3 element. More...
 
struct  Epid11G2ElemStr
 Serialized Intel(R) EPID 1.1 G2 element. More...
 
struct  Epid11GtElemStr
 Serialized Intel(R) EPID 1.1 GT element. More...
 
struct  Epid11Params
 Intel(R) EPID 1.1 Parameters. More...
 
struct  Epid11GroupPubKey
 Intel(R) EPID 1.1 group public key. More...
 
struct  Epid11BasicSignature
 Intel(R) EPID 1.1 basic signature. More...
 
struct  Epid11NrProof
 Intel(R) EPID 1.1 non-revoked Proof. More...
 
struct  Epid11Signature
 Intel(R) EPID 1.1 Signature. More...
 
struct  Epid11PrivRl
 Intel(R) EPID 1.1 private-key based revocation list. More...
 
struct  Epid11SigRlEntry
 Intel(R) EPID 1.1 entry in SigRL (B,K) More...
 
struct  Epid11SigRl
 Intel(R) EPID 1.1 signature based revocation list. More...
 
struct  Epid11GroupRl
 Intel(R) EPID 1.1 group revocation list. More...
 
- - - - - - - - - - -

-Typedefs

-typedef G1ElemStr Epid11G1ElemStr
 Serialized Intel(R) EPID 1.1 G1 element.
 
-typedef G1ElemStr Epid11G3ElemStr
 Serialized Intel(R) EPID 1.1 G3 element.
 
-typedef OctStr32 Epid11GroupId
 Intel(R) EPID 1.1 group ID.
 
-

Detailed Description

-

Intel(R) EPID 1.1 specific data types.

-

Defines serialized data types used by the SDK. These data types are only used by components that need to do Intel(R) EPID 1.1 verification.

-
See also
EPID 1.1 support
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_types.js b/external/epid-sdk-3.0.0/doc/html/group___epid11_types.js deleted file mode 100644 index 4d71606d..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_types.js +++ /dev/null @@ -1,97 +0,0 @@ -var group___epid11_types = -[ - [ "OctStr80", "struct_oct_str80.html", [ - [ "data", "struct_oct_str80.html#af80e2b81554109d9a41c5e771aceb8c9", null ] - ] ], - [ "OctStr600", "struct_oct_str600.html", [ - [ "data", "struct_oct_str600.html#a06d53af92a06e1decc6062fd16c43a59", null ] - ] ], - [ "OctStr768", "struct_oct_str768.html", [ - [ "data", "struct_oct_str768.html#ae45eea89259bd22e60a8d960063921cc", null ] - ] ], - [ "Fq3ElemStr", "struct_fq3_elem_str.html", [ - [ "a", "struct_fq3_elem_str.html#af1be0a4d5c9c674d75bec34f95e3c731", null ] - ] ], - [ "Epid11G2ElemStr", "struct_epid11_g2_elem_str.html", [ - [ "x", "struct_epid11_g2_elem_str.html#af28558484298f4f56377ededf57a4a04", null ], - [ "y", "struct_epid11_g2_elem_str.html#a9e8984e479bcbe8bd36c65e80c340032", null ] - ] ], - [ "Epid11GtElemStr", "struct_epid11_gt_elem_str.html", [ - [ "a", "struct_epid11_gt_elem_str.html#aed8dd86f1696c2f3537154fc904bf2b0", null ] - ] ], - [ "Epid11Params", "struct_epid11_params.html", [ - [ "a", "struct_epid11_params.html#a01381f84b2d747b6273e21c71c58a1b0", null ], - [ "a_tick", "struct_epid11_params.html#ae8770bb921aac9214ff8c45c41dbb228", null ], - [ "b", "struct_epid11_params.html#a27b45ed7771a3024d1d059b4b4ff6eae", null ], - [ "b_tick", "struct_epid11_params.html#ade3f88ce73d7de656ec67d9fdb0719d7", null ], - [ "coeff", "struct_epid11_params.html#aacc39ebe0cc625321039ffb6be0b0e87", null ], - [ "g1", "struct_epid11_params.html#a835e70da717cd5b0c94e242a6418a287", null ], - [ "g2", "struct_epid11_params.html#a1c6bbc4e066449d9c329f88cb653ef7c", null ], - [ "g3", "struct_epid11_params.html#a7eb9a1371d7187ae81bccfa8d5595033", null ], - [ "h", "struct_epid11_params.html#ae2d1dc635d9d7cba496c3d64fb6f9d5b", null ], - [ "h_tick", "struct_epid11_params.html#a0fe238db4ebc0225899dc2dac97d11c0", null ], - [ "orderG2", "struct_epid11_params.html#a02bd6fa2ab256e3a07533e947ab0101e", null ], - [ "p", "struct_epid11_params.html#a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a", null ], - [ "p_tick", "struct_epid11_params.html#a77a8350b97a7afb584a46eb5b32f03bf", null ], - [ "q", "struct_epid11_params.html#aad03fd1cc3955bb8879535fa7298123f", null ], - [ "q_tick", "struct_epid11_params.html#a49462f35596d07a456a731d0690fdd83", null ], - [ "qnr", "struct_epid11_params.html#af22cfcd6c7ec0e7e7369b79554b963bd", null ] - ] ], - [ "Epid11GroupPubKey", "struct_epid11_group_pub_key.html", [ - [ "gid", "struct_epid11_group_pub_key.html#a964344b3c595bdd585bb9b5d9d0ea762", null ], - [ "h1", "struct_epid11_group_pub_key.html#a36f688472e2655052d485eac67d8c362", null ], - [ "h2", "struct_epid11_group_pub_key.html#aa724e9d2f0cb6019c05547d76a13b72a", null ], - [ "w", "struct_epid11_group_pub_key.html#a056c7138246e2bdcd47eaad501b756bb", null ] - ] ], - [ "Epid11BasicSignature", "struct_epid11_basic_signature.html", [ - [ "B", "struct_epid11_basic_signature.html#a27fd7ae99d1ada652e21e7508a467c0b", null ], - [ "c", "struct_epid11_basic_signature.html#a9cc6efcd3d7270022779bd16776168ed", null ], - [ "K", "struct_epid11_basic_signature.html#a5882fcbfd272774e12e50a2d77f0b139", null ], - [ "nd", "struct_epid11_basic_signature.html#af18200712d2cf3ed3ccaee328e8a4e0f", null ], - [ "sa", "struct_epid11_basic_signature.html#aeb221cf52bc2b1a9bf6e0a9779bfd20f", null ], - [ "salpha", "struct_epid11_basic_signature.html#a1a73fc922f69e2499643dd4c53d0d42d", null ], - [ "sb", "struct_epid11_basic_signature.html#a29a700f3bec251600e18b2292081df4b", null ], - [ "sbeta", "struct_epid11_basic_signature.html#afe28bad6328f81e6f7af011cc96ac2e5", null ], - [ "sf", "struct_epid11_basic_signature.html#ae17b45194997a6fa13c6014a51ec711c", null ], - [ "sx", "struct_epid11_basic_signature.html#a2718346665210b7e26521bf4a15cb3bd", null ], - [ "sy", "struct_epid11_basic_signature.html#a911441845fc9b82d514133371b5ba87c", null ], - [ "T1", "struct_epid11_basic_signature.html#a58b058a9c5119a240177acfade328b3b", null ], - [ "T2", "struct_epid11_basic_signature.html#a267cf4e17d10584736b0c38f3668d822", null ] - ] ], - [ "Epid11NrProof", "struct_epid11_nr_proof.html", [ - [ "c", "struct_epid11_nr_proof.html#a2e5ee8dc25d296538dce935397a93d68", null ], - [ "smu", "struct_epid11_nr_proof.html#a1ad7fe6b32c09f2504ee49731c0ad145", null ], - [ "snu", "struct_epid11_nr_proof.html#aa8406e938b2f87bded9e374e93a8ee5d", null ], - [ "T", "struct_epid11_nr_proof.html#a5ad9ba3bfac4eac37fd4a4e33ea65ddc", null ] - ] ], - [ "Epid11Signature", "struct_epid11_signature.html", [ - [ "n2", "struct_epid11_signature.html#ad25c277223a5210063163ea554d08ad4", null ], - [ "rl_ver", "struct_epid11_signature.html#a43cb3ed13c862ff05a9292623ad57c5e", null ], - [ "sigma", "struct_epid11_signature.html#abf24a8df563ba3f535486d8dad7384f4", null ], - [ "sigma0", "struct_epid11_signature.html#a48526e73f02ad3f1544c4c71c481f153", null ] - ] ], - [ "Epid11PrivRl", "struct_epid11_priv_rl.html", [ - [ "f", "struct_epid11_priv_rl.html#abbb75fee81aecb2dde7e2daab895ad3b", null ], - [ "gid", "struct_epid11_priv_rl.html#aa8945d81e30674b52a6d0900b64feb3c", null ], - [ "n1", "struct_epid11_priv_rl.html#ad95f880f40e2f40c723f5bdbd22ecfa2", null ], - [ "version", "struct_epid11_priv_rl.html#a2b3899f5a35bf64f860d6d91bccb03c8", null ] - ] ], - [ "Epid11SigRlEntry", "struct_epid11_sig_rl_entry.html", [ - [ "b", "struct_epid11_sig_rl_entry.html#abe47cfbd00684941f93a211417bedf0c", null ], - [ "k", "struct_epid11_sig_rl_entry.html#a5de66e1352eafe95774a0d76bac8f01a", null ] - ] ], - [ "Epid11SigRl", "struct_epid11_sig_rl.html", [ - [ "bk", "struct_epid11_sig_rl.html#a6473f8a98f76c9f82183041ea5ae17e3", null ], - [ "gid", "struct_epid11_sig_rl.html#ad45b0e3e1be59649150dd34c104000ac", null ], - [ "n2", "struct_epid11_sig_rl.html#a8c654d43df132db7874f4c84c177dc12", null ], - [ "version", "struct_epid11_sig_rl.html#aa38674729293f4879ff94328dd3c59b1", null ] - ] ], - [ "Epid11GroupRl", "struct_epid11_group_rl.html", [ - [ "gid", "struct_epid11_group_rl.html#a97f165c59bc447e3ca3c2148a096710f", null ], - [ "n3", "struct_epid11_group_rl.html#a35cb954f598d4006b0f047cde77010a5", null ], - [ "version", "struct_epid11_group_rl.html#a63afa9863e8dcb63ff884e6e4093c481", null ] - ] ], - [ "Epid11G1ElemStr", "group___epid11_types.html#gadff9c05d5b7751024152b40dda545545", null ], - [ "Epid11G3ElemStr", "group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23", null ], - [ "Epid11GroupId", "group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.html b/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.html deleted file mode 100644 index 8b383c38..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: EPID 1.1 support - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
EPID 1.1 support
-
-
- -

Intel(R) EPID 1.1 Verifier functionality. -More...

- - - - - -

-Data Structures

struct  Epid11VerifierPrecomp
 Intel(R) EPID 1.1 Pre-computed verifier settings. More...
 
- - - - -

-Typedefs

-typedef struct Epid11VerifierCtx Epid11VerifierCtx
 Internal context of Intel(R) EPID 1.1 verifier.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus Epid11VerifierCreate (Epid11GroupPubKey const *pub_key, Epid11VerifierPrecomp const *precomp, Epid11VerifierCtx **ctx)
 Creates a new Intel(R) EPID 1.1 verifier context. More...
 
void Epid11VerifierDelete (Epid11VerifierCtx **ctx)
 Deletes an existing Intel(R) EPID 1.1 verifier context. More...
 
EpidStatus Epid11VerifierWritePrecomp (Epid11VerifierCtx const *ctx, Epid11VerifierPrecomp *precomp)
 Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. More...
 
EpidStatus Epid11VerifierSetPrivRl (Epid11VerifierCtx *ctx, Epid11PrivRl const *priv_rl, size_t priv_rl_size)
 Sets the Intel(R) EPID 1.1 private key based revocation list. More...
 
EpidStatus Epid11VerifierSetSigRl (Epid11VerifierCtx *ctx, Epid11SigRl const *sig_rl, size_t sig_rl_size)
 Sets the Intel(R) EPID 1.1 signature based revocation list. More...
 
EpidStatus Epid11VerifierSetGroupRl (Epid11VerifierCtx *ctx, Epid11GroupRl const *grp_rl, size_t grp_rl_size)
 Sets the Intel(R) EPID 1.1 group based revocation list. More...
 
EpidStatus Epid11VerifierSetBasename (Epid11VerifierCtx *ctx, void const *basename, size_t basename_len)
 Sets the basename to be used by a verifier. More...
 
EpidStatus Epid11Verify (Epid11VerifierCtx const *ctx, Epid11Signature const *sig, size_t sig_len, void const *msg, size_t msg_len)
 Verifies an Intel(R) EPID 1.1 signature and checks revocation status. More...
 
bool Epid11AreSigsLinked (Epid11BasicSignature const *sig1, Epid11BasicSignature const *sig2)
 Determines if two Intel(R) EPID 1.1 signatures are linked. More...
 
EpidStatus Epid11VerifyBasicSig (Epid11VerifierCtx const *ctx, Epid11BasicSignature const *sig, void const *msg, size_t msg_len)
 Verifies an Intel(R) EPID 1.1 member signature without revocation checks. More...
 
EpidStatus Epid11NrVerify (Epid11VerifierCtx const *ctx, Epid11BasicSignature const *sig, void const *msg, size_t msg_len, Epid11SigRlEntry const *sigrl_entry, Epid11NrProof const *proof)
 Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry. More...
 
EpidStatus Epid11CheckPrivRlEntry (Epid11VerifierCtx const *ctx, Epid11BasicSignature const *sig, FpElemStr const *f)
 Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list. More...
 
-

Detailed Description

-

Intel(R) EPID 1.1 Verifier functionality.

-

To verify signatures coming from member devices that belong to an Intel® EPID 1.1 group, you need to use Intel® EPID 1.1 verifier APIs.

-

If you are acting as a verifier for both Intel® EPID 1.1 and 2.0 members, you can determine if you need version 1.1 or 2.0 verification by checking the Intel® EPID version field in the group public key file (see EpidParseFileHeader). You can also check the version in other binary issuer material, such as the GroupRL and SigRL.

-

The 1.1 verifier APIs take a verifier context as input. Each verifier context (Epid11VerifierCtx) represents a verifier for a single group.

-

The Intel® EPID 1.1 specification does not provide hash algorithm selection and verifier blacklist revocation. Therefore, APIs such as EpidVerifierSetHashAlg and EpidVerifierSetVerifierRl are not available.

-

You can find the Intel® EPID 1.1 API headers in the 1.1 directories, for example, epid/verifier/1.1/api.h.

-

Intel® EPID 1.1 APIs and data structures are indicated with the "Epid11" prefix. For example, the Intel® EPID 1.1 version of EpidParseGroupPubKeyFile is called Epid11ParseGroupPubKeyFile, and the Intel® EPID 1.1 version of GroupRl is Epid11GroupRl.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
bool Epid11AreSigsLinked (Epid11BasicSignature const * sig1,
Epid11BasicSignature const * sig2 
)
-
- -

Determines if two Intel(R) EPID 1.1 signatures are linked.

-

The Intel(R) EPID scheme allows signatures to be linked. If basename option is specified when signing signatures with the same basename will be linkable. This linking capability allows the verifier, or anyone, to know whether two Intel(R) EPID signatures are generated by the same member.

-

This API supports Intel(R) EPID 1.1 verification.

-
Parameters
- - - -
[in]sig1A basic signature.
[in]sig2A basic signature.
-
-
-
Returns
bool
-
Return values
- - - -
trueif the signatures were generated by the same member
falseif it couldn't be determined if the signatures were generated by the same member
-
-
-
Note
The input signatures should be verified using Epid11VerifyBasicSig() before invocation. Behavior is undefined if either of the signatures cannot be verified.
-
See also
Epid11VerifyBasicSig
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11CheckPrivRlEntry (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
FpElemStr const * f 
)
-
- -

Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-

This API supports Intel(R) EPID 1.1 verification.

-
Parameters
- - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]fThe private key based revocation list entry.
-
-
-
Note
Sig should be verified using Epid11VerifyBasicSig() before invocation. Behavior is undefined if sig cannot be verified.
-
-This function should be used in conjunction with Epid11NrVerify() and Epid11VerifyBasicSig().
-
-If the result is not kEpidNoErr the verify should de considered to have failed.
-
Returns
EpidStatus
-
See also
Epid11VerifierCreate
-
-Epid11NrVerify
-
-Epid11VerifyBasicSig
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11NrVerify (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
void const * msg,
size_t msg_len,
Epid11SigRlEntry const * sigrl_entry,
Epid11NrProof const * proof 
)
-
- -

Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-

This API supports Intel(R) EPID 1.1 verification.

-
Parameters
- - - - - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
[in]sigrl_entryThe signature based revocation list entry.
[in]proofThe non-revoked proof.
-
-
-
Returns
EpidStatus
-
Note
Sig should be verified using Epid11VerifyBasicSig() before invocation. Behavior is undefined if sig cannot be verified.
-
-This function should be used in conjunction with Epid11VerifyBasicSig() and Epid11CheckPrivRlEntry().
-
-If the result is not kEpidNoErr the verify should de considered to have failed.
-
See also
Epid11VerifierCreate
-
-Epid11VerifyBasicSig
-
-Epid11CheckPrivRlEntry
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierCreate (Epid11GroupPubKey const * pub_key,
Epid11VerifierPrecomp const * precomp,
Epid11VerifierCtx ** ctx 
)
-
- -

Creates a new Intel(R) EPID 1.1 verifier context.

-

Must be called to create the verifier context that is used by other "Verifier" APIs.

-

Allocates memory for the context, then initialize it.

-

Epid11VerifierDelete() must be called to safely release the member context.

-
Parameters
- - - - -
[in]pub_keyThe group certificate.
[in]precompOptional pre-computed data. If NULL the value is computed internally and is readable using Epid11VerifierWritePrecomp().
[out]ctxNewly constructed verifier context.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the content of ctx is undefined.
-
See also
Epid11VerifierDelete
-
-Epid11VerifierWritePrecomp
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - -
void Epid11VerifierDelete (Epid11VerifierCtx ** ctx)
-
- -

Deletes an existing Intel(R) EPID 1.1 verifier context.

-

Must be called to safely release a verifier context created using Epid11VerifierCreate().

-

De-initializes the context, frees memory used by the context, and sets the context pointer to NULL.

-
Parameters
- - -
[in,out]ctxThe verifier context. Can be NULL.
-
-
-
See also
Epid11VerifierCreate
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierSetBasename (Epid11VerifierCtxctx,
void const * basename,
size_t basename_len 
)
-
- -

Sets the basename to be used by a verifier.

-

This API allows setting a zero length base name.

-
Warning
Not all members in the Intel(R) EPID 1.1 ecosystem may support zero length basenames. They may interpret a zero length basename as random base.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]basenameThe basename. Pass NULL for random base.
[in]basename_lenNumber of bytes in basename buffer. Must be 0 if basename is NULL.
-
-
-
Returns
EpidStatus
-
See also
Epid11VerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierSetGroupRl (Epid11VerifierCtxctx,
Epid11GroupRl const * grp_rl,
size_t grp_rl_size 
)
-
- -

Sets the Intel(R) EPID 1.1 group based revocation list.

-

The caller is responsible to for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call will fail if trying to set an older version of the revocation list than was last set.

-

This API supports Intel(R) EPID 1.1 verification.

-
Attention
The memory pointed to by grp_rl will be accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list will be undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by grp_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]grp_rlThe group based revocation list.
[in]grp_rl_sizeThe size of the group based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the group based revocation list pointed to by the verifier is undefined.
-
See also
Epid11VerifierCreate
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierSetPrivRl (Epid11VerifierCtxctx,
Epid11PrivRl const * priv_rl,
size_t priv_rl_size 
)
-
- -

Sets the Intel(R) EPID 1.1 private key based revocation list.

-

The caller is responsible to for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call will fail if trying to set an older version of the revocation list than was last set.

-

This API supports Intel(R) EPID 1.1 verification.

-
Attention
The memory pointed to by priv_rl will be accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list will be undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by priv_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]priv_rlThe private key based revocation list.
[in]priv_rl_sizeThe size of the private key based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the private key based revocation list pointed to by the verifier is undefined.
-
See also
Epid11VerifierCreate
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierSetSigRl (Epid11VerifierCtxctx,
Epid11SigRl const * sig_rl,
size_t sig_rl_size 
)
-
- -

Sets the Intel(R) EPID 1.1 signature based revocation list.

-

The caller is responsible to for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call will fail if trying to set an older version of the revocation list than was last set.

-

This API supports Intel(R) EPID 1.1 verification.

-
Attention
The memory pointed to by sig_rl will be accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list will be undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by sig_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]sig_rlThe signature based revocation list.
[in]sig_rl_sizeThe size of the signature based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the signature based revocation list pointed to by the verifier is undefined.
-
See also
Epid11VerifierCreate
-
-SdkOverview_11Verifier
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifierWritePrecomp (Epid11VerifierCtx const * ctx,
Epid11VerifierPrecompprecomp 
)
-
- -

Serializes the pre-computed Intel(R) EPID 1.1 verifier settings.

-
Parameters
- - - -
[in]ctxThe verifier context.
[out]precompThe Serialized pre-computed verifier settings.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the content of precomp is undefined.
-
See also
EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11Verify (Epid11VerifierCtx const * ctx,
Epid11Signature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
-
- -

Verifies an Intel(R) EPID 1.1 signature and checks revocation status.

-
Parameters
- - - - - - -
[in]ctxThe verifier context.
[in]sigThe signature.
[in]sig_lenThe size of sig in bytes.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - - - - - -
kEpidSigValidSignature validated successfully
kEpidSigInvalidSignature is invalid
kEpidSigRevokedInGroupRlSignature revoked in GroupRl
kEpidSigRevokedInPrivRlSignature revoked in PrivRl
kEpidSigRevokedInSigRlSignature revoked in SigRl
-
-
-
Note
If the result is not kEpidNoErr or one of the values listed above the verify should de considered to have failed.
-
See also
Epid11VerifierCreate
-
-EPID 1.1 support
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Epid11VerifyBasicSig (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
void const * msg,
size_t msg_len 
)
-
- -

Verifies an Intel(R) EPID 1.1 member signature without revocation checks.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
-
-
-
Returns
EpidStatus
-
Note
This function should be used in conjunction with Epid11NrVerify() and Epid11CheckPrivRlEntry().
-
-If the result is not kEpidNoErr the verify should be considered to have failed.
-
See also
Epid11VerifierCreate
-
-EPID 1.1 support
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.js b/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.js deleted file mode 100644 index b6867654..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid11_verifier_module.js +++ /dev/null @@ -1,22 +0,0 @@ -var group___epid11_verifier_module = -[ - [ "Epid11VerifierPrecomp", "struct_epid11_verifier_precomp.html", [ - [ "e12", "struct_epid11_verifier_precomp.html#a0a980adb039089263ec59a995600ee91", null ], - [ "e22", "struct_epid11_verifier_precomp.html#ad0ff2a13c2c87460296900dde72a2f30", null ], - [ "e2w", "struct_epid11_verifier_precomp.html#a14ebadf105aff085edb9a817a2d1db89", null ], - [ "gid", "struct_epid11_verifier_precomp.html#a03138e937f4488bdbc52ed473dc313da", null ] - ] ], - [ "Epid11VerifierCtx", "group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702", null ], - [ "Epid11AreSigsLinked", "group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7", null ], - [ "Epid11CheckPrivRlEntry", "group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929", null ], - [ "Epid11NrVerify", "group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813", null ], - [ "Epid11VerifierCreate", "group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8", null ], - [ "Epid11VerifierDelete", "group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1", null ], - [ "Epid11VerifierSetBasename", "group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0", null ], - [ "Epid11VerifierSetGroupRl", "group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65", null ], - [ "Epid11VerifierSetPrivRl", "group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14", null ], - [ "Epid11VerifierSetSigRl", "group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8", null ], - [ "Epid11VerifierWritePrecomp", "group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c", null ], - [ "Epid11Verify", "group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216", null ], - [ "Epid11VerifyBasicSig", "group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_common.html b/external/epid-sdk-3.0.0/doc/html/group___epid_common.html deleted file mode 100644 index 83665db3..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_common.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: common - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
common
-
-
- -

Common code shared between core sub-components. -More...

- - - - - - - - - - - - - - - - - -

-Modules

 math
 Math Primitives and Group Operations.
 
 errors
 Error reporting interface.
 
 fileparser
 Parser for issuer material.
 
 print_utils
 Debug print routines.
 
 types
 SDK data types.
 
- - - - -

-Typedefs

typedef int(__STDCALL * BitSupplier) (unsigned int *rand_data, int num_bits, void *user_data)
 Generates random data. More...
 
-

Detailed Description

-

Common code shared between core sub-components.

-

Constants, utility functions, and libraries that are used widely in the implementation or definition of APIs and samples.

-

Typedef Documentation

- -
-
- - - - -
typedef int(__STDCALL* BitSupplier) (unsigned int *rand_data, int num_bits, void *user_data)
-
- -

Generates random data.

-

It is the responsibility of the caller of the SDK interfaces to implement a function of this prototype and to then pass a pointer to this function into methods that require it.

-
Parameters
- - - - -
[out]rand_datadestination buffer
[in]num_bitssize of rand_data in bits
[in]user_datauser data passed through from api call.
-
-
-
Returns
zero on success and non-zero value on error.
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_common.js b/external/epid-sdk-3.0.0/doc/html/group___epid_common.js deleted file mode 100644 index 70dc2de3..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_common.js +++ /dev/null @@ -1,9 +0,0 @@ -var group___epid_common = -[ - [ "math", "group___epid_math.html", "group___epid_math" ], - [ "errors", "group___error_codes.html", "group___error_codes" ], - [ "fileparser", "group___file_parser.html", "group___file_parser" ], - [ "print_utils", "group___epid_print.html", "group___epid_print" ], - [ "types", "group___epid_types.html", "group___epid_types" ], - [ "BitSupplier", "group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_math.html b/external/epid-sdk-3.0.0/doc/html/group___epid_math.html deleted file mode 100644 index 8ced37ba..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_math.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: math - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
math
-
-
- -

Math Primitives and Group Operations. -More...

- - - - - - - - - - - - - - - - - - - - -

-Modules

 bignum
 Big number operations.
 
 ecdsa
 Elliptic Curve Digital Signature Algorithm Primitives.
 
 ecgroup
 Elliptic curve group operations.
 
 finitefield
 Finite field operations.
 
 hash
 Hash primitives.
 
 pairing
 Pairing operations.
 
-

Detailed Description

-

Math Primitives and Group Operations.

-

Provides abstracted math primitives that are designed to be overridden by implementers porting to environments with specialized hardware. This module is defined and tested to hide implementation details from users of the API

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_math.js b/external/epid-sdk-3.0.0/doc/html/group___epid_math.js deleted file mode 100644 index c416f544..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_math.js +++ /dev/null @@ -1,9 +0,0 @@ -var group___epid_math = -[ - [ "bignum", "group___big_num_primitives.html", "group___big_num_primitives" ], - [ "ecdsa", "group___ecdsa_primitives.html", "group___ecdsa_primitives" ], - [ "ecgroup", "group___ec_group_primitives.html", "group___ec_group_primitives" ], - [ "finitefield", "group___finite_field_primitives.html", "group___finite_field_primitives" ], - [ "hash", "group___hash_primitives.html", "group___hash_primitives" ], - [ "pairing", "group___pairing_primitives.html", "group___pairing_primitives" ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.html b/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.html deleted file mode 100644 index 156ea0bb..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.html +++ /dev/null @@ -1,933 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: member - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
member
-
-
- -

Member functionality. -More...

- - - - - - - - -

-Data Structures

struct  MemberPrecomp
 Pre-computed member settings. More...
 
struct  PreComputedSignature
 Pre-computed signature. More...
 
- - - - -

-Typedefs

-typedef struct MemberCtx MemberCtx
 Internal context of member.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus EpidMemberCreate (GroupPubKey const *pub_key, PrivKey const *priv_key, MemberPrecomp const *precomp, BitSupplier rnd_func, void *rnd_param, MemberCtx **ctx)
 Creates a new member context. More...
 
void EpidMemberDelete (MemberCtx **ctx)
 Deletes an existing member context. More...
 
EpidStatus EpidMemberWritePrecomp (MemberCtx const *ctx, MemberPrecomp *precomp)
 Serializes the pre-computed member settings. More...
 
EpidStatus EpidMemberSetHashAlg (MemberCtx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a member. More...
 
size_t EpidGetSigSize (SigRl const *sig_rl)
 Computes the size in bytes required for an Intel(R) EPID signature. More...
 
EpidStatus EpidSign (MemberCtx const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, SigRl const *sig_rl, size_t sig_rl_size, EpidSignature *sig, size_t sig_len)
 Writes an Intel(R) EPID signature. More...
 
EpidStatus EpidRegisterBaseName (MemberCtx *ctx, void const *basename, size_t basename_len)
 Registers a basename with a member. More...
 
EpidStatus EpidAddPreSigs (MemberCtx *ctx, size_t number_presigs, PreComputedSignature *presigs)
 Extends the member's pool of pre-computed signatures. More...
 
size_t EpidGetNumPreSigs (MemberCtx const *ctx)
 Gets the number of pre-computed signatures in the member's pool. More...
 
EpidStatus EpidWritePreSigs (MemberCtx *ctx, PreComputedSignature *presigs, size_t number_presigs)
 Serializes pre-computed signatures from the member's pool. More...
 
EpidStatus EpidRequestJoin (GroupPubKey const *pub_key, IssuerNonce const *ni, FpElemStr const *f, BitSupplier rnd_func, void *rnd_param, HashAlg hash_alg, JoinRequest *join_request)
 Creates a request to join a group. More...
 
EpidStatus EpidSignBasic (MemberCtx const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, BasicSignature *sig)
 Creates a basic signature for use in constrained environment. More...
 
EpidStatus EpidNrProve (MemberCtx const *ctx, void const *msg, size_t msg_len, BasicSignature const *sig, SigRlEntry const *sigrl_entry, NrProof *proof)
 Calculates a non-revoked proof for a single signature based revocation list entry. More...
 
bool EpidIsPrivKeyInGroup (GroupPubKey const *pub_key, PrivKey const *priv_key)
 Tests if a member private key is valid without checking revocation. More...
 
EpidStatus EpidDecompressPrivKey (GroupPubKey const *pub_key, CompressedPrivKey const *compressed_privkey, PrivKey *priv_key)
 Decompresses compressed member private key. More...
 
-

Detailed Description

-

Member functionality.

-

Defines the APIs needed by Intel(R) EPID members. Each member context (MemberCtx) represents membership in a single group.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidAddPreSigs (MemberCtxctx,
size_t number_presigs,
PreComputedSignaturepresigs 
)
-
- -

Extends the member's pool of pre-computed signatures.

-

Can either generate new pre-computed signatures or import existing ones. EpidWritePreSigs can be used to export pre-computed signatures.

-
Parameters
- - - - -
[in]ctxThe member context.
[in]number_presigsThe number of pre-computed signatures to add to the internal pool.
[in,out]presigsOptional array of valid pre-computed signatures to import. If presigs is not NULL it most contain at least number_presigs pre-computed signatures.
-
-
-
Returns
EpidStatus
-
Note
presigs buffer is zeroed out before return to prevent pre-computed signatures from being reused.
-
-If the result is not kEpidNoErr the state of the pre-computed signature pool, and of presigs, is undefined.
-
See also
EpidMemberCreate
-
-EpidWritePreSigs
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidDecompressPrivKey (GroupPubKey const * pub_key,
CompressedPrivKey const * compressed_privkey,
PrivKeypriv_key 
)
-
- -

Decompresses compressed member private key.

-

Converts a compressed member private key into a member private key for use by other member APIs.

-
Parameters
- - - - -
[in]pub_keyThe public key of the group.
[in]compressed_privkeyThe compressed member private key to be decompressed.
[out]priv_keyThe member private key.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - -
size_t EpidGetNumPreSigs (MemberCtx const * ctx)
-
- -

Gets the number of pre-computed signatures in the member's pool.

-
Parameters
- - -
[in]ctxThe member context.
-
-
-
Returns
Number of remaining pre-computed signatures. Returns 0 if ctx is NULL.
-
See also
EpidMemberCreate
-
-EpidWritePreSigs
- -
-
- -
-
- - - - - - - - -
size_t EpidGetSigSize (SigRl const * sig_rl)
-
- -

Computes the size in bytes required for an Intel(R) EPID signature.

-
Parameters
- - -
[in]sig_rlThe signature based revocation list that is used. NULL is treated as a zero length list.
-
-
-
Returns
Size in bytes of an Intel(R) EPID signature including proofs for each entry in the signature based revocation list.
-
See also
SigRl
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
bool EpidIsPrivKeyInGroup (GroupPubKey const * pub_key,
PrivKey const * priv_key 
)
-
- -

Tests if a member private key is valid without checking revocation.

-

Used to check that a member private key is a valid key for a group. This is useful as a cross check when creating a new member private key as part of the join process

-
Parameters
- - - -
[in]pub_keyThe public key of the group.
[in]priv_keyThe private key to check.
-
-
-
Returns
bool
-
Return values
- - - -
trueif the private key is valid for the group of the public key
falseif the private key is not valid for the group of the public key
-
-
-
See also
EpidRequestJoin
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidMemberCreate (GroupPubKey const * pub_key,
PrivKey const * priv_key,
MemberPrecomp const * precomp,
BitSupplier rnd_func,
void * rnd_param,
MemberCtx ** ctx 
)
-
- -

Creates a new member context.

-

Must be called to create the member context that is used by other "Member" APIs.

-

Allocates memory for the context, then initializes it.

-

EpidMemberDelete() must be called to safely release the member context.

-
Parameters
- - - - - - - -
[in]pub_keyThe group certificate.
[in]priv_keyThe member private key.
[in]precompOptional pre-computed data. If NULL the value is computed internally and is readable using EpidMemberWritePrecomp().
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[out]ctxNewly constructed member context.
-
-
-
Returns
EpidStatus
-
Warning
For security rnd_func should be a cryptographically secure random number generator.
-
Note
If the result is not kEpidNoErr the content of ctx is undefined.
-
See also
EpidMemberDelete
-
-EpidMemberWritePrecomp
- -
-
- -
-
- - - - - - - - -
void EpidMemberDelete (MemberCtx ** ctx)
-
- -

Deletes an existing member context.

-

Must be called to safely release a member context created using EpidMemberCreate().

-

De-initializes the context, frees memory used by the context, and sets the context pointer to NULL.

-
Parameters
- - -
[in,out]ctxThe member context. Can be NULL.
-
-
-
See also
EpidMemberCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus EpidMemberSetHashAlg (MemberCtxctx,
HashAlg hash_alg 
)
-
- -

Sets the hash algorithm to be used by a member.

-
Parameters
- - - -
[in]ctxThe member context.
[in]hash_algThe hash algorithm to use.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr, the hash algorithm used by the member is undefined.
-
See also
EpidMemberCreate
-
-HashAlg
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus EpidMemberWritePrecomp (MemberCtx const * ctx,
MemberPrecompprecomp 
)
-
- -

Serializes the pre-computed member settings.

-
Parameters
- - - -
[in]ctxThe member context.
[out]precompThe Serialized pre-computed member settings.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr, the content of precomp is undefined.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidNrProve (MemberCtx const * ctx,
void const * msg,
size_t msg_len,
BasicSignature const * sig,
SigRlEntry const * sigrl_entry,
NrProofproof 
)
-
- -

Calculates a non-revoked proof for a single signature based revocation list entry.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - - - - -
[in]ctxThe member context.
[in]msgThe message.
[in]msg_lenThe length of message in bytes.
[in]sigThe basic signature.
[in]sigrl_entryThe signature based revocation list entry.
[out]proofThe generated non-revoked proof.
-
-
-
Returns
EpidStatus
-
Note
This function should be used in conjunction with EpidSignBasic().
-
-If the result is not kEpidNoErr, the content of proof is undefined.
-
See also
EpidMemberCreate
-
-EpidSignBasic
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidRegisterBaseName (MemberCtxctx,
void const * basename,
size_t basename_len 
)
-
- -

Registers a basename with a member.

-

To prevent loss of privacy, the member keeps a list of basenames (corresponding to authorized verifiers). The member signs a message with a basename only if the basename is in the member's basename list.

-
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
-
Parameters
- - - - -
[in]ctxThe member context.
[in]basenameThe basename.
[in]basename_lenLength of the basename.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidDuplicateErrThe basename was already registered.
-
-
-
Note
If the result is not kEpidNoErr or kEpidDuplicateErr it is undefined if the basename is registered.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidRequestJoin (GroupPubKey const * pub_key,
IssuerNonce const * ni,
FpElemStr const * f,
BitSupplier rnd_func,
void * rnd_param,
HashAlg hash_alg,
JoinRequestjoin_request 
)
-
- -

Creates a request to join a group.

-

The created request is part of the interaction with an issuer needed to join a group. This interaction with the issuer is outside the scope of this API.

-
Parameters
- - - - - - - - -
[in]pub_keyThe group certificate of group to join.
[in]niThe nonce chosen by issuer as part of join protocol.
[in]fA randomly selected integer in [1, p-1].
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[in]hash_algThe hash algorithm to be used.
[out]join_requestThe join request.
-
-
-
Returns
EpidStatus
-
Warning
For security rnd_func should be a cryptographically secure random number generator.
-
Note
The default hash algorithm in Member is SHA-512. This is the recommended option if you do not override the hash algorithm elsewhere.
-
-If the result is not kEpidNoErr, the content of join_request is undefined.
-
See also
HashAlg
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidSign (MemberCtx const * ctx,
void const * msg,
size_t msg_len,
void const * basename,
size_t basename_len,
SigRl const * sig_rl,
size_t sig_rl_size,
EpidSignaturesig,
size_t sig_len 
)
-
- -

Writes an Intel(R) EPID signature.

-
Parameters
- - - - - - - - - - -
[in]ctxThe member context.
[in]msgThe message to sign.
[in]msg_lenThe length in bytes of message.
[in]basenameOptional basename. If basename is NULL a random basename is used. Signatures generated using random basenames are anonymous. Signatures generated using the same basename are linkable by the verifier. If a basename is provided, it must already be registered, or kEpidBadArgErr is returned.
[in]basename_lenThe size of basename in bytes. Must be 0 basename is NULL.
[in]sig_rlThe signature based revocation list.
[in]sig_rl_sizeThe size in bytes of the signature based revocation list.
[out]sigThe generated signature
[in]sig_lenThe size of signature in bytes. Must be equal to value returned by EpidGetSigSize().
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the content of sig is undefined.
-
See also
EpidMemberCreate
-
-EpidMemberSetHashAlg
-
-EpidGetSigSize
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidSignBasic (MemberCtx const * ctx,
void const * msg,
size_t msg_len,
void const * basename,
size_t basename_len,
BasicSignaturesig 
)
-
- -

Creates a basic signature for use in constrained environment.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - - - - -
[in]ctxThe member context.
[in]msgThe message.
[in]msg_lenThe length of message in bytes.
[in]basenameOptional basename. If basename is NULL a random basename is used. Signatures generated using random basenames are anonymous. Signatures generated using the same basename are linkable by the verifier. If a basename is provided it must already be registered or kEpidBadArgErr is returned.
[in]basename_lenThe size of basename in bytes. Must be 0 basename is NULL.
[out]sigThe generated basic signature
-
-
-
Returns
EpidStatus
-
Note
This function should be used in conjunction with EpidNrProve()
-
-If the result is not kEpidNoErr the content of sig, is undefined.
-
See also
EpidMemberCreate
-
-EpidNrProve
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidWritePreSigs (MemberCtxctx,
PreComputedSignaturepresigs,
size_t number_presigs 
)
-
- -

Serializes pre-computed signatures from the member's pool.

-

Removes requested number of pre-computed signatures from member's pool and stores them in presigs array. Use EpidAddPreSigs to add pre-computed signatures to the pool.

-
Parameters
- - - - -
[in]ctxThe member context.
[out]presigsAn existing buffer of pre-computed signatures.
[in]number_presigsNumber of pre-computed signatures to read. Number_presigs must not be greater than the value returned by EpidGetNumPreSigs.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the state of the pre-computed signature pool, and of presigs, is undefined.
-
See also
EpidMemberCreate
-
-EpidGetNumPreSigs
-
-EpidAddPreSigs
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.js b/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.js deleted file mode 100644 index cb9d1c77..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_member_module.js +++ /dev/null @@ -1,38 +0,0 @@ -var group___epid_member_module = -[ - [ "MemberPrecomp", "struct_member_precomp.html", [ - [ "e12", "struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5", null ], - [ "e22", "struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4", null ], - [ "e2w", "struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834", null ], - [ "ea2", "struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda", null ] - ] ], - [ "PreComputedSignature", "struct_pre_computed_signature.html", [ - [ "a", "struct_pre_computed_signature.html#af23f3f9693857a33fe8564644612ea37", null ], - [ "B", "struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe", null ], - [ "b", "struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f", null ], - [ "K", "struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6", null ], - [ "R1", "struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94", null ], - [ "R2", "struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a", null ], - [ "ra", "struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11", null ], - [ "rb", "struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3", null ], - [ "rf", "struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66", null ], - [ "rx", "struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc", null ], - [ "T", "struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72", null ] - ] ], - [ "MemberCtx", "group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817", null ], - [ "EpidAddPreSigs", "group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236", null ], - [ "EpidDecompressPrivKey", "group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef", null ], - [ "EpidGetNumPreSigs", "group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075", null ], - [ "EpidGetSigSize", "group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000", null ], - [ "EpidIsPrivKeyInGroup", "group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6", null ], - [ "EpidMemberCreate", "group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb", null ], - [ "EpidMemberDelete", "group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6", null ], - [ "EpidMemberSetHashAlg", "group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf", null ], - [ "EpidMemberWritePrecomp", "group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721", null ], - [ "EpidNrProve", "group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc", null ], - [ "EpidRegisterBaseName", "group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d", null ], - [ "EpidRequestJoin", "group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361", null ], - [ "EpidSign", "group___epid_member_module.html#ga759155a719254f734157722716dac640", null ], - [ "EpidSignBasic", "group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa", null ], - [ "EpidWritePreSigs", "group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_module.html b/external/epid-sdk-3.0.0/doc/html/group___epid_module.html deleted file mode 100644 index 300aed1a..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_module.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
epid
-
-
- -

Core Intel® EPID functionality. -More...

- - - - - - - - - - - -

-Modules

 common
 Common code shared between core sub-components.
 
 member
 Member functionality.
 
 verifier
 Verifier functionality.
 
-

Detailed Description

-

Core Intel® EPID functionality.

-

Contains core functionality used to provide or implement APIs in the Intel(R) EPID SDK.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_module.js b/external/epid-sdk-3.0.0/doc/html/group___epid_module.js deleted file mode 100644 index 892eddf4..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_module.js +++ /dev/null @@ -1,6 +0,0 @@ -var group___epid_module = -[ - [ "common", "group___epid_common.html", "group___epid_common" ], - [ "member", "group___epid_member_module.html", "group___epid_member_module" ], - [ "verifier", "group___epid_verifier_module.html", "group___epid_verifier_module" ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_print.html b/external/epid-sdk-3.0.0/doc/html/group___epid_print.html deleted file mode 100644 index 0e1a1b33..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_print.html +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: print_utils - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
print_utils
-
-
- -

Debug print routines. -More...

- - - - - -

-Enumerations

enum  PrintUtilFormat { kPrintUtilUnannotated = 0, -kPrintUtilAnnotated = 1, -kPrintUtilFormatCount = 2 - }
 Print format. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

void PrintBigNum (BigNum const *big_num, char const *var_name)
 Prints BigNum. More...
 
void PrintFfElement (FiniteField const *ff, FfElement const *ff_element, char const *var_name, PrintUtilFormat format)
 Prints finite field element. More...
 
void PrintEcPoint (EcGroup const *g, EcPoint const *ec_point, char const *var_name, PrintUtilFormat format)
 Prints elliptic curve group element. More...
 
void PrintBigNumStr (BigNumStr const *big_num_str, char const *var_name)
 Prints serialized BigNum. More...
 
void PrintFpElemStr (FpElemStr const *fp_elem_str, char const *var_name)
 Prints serialized Fp element. More...
 
void PrintFqElemStr (FqElemStr const *fq_elem_str, char const *var_name)
 Prints serialized Fq element. More...
 
void PrintFq2ElemStr (Fq2ElemStr const *fq2_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized Fq2 element. More...
 
void PrintFq6ElemStr (Fq6ElemStr const *fq6_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized Fq6 element. More...
 
void PrintFq12ElemStr (Fq12ElemStr const *fq12_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized Fq12 element. More...
 
void PrintG1ElemStr (G1ElemStr const *g1_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized G1 element. More...
 
void PrintG2ElemStr (G2ElemStr const *g2_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized G2 element. More...
 
void PrintGtElemStr (GtElemStr const *gt_elem_str, char const *var_name, PrintUtilFormat format)
 Prints serialized Gt element. More...
 
-

Detailed Description

-

Debug print routines.

-

Defines an API to print formatted versions of the types used for mathematical operations.

-

If the symbol EPID_ENABLE_DEBUG_PRINT is not defined, all calls to the functions in this module are ignored.

-

Enumeration Type Documentation

- -
-
- - - - -
enum PrintUtilFormat
-
- -

Print format.

- - - - -
Enumerator
kPrintUtilUnannotated  -

Unannotated output format.

-
kPrintUtilAnnotated  -

Annotated output format.

-
kPrintUtilFormatCount  -

Count of print formats.

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void PrintBigNum (BigNum const * big_num,
char const * var_name 
)
-
- -

Prints BigNum.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - -
[in]big_numBigNum to be printed
[in]var_nameResult variable name
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void PrintBigNumStr (BigNumStr const * big_num_str,
char const * var_name 
)
-
- -

Prints serialized BigNum.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - -
[in]big_num_strSerialized BigNum to be printed
[in]var_nameResult variable name
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PrintEcPoint (EcGroup const * g,
EcPoint const * ec_point,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints elliptic curve group element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - - -
[in]gElliptic curve group that element to be printed belongs to
[in]ec_pointElliptic curve group element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PrintFfElement (FiniteField const * ff,
FfElement const * ff_element,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints finite field element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - - -
[in]ffFinite field that element to be printed belongs to
[in]ff_elementFinite field element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void PrintFpElemStr (FpElemStr const * fp_elem_str,
char const * var_name 
)
-
- -

Prints serialized Fp element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - -
[in]fp_elem_strSerialized Fp element to be printed
[in]var_nameResult variable name
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintFq12ElemStr (Fq12ElemStr const * fq12_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized Fq12 element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]fq12_elem_strSerialized Intel(R) EPID Fq12 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintFq2ElemStr (Fq2ElemStr const * fq2_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized Fq2 element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]fq2_elem_strSerialized Fq2 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintFq6ElemStr (Fq6ElemStr const * fq6_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized Fq6 element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]fq6_elem_strSerialized Fq6 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void PrintFqElemStr (FqElemStr const * fq_elem_str,
char const * var_name 
)
-
- -

Prints serialized Fq element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - -
[in]fq_elem_strSerialized Fq element to be printed
[in]var_nameResult variable name
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintG1ElemStr (G1ElemStr const * g1_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized G1 element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]g1_elem_strSerialized G1 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintG2ElemStr (G2ElemStr const * g2_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized G2 element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]g2_elem_strSerialized G2 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void PrintGtElemStr (GtElemStr const * gt_elem_str,
char const * var_name,
PrintUtilFormat format 
)
-
- -

Prints serialized Gt element.

-

Macro EPID_ENABLE_DEBUG_PRINT needs to be defined in order to activate this routine; otherwise, it prints nothing.

-
Parameters
- - - - -
[in]gt_elem_strSerialized G2 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_print.js b/external/epid-sdk-3.0.0/doc/html/group___epid_print.js deleted file mode 100644 index d1b92d4b..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_print.js +++ /dev/null @@ -1,20 +0,0 @@ -var group___epid_print = -[ - [ "PrintUtilFormat", "group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83", [ - [ "kPrintUtilUnannotated", "group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae", null ], - [ "kPrintUtilAnnotated", "group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d", null ], - [ "kPrintUtilFormatCount", "group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a", null ] - ] ], - [ "PrintBigNum", "group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a", null ], - [ "PrintBigNumStr", "group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d", null ], - [ "PrintEcPoint", "group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca", null ], - [ "PrintFfElement", "group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf", null ], - [ "PrintFpElemStr", "group___epid_print.html#gae553c3a156a0e4968b89635ab0757580", null ], - [ "PrintFq12ElemStr", "group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f", null ], - [ "PrintFq2ElemStr", "group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de", null ], - [ "PrintFq6ElemStr", "group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476", null ], - [ "PrintFqElemStr", "group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4", null ], - [ "PrintG1ElemStr", "group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f", null ], - [ "PrintG2ElemStr", "group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a", null ], - [ "PrintGtElemStr", "group___epid_print.html#ga138cd388247a58680d4701d59d6976d2", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_types.html b/external/epid-sdk-3.0.0/doc/html/group___epid_types.html deleted file mode 100644 index 6a65d8e1..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_types.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: types - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
- -
- -

SDK data types. -More...

- - - - - -

-Modules

 EPID 1.1 specific types
 Intel(R) EPID 1.1 specific data types.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  OctStr8
 8 bit octet string More...
 
struct  OctStr16
 16 bit octet string More...
 
struct  OctStr32
 32 bit octet string More...
 
struct  OctStr64
 64 bit octet string More...
 
struct  OctStr128
 128 bit octet string More...
 
struct  OctStr256
 256 bit octet string More...
 
struct  OctStr512
 512 bit octet string More...
 
struct  BigNumStr
 Serialized BigNum. More...
 
struct  FpElemStr
 a number in [0, p-1] More...
 
struct  FqElemStr
 a number in [0, q-1] More...
 
struct  G1ElemStr
 Serialized G1 element. More...
 
struct  G2ElemStr
 Serialized G2 element. More...
 
struct  GtElemStr
 Serialized GT element. More...
 
struct  Epid2Params
 Intel(R) EPID 2.0 Parameters. More...
 
struct  GroupPubKey
 Intel(R) EPID 2.0 group public key. More...
 
struct  IPrivKey
 Intel(R) EPID 2.0 issuing private key. More...
 
struct  PrivKey
 Intel(R) EPID 2.0 private key. More...
 
struct  CompressedPrivKey
 Compressed private key. More...
 
struct  MembershipCredential
 Membership credential. More...
 
struct  JoinRequest
 Join request. More...
 
struct  BasicSignature
 Intel(R) EPID 2.0 basic signature. More...
 
struct  NrProof
 non-revoked Proof. More...
 
struct  EpidSignature
 Intel(R) EPID 2.0 Signature. More...
 
struct  PrivRl
 private-key based revocation list. More...
 
struct  SigRlEntry
 entry in SigRL (B,K) More...
 
struct  SigRl
 signature based revocation list More...
 
struct  GroupRl
 group revocation list More...
 
struct  VerifierRl
 
struct  Fq2ElemStr
 Serialized Fq2 element. More...
 
struct  Fq6ElemStr
 Serialized Fq2^3 element. More...
 
struct  Fq12ElemStr
 Serialized Fq2^3^2 element. More...
 
struct  EcdsaSignature
 ECDSA Signature using NIST 256-bit curve secp256r1. More...
 
struct  EcdsaPublicKey
 ECDSA Public Key. More...
 
struct  EcdsaPrivateKey
 ECDSA Private Key. More...
 
- - - - - - - - - - - - - -

-Typedefs

-typedef OctStr128 GroupId
 group ID
 
-typedef OctStr256 Seed
 256 bit seed derived from fuse key
 
-typedef OctStr256 IssuerNonce
 256 bit nonce chosen by issuer
 
-typedef G1ElemStr ReKeySeed
 element to store seed values for later rekey
 
- - - - -

-Enumerations

enum  HashAlg {
-  kInvalidHashAlg = -1, -kSha256 = 0, -kSha384 = 1, -kSha512 = 2, -
-  kSha512_256 = 3, -kSha3_256 = 4, -kSha3_384 = 5, -kSha3_512 = 6 -
- }
 Recognized hash algorithms. More...
 
-

Detailed Description

-

SDK data types.

-

Defines serialized data types used by the SDK.

-

Most of the types defined here are fixed size binary buffers of various sizes that are semantically mapped to the types of various inputs to the Intel(R) EPID APIs.

-

For example GtElemStr is a 384 byte buffer that represents a serialized value that is compatible with a FfElement belonging to the FiniteField GT.

-

Enumeration Type Documentation

- -
-
- - - - -
enum HashAlg
-
- -

Recognized hash algorithms.

- - - - - - - - - -
Enumerator
kInvalidHashAlg  -

Invalid.

-
kSha256  -

SHA-256.

-
kSha384  -

SHA-384.

-
kSha512  -

SHA-512.

-
kSha512_256  -

SHA-512/256.

-
kSha3_256  -

Reserved for SHA3/256.

-
kSha3_384  -

Reserved for SHA3/384.

-
kSha3_512  -

Reserved for SHA3/512.

-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_types.js b/external/epid-sdk-3.0.0/doc/html/group___epid_types.js deleted file mode 100644 index e83078b2..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_types.js +++ /dev/null @@ -1,171 +0,0 @@ -var group___epid_types = -[ - [ "EPID 1.1 specific types", "group___epid11_types.html", "group___epid11_types" ], - [ "OctStr8", "struct_oct_str8.html", [ - [ "data", "struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef", null ] - ] ], - [ "OctStr16", "struct_oct_str16.html", [ - [ "data", "struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3", null ] - ] ], - [ "OctStr32", "struct_oct_str32.html", [ - [ "data", "struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8", null ] - ] ], - [ "OctStr64", "struct_oct_str64.html", [ - [ "data", "struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc", null ] - ] ], - [ "OctStr128", "struct_oct_str128.html", [ - [ "data", "struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9", null ] - ] ], - [ "OctStr256", "struct_oct_str256.html", [ - [ "data", "struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e", null ] - ] ], - [ "OctStr512", "struct_oct_str512.html", [ - [ "data", "struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653", null ] - ] ], - [ "BigNumStr", "struct_big_num_str.html", [ - [ "data", "struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838", null ] - ] ], - [ "FpElemStr", "struct_fp_elem_str.html", [ - [ "data", "struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45", null ] - ] ], - [ "FqElemStr", "struct_fq_elem_str.html", [ - [ "data", "struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14", null ] - ] ], - [ "G1ElemStr", "struct_g1_elem_str.html", [ - [ "x", "struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4", null ], - [ "y", "struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3", null ] - ] ], - [ "G2ElemStr", "struct_g2_elem_str.html", [ - [ "x", "struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3", null ], - [ "y", "struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908", null ] - ] ], - [ "GtElemStr", "struct_gt_elem_str.html", [ - [ "x", "struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132", null ] - ] ], - [ "Epid2Params", "struct_epid2_params.html", [ - [ "b", "struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551", null ], - [ "beta", "struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695", null ], - [ "g1", "struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad", null ], - [ "g2", "struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618", null ], - [ "neg", "struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928", null ], - [ "p", "struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08", null ], - [ "q", "struct_epid2_params.html#a023603228fed2854ddae2e228938940f", null ], - [ "t", "struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f", null ], - [ "xi", "struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74", null ] - ] ], - [ "GroupPubKey", "struct_group_pub_key.html", [ - [ "gid", "struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee", null ], - [ "h1", "struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5", null ], - [ "h2", "struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1", null ], - [ "w", "struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9", null ] - ] ], - [ "IPrivKey", "struct_i_priv_key.html", [ - [ "gamma", "struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a", null ], - [ "gid", "struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb", null ] - ] ], - [ "PrivKey", "struct_priv_key.html", [ - [ "A", "struct_priv_key.html#a266c7e369b8b868ef5755e9cd3c0c849", null ], - [ "f", "struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba", null ], - [ "gid", "struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8", null ], - [ "x", "struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd", null ] - ] ], - [ "CompressedPrivKey", "struct_compressed_priv_key.html", [ - [ "ax", "struct_compressed_priv_key.html#a0b0535f0567eb0e48f799d27991d0f66", null ], - [ "gid", "struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840", null ], - [ "seed", "struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8", null ] - ] ], - [ "MembershipCredential", "struct_membership_credential.html", [ - [ "A", "struct_membership_credential.html#a6d38ac3a9c5417833b8adb9b22bc9dc8", null ], - [ "gid", "struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671", null ], - [ "x", "struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf", null ] - ] ], - [ "JoinRequest", "struct_join_request.html", [ - [ "c", "struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8", null ], - [ "F", "struct_join_request.html#a005651506fd4511e8a3537f6c3634532", null ], - [ "s", "struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d", null ] - ] ], - [ "BasicSignature", "struct_basic_signature.html", [ - [ "B", "struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac", null ], - [ "c", "struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603", null ], - [ "K", "struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21", null ], - [ "sa", "struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d", null ], - [ "sb", "struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245", null ], - [ "sf", "struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb", null ], - [ "sx", "struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69", null ], - [ "T", "struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624", null ] - ] ], - [ "NrProof", "struct_nr_proof.html", [ - [ "c", "struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1", null ], - [ "smu", "struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178", null ], - [ "snu", "struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c", null ], - [ "T", "struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3", null ] - ] ], - [ "EpidSignature", "struct_epid_signature.html", [ - [ "n2", "struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017", null ], - [ "rl_ver", "struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1", null ], - [ "sigma", "struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd", null ], - [ "sigma0", "struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2", null ] - ] ], - [ "PrivRl", "struct_priv_rl.html", [ - [ "f", "struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466", null ], - [ "gid", "struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64", null ], - [ "n1", "struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14", null ], - [ "version", "struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50", null ] - ] ], - [ "SigRlEntry", "struct_sig_rl_entry.html", [ - [ "b", "struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce", null ], - [ "k", "struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c", null ] - ] ], - [ "SigRl", "struct_sig_rl.html", [ - [ "bk", "struct_sig_rl.html#ac23a919993d99d24a5150302f1778102", null ], - [ "gid", "struct_sig_rl.html#a12757d30fcccd310716433948e0b603e", null ], - [ "n2", "struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2", null ], - [ "version", "struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f", null ] - ] ], - [ "GroupRl", "struct_group_rl.html", [ - [ "gid", "struct_group_rl.html#a51022e172ab8b945efc69f1e63170107", null ], - [ "n3", "struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172", null ], - [ "version", "struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f", null ] - ] ], - [ "VerifierRl", "struct_verifier_rl.html", [ - [ "B", "struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68", null ], - [ "gid", "struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d", null ], - [ "K", "struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9", null ], - [ "n4", "struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7", null ], - [ "version", "struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa", null ] - ] ], - [ "Fq2ElemStr", "struct_fq2_elem_str.html", [ - [ "a", "struct_fq2_elem_str.html#ab1d253eb24ba30eaf516ac429daab915", null ] - ] ], - [ "Fq6ElemStr", "struct_fq6_elem_str.html", [ - [ "a", "struct_fq6_elem_str.html#a89d656e5c815b4a2382d11ef6932a7d2", null ] - ] ], - [ "Fq12ElemStr", "struct_fq12_elem_str.html", [ - [ "a", "struct_fq12_elem_str.html#a0520947335aaf52de90af1dec5bdd112", null ] - ] ], - [ "EcdsaSignature", "struct_ecdsa_signature.html", [ - [ "x", "struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d", null ], - [ "y", "struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029", null ] - ] ], - [ "EcdsaPublicKey", "struct_ecdsa_public_key.html", [ - [ "x", "struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1", null ], - [ "y", "struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284", null ] - ] ], - [ "EcdsaPrivateKey", "struct_ecdsa_private_key.html", [ - [ "data", "struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d", null ] - ] ], - [ "GroupId", "group___epid_types.html#gada666b48d0cbc301985405fde896f1de", null ], - [ "IssuerNonce", "group___epid_types.html#ga55eb2193045bde31af3f551565126042", null ], - [ "ReKeySeed", "group___epid_types.html#ga54bd22670f2e348593db7ab631131d10", null ], - [ "Seed", "group___epid_types.html#ga888541b8148df69c634a92c64ed51317", null ], - [ "HashAlg", "group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890", [ - [ "kInvalidHashAlg", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb", null ], - [ "kSha256", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d", null ], - [ "kSha384", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290", null ], - [ "kSha512", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890afb78d98f37fecc53dd1637d94c5c0055", null ], - [ "kSha512_256", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba", null ], - [ "kSha3_256", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85", null ], - [ "kSha3_384", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a90d21c8885ab138f7cf91f253dd6ef86", null ], - [ "kSha3_512", "group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890ade8e74cf7910b3a71fe902a40abf7eee", null ] - ] ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.html b/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.html deleted file mode 100644 index 2e07e219..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.html +++ /dev/null @@ -1,1019 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: verifier - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
verifier
-
-
- -

Verifier functionality. -More...

- - - - - -

-Modules

 EPID 1.1 support
 Intel(R) EPID 1.1 Verifier functionality.
 
- - - - -

-Data Structures

struct  VerifierPrecomp
 Pre-computed verifier settings. More...
 
- - - - -

-Typedefs

-typedef struct VerifierCtx VerifierCtx
 Internal context of verifier.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus EpidVerifierCreate (GroupPubKey const *pub_key, VerifierPrecomp const *precomp, VerifierCtx **ctx)
 Creates a new verifier context. More...
 
void EpidVerifierDelete (VerifierCtx **ctx)
 Deletes an existing verifier context. More...
 
EpidStatus EpidVerifierWritePrecomp (VerifierCtx const *ctx, VerifierPrecomp *precomp)
 Serializes the pre-computed verifier settings. More...
 
EpidStatus EpidVerifierSetPrivRl (VerifierCtx *ctx, PrivRl const *priv_rl, size_t priv_rl_size)
 Sets the private key based revocation list. More...
 
EpidStatus EpidVerifierSetSigRl (VerifierCtx *ctx, SigRl const *sig_rl, size_t sig_rl_size)
 Sets the signature based revocation list. More...
 
EpidStatus EpidVerifierSetGroupRl (VerifierCtx *ctx, GroupRl const *grp_rl, size_t grp_rl_size)
 Sets the group based revocation list. More...
 
EpidStatus EpidVerifierSetVerifierRl (VerifierCtx *ctx, VerifierRl const *ver_rl, size_t ver_rl_size)
 Sets the verifier revocation list. More...
 
EpidStatus EpidVerifierSetHashAlg (VerifierCtx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a verifier. More...
 
EpidStatus EpidVerifierSetBasename (VerifierCtx *ctx, void const *basename, size_t basename_len)
 Sets the basename to be used by a verifier. More...
 
EpidStatus EpidVerify (VerifierCtx const *ctx, EpidSignature const *sig, size_t sig_len, void const *msg, size_t msg_len)
 Verifies a signature and checks revocation status. More...
 
bool EpidAreSigsLinked (BasicSignature const *sig1, BasicSignature const *sig2)
 Determines if two signatures are linked. More...
 
EpidStatus EpidVerifyBasicSig (VerifierCtx const *ctx, BasicSignature const *sig, void const *msg, size_t msg_len)
 Verifies a member signature without revocation checks. More...
 
EpidStatus EpidNrVerify (VerifierCtx const *ctx, BasicSignature const *sig, void const *msg, size_t msg_len, SigRlEntry const *sigrl_entry, NrProof const *proof)
 Verifies the non-revoked proof for a single signature based revocation list entry. More...
 
EpidStatus EpidCheckPrivRlEntry (VerifierCtx const *ctx, BasicSignature const *sig, FpElemStr const *f)
 Verifies a signature has not been revoked in the private key based revocation list. More...
 
size_t EpidGetVerifierRlSize (VerifierCtx const *ctx)
 Returns the number of bytes required to serialize the verifier blacklist. More...
 
EpidStatus EpidWriteVerifierRl (VerifierCtx const *ctx, VerifierRl *ver_rl, size_t ver_rl_size)
 Serializes the verifier blacklist to a buffer. More...
 
EpidStatus EpidBlacklistSig (VerifierCtx *ctx, EpidSignature const *sig, size_t sig_len, void const *msg, size_t msg_len)
 Adds a valid name-based signature to the verifier blacklist. More...
 
-

Detailed Description

-

Verifier functionality.

-

Defines the APIs needed by Intel(R) EPID verifiers. Each verifier context (VerifierCtx) represents a verifier for a single group.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
bool EpidAreSigsLinked (BasicSignature const * sig1,
BasicSignature const * sig2 
)
-
- -

Determines if two signatures are linked.

-

The Intel(R) EPID scheme allows signatures to be linked. If basename option is specified when signing, signatures with the same basename are linkable. This linking capability allows the verifier, or anyone, to know whether two Intel(R) EPID signatures are generated by the same member.

-
Parameters
- - - -
[in]sig1A basic signature.
[in]sig2A basic signature.
-
-
-
Returns
bool
-
Return values
- - - -
trueif the signatures were generated by the same member
falseif it couldn't be determined if the signatures were generated by the same member
-
-
-
Note
The input signatures should be verified using EpidVerifyBasicSig() before invocation. Behavior is undefined if either of the signatures cannot be verified.
-
See also
EpidVerifyBasicSig
-
-EpidSignBasic
-
-EpidSign
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidBlacklistSig (VerifierCtxctx,
EpidSignature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
-
- -

Adds a valid name-based signature to the verifier blacklist.

-

If the signature is not valid it will not be added to the blacklist.

-
Parameters
- - - - - - -
[in]ctxThe verifier context.
[in]sigThe name-based signature to revoke.
[in]sig_lenThe size of sig in bytes.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
-
-
-
Returns
EpidStatus
-
See also
EpidVerifierCreate
-
-EpidVerifierSetVerifierRl
-
-EpidWriteVerifierRl
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidCheckPrivRlEntry (VerifierCtx const * ctx,
BasicSignature const * sig,
FpElemStr const * f 
)
-
- -

Verifies a signature has not been revoked in the private key based revocation list.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]fThe private key based revocation list entry.
-
-
-
Note
Sig should be verified using EpidVerifyBasicSig() before invocation. Behavior is undefined if sig cannot be verified.
-
-This function should be used in conjunction with EpidNrVerify() and EpidVerifyBasicSig().
-
-If the result is not kEpidNoErr the verify should be considered to have failed.
-
Returns
EpidStatus
-
See also
EpidVerifierCreate
-
-EpidNrVerify
-
-EpidVerifyBasicSig
- -
-
- -
-
- - - - - - - - -
size_t EpidGetVerifierRlSize (VerifierCtx const * ctx)
-
- -

Returns the number of bytes required to serialize the verifier blacklist.

-

Use this function to determine the buffer size required by EpidWriteVerifierRl.

-
Parameters
- - -
[in]ctxThe verifier context.
-
-
-
Returns
Size in bytes required to serialize the verifier blacklist
-
See also
EpidVerifierCreate
-
-EpidVerifierSetVerifierRl
-
-EpidBlacklistSig
-
-EpidWriteVerifierRl
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidNrVerify (VerifierCtx const * ctx,
BasicSignature const * sig,
void const * msg,
size_t msg_len,
SigRlEntry const * sigrl_entry,
NrProof const * proof 
)
-
- -

Verifies the non-revoked proof for a single signature based revocation list entry.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
[in]sigrl_entryThe signature based revocation list entry.
[in]proofThe non-revoked proof.
-
-
-
Returns
EpidStatus
-
Note
Sig should be verified using EpidVerifyBasicSig() before invocation. Behavior is undefined if sig cannot be verified.
-
-This function should be used in conjunction with EpidVerifyBasicSig() and EpidCheckPrivRlEntry().
-
-If the result is not kEpidNoErr, the verification should be considered to have failed.
-
See also
EpidVerifierCreate
-
-EpidVerifyBasicSig
-
-EpidCheckPrivRlEntry
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierCreate (GroupPubKey const * pub_key,
VerifierPrecomp const * precomp,
VerifierCtx ** ctx 
)
-
- -

Creates a new verifier context.

-

Must be called to create the verifier context that is used by other "Verifier" APIs.

-

Allocates memory for the context, then initializes it.

-

EpidVerifierDelete() must be called to safely release the member context.

-
Parameters
- - - - -
[in]pub_keyThe group certificate.
[in]precompOptional pre-computed data. If NULL the value is computed internally and is readable using EpidVerifierWritePrecomp().
[out]ctxNewly constructed verifier context.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the content of ctx is undefined.
-
See also
EpidVerifierDelete
-
-EpidVerifierWritePrecomp
- -
-
- -
-
- - - - - - - - -
void EpidVerifierDelete (VerifierCtx ** ctx)
-
- -

Deletes an existing verifier context.

-

Must be called to safely release a verifier context created using EpidVerifierCreate().

-

De-initializes the context, frees memory used by the context, and sets the context pointer to NULL.

-
Parameters
- - -
[in,out]ctxThe verifier context. Can be NULL.
-
-
-
See also
EpidVerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetBasename (VerifierCtxctx,
void const * basename,
size_t basename_len 
)
-
- -

Sets the basename to be used by a verifier.

-
Note
A successful call to this function will clear the current verifier blacklist.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]basenameThe basename. Pass NULL for random base.
[in]basename_lenNumber of bytes in basename buffer. Must be 0 if basename is NULL.
-
-
-
Returns
EpidStatus
-
See also
EpidVerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetGroupRl (VerifierCtxctx,
GroupRl const * grp_rl,
size_t grp_rl_size 
)
-
- -

Sets the group based revocation list.

-

The caller is responsible for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call fails if trying to set an older version of the revocation list than was last set.

-
Attention
The memory pointed to by grp_rl is accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list is undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by grp_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]grp_rlThe group based revocation list.
[in]grp_rl_sizeThe size of the group based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the group based revocation list pointed to by the verifier is undefined.
-
See also
EpidVerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetHashAlg (VerifierCtxctx,
HashAlg hash_alg 
)
-
- -

Sets the hash algorithm to be used by a verifier.

-
Parameters
- - - -
[in]ctxThe verifier context.
[in]hash_algThe hash algorithm to use.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr, the hash algorithm used by the verifier is undefined.
-
See also
EpidVerifierCreate
-
-HashAlg
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetPrivRl (VerifierCtxctx,
PrivRl const * priv_rl,
size_t priv_rl_size 
)
-
- -

Sets the private key based revocation list.

-

The caller is responsible for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call fails if trying to set an older version of the revocation list than was last set.

-
Attention
The memory pointed to by priv_rl is accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list is undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by priv_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]priv_rlThe private key based revocation list.
[in]priv_rl_sizeThe size of the private key based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the private key based revocation list pointed to by the verifier is undefined.
-
See also
EpidVerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetSigRl (VerifierCtxctx,
SigRl const * sig_rl,
size_t sig_rl_size 
)
-
- -

Sets the signature based revocation list.

-

The caller is responsible for ensuring the revocation list is authorized, e.g signed by the issuer. The caller is also responsible checking the version of the revocation list. The call fails if trying to set an older version of the revocation list than was last set.

-
Attention
The memory pointed to by sig_rl is accessed directly by the verifier until a new list is set or the verifier is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list is undefined if the memory is modified.
-
-It is the responsibility of the caller to free the memory pointed to by sig_rl after the verifier is no longer using it.
-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]sig_rlThe signature based revocation list.
[in]sig_rl_sizeThe size of the signature based revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the signature based revocation list pointed to by the verifier is undefined.
-
See also
EpidVerifierCreate
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierSetVerifierRl (VerifierCtxctx,
VerifierRl const * ver_rl,
size_t ver_rl_size 
)
-
- -

Sets the verifier revocation list.

-

The caller is responsible for ensuring the revocation list is authorized. The caller is also responsible for checking the version of the revocation list. The call fails if trying to set an older version of the same revocation list than was last set.

-

Once EpidVerifierSetVerifierRl returns, callers are free to release the memory pointed to by ver_rl.

-
Parameters
- - - - -
[in,out]ctxThe verifier context.
[in]ver_rlThe verifier revocation list.
[in]ver_rl_sizeThe size of the verifier revocation list in bytes.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the verifier revocation list pointed to by the verifier is undefined.
-
See also
EpidVerifierCreate
-
-EpidBlacklistSig
-
-EpidWriteVerifierRl
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifierWritePrecomp (VerifierCtx const * ctx,
VerifierPrecompprecomp 
)
-
- -

Serializes the pre-computed verifier settings.

-
Parameters
- - - -
[in]ctxThe verifier context.
[out]precompThe Serialized pre-computed verifier settings.
-
-
-
Returns
EpidStatus
-
Note
If the result is not kEpidNoErr the content of precomp is undefined.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerify (VerifierCtx const * ctx,
EpidSignature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
-
- -

Verifies a signature and checks revocation status.

-
Parameters
- - - - - - -
[in]ctxThe verifier context.
[in]sigThe signature.
[in]sig_lenThe size of sig in bytes.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - - - - - - -
kEpidSigValidSignature validated successfully
kEpidSigInvalidSignature is invalid
kEpidSigRevokedInGroupRlSignature revoked in GroupRl
kEpidSigRevokedInPrivRlSignature revoked in PrivRl
kEpidSigRevokedInSigRlSignature revoked in SigRl
kEpidSigRevokedInVerifierRlSignature revoked in VerifierRl
-
-
-
Note
If the result is not kEpidNoErr or one of the values listed above the verify should be considered to have failed.
-
See also
EpidVerifierCreate
-
-EpidSignBasic
-
-EpidSign
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidVerifyBasicSig (VerifierCtx const * ctx,
BasicSignature const * sig,
void const * msg,
size_t msg_len 
)
-
- -

Verifies a member signature without revocation checks.

-

Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.

-
Parameters
- - - - - -
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
-
-
-
Returns
EpidStatus
-
Note
This function should be used in conjunction with EpidNrVerify() and EpidCheckPrivRlEntry().
-
-If the result is not kEpidNoErr the verify should be considered to have failed.
-
See also
EpidVerifierCreate
-
-EpidSignBasic
-
-EpidSign
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidWriteVerifierRl (VerifierCtx const * ctx,
VerifierRlver_rl,
size_t ver_rl_size 
)
-
- -

Serializes the verifier blacklist to a buffer.

-

If the current blacklist is empty or not set a valid empty verifier blacklist will be serialized.

-

Use EpidGetVerifierRlSize to determine the buffer size required to serialize the verifier blacklist.

-
Parameters
- - - - -
[in]ctxThe verifier context.
[out]ver_rlAn existing buffer in which to write the verifier revocation list.
[in]ver_rl_sizeThe size of the caller allocated output buffer in bytes.
-
-
-
Returns
EpidStatus
-
See also
EpidVerifierCreate
-
-EpidVerifierSetVerifierRl
-
-EpidBlacklistSig
-
-EpidGetVerifierRlSize
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.js b/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.js deleted file mode 100644 index b93f8229..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___epid_verifier_module.js +++ /dev/null @@ -1,29 +0,0 @@ -var group___epid_verifier_module = -[ - [ "EPID 1.1 support", "group___epid11_verifier_module.html", "group___epid11_verifier_module" ], - [ "VerifierPrecomp", "struct_verifier_precomp.html", [ - [ "e12", "struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5", null ], - [ "e22", "struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2", null ], - [ "e2w", "struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca", null ], - [ "eg12", "struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306", null ], - [ "gid", "struct_verifier_precomp.html#afc3e29a325c95c62bb192d5f8cdd5c1c", null ] - ] ], - [ "VerifierCtx", "group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c", null ], - [ "EpidAreSigsLinked", "group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8", null ], - [ "EpidBlacklistSig", "group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69", null ], - [ "EpidCheckPrivRlEntry", "group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea", null ], - [ "EpidGetVerifierRlSize", "group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f", null ], - [ "EpidNrVerify", "group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700", null ], - [ "EpidVerifierCreate", "group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70", null ], - [ "EpidVerifierDelete", "group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12", null ], - [ "EpidVerifierSetBasename", "group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6", null ], - [ "EpidVerifierSetGroupRl", "group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb", null ], - [ "EpidVerifierSetHashAlg", "group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92", null ], - [ "EpidVerifierSetPrivRl", "group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e", null ], - [ "EpidVerifierSetSigRl", "group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf", null ], - [ "EpidVerifierSetVerifierRl", "group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a", null ], - [ "EpidVerifierWritePrecomp", "group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392", null ], - [ "EpidVerify", "group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064", null ], - [ "EpidVerifyBasicSig", "group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e", null ], - [ "EpidWriteVerifierRl", "group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___error_codes.html b/external/epid-sdk-3.0.0/doc/html/group___error_codes.html deleted file mode 100644 index 74b35b31..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___error_codes.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: errors - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
errors
-
-
- -

Error reporting interface. -More...

- - - - - -

-Enumerations

enum  EpidStatus {
-  kEpidNoErr = 0, -kEpidSigValid = 0, -kEpidSigInvalid = 1, -kEpidSigRevokedInGroupRl = 2, -
-  kEpidSigRevokedInPrivRl = 3, -kEpidSigRevokedInSigRl = 4, -kEpidSigRevokedInVerifierRl = 5, -kEpidErr = -999, -
-  kEpidNotImpl, -kEpidBadArgErr, -kEpidNoMemErr, -kEpidMemAllocErr, -
-  kEpidMathErr, -kEpidDivByZeroErr, -kEpidUnderflowErr, -kEpidHashAlgorithmNotSupported, -
-  kEpidRandMaxIterErr, -kEpidDuplicateErr, -kEpidInconsistentBasenameSetErr, -kEpidMathQuadraticNonResidueError -
- }
 Return status for SDK functions. More...
 
- - - - -

-Functions

char const * EpidStatusToString (EpidStatus e)
 Returns string representation of error code. More...
 
-

Detailed Description

-

Error reporting interface.

-

This module defines the return status type. It also provides tools for interactions with status values, such as converting them to a string.

-

Enumeration Type Documentation

- -
-
- - - - -
enum EpidStatus
-
- -

Return status for SDK functions.

-

Convention for status values is as follows:

    -
  • Zero indicates "success"
  • -
  • Any positive number indicates "success with status"
  • -
  • Any negative number indicates "failure"
  • -
- - - - - - - - - - - - - - - - - - - - - -
Enumerator
kEpidNoErr  -

no error

-
kEpidSigValid  -

Signature is valid.

-
kEpidSigInvalid  -

Signature is invalid.

-
kEpidSigRevokedInGroupRl  -

Signature revoked in GroupRl.

-
kEpidSigRevokedInPrivRl  -

Signature revoked in PrivRl.

-
kEpidSigRevokedInSigRl  -

Signature revoked in SigRl.

-
kEpidSigRevokedInVerifierRl  -

Signature revoked in VerifierRl.

-
kEpidErr  -

unspecified error

-
kEpidNotImpl  -

not implemented error

-
kEpidBadArgErr  -

incorrect arg to function

-
kEpidNoMemErr  -

not enough memory for the operation

-
kEpidMemAllocErr  -

insufficient memory allocated for operation

-
kEpidMathErr  -

internal math error

-
kEpidDivByZeroErr  -

an attempt to divide by zero

-
kEpidUnderflowErr  -

a value became less than minimum supported level

-
kEpidHashAlgorithmNotSupported  -

unsupported hash algorithm type

-
kEpidRandMaxIterErr  -

reached max iteration for random number generation

-
kEpidDuplicateErr  -

argument would add duplicate entry

-
kEpidInconsistentBasenameSetErr  -

set basename conflicts with arguments

-
kEpidMathQuadraticNonResidueError  -

quadratic Non-Residue Error

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
char const* EpidStatusToString (EpidStatus e)
-
- -

Returns string representation of error code.

-
Parameters
- - -
eThe status value.
-
-
-
Returns
The string describing the status.
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___error_codes.js b/external/epid-sdk-3.0.0/doc/html/group___error_codes.js deleted file mode 100644 index 5f024635..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___error_codes.js +++ /dev/null @@ -1,26 +0,0 @@ -var group___error_codes = -[ - [ "EpidStatus", "group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360", [ - [ "kEpidNoErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9", null ], - [ "kEpidSigValid", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e", null ], - [ "kEpidSigInvalid", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8", null ], - [ "kEpidSigRevokedInGroupRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5", null ], - [ "kEpidSigRevokedInPrivRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1", null ], - [ "kEpidSigRevokedInSigRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c", null ], - [ "kEpidSigRevokedInVerifierRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298", null ], - [ "kEpidErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e", null ], - [ "kEpidNotImpl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7", null ], - [ "kEpidBadArgErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf", null ], - [ "kEpidNoMemErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab7dfec784192a827a91a4b8a6054d01c", null ], - [ "kEpidMemAllocErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8", null ], - [ "kEpidMathErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6", null ], - [ "kEpidDivByZeroErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a893cd0d417b139bb376d09c93695c3f3", null ], - [ "kEpidUnderflowErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a83a867b4f71ee13edbfca2f1b72abbec", null ], - [ "kEpidHashAlgorithmNotSupported", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4", null ], - [ "kEpidRandMaxIterErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357", null ], - [ "kEpidDuplicateErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f", null ], - [ "kEpidInconsistentBasenameSetErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df", null ], - [ "kEpidMathQuadraticNonResidueError", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129", null ] - ] ], - [ "EpidStatusToString", "group___error_codes.html#ga59e8680ce52509302fd58a987e45004d", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___file_parser.html b/external/epid-sdk-3.0.0/doc/html/group___file_parser.html deleted file mode 100644 index e6445ef1..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___file_parser.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: fileparser - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
- -
- -

Parser for issuer material. -More...

- - - - - -

-Modules

 EPID 1.1 support
 Parser for 1.1 issuer material.
 
- - - - - - - -

-Data Structures

struct  EpidFileHeader
 Intel(R) EPID binary file header. More...
 
struct  EpidCaCertificate
 IoT CA Certificate binary format. More...
 
- - - - - - - -

-Enumerations

enum  EpidVersion { kEpid1x, -kEpid2x, -kNumEpidVersions - }
 Recognized Intel(R) EPID versions. More...
 
enum  EpidFileType {
-  kIssuingCaPubKeyFile, -kGroupPubKeyFile, -kPrivRlFile, -kSigRlFile, -
-  kGroupRlFile, -kPrivRlRequestFile, -kSigRlRequestFile, -kGroupRlRequestFile, -
-  kNumFileTypes -
- }
 Recognized Intel(R) EPID file types. More...
 
- - - - - - - - - - - - - - - - -

-Functions

EpidStatus EpidParseFileHeader (void const *buf, size_t len, EpidVersion *epid_version, EpidFileType *file_type)
 Extracts Intel(R) EPID Binary Output File header information. More...
 
EpidStatus EpidParseGroupPubKeyFile (void const *buf, size_t len, EpidCaCertificate const *cert, GroupPubKey *pubkey)
 Extracts group public key from buffer in issuer binary format. More...
 
EpidStatus EpidParsePrivRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, PrivRl *rl, size_t *rl_len)
 Extracts private key revocation list from buffer in issuer binary format. More...
 
EpidStatus EpidParseSigRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, SigRl *rl, size_t *rl_len)
 Extracts signature revocation list from buffer in issuer binary format. More...
 
EpidStatus EpidParseGroupRlFile (void const *buf, size_t len, EpidCaCertificate const *cert, GroupRl *rl, size_t *rl_len)
 Extracts group revocation list from buffer in issuer binary format. More...
 
- - - - - - - -

-Variables

-const OctStr16 kEpidVersionCode [kNumEpidVersions]
 Encoding of issuer material Intel(R) EPID versions.
 
-const OctStr16 kEpidFileTypeCode [kNumFileTypes]
 Encoding of issuer material file types.
 
-

Detailed Description

-

Parser for issuer material.

-

Provides an API for parsing buffers formatted according to the various IoT Intel(R) EPID binary file formats.

-

Enumeration Type Documentation

- -
-
- - - - -
enum EpidFileType
-
- -

Recognized Intel(R) EPID file types.

- - - - - - - - - - -
Enumerator
kIssuingCaPubKeyFile  -

IoT Issuing CA public key file.

-
kGroupPubKeyFile  -

Group Public Key Output File Format.

-
kPrivRlFile  -

Binary Private Key Revocation List.

-
kSigRlFile  -

Binary Signature Revocation List.

-
kGroupRlFile  -

Binary Group Revocation List.

-
kPrivRlRequestFile  -

Binary Private Key Revocation Request.

-
kSigRlRequestFile  -

Binary Signature Revocation Request.

-
kGroupRlRequestFile  -

Binary Group Revocation Request.

-
kNumFileTypes  -

Maximum number of file types.

-
- -
-
- -
-
- - - - -
enum EpidVersion
-
- -

Recognized Intel(R) EPID versions.

- - - - -
Enumerator
kEpid1x  -

Intel(R) EPID version 1.x.

-
kEpid2x  -

Intel(R) EPID version 2.x.

-
kNumEpidVersions  -

Maximum number of EPID versions.

-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidParseFileHeader (void const * buf,
size_t len,
EpidVersionepid_version,
EpidFileTypefile_type 
)
-
- -

Extracts Intel(R) EPID Binary Output File header information.

-
Parameters
- - - - - -
[in]bufPointer to buffer containing Intel(R) EPID Binary Output File to parse.
[in]lenThe size of buf in bytes.
[out]epid_versionThe extracted EPID version or kNumEpidVersions if EPID version is unknown. Pass NULL to not extract.
[out]file_typeThe extracted EPID file type or kNumFileTypes if file type is unknown. Pass NULL to not extract.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidParseGroupPubKeyFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
GroupPubKeypubkey 
)
-
- -

Extracts group public key from buffer in issuer binary format.

-

Extracts the first group public key from a buffer with format of Intel(R) EPID 2.0 Group Public Key Certificate Binary File. The function validates that the first public key was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - -
[in]bufPointer to buffer containing public key to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]pubkeyThe extracted group public key.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidParseGroupRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
GroupRlrl,
size_t * rl_len 
)
-
- -

Extracts group revocation list from buffer in issuer binary format.

-

Extracts the group revocation list from a buffer with format of Binary Group Certificate Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidParsePrivRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
PrivRlrl,
size_t * rl_len 
)
-
- -

Extracts private key revocation list from buffer in issuer binary format.

-

Extracts the private key revocation list from a buffer with format of Binary Private Key Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus EpidParseSigRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
SigRlrl,
size_t * rl_len 
)
-
- -

Extracts signature revocation list from buffer in issuer binary format.

-

Extracts the signature based revocation list from a buffer with format of Binary Signature Revocation List File. The function validates that the revocation list was signed by the private key corresponding to the provided CA certificate and the size of the input buffer is correct.

-

To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.

-
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
-
Parameters
- - - - - - -
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidSigInvalidParsing failed due to data authentication failure.
-
-
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___file_parser.js b/external/epid-sdk-3.0.0/doc/html/group___file_parser.js deleted file mode 100644 index 3694cba6..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___file_parser.js +++ /dev/null @@ -1,42 +0,0 @@ -var group___file_parser = -[ - [ "EPID 1.1 support", "group___epid11_file_parser_module.html", "group___epid11_file_parser_module" ], - [ "EpidFileHeader", "struct_epid_file_header.html", [ - [ "epid_version", "struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824", null ], - [ "file_type", "struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473", null ] - ] ], - [ "EpidCaCertificate", "struct_epid_ca_certificate.html", [ - [ "a", "struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01", null ], - [ "b", "struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124", null ], - [ "header", "struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50", null ], - [ "prime", "struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c", null ], - [ "pubkey", "struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356", null ], - [ "r", "struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2", null ], - [ "signature", "struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418", null ], - [ "x", "struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1", null ], - [ "y", "struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab", null ] - ] ], - [ "EpidFileType", "group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb", [ - [ "kIssuingCaPubKeyFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92", null ], - [ "kGroupPubKeyFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e", null ], - [ "kPrivRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322", null ], - [ "kSigRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710", null ], - [ "kGroupRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770", null ], - [ "kPrivRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac708ba9e56eaeac0f1256457cbd45911", null ], - [ "kSigRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac52e5fe24a12424316f655b9b7c62600", null ], - [ "kGroupRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c", null ], - [ "kNumFileTypes", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811", null ] - ] ], - [ "EpidVersion", "group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d", [ - [ "kEpid1x", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc", null ], - [ "kEpid2x", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2", null ], - [ "kNumEpidVersions", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d", null ] - ] ], - [ "EpidParseFileHeader", "group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55", null ], - [ "EpidParseGroupPubKeyFile", "group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb", null ], - [ "EpidParseGroupRlFile", "group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f", null ], - [ "EpidParsePrivRlFile", "group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e", null ], - [ "EpidParseSigRlFile", "group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f", null ], - [ "kEpidFileTypeCode", "group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33", null ], - [ "kEpidVersionCode", "group___file_parser.html#gaae808987ce82188dff42baa4e43cab82", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.html deleted file mode 100644 index 4d20c6ca..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.html +++ /dev/null @@ -1,1328 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: finitefield - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
finitefield
-
-
- -

Finite field operations. -More...

- - - - - - - - -

-Typedefs

-typedef struct FiniteField FiniteField
 A finite field.
 
-typedef struct FfElement FfElement
 An element in a finite field.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

EpidStatus NewFiniteField (BigNumStr const *prime, FiniteField **ff)
 Creates new finite field. More...
 
EpidStatus NewFiniteFieldViaBinomalExtension (FiniteField const *ground_field, FfElement const *ground_element, int degree, FiniteField **ff)
 Creates a new finite field using binomial extension. More...
 
EpidStatus NewFiniteFieldViaPolynomialExtension (FiniteField const *ground_field, BigNumStr const *irr_polynomial, int degree, FiniteField **ff)
 Creates a new finite field using polynomial extension. More...
 
void DeleteFiniteField (FiniteField **ff)
 Frees a previously allocated FiniteField. More...
 
EpidStatus NewFfElement (FiniteField const *ff, FfElement **new_ff_elem)
 Creates a new finite field element. More...
 
void DeleteFfElement (FfElement **ff_elem)
 Frees a previously allocated FfElement. More...
 
EpidStatus ReadFfElement (FiniteField *ff, void const *ff_elem_str, size_t strlen, FfElement *ff_elem)
 Deserializes a FfElement from a string. More...
 
EpidStatus InitFfElementFromBn (FiniteField *ff, BigNum *bn, FfElement *ff_elem)
 Initializes an existing FfElement from a BigNum. More...
 
EpidStatus WriteFfElement (FiniteField *ff, FfElement const *ff_elem, void *ff_elem_str, size_t strlen)
 Serializes a finite field element to a string. More...
 
EpidStatus FfNeg (FiniteField *ff, FfElement const *a, FfElement *r)
 Calculates the additive inverse of a finite field element. More...
 
EpidStatus FfInv (FiniteField *ff, FfElement const *a, FfElement *r)
 Calculates the multiplicative inverse of a finite field element. More...
 
EpidStatus FfAdd (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Adds two finite field elements. More...
 
EpidStatus FfSub (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Subtracts two finite field elements. More...
 
EpidStatus FfMul (FiniteField *ff, FfElement const *a, FfElement const *b, FfElement *r)
 Multiplies two finite field elements. More...
 
EpidStatus FfIsZero (FiniteField *ff, FfElement const *a, bool *is_zero)
 Checks if given finite field element is the additive identity (zero). More...
 
EpidStatus FfExp (FiniteField *ff, FfElement const *a, BigNum const *b, FfElement *r)
 Raises an element of a finite field to a power. More...
 
EpidStatus FfMultiExp (FiniteField *ff, FfElement const **a, BigNumStr const **b, size_t m, FfElement *r)
 Multi-exponentiates finite field elements. More...
 
EpidStatus FfMultiExpBn (FiniteField *ff, FfElement const **a, BigNum const **b, size_t m, FfElement *r)
 Multi-exponentiates finite field elements. More...
 
EpidStatus FfSscmMultiExp (FiniteField *ff, FfElement const **a, BigNumStr const **b, size_t m, FfElement *r)
 Software side-channel mitigated implementation of FfMultiExp. More...
 
EpidStatus FfIsEqual (FiniteField *ff, FfElement const *a, FfElement const *b, bool *is_equal)
 Checks if two finite field elements are equal. More...
 
EpidStatus FfHash (FiniteField *ff, void const *msg, size_t msg_len, HashAlg hash_alg, FfElement *r)
 Hashes an arbitrary message to an element in a finite field. More...
 
EpidStatus FfGetRandom (FiniteField *ff, BigNumStr const *low_bound, BitSupplier rnd_func, void *rnd_param, FfElement *r)
 Generate random finite field element. More...
 
EpidStatus FfSqrt (FiniteField *ff, FfElement const *a, FfElement *r)
 Finds a square root of a finite field element. More...
 
-

Detailed Description

-

Finite field operations.

-

provides APIs for working with finite fields. Finite fields allow simple mathematical operations based on a finite set of discrete values. The results of these operations are also contained in the same set.

-

A simple example of a finite field is all integers from zero that are less than a given value.

-

The elements (FfElement) of a finite field can be used in a variety of simple mathematical operations that result in elements of the same field.

-

Function Documentation

- -
-
- - - - - - - - -
void DeleteFfElement (FfElement ** ff_elem)
-
- -

Frees a previously allocated FfElement.

-

Frees memory pointed to by ff_elem. Nulls the pointer.

-
Parameters
- - -
[in]ff_elemThe finite field element. Can be NULL.
-
-
-
See also
NewFfElement
- -
-
- -
-
- - - - - - - - -
void DeleteFiniteField (FiniteField ** ff)
-
- -

Frees a previously allocated FiniteField.

-

Frees memory pointed to by finite field. Nulls the pointer.

-
Parameters
- - -
[in]ffThe Finite field. Can be NULL.
-
-
-
See also
NewFiniteField
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfAdd (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
-
- -

Adds two finite field elements.

-
Parameters
- - - - - -
[in]ffThe finite field.
[out]aThe first operand to be added.
[out]bThe second operand to be added.
[out]rThe result of adding a and b.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfExp (FiniteFieldff,
FfElement const * a,
BigNum const * b,
FfElementr 
)
-
- -

Raises an element of a finite field to a power.

-
Parameters
- - - - - -
[in]ffThe finite field in which to perform the operation
[in]aThe base.
[in]bThe power.
[out]rThe result of raising a to the power b.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfGetRandom (FiniteFieldff,
BigNumStr const * low_bound,
BitSupplier rnd_func,
void * rnd_param,
FfElementr 
)
-
- -

Generate random finite field element.

-
Parameters
- - - - - - -
[in]ffThe finite field associated with the random finite field element.
[in]low_boundLower bound of the random finite field to be generated.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[in,out]rThe random finite field element.
-
-
-
Returns
EpidStatus
-
Return values
- - -
kEpidRandMaxIterErrthe function should be called again with different random data.
-
-
-
See also
NewFfElement
-
-BitSupplier
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfHash (FiniteFieldff,
void const * msg,
size_t msg_len,
HashAlg hash_alg,
FfElementr 
)
-
- -

Hashes an arbitrary message to an element in a finite field.

-
Parameters
- - - - - - -
[in]ffThe finite field.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[in]hash_algThe hash algorithm.
[out]rThe hashed value.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfInv (FiniteFieldff,
FfElement const * a,
FfElementr 
)
-
- -

Calculates the multiplicative inverse of a finite field element.

-
Parameters
- - - - -
[in]ffThe finite field.
[in]aThe element.
[out]rThe inverted element.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfIsEqual (FiniteFieldff,
FfElement const * a,
FfElement const * b,
boolis_equal 
)
-
- -

Checks if two finite field elements are equal.

-
Parameters
- - - - - -
[in]ffThe finite field.
[in]aAn element to check.
[in]bAnother element to check.
[out]is_equalThe result of the check.
-
-
-
Returns
EpidStatus
-
See also
NewEcGroup
-
-NewEcPoint
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfIsZero (FiniteFieldff,
FfElement const * a,
boolis_zero 
)
-
- -

Checks if given finite field element is the additive identity (zero).

-
Parameters
- - - - -
[in]ffThe finite field.
[out]aThe element.
[out]is_zeroThe result of the check.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfMul (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
-
- -

Multiplies two finite field elements.

-
Parameters
- - - - - -
[in]ffThe finite field.
[out]aThe first operand to be multplied.
[out]bThe second operand to be multiplied. If ff is an extension field of a field F then this parameter may be an element of either ff or F.
[out]rThe result of multiplying a and b.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfMultiExp (FiniteFieldff,
FfElement const ** a,
BigNumStr const ** b,
size_t m,
FfElementr 
)
-
- -

Multi-exponentiates finite field elements.

-

Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m > 1

-
Parameters
- - - - - - -
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[in]bThe powers.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfMultiExpBn (FiniteFieldff,
FfElement const ** a,
BigNum const ** b,
size_t m,
FfElementr 
)
-
- -

Multi-exponentiates finite field elements.

-

Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m > 1

-
Parameters
- - - - - - -
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[in]bThe powers.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfNeg (FiniteFieldff,
FfElement const * a,
FfElementr 
)
-
- -

Calculates the additive inverse of a finite field element.

-
Parameters
- - - - -
[in]ffThe finite field.
[in]aThe element.
[out]rThe inverted element.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfSqrt (FiniteFieldff,
FfElement const * a,
FfElementr 
)
-
- -

Finds a square root of a finite field element.

-

This function calculates the square root by the method of false position.

-
Parameters
- - - - -
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Return values
- - -
kEpidMathQuadraticNonResidueErrorNo square root could be found.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfSscmMultiExp (FiniteFieldff,
FfElement const ** a,
BigNumStr const ** b,
size_t m,
FfElementr 
)
-
- -

Software side-channel mitigated implementation of FfMultiExp.

-

Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m > 1

-
Attention
The reference implementation of FfSscmMultiExp calls FfMultiExp directly because the implementation of FfMultiExp is already side channel mitigated. Implementers providing their own versions of this function are responsible for ensuring that FfSscmMultiExp is side channel mitigated per section 8 of the Intel(R) EPID 2.0 spec.
-
Parameters
- - - - - - -
[in]ffThe finite field in which to perform the operation.
[in]aThe bases.
[in]bThe powers.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-NewFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus FfSub (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
-
- -

Subtracts two finite field elements.

-
Note
Only needed for Intel(R) EPID 1.1 verification.
-
Parameters
- - - - - -
[in]ffThe finite field.
[out]aThe first operand to use in subtraction.
[out]bThe second operand to use in subtraction.
[out]rThe result of subtracting a and b.
-
-
-
Returns
EpidStatus
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus InitFfElementFromBn (FiniteFieldff,
BigNumbn,
FfElementff_elem 
)
-
- -

Initializes an existing FfElement from a BigNum.

-
Parameters
- - - - -
[in]ffThe finite field. Must be a Prime Field.
[in]bnThe value to read.
[out]ff_elemThe target FfElement.
-
-
-
Returns
EpidStatus
-
See also
NewFfElement
-
-WriteFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus NewFfElement (FiniteField const * ff,
FfElement ** new_ff_elem 
)
-
- -

Creates a new finite field element.

-

Allocates memory and creates a new finite field element.

-

Use DeleteFfElement() to free memory.

-
Parameters
- - - -
[in]ffThe finite field.
[out]new_ff_elemThe Newly constructed finite field element.
-
-
-
Returns
EpidStatus
-
See also
NewFiniteField
-
-DeleteFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
EpidStatus NewFiniteField (BigNumStr const * prime,
FiniteField ** ff 
)
-
- -

Creates new finite field.

-

Allocates memory and creates a new finite field GF(prime).

-

Use DeleteFiniteField() to free memory.

-
Parameters
- - - -
[in]primeThe order of the finite field.
[out]ffThe newly constructed finite field.
-
-
-
Returns
EpidStatus
-
See also
DeleteFiniteField
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus NewFiniteFieldViaBinomalExtension (FiniteField const * ground_field,
FfElement const * ground_element,
int degree,
FiniteField ** ff 
)
-
- -

Creates a new finite field using binomial extension.

-

Allocates memory and creates a finite field using binomial extension.

-

Use DeleteFiniteField() to free memory.

-
Parameters
- - - - - -
[in]ground_fieldThe ground field.
[in]ground_elementThe low-order term of the extension.
[in]degreeThe degree of the extension.
[out]ffThe newly constructed finite field.
-
-
-
Returns
EpidStatus
-
See also
DeleteFiniteField
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus NewFiniteFieldViaPolynomialExtension (FiniteField const * ground_field,
BigNumStr const * irr_polynomial,
int degree,
FiniteField ** ff 
)
-
- -

Creates a new finite field using polynomial extension.

-

Allocates memory and creates a finite field using polynomial extension.

-

Use DeleteFiniteField() to free memory.

-
Note
Only needed for Intel(R) EPID 1.1 verification.
-
Parameters
- - - - - -
[in]ground_fieldThe ground field.
[in]irr_polynomialArray with coefficients of the irreducible polynomial. Number of elements must be equal to the degree of the extension.
[in]degreeThe degree of the extension.
[out]ffThe newly constructed finite field.
-
-
-
Returns
EpidStatus
-
See also
DeleteFiniteField
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus ReadFfElement (FiniteFieldff,
void const * ff_elem_str,
size_t strlen,
FfElementff_elem 
)
-
- -

Deserializes a FfElement from a string.

-
Parameters
- - - - - -
[in]ffThe finite field.
[in]ff_elem_strThe serialized value.
[in]strlenThe size of ff_elem_str in bytes.
[out]ff_elemThe target FfElement.
-
-
-
Returns
EpidStatus
-
See also
NewFfElement
-
-WriteFfElement
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus WriteFfElement (FiniteFieldff,
FfElement const * ff_elem,
void * ff_elem_str,
size_t strlen 
)
-
- -

Serializes a finite field element to a string.

-
Parameters
- - - - - -
[in]ffThe finite field.
[in]ff_elemThe FfElement to be serialized.
[out]ff_elem_strThe target string.
[in]strlenThe size of ff_elem_str in bytes.
-
-
-
Returns
EpidStatus
-
See also
NewFfElement
-
-FpElemStr
-
-FqElemStr
-
-GtElemStr
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.js deleted file mode 100644 index 5d2ad45e..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___finite_field_primitives.js +++ /dev/null @@ -1,28 +0,0 @@ -var group___finite_field_primitives = -[ - [ "FfElement", "group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa", null ], - [ "FiniteField", "group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e", null ], - [ "DeleteFfElement", "group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e", null ], - [ "DeleteFiniteField", "group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f", null ], - [ "FfAdd", "group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b", null ], - [ "FfExp", "group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c", null ], - [ "FfGetRandom", "group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8", null ], - [ "FfHash", "group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea", null ], - [ "FfInv", "group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a", null ], - [ "FfIsEqual", "group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625", null ], - [ "FfIsZero", "group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53", null ], - [ "FfMul", "group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5", null ], - [ "FfMultiExp", "group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3", null ], - [ "FfMultiExpBn", "group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144", null ], - [ "FfNeg", "group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2", null ], - [ "FfSqrt", "group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6", null ], - [ "FfSscmMultiExp", "group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634", null ], - [ "FfSub", "group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991", null ], - [ "InitFfElementFromBn", "group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed", null ], - [ "NewFfElement", "group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c", null ], - [ "NewFiniteField", "group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c", null ], - [ "NewFiniteFieldViaBinomalExtension", "group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2", null ], - [ "NewFiniteFieldViaPolynomialExtension", "group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598", null ], - [ "ReadFfElement", "group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7", null ], - [ "WriteFfElement", "group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.html deleted file mode 100644 index 4a31fcbb..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: hash - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
hash
-
-
- -

Hash primitives. -More...

- - - - - -

-Data Structures

struct  Sha256Digest
 SHA256 digest. More...
 
- - - - -

-Functions

EpidStatus Sha256MessageDigest (void const *msg, size_t len, Sha256Digest *digest)
 Computes SHA256 digest of a message. More...
 
-

Detailed Description

-

Hash primitives.

-

Provides APIs for computing digests of messages.

-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Sha256MessageDigest (void const * msg,
size_t len,
Sha256Digestdigest 
)
-
- -

Computes SHA256 digest of a message.

-
Parameters
- - - - -
[in]msgMessage to compute digest for.
[in]lenThe size of msg in bytes.
[out]digestThe resulting message digest.
-
-
-
Returns
EpidStatus
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.js deleted file mode 100644 index 14b92829..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___hash_primitives.js +++ /dev/null @@ -1,7 +0,0 @@ -var group___hash_primitives = -[ - [ "Sha256Digest", "struct_sha256_digest.html", [ - [ "data", "struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28", null ] - ] ], - [ "Sha256MessageDigest", "group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.html b/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.html deleted file mode 100644 index 0ca3e2a5..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: pairing - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
pairing
-
-
- -

Pairing operations. -More...

- - - - - -

-Modules

 EPID 1.1 specific pairing
 EPID 1.1 pairing operations.
 
- - - - -

-Typedefs

-typedef struct PairingState PairingState
 A pairing.
 
- - - - - - - - - - -

-Functions

EpidStatus NewPairingState (EcGroup const *ga, EcGroup const *gb, FiniteField *ff, BigNumStr const *t, bool neg, PairingState **ps)
 Constructs a new pairing state. More...
 
void DeletePairingState (PairingState **ps)
 Frees a previously allocated by PairingState. More...
 
EpidStatus Pairing (PairingState *ps, FfElement *d, EcPoint const *a, EcPoint const *b)
 Computes an Optimal Ate Pairing for two parameters. More...
 
-

Detailed Description

-

Pairing operations.

-

Provides APIs for defining and using a pairing relationship between two elliptic curve groups.

-

Function Documentation

- -
-
- - - - - - - - -
void DeletePairingState (PairingState ** ps)
-
- -

Frees a previously allocated by PairingState.

-

Frees memory pointed to by pairing state. Nulls the pointer.

-
Parameters
- - -
[in]psThe pairing state. Can be NULL.
-
-
-
See also
NewPairingState
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus NewPairingState (EcGroup const * ga,
EcGroup const * gb,
FiniteFieldff,
BigNumStr const * t,
bool neg,
PairingState ** ps 
)
-
- -

Constructs a new pairing state.

-

Allocates memory and creates a new pairing state for Optimal Ate Pairing.

-

Use DeletePairingState() to free memory.

-
Parameters
- - - - - - - -
[in]gaThe EcGroup from which the first parameter of the pairing is taken.
[in]gbThe EcGroup from which the second parameter of the pairing is taken.
[in]ffThe result finite field. Must be a Fq12 field.
[in]tA positive integer such that 6(t^2) == q - p, where p and q are parameters of G1.
[in]negSelect the alternate "negate" processing path for Optimal Ate Pairing.
[out]psNewly constructed pairing state.
-
-
-
Returns
EpidStatus
-
See also
DeletePairingState
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EpidStatus Pairing (PairingStateps,
FfElementd,
EcPoint const * a,
EcPoint const * b 
)
-
- -

Computes an Optimal Ate Pairing for two parameters.

-
Parameters
- - - - - -
[in]psThe pairing state.
[out]dThe result of the pairing. Will be in ff used to create the pairing state.
[in]aThe first value to pair. Must be in ga used to create ps.
[in]bThe second value to pair. Must be in gb used to create ps
-
-
-
Returns
EpidStatus
- -
-
-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.js b/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.js deleted file mode 100644 index a594ea74..00000000 --- a/external/epid-sdk-3.0.0/doc/html/group___pairing_primitives.js +++ /dev/null @@ -1,8 +0,0 @@ -var group___pairing_primitives = -[ - [ "EPID 1.1 specific pairing", "group___epid11_pairing_primitives.html", "group___epid11_pairing_primitives" ], - [ "PairingState", "group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607", null ], - [ "DeletePairingState", "group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d", null ], - [ "NewPairingState", "group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc", null ], - [ "Pairing", "group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c", null ] -]; \ No newline at end of file diff --git a/external/epid-sdk-3.0.0/doc/html/hash_8h.html b/external/epid-sdk-3.0.0/doc/html/hash_8h.html deleted file mode 100644 index 1e6252ab..00000000 --- a/external/epid-sdk-3.0.0/doc/html/hash_8h.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: epid/common/math/hash.h File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
- -
-
hash.h File Reference
-
-
- -

Hash primitives. -More...

-
#include <stddef.h>
-#include <stdint.h>
-#include <limits.h>
-#include "epid/common/errors.h"
-
- - - - -

-Data Structures

struct  Sha256Digest
 SHA256 digest. More...
 
- - - - -

-Functions

EpidStatus Sha256MessageDigest (void const *msg, size_t len, Sha256Digest *digest)
 Computes SHA256 digest of a message. More...
 
-

Detailed Description

-

Hash primitives.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/implementation__notes_8dox.html b/external/epid-sdk-3.0.0/doc/html/implementation__notes_8dox.html deleted file mode 100644 index a07d4bc7..00000000 --- a/external/epid-sdk-3.0.0/doc/html/implementation__notes_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/implementation_notes.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/implementation_notes.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/index.html b/external/epid-sdk-3.0.0/doc/html/index.html deleted file mode 100644 index 7b34b803..00000000 --- a/external/epid-sdk-3.0.0/doc/html/index.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: Introducing the Intel® EPID SDK - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
Introducing the Intel® EPID SDK
-
-
-

Intel® EPID is a cryptographic protocol which enables the remote authentication of a trusted platform whilst preserving the user's privacy.

-

The Intel® EPID Software Development Kit provides an implementation of the Intel® EPID specification that developers can use when developing their own applications using Intel® EPID technology.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/issuer__material_8dox.html b/external/epid-sdk-3.0.0/doc/html/issuer__material_8dox.html deleted file mode 100644 index 5a3a47e8..00000000 --- a/external/epid-sdk-3.0.0/doc/html/issuer__material_8dox.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Intel® Enhanced Privacy ID SDK: doc/docsrc/issuer_material.dox File Reference - - - - - - - - - - - - -
-
- - - - - - -
- -
-
- - -
-
- -
-
-
- -
-
-
-
doc/docsrc/issuer_material.dox File Reference
-
-
- -

This file is used by Doxygen to generate documentation. -More...

-

Detailed Description

-

This file is used by Doxygen to generate documentation.

-
-
- - - - - diff --git a/external/epid-sdk-3.0.0/doc/html/jquery.js b/external/epid-sdk-3.0.0/doc/html/jquery.js deleted file mode 100644 index 1f4d0b47..00000000 --- a/external/epid-sdk-3.0.0/doc/html/jquery.js +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('